@rb-games/core 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/chunk-5BLUF2HG.js +25 -0
  2. package/dist/chunk-5BLUF2HG.js.map +1 -0
  3. package/dist/chunk-DOHQE2YZ.js +392 -0
  4. package/dist/chunk-DOHQE2YZ.js.map +1 -0
  5. package/dist/chunk-FOZO6TLY.js +673 -0
  6. package/dist/chunk-FOZO6TLY.js.map +1 -0
  7. package/dist/chunk-G3PMV62Z.js +33 -0
  8. package/dist/chunk-G3PMV62Z.js.map +1 -0
  9. package/dist/chunk-KOHCRCV3.js +490 -0
  10. package/dist/chunk-KOHCRCV3.js.map +1 -0
  11. package/dist/chunk-MI6BP7A6.js +11 -0
  12. package/dist/chunk-MI6BP7A6.js.map +1 -0
  13. package/dist/chunk-NQMORMNP.js +15 -0
  14. package/dist/chunk-NQMORMNP.js.map +1 -0
  15. package/dist/chunk-RAEOBW6E.js +133 -0
  16. package/dist/chunk-RAEOBW6E.js.map +1 -0
  17. package/dist/chunk-UE7T7Z45.js +884 -0
  18. package/dist/chunk-UE7T7Z45.js.map +1 -0
  19. package/dist/devtools/index.js +2 -882
  20. package/dist/devtools/index.js.map +1 -1
  21. package/dist/engine/index.js +6 -1267
  22. package/dist/engine/index.js.map +1 -1
  23. package/dist/filters/index.js +1 -1
  24. package/dist/helpers/index.js +6 -35
  25. package/dist/helpers/index.js.map +1 -1
  26. package/dist/i18n/index.js +4 -525
  27. package/dist/i18n/index.js.map +1 -1
  28. package/dist/layout/index.js +2 -671
  29. package/dist/layout/index.js.map +1 -1
  30. package/dist/particle/index.js +1 -6
  31. package/dist/particle/index.js.map +1 -1
  32. package/dist/plugins/Plugin.types.d.ts +4 -2
  33. package/dist/plugins/Plugin.types.d.ts.map +1 -1
  34. package/dist/plugins/index.js +6 -521
  35. package/dist/plugins/index.js.map +1 -1
  36. package/dist/state-machine/index.js +1 -1
  37. package/dist/store/index.js +1 -1
  38. package/dist/ui/index.js +5 -531
  39. package/dist/ui/index.js.map +1 -1
  40. package/dist/utils/index.js +4 -897
  41. package/dist/utils/index.js.map +1 -1
  42. package/dist/vite/index.js +1 -1
  43. package/package.json +3 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../utils/Logger.ts","../../plugins/device/DeviceOptimizerPlugin.ts","../../helpers/resolvePublicPath.ts","../../plugins/resource/ResourcePlugin.ts","../../plugins/Plugin.types.ts","../../plugins/display/DisplayPlugin.ts","../../plugins/display/displayViewport.ts","../../plugins/eventbus/EventBusPlugin.ts","../../plugins/gsap/GsapPlugin.ts","../../plugins/input/InputPlugin.const.ts","../../plugins/input/KeyboardManager.ts","../../plugins/input/InputPlugin.ts","../../i18n/sharedI18n.ts","../../plugins/language/I18NextPlugin.ts","../../plugins/scene/ScenePlugin.ts","../../plugins/scene/Scene.ts","../../plugins/sentry/SentryPlugin.ts","../../plugins/service/types/api.types.ts","../../plugins/service/ServicePlugin.ts","../../plugins/service/ServiceAdapter.ts","../../plugins/service/adapters/RGSAdapter.ts","../../plugins/service/adapters/resolvePublicIp.ts","../../plugins/service/adapters/DevAuthAdapter.ts","../../plugins/skin/Skin.ts","../../plugins/skin/SkinPlugin.ts","../../plugins/sound/SoundPlugin.ts","../../../../node_modules/tweakpane/dist/tweakpane.js","../../plugins/sound/SoundTestGUI.ts"],"names":["logger","detectWebp","EventEmitter","ServiceActions","skin","path","parts","Assets","gsap","instances","op","result","t","document","p","c","_a","v"],"mappings":";;;;;;;;;;;AA4IO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAClB,OAAe,QAAA;AAAA,EACP,MAAA;AAAA;AAAA,EAGS,cAAA,GAAiB;AAAA,IAChC,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,UAAA;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,UAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AAAA;AAAA,EAGiB,aAAA,GAAgB;AAAA,IAC/B,SAAA,EAAW,aAAA;AAAA,IACX,OAAA,EAAS,gCAAA;AAAA,IACT,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,+BAAA;AAAA,IACP,IAAA,EAAM,kCAAA;AAAA,IACN,IAAA,EAAM,sCAAA;AAAA,IACN,KAAA,EAAO,cAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EAEiB,WAAA,GAAc;AAAA,IAC7B,CAAC,gBAAiB,OAAA;AAAA,IAClB,CAAC,eAAgB,MAAA;AAAA,IACjB,CAAC,eAAgB,MAAA;AAAA,IACjB,CAAC,gBAAiB,OAAA;AAAA,IAClB,CAAC,gBAAiB;AAAA,GACpB;AAAA,EAEiB,WAAA,GAAc;AAAA,IAC7B,CAAC,CAAA,eAAiB,IAAA,CAAK,cAAA,CAAe,GAAA;AAAA,IACtC,CAAC,CAAA,cAAgB,IAAA,CAAK,cAAA,CAAe,MAAA;AAAA,IACrC,CAAC,CAAA,cAAgB,IAAA,CAAK,cAAA,CAAe,IAAA;AAAA,IACrC,CAAC,CAAA,eAAiB,IAAA,CAAK,cAAA,CAAe,KAAA;AAAA,IACtC,CAAC,CAAA,eAAiB,IAAA,CAAK,cAAA,CAAe;AAAA,GACxC;AAAA,EAEiB,kBAAA,GAAqB;AAAA,IACpC,CAAC,CAAA,eAAiB,IAAA,CAAK,aAAA,CAAc,KAAA;AAAA,IACrC,CAAC,CAAA,cAAgB,IAAA,CAAK,aAAA,CAAc,IAAA;AAAA,IACpC,CAAC,CAAA,cAAgB,IAAA,CAAK,aAAA,CAAc,IAAA;AAAA,IACpC,CAAC,CAAA,eAAiB,IAAA,CAAK,aAAA,CAAc,KAAA;AAAA,IACrC,CAAC,CAAA,eAAiB,IAAA,CAAK,aAAA,CAAc;AAAA,GACvC;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAc;AApMxB,IAAA,IAAA,EAAA;AAsMI,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,KAAA,EAAO,CAAA;AAAA;AAAA,MACP,OAAA,EAAS,IAAA;AAAA;AAAA,MACT,aAAA,EAAe,KAAA;AAAA;AAAA,MACf,UAAA,EAAY;AAAA;AAAA,KACd;AAEA,IAAA,IAAA,CAAK,EAAA,GAAA,MAAA,CAAA,IAAA,CAA4C,GAAA,KAA5C,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiD,GAAA,EAAK;AACzD,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OAEF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAA,GAAsB;AAClC,IAAA,IAAI,CAAC,QAAO,QAAA,EAAU;AACpB,MAAA,OAAA,CAAO,QAAA,GAAW,IAAI,OAAA,EAAO;AAAA,IAC/B;AACA,IAAA,OAAO,OAAA,CAAO,QAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAU,MAAA,EAAqC;AACpD,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,MAAA,EAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,OAAA,EAAwB;AACxC,IAAA,IAAA,CAAK,OAAO,OAAA,GAAU,OAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,SAAS,KAAA,EAAuB;AACrC,IAAA,IAAA,CAAK,OAAO,KAAA,GAAQ,KAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAqB;AAC1B,IAAA,OAAO,KAAK,MAAA,CAAO,KAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,cAAgB,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAA,CAAK,YAAoB,IAAA,EAAmB;AACjD,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,aAAe,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAA,CAAK,YAAoB,IAAA,EAAmB;AACjD,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,aAAe,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,cAAgB,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,cAAgB,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,GAAA,CAAI,KAAA,EAAiB,OAAA,EAAA,GAAoB,IAAA,EAAmB;AAElE,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,WAAW,KAAA,GAAQ,IAAA,CAAK,OAAO,KAAA,EAAO;AACrD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,OAAO,CAAA,EAAG;AACnC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,KAAW,WAAA;AAEpC,IAAA,IAAI,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;AACvC,MAAA,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEQ,eAAe,OAAA,EAA8D;AACnF,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,sBAAsB,CAAA;AAEzD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,cAAA,EAAgB;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAa,CAAC,CAAA;AAAA,MACvB,cAAA,EAAgB,aAAa,CAAC;AAAA,KAChC;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,OAAe,QAAA,EAA2C;AAC9E,IAAA,IAAI,EAAC,qCAAU,MAAA,CAAA,EAAQ;AACrB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY;AAChC,MAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,OAAO,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA,MAC/B;AAEA,MAAA,OAAA,CAAQ,SAAA,GAAY,CAAA;AACpB,MAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,iBAAiB,OAAA,EAA0B;AApWrD,IAAA,IAAA,EAAA,EAAA,EAAA;AAqWI,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA;AAE3B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,UAAQ,EAAA,GAAA,MAAA,CAAO,QAAA,KAAP,mBAAiB,MAAA,MAAA,CAAU,EAAA,GAAA,MAAA,CAAO,QAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAM,CAAA;AAE7E,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,EAAE,OAAA,EAAS,cAAA,EAAe,GAAI,IAAA,CAAK,eAAe,OAAO,CAAA;AAC/D,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,OAAO,QAAQ,CAAA;AAClE,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,cAAA,EAAgB,OAAO,QAAQ,CAAA;AACzE,IAAA,MAAM,UAAU,cAAA,IAAkB,cAAA;AAElC,IAAA,OAAO,MAAA,CAAO,IAAA,KAAS,SAAA,GAAY,CAAC,OAAA,GAAU,OAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,KAAA,EAAiB,OAAA,EAAA,GAAoB,IAAA,EAAmB;AAE1E,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,IAAI,QAAA,GAAW,EAAA;AACf,IAAA,IAAI,WAAA,GAAc,EAAA;AAGlB,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,sBAAsB,CAAA;AACzD,IAAA,IAAI,cAAA,GAAiB,OAAA;AAErB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,WAAA,GAAc,CAAA,CAAA,EAAI,YAAA,CAAa,CAAC,CAAC,CAAA,EAAA,CAAA;AACjC,MAAA,cAAA,GAAiB,aAAa,CAAC,CAAA;AAAA,IACjC;AAGA,IAAA,IAAI,IAAA,CAAK,OAAO,aAAA,EAAe;AAC7B,MAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,MAAA,SAAA,GAAY,IAAI,GAAG,CAAA,EAAA,CAAA;AAAA,IACrB;AAGA,IAAA,QAAA,GAAW,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,CAAY,KAAK,CAAC,CAAA,EAAA,CAAA;AAGtC,IAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AAC1B,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA;AACzC,MAAA,MAAM,YAAA,GAAe,KAAK,cAAA,CAAe,IAAA;AACzC,MAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,CAAe,IAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,KAAK,cAAA,CAAe,KAAA;AAEzC,MAAA,SAAA,GAAY,GAAG,cAAc,CAAA,EAAG,SAAS,CAAA,EAAG,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AACrE,MAAA,QAAA,GAAW,GAAG,UAAU,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AAE/D,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,GAAc,GAAG,YAAY,CAAA,EAAG,WAAW,CAAA,EAAG,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AAAA,MACzE;AAEA,MAAA,cAAA,GAAiB,GAAG,YAAY,CAAA,EAAG,cAAc,CAAA,EAAG,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AAAA,IAC/E;AAEA,IAAA,MAAM,gBAAA,GAAmB,SAAA,GAAY,QAAA,GAAW,WAAA,GAAc,cAAA;AAG9D,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,CAAA;AACH,QAAA,OAAA,CAAQ,KAAA,CAAM,gBAAA,EAAkB,GAAG,IAAI,CAAA;AACvC,QAAA;AAAA,MACF,KAAK,CAAA;AACH,QAAA,OAAA,CAAQ,IAAA,CAAK,gBAAA,EAAkB,GAAG,IAAI,CAAA;AACtC,QAAA;AAAA,MACF,KAAK,CAAA;AACH,QAAA,OAAA,CAAQ,IAAA,CAAK,gBAAA,EAAkB,GAAG,IAAI,CAAA;AACtC,QAAA;AAAA,MACF,KAAK,CAAA;AAAA,MACL,KAAK,CAAA;AAAA,MACL;AACE,QAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,GAAG,IAAI,CAAA;AACrC,QAAA;AAAA;AACJ,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAW,KAAA,EAAiB,OAAA,EAAA,GAAoB,IAAA,EAAmB;AAEzE,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,sBAAsB,CAAA;AACzD,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,cAAA,GAAiB,OAAA;AAErB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAA,GAAU,aAAa,CAAC,CAAA;AACxB,MAAA,cAAA,GAAiB,aAAa,CAAC,CAAA;AAAA,IACjC;AAGA,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,MAAM,aAAuB,EAAC;AAG9B,IAAA,IAAI,IAAA,CAAK,OAAO,aAAA,EAAe;AAC7B,MAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,MAAA,MAAA,IAAU,QAAQ,GAAA,GAAM,IAAA;AACxB,MAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAA,IAAU,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA,GAAI,IAAA;AAC5C,IAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAG9C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,IAAU,QAAQ,OAAA,GAAU,IAAA;AAC5B,MAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAAA,IAC5C;AAGA,IAAA,MAAA,IAAU,IAAA,GAAO,cAAA;AACjB,IAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAG1C,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,CAAA;AACH,QAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,GAAG,UAAA,EAAY,GAAG,IAAI,CAAA;AAC5C,QAAA;AAAA,MACF,KAAK,CAAA;AACH,QAAA,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,GAAG,UAAA,EAAY,GAAG,IAAI,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,CAAA;AACH,QAAA,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,GAAG,UAAA,EAAY,GAAG,IAAI,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,CAAA;AAAA,MACL,KAAK,CAAA;AAAA,MACL;AACE,QAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAG,UAAA,EAAY,GAAG,IAAI,CAAA;AAC1C,QAAA;AAAA;AACJ,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBO,oBAAoB,OAAA,EAAgC;AACzD,IAAA,OAAO,IAAI,aAAA,CAAc,IAAA,EAAM,OAAO,CAAA;AAAA,EACxC;AACF,CAAA;AAoCO,IAAM,gBAAN,MAAoB;AAAA,EACjB,MAAA;AAAA,EACA,OAAA;AAAA,EAER,WAAA,CAAYA,SAAgB,OAAA,EAAiB;AAC3C,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAClD,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAA,CAAK,YAAoB,IAAA,EAAmB;AACjD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAA,CAAK,YAAoB,IAAA,EAAmB;AACjD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAClD,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAClD,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,EAC3D;AACF,CAAA;AAGO,IAAM,MAAA,GAAS,OAAO,WAAA,EAAY;AAGzC,IAAM,cAAA,uBAAqB,GAAA,EAA2B;AAqB/C,SAAS,UAAU,OAAA,EAAgC;AACxD,EAAA,IAAI,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,OAAO,CAAA;AACvC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAI,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AAC1C,IAAA,cAAA,CAAe,GAAA,CAAI,SAAS,MAAM,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,MAAA;AACT;ACrjBO,IAAM,wBAAN,MAAoD;AAAA,EAClD,IAAA,GAAe,uBAAA;AAAA,EACf,QAAA,GAAmB,EAAA;AAAA;AAAA,EACnB,eAAyB,EAAC;AAAA;AAAA,EAEzB,MAAA;AAAA,EACA,UAAA,GAAgC,IAAA;AAAA,EAChC,OAAA,GAAqC,IAAA;AAAA,EACrC,QAAA,GAAwC,IAAA;AAAA,EACxC,eAAA,GAA6C,QAAA;AAAA,EAC7C,aAAA,GAAgB,KAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,MAAc,UAAA,GAA+B;AAC3C,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,WAAW,IAAA,EAAK;AAAA,IAC/B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGQ,mBAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAgC,EAAC,EAAG;AAC9C,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,qBAAA,EAAuB,KAAA;AAAA;AAAA,MACvB,sBAAA,EAAwB,IAAA;AAAA,MACxB,sBAAA,EAAwB,IAAA;AAAA,MACxB,kBAAA,EAAoB,IAAA;AAAA,MACpB,GAAG;AAAA,KACL;AAGA,IAAA,IAAA,CAAK,mBAAA,GAAsB;AAAA,MACzB,GAAA,EAAK;AAAA,QACH,eAAA,EAAiB,IAAA;AAAA,QACjB,WAAA,EAAa,QAAA;AAAA,QACb,YAAA,EAAc,KAAA;AAAA,QACd,eAAA,EAAiB,SAAA;AAAA,QACjB,UAAA,EAAY,KAAA;AAAA,QACZ,gBAAA,EAAkB;AAAA,UAChB,YAAA,EAAc,EAAA;AAAA,UACd,OAAA,EAAS,KAAA;AAAA,UACT,qBAAA,EAAuB,KAAA;AAAA,UACvB,UAAA,EAAY,KAAA;AAAA,UACZ,UAAA,EAAY;AAAA,SACd;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,QACX,kBAAA,EAAoB,KAAA;AAAA,QACpB,aAAA,EAAe,KAAA;AAAA,QACf,cAAA,EAAgB,IAAA;AAAA,QAChB,YAAA,EAAc;AAAA,UACZ,gBAAA,EAAkB,EAAA;AAAA,UAClB,kBAAA,EAAoB,EAAA;AAAA,UACpB,uBAAA,EAAyB,IAAA;AAAA,UACzB,UAAA,EAAY;AAAA,SACd;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,CAAA;AAAA,UACR,OAAA,EAAS,EAAA;AAAA,UACT,SAAA,EAAW,EAAA;AAAA,UACX,OAAA,EAAS,EAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,eAAA,EAAiB,GAAA;AAAA,QACjB,WAAA,EAAa,OAAA;AAAA,QACb,YAAA,EAAc,QAAA;AAAA,QACd,eAAA,EAAiB,UAAA;AAAA,QACjB,UAAA,EAAY,KAAA;AAAA;AAAA,QACZ,gBAAA,EAAkB;AAAA,UAChB,YAAA,EAAc,GAAA;AAAA,UACd,OAAA,EAAS,QAAA;AAAA,UACT,qBAAA,EAAuB,IAAA;AAAA,UACvB,UAAA,EAAY,IAAA;AAAA,UACZ,UAAA,EAAY;AAAA,SACd;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,QACX,kBAAA,EAAoB,IAAA;AAAA,QACpB,aAAA,EAAe,IAAA;AAAA,QACf,cAAA,EAAgB,IAAA;AAAA,QAChB,YAAA,EAAc;AAAA,UACZ,gBAAA,EAAkB,GAAA;AAAA,UAClB,kBAAA,EAAoB,EAAA;AAAA,UACpB,uBAAA,EAAyB,KAAA;AAAA,UACzB,UAAA,EAAY;AAAA,SACd;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,CAAA;AAAA,UACR,OAAA,EAAS,CAAA;AAAA,UACT,SAAA,EAAW,CAAA;AAAA,UACX,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,eAAA,EAAiB,CAAA;AAAA,QACjB,WAAA,EAAa,KAAA;AAAA,QACb,YAAA,EAAc,MAAA;AAAA,QACd,eAAA,EAAiB,YAAA;AAAA,QACjB,UAAA,EAAY,KAAA;AAAA;AAAA,QACZ,gBAAA,EAAkB;AAAA,UAChB,YAAA,EAAc,GAAA;AAAA,UACd,OAAA,EAAS,MAAA;AAAA,UACT,qBAAA,EAAuB,IAAA;AAAA,UACvB,UAAA,EAAY,IAAA;AAAA,UACZ,UAAA,EAAY;AAAA,SACd;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,QACX,kBAAA,EAAoB,IAAA;AAAA,QACpB,aAAA,EAAe,IAAA;AAAA,QACf,cAAA,EAAgB,IAAA;AAAA,QAChB,YAAA,EAAc;AAAA,UACZ,gBAAA,EAAkB,GAAA;AAAA,UAClB,kBAAA,EAAoB,GAAA;AAAA,UACpB,uBAAA,EAAyB,KAAA;AAAA,UACzB,UAAA,EAAY;AAAA,SACd;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,EAAA;AAAA,UACR,OAAA,EAAS,CAAA;AAAA,UACT,SAAA,EAAW,CAAA;AAAA,UACX,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX;AACF,KACF;AAGA,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,YAAY,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAA,EAAM,SAAS,CAAA,KAAM;AACjE,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,IAAA,CAAK,mBAAA,CAAoB,IAAiC,CAAA,GAAI;AAAA,YAC5D,GAAG,IAAA,CAAK,mBAAA,CAAoB,IAAiC,CAAA;AAAA,YAC7D,GAAG;AAAA,WACL;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAa,WAAW,MAAA,EAAmC;AACzD,IAAA,IAAI;AAEF,MAAA,IAAA,CAAK,UAAA,GAAa,KAAK,YAAA,EAAa;AAGpC,MAAA,IAAA,CAAK,OAAA,GAAU,MAAM,IAAA,CAAK,aAAA,EAAc;AAGxC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,KAAK,wBAAA,EAAyB;AAG9E,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,4BAAA,EAA6B;AAGlD,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,UAAA,EAAW;AAC5C,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,IAAA,CAAK,SAAS,UAAA,GAAa,aAAA;AAAA,MAC7B;AAGA,MAAA,IAAA,CAAK,mBAAA,EAAoB;AAEzB,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAErB,MAAA,IAAA,CAAK,aAAA,EAAc;AAGnB,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,iCAAA,EAAmC;AAAA,QACzE,QAAA,EAAU,KAAK,UAAA,CAAW,QAAA;AAAA,QAC1B,MAAM,IAAA,CAAK,eAAA;AAAA,QACX,UAAA,EAAY,KAAK,QAAA,CAAS,eAAA;AAAA,QAC1B;AAAA,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,KAAA,CAAM,6CAAA,EAA+C,KAAK,CAAA;AAC7F,MAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,IAC3B;AAAA,EACF;AAAA,EAEO,QAAQ,MAAA,EAA0B;AAEvC,IAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,KAAA,CAAM,gCAAgC,CAAA;AAAA,EAC3E;AAAA,EAEO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,KAAA,CAAM,kCAAkC,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,GAA2B;AACjC,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,CAAU,WAAA,EAAY;AAClD,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,IAAU,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAC5D,IAAA,MAAM,UAAA,GAAa,OAAO,gBAAA,IAAoB,CAAA;AAE9C,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAAA,MACvC,OAAA,EAAS,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA;AAAA,MACrC,EAAA,EAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ;AAAA,QACN,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,UAAA;AAAA,QACA,UAAU,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,QAC5D,WAAA,EAAa,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,SAAS,WAAA,GAAc;AAAA;AAC5D,KACF;AAAA,EACF;AAAA,EAEQ,eAAe,SAAA,EAAoD;AA/S7E,IAAA,IAAA,EAAA;AAgTI,IAAA,IAAI,IAAA,CAAK,OAAO,aAAA,EAAe;AAC7B,MAAA,OAAO,KAAK,MAAA,CAAO,aAAA;AAAA,IACrB;AAEA,IAAA,IAAI,QAAA,CAAS,KAAA,IAAS,qCAAA,CAAsC,IAAA,CAAK,SAAS,CAAA,EAAG;AAC3E,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAA,CAAS,MAAA,IAAU,cAAA,CAAe,IAAA,CAAK,SAAS,CAAA,EAAG;AACrD,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,UAAQ,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,KAAA,KAAS,OAAO,UAAA,IAAc,IAAA;AAC3D,IAAA,IAAI,KAAA,GAAQ,KAAK,OAAO,QAAA;AACxB,IAAA,IAAI,KAAA,GAAQ,MAAM,OAAO,QAAA;AAEzB,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEQ,cAAc,SAAA,EAA0C;AApUlE,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqUI,IAAA,IAAI,IAAA,GAAsC,SAAA;AAC1C,IAAA,IAAI,OAAA,GAAU,SAAA;AAEd,IAAA,IAAI;AACF,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5B,QAAA,IAAA,GAAO,MAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,SAAA,CAAU,KAAA,CAAM,iBAAiB,CAAA,KAAjC,mBAAqC,CAAA,CAAA,KAAM,SAAA;AAAA,MACvD,CAAA,MAAA,IAAW,UAAU,IAAA,CAAK,SAAS,KAAK,CAAC,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AAC/D,QAAA,IAAA,GAAO,QAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,SAAA,CAAU,KAAA,CAAM,oBAAoB,CAAA,KAApC,mBAAwC,CAAA,CAAA,KAAM,SAAA;AAAA,MAC1D,CAAA,MAAA,IAAW,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAG;AACrC,QAAA,IAAA,GAAO,SAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,SAAA,CAAU,KAAA,CAAM,qBAAqB,CAAA,KAArC,mBAAyC,CAAA,CAAA,KAAM,SAAA;AAAA,MAC3D,CAAA,MAAA,IAAW,UAAU,IAAA,CAAK,SAAS,KAAK,CAAC,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,EAAG;AAClE,QAAA,IAAA,GAAO,QAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,SAAA,CAAU,KAAA,CAAM,qBAAqB,CAAA,KAArC,mBAAyC,CAAA,CAAA,KAAM,SAAA;AAAA,MAC3D;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,0BAAA,EAA4B,KAAK,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,SAAS,SAAA,EAAqC;AA7VxD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8VI,IAAA,IAAI,IAAA,GAAiC,SAAA;AACrC,IAAA,IAAI,OAAA,GAAU,SAAA;AAEd,IAAA,IAAI;AACF,MAAA,IAAI,mBAAA,CAAoB,IAAA,CAAK,SAAS,CAAA,EAAG;AACvC,QAAA,IAAA,GAAO,KAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,MAAM,eAAe,CAAA,KAA/B,mBAAmC,CAAA,CAAA,KAAnC,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuC,OAAA,CAAQ,IAAA,EAAM,GAAA,CAAA,KAAQ,SAAA;AAAA,MACzE,CAAA,MAAA,IAAW,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAG;AACrC,QAAA,IAAA,GAAO,SAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,SAAA,CAAU,KAAA,CAAM,oBAAoB,CAAA,KAApC,mBAAwC,CAAA,CAAA,KAAM,SAAA;AAAA,MAC1D,CAAA,MAAA,IAAW,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA,EAAG;AACtC,QAAA,IAAA,GAAO,OAAA;AACP,QAAA,OAAA,GAAA,CAAA,CAAU,EAAA,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,MAAM,qBAAqB,CAAA,KAArC,mBAAyC,CAAA,CAAA,KAAzC,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6C,OAAA,CAAQ,IAAA,EAAM,GAAA,CAAA,KAAQ,SAAA;AAAA,MAC/E,CAAA,MAAA,IAAW,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAG;AACrC,QAAA,IAAA,GAAO,SAAA;AACP,QAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA,EAAG,OAAA,GAAU,IAAA;AAAA,aAAA,IACvC,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA,EAAG,OAAA,GAAU,KAAA;AAAA,aAAA,IAC7C,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA,EAAG,OAAA,GAAU,GAAA;AAAA,aAAA,IAC7C,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA,EAAG,OAAA,GAAU,GAAA;AAAA,MACxD,CAAA,MAAA,IAAW,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AACnC,QAAA,IAAA,GAAO,OAAA;AAAA,MACT;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,qBAAA,EAAuB,KAAK,CAAA;AAAA,IACtE;AAEA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,iBAAA,CAAkB,OAAe,MAAA,EAAwB;AAC/D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,GAAQ,SAAS,MAAM,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA6C;AACzD,IAAA,MAAM,OAAA,GAA8B;AAAA,MAClC,MAAA,EAAQ,MAAM,IAAA,CAAK,aAAA,EAAc;AAAA,MACjC,OAAA,EAAS,MAAM,IAAA,CAAK,cAAA,EAAe;AAAA,MACnC,OAAA,EAAS,MAAM,IAAA,CAAK,cAAA,EAAe;AAAA,MACnC,GAAA,EAAK,MAAM,IAAA,CAAK,UAAA;AAAW,KAC7B;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAc,aAAA,GAAuD;AACnE,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,IAAI,MAAA,GAAS,GAAA;AAEb,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,OAAO,qBAAA,EAAuB;AAErC,QAAA,MAAM,aAAc,WAAA,CAAoB,MAAA;AACxC,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,OAAA,GAAU,UAAA,CAAW,mBAAmB,IAAA,GAAO,IAAA,CAAA;AAC/C,UAAA,MAAA,GAAS,UAAA,CAAW,kBAAkB,IAAA,GAAO,IAAA,CAAA;AAAA,QAC/C;AAGA,QAAA,MAAM,eAAgB,SAAA,CAAkB,YAAA;AACxC,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,OAAA,GAAU,YAAA,GAAe,IAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,yBAAA,EAA2B,KAAK,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAI,IAAA,GAAkC,QAAA;AACtC,IAAA,IAAI,OAAA,GAAU,IAAA;AACZ,MAAA,IAAA,GAAO,KAAA;AAAA,SAAA,IACA,OAAA,IAAW,MAAM,IAAA,GAAO,MAAA;AAEjC,IAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAK;AAAA,EACjC;AAAA,EAEA,MAAc,cAAA,GAAyD;AACrE,IAAA,MAAM,cAAA,GAAgD;AAAA,MACpD,IAAA,EAAM,SAAA;AAAA,MACN,aAAA,EAAe,IAAA;AAAA,MACf,QAAA,EAAU,EAAA;AAAA,MACV,GAAA,EAAK,EAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,sBAAA,EAAwB;AACvC,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,UAAA,GACH,SAAA,CAAkB,UAAA,IAClB,SAAA,CAAkB,iBAClB,SAAA,CAAkB,gBAAA;AAErB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,SACJ,UAAA,CAAW,aAAA,KAAkB,aAC7B,UAAA,CAAW,aAAA,KAAkB,QAC7B,UAAA,CAAW,QAAA;AAEb,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,WAAW,IAAA,IAAQ,SAAA;AAAA,UACzB,aAAA,EAAe,WAAW,aAAA,IAAiB,IAAA;AAAA,UAC3C,QAAA,EAAU,WAAW,QAAA,IAAY,EAAA;AAAA,UACjC,GAAA,EAAK,WAAW,GAAA,IAAO,EAAA;AAAA,UACvB;AAAA,SACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,0BAAA,EAA4B,KAAK,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAc,cAAA,GAAyD;AArdzE,IAAA,IAAA,EAAA;AAsdI,IAAA,MAAM,cAAA,GAAgD;AAAA,MACpD,KAAA,EAAO,GAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,sBAAA,EAAwB;AACvC,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,OAAA,GAAU,OAAA,CAAO,EAAA,GAAA,SAAA,CAAkB,UAAA,KAAlB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AAEvB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5C,QAAA,MAAM,QAAQ,KAAA,GAAQ,EAAA;AACtB,QAAA,MAAM,SAAA,GAAY,KAAA,IAAS,CAAC,OAAA,CAAQ,QAAA;AAEpC,QAAA,OAAO;AAAA,UACL,KAAA;AAAA,UACA,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,KAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,0BAAA,EAA4B,KAAK,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAc,UAAA,GAAiD;AAC7D,IAAA,MAAM,UAAA,GAAwC;AAAA,MAC5C,QAAA,EAAU,SAAA;AAAA,MACV,MAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,cAAA,EAAgB,IAAA;AAAA,MAChB,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,kBAAA,EAAoB;AACnC,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAA;AACtC,MAAA,MAAM,EAAA,GAAK,GAAA,IAAO,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAE3C,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,OAAO,EAAE,GAAG,UAAA,EAAY,IAAA,EAAM,KAAA,EAAM;AAAA,MACtC;AAEA,MAAA,MAAM,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,2BAA2B,CAAA;AAC7D,MAAA,MAAM,WAAW,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,SAAA,CAAU,uBAAuB,CAAA,GAAI,SAAA;AAClF,MAAA,MAAM,SAAS,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,SAAA,CAAU,qBAAqB,CAAA,GAAI,SAAA;AAC9E,MAAA,MAAM,cAAA,GAAiB,EAAA,CAAG,YAAA,CAAa,EAAA,CAAG,gBAAgB,CAAA;AAE1D,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,cAAc,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,MAAA;AAAA,QACA,IAAA;AAAA,QACA,cAAA;AAAA,QACA,cAAA,EAAgB,CAAC,CAAC;AAAA,OACpB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,sBAAA,EAAwB,KAAK,CAAA;AACrE,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,UAAkB,cAAA,EAAmD;AACzF,IAAA,MAAM,aAAA,GAAgB,SAAS,WAAA,EAAY;AAG3C,IAAA,IACE,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA,IAC5B,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA,IACjC,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA,IAC/B,kBAAkB,KAAA,EAClB;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,IACG,aAAA,CAAc,SAAS,OAAO,CAAA,IAAK,cAAc,QAAA,CAAS,IAAI,CAAA,IAC/D,aAAA,CAAc,QAAA,CAAS,UAAU,KAChC,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA,IAAK,CAAC,cAAc,QAAA,CAAS,GAAG,CAAA,IAChE,cAAA,GAAiB,IAAA,EACjB;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAA,GAAsD;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,IAAc,CAAC,IAAA,CAAK,SAAS,OAAO,QAAA;AAE9C,IAAA,IAAI,KAAA,GAAQ,CAAA;AAGZ,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAA,KAAa,SAAA,EAAW,KAAA,IAAS,EAAA;AAAA,SAAA,IAC5C,IAAA,CAAK,UAAA,CAAW,QAAA,KAAa,QAAA,EAAU,KAAA,IAAS,EAAA;AAAA,SACpD,KAAA,IAAS,CAAA;AAGd,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAA,KAAS,QAAQ,KAAA,IAAS,EAAA;AAAA,SAAA,IACzC,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAA,KAAS,UAAU,KAAA,IAAS,EAAA;AAAA,SACpD,KAAA,IAAS,CAAA;AAGd,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,KAAS,QAAQ,KAAA,IAAS,EAAA;AAAA,SAAA,IACtC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,KAAS,UAAU,KAAA,IAAS,EAAA;AAAA,SACjD,KAAA,IAAS,CAAA;AAGd,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,aAAA,KAAkB,IAAA,IAAQ,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,KAAA,IAAS,EAAA;AAAA,SAAA,IACjF,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,aAAA,KAAkB,MAAM,KAAA,IAAS,EAAA;AAAA,SAC1D,KAAA,IAAS,CAAA;AAGd,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,KAAA,IAAS,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,KAAA,IAAS,EAAA;AAAA,SAAA,IACpE,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAA,IAAS,CAAA;AAAA,SAC1C,KAAA,IAAS,CAAA;AAGd,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,MAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,QAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,4BAAA,GAAqD;AAnmB/D,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAomBI,IAAA,MAAM,eAAe,EAAE,GAAG,KAAK,mBAAA,CAAoB,IAAA,CAAK,eAAe,CAAA,EAAE;AAGzE,IAAA,MAAM,WAAA,GAAA,CAAA,CAAc,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,KAAA,IACxC,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,OAAO,UAAA,GACtD,IAAA;AACJ,IAAA,MAAM,YAAA,GAAA,CAAA,CAAe,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,MAAA,IACzC,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,OAAO,UAAA,GACvD,IAAA;AAEJ,IAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,4BAAA,EAA8B;AAAA,MACpE,WAAA,EAAa,CAAA,EAAA,CAAG,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,KAAK,CAAA,CAAA,EAAA,CAAI,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,MAC/E,UAAA,EAAA,CAAY,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,UAAA;AAAA,MACpC,kBAAA,EAAoB,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAAA,MAClD,QAAA,EAAA,CAAU,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO;AAAA,KACnC,CAAA;AAID,IAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,QAAA,MAAa,QAAA,EAAU;AAC1C,MAAA,YAAA,CAAa,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,iBAAiB,IAAI,CAAA;AAC1E,MAAA,YAAA,CAAa,gBAAA,CAAiB,eAAe,IAAA,CAAK,KAAA;AAAA,QAChD,YAAA,CAAa,iBAAiB,YAAA,GAAe;AAAA,OAC/C;AACA,MAAA,YAAA,CAAa,YAAA,CAAa,mBAAmB,IAAA,CAAK,KAAA;AAAA,QAChD,YAAA,CAAa,aAAa,gBAAA,GAAmB;AAAA,OAC/C;AAAA,IACF;AAGA,IAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,eAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,eAAc,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,UAAA,GAAa,CAAA,EAAG;AAC/E,MAAA,IAAI,IAAA,CAAK,oBAAoB,MAAA,EAAQ;AAEnC,QAAA,MAAM,qBAAqB,WAAA,GAAc,YAAA;AAEzC,QAAA,IAAI,sBAAsB,GAAA,EAAS;AAGjC,UAAA,YAAA,CAAa,eAAA,GAAkB,CAAA;AAC/B,UAAA,YAAA,CAAa,WAAA,GAAc,KAAA;AAAA,QAC7B,CAAA,MAAA,IAAW,sBAAsB,GAAA,EAAS;AAGxC,UAAA,YAAA,CAAa,kBAAkB,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,UAAA,IAAc,IAAM,CAAA,GAAM,GAAA;AAChF,UAAA,YAAA,CAAa,WAAA,GAAc,YAAA,CAAa,eAAA,IAAmB,CAAA,GAAM,KAAA,GAAQ,OAAA;AAAA,QAC3E,CAAA,MAAO;AAEL,UAAA,YAAA,CAAa,eAAA,GAAkB,CAAA;AAC/B,UAAA,YAAA,CAAa,WAAA,GAAc,KAAA;AAAA,QAC7B;AAEA,QAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,IAAA,CAAK,kCAAA,EAAoC;AAAA,UAC1E,kBAAA;AAAA,UACA,oBAAoB,YAAA,CAAa,eAAA;AAAA,UACjC,gBAAgB,YAAA,CAAa,WAAA;AAAA,UAC7B,SAAA,EAAW,CAAA,qBAAA,EAAwB,WAAW,CAAA,CAAA,EAAI,YAAY,CAAA;AAAA,SAC/D,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,IAAA,CAAK,eAAA,KAAoB,QAAA,EAAU;AAE5C,QAAA,MAAM,qBAAqB,WAAA,GAAc,YAAA;AAEzC,QAAA,IAAI,sBAAsB,IAAA,IAAW,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA,EAAK;AAE7E,UAAA,YAAA,CAAa,eAAA,GAAkB,CAAA;AAC/B,UAAA,YAAA,CAAa,WAAA,GAAc,KAAA;AAAA,QAC7B,CAAA,MAAO;AAEL,UAAA,YAAA,CAAa,eAAA,GAAkB,GAAA;AAC/B,UAAA,YAAA,CAAa,WAAA,GAAc,OAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAA,CAAI,EAAA,GAAA,IAAA,CAAK,OAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,OAAA,CAAQ,SAAA,EAAW;AAEnC,MAAA,YAAA,CAAa,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,iBAAiB,CAAG,CAAA;AACzE,MAAA,IAAI,YAAA,CAAa,mBAAmB,GAAA,EAAK;AACvC,QAAA,YAAA,CAAa,WAAA,GAAc,OAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,WAAA,GAAc,KAAA;AAAA,MAC7B;AAEA,MAAA,YAAA,CAAa,SAAA,GAAY,EAAA;AACzB,MAAA,YAAA,CAAa,gBAAA,CAAiB,eAAe,IAAA,CAAK,KAAA;AAAA,QAChD,YAAA,CAAa,iBAAiB,YAAA,GAAe;AAAA,OAC/C;AACA,MAAA,YAAA,CAAa,iBAAiB,qBAAA,GAAwB,KAAA;AAAA,IACxD;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAEpB,IAAA,IAAI,IAAA,CAAK,OAAO,eAAA,EAAiB;AAC/B,MAAA,IAAA,CAAK,QAAA,CAAS,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,eAAA;AAC5C,MAAA,IAAA,CAAK,QAAA,CAAS,WAAA,GAAc,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,eAAe,CAAA,CAAA,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEQ,mBAAA,GAA4B;AA1sBtC,IAAA,IAAA,EAAA,EAAA,EAAA;AA2sBI,IAAA,IAAA,CAAK,UAAA,GAAa;AAAA,MAChB,QAAA,EAAU,QAAA,CAAS,GAAA,GAAM,QAAA,GAAW,SAAA;AAAA,MACpC,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,SAAA,EAAU;AAAA,MAC/C,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,SAAA,EAAU;AAAA,MAC1C,MAAA,EAAQ;AAAA,QACN,KAAA,EAAA,CAAA,CAAO,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,KAAA,KAAS,IAAA;AAAA,QAC/B,MAAA,EAAA,CAAA,CAAQ,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,MAAA,KAAU,IAAA;AAAA,QACjC,UAAA,EAAY,OAAO,gBAAA,IAAoB,CAAA;AAAA,QACvC,QAAA,EAAU,CAAA;AAAA,QACV,WAAA,EAAa;AAAA;AACf,KACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,QAAQ,EAAE,OAAA,EAAS,MAAM,MAAA,EAAQ,GAAA,EAAK,MAAM,QAAA,EAAS;AAAA,MACrD,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,aAAA,EAAe,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAM;AAAA,MACtF,OAAA,EAAS,EAAE,KAAA,EAAO,GAAA,EAAK,UAAU,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,KAAA,EAAM;AAAA,MACtE,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,SAAA;AAAA,QACV,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,cAAA,EAAgB,IAAA;AAAA,QAChB,cAAA,EAAgB;AAAA;AAClB,KACF;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,EAAE,GAAG,IAAA,CAAK,oBAAoB,MAAA,EAAO;AACrD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,EACvB;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,CAAC,KAAK,UAAA,IAAc,CAAC,KAAK,OAAA,IAAW,CAAC,KAAK,QAAA,EAAU;AAEzD,IAAA,OAAA,CAAQ,MAAM,oCAA6B,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,EAAY,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAC5F,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,UAAA,CAAW,EAAA,CAAG,OAAO,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,SAAA;AAAA,MACA,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,IAAA,CAAK,UAAA,CAAW,OAAO,UAAU,CAAA,EAAA;AAAA,KACxG;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,mBAAA,EAAqB,IAAA,CAAK,eAAe,CAAA;AACrD,IAAA,OAAA,CAAQ,GAAA,CAAI,mBAAA,EAAqB,IAAA,CAAK,QAAA,CAAS,eAAe,CAAA;AAC9D,IAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,IAAA,CAAK,QAAA,CAAS,iBAAiB,YAAY,CAAA;AACzE,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAI,CAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,IAAI,IAAI,CAAA;AAC9C,IAAA,OAAA,CAAQ,QAAA,EAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,aAAA,GAAmC;AACxC,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAA,GAAwC;AAC7C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,WAAA,GAA2C;AAChD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,kBAAA,GAAgD;AACrD,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,kBAAA,GAA6B;AAzyBtC,IAAA,IAAA,EAAA;AA0yBI,IAAA,OAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,eAAA,KAAmB,CAAA;AAAA,EAC3C;AAAA,EAEO,cAAA,GAAyB;AA7yBlC,IAAA,IAAA,EAAA;AA8yBI,IAAA,OAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,WAAA,KAAe,KAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,wBAAwB,SAAA,EAA2B;AAvzB5D,IAAA,IAAA,EAAA;AAwzBI,IAAA,MAAM,YAAA,GAAA,CAAA,CAAe,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,iBAAiB,YAAA,KAAgB,GAAA;AACrE,IAAA,MAAM,QAAQ,YAAA,GAAe,GAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,KAAK,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,uBAAA,GAAmC;AAl0B5C,IAAA,IAAA,EAAA;AAm0BI,IAAA,OAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,gBAAA,CAAiB,qBAAA,KAAyB,IAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,qBAAA,GAAgD;AAj1BzD,IAAA,IAAA,EAAA;AAk1BI,IAAA,OAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,kBAAA,KAAsB,EAAC;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,SAAA,EAAgD;AACtE,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,WAAW,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,SAAA,EAAU;AACjD,MAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,KAAA,CAAM,qBAAA,EAAuB,SAAS,CAAA;AAAA,IAC3E;AAAA,EACF;AAAA,EAEO,UAAU,IAAA,EAAuC;AACtD,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,IAAA,CAAK,WAAW,EAAE,GAAG,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAA,EAAE;AACpD,IAAA,SAAA,CAAU,uBAAuB,CAAA,CAAE,KAAA,CAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAE,CAAA;AAAA,EAC7E;AAGF;;;ACp2BO,SAAS,kBAAkB,IAAA,EAAsB;AAJxD,EAAA,IAAA,EAAA;AAKE,EAAA,IAAI,KAAK,UAAA,CAAW,SAAS,KAAK,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GACJ,OAAO,MAAA,CAAA,IAAA,KAAgB,WAAA,KAAA,CAAe,EAAA,GAAA,MAAA,CAAA,IAAA,CAAY,QAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,QAAA,CAAA,GACnD,MAAA,CAAA,IAAA,CAAY,GAAA,CAAI,QAAA,GAChB,GAAA;AAEN,EAAA,MAAM,iBAAiB,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA,GAAO,GAAG,IAAI,CAAA,CAAA,CAAA;AAC1D,EAAA,MAAM,cAAA,GAAiB,KAAK,UAAA,CAAW,GAAG,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAE9D,EAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,cAAc,CAAA,CAAA;AAC3C;AC6DO,IAAM,iBAAN,MAA6C;AAAA,EAC3C,IAAA,GAAe,gBAAA;AAAA,EACf,QAAA,GAAmB,EAAA;AAAA,EACnB,eAAyB,EAAC;AAAA,EAEzB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA;AAAA,EAGhB,YAAA,uBAAkD,GAAA,EAAI;AAAA,EACtD,WAAwC,EAAC;AAAA,EACzC,UAAA,GAAqB,CAAA;AAAA,EACrB,gBAAA;AAAA,EACA,aAAA,GAA+B,KAAA;AAAA;AAAA,EAG/B,qBAAA,uBAAiD,GAAA,EAAI;AAAA,EAE7D,YAAY,MAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,QAAA,EAAU,kBAAkB,kBAAkB,CAAA;AAAA,MAC9C,aAAA,EAAe,kBAAkB,eAAe,CAAA;AAAA,MAChD,aAAA,EAAe,kBAAkB,gBAAgB,CAAA;AAAA,MACjD,oBAAA,EAAsB,CAAC,IAAA,EAAM,GAAA,EAAK,GAAK,CAAG,CAAA;AAAA,MAC1C,uBAAA,EAAyB,CAAC,KAAA,EAAO,MAAM,CAAA;AAAA,MACvC,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EAEA,MAAa,WAAW,MAAA,EAAmC;AA7G7D,IAAA,IAAA,EAAA;AA8GI,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,MAAM,kBAAA,GAAqB,MAAMC,UAAAA,CAAW,IAAA,EAAK;AACjD,IAAA,MAAM,gBAAc,EAAA,GAAA,IAAA,CAAK,MAAA,CAAO,uBAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqC,SAAS,MAAA,CAAA,KAAW,IAAA;AAC7E,IAAA,IAAA,CAAK,aAAA,GAAiB,kBAAA,IAAsB,WAAA,GAAe,MAAA,GAAS,KAAA;AAGpE,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,0BAAA,CAA2B,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,eAAe,CAAA;AACjI,IAAA,IAAA,CAAK,gBAAA,GAAmB,CAAA,CAAA,EAAI,IAAA,CAAK,UAAU,CAAA,CAAA,CAAA;AAG3C,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAGtB,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAE1B,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAErB,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,IAAA,CAAK,4BAAA,EAA8B;AAAA,MAC7D,QAAA,EAAU,KAAK,MAAA,CAAO,QAAA;AAAA,MACtB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,eAAe,IAAA,CAAK,aAAA;AAAA,MACpB,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,KAC9B,CAAA;AAAA,EACH;AAAA,EAEO,QAAQ,MAAA,EAA0B;AACvC,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBQ,0BAAA,CAA2B,GAAA,EAAa,QAAA,EAAkB,eAAA,EAAkC;AAClG,IAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,oBAAA;AAC9B,IAAA,MAAM,eAAA,GAAkB,CAAC,GAAG,SAAS,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAG3D,IAAA,MAAM,WAAA,GAAc,IAAA;AACpB,IAAA,MAAM,YAAA,GAAe,IAAA;AACrB,IAAA,MAAM,iBAAiB,IAAA,CAAK,IAAA,CAAK,WAAA,IAAe,CAAA,GAAI,gBAAgB,CAAC,CAAA;AAGrE,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,KAAA,GAAQ,GAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,GAAA;AAC5C,IAAA,MAAM,iBAAiB,IAAA,CAAK,IAAA,CAAK,WAAA,IAAe,CAAA,GAAI,gBAAgB,CAAC,CAAA;AAErE,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,oBAAoB,MAAA,EAAW;AAEjC,MAAA,aAAA,GAAgB,eAAA;AAAA,IAClB,CAAA,MAAO;AAEL,MAAA,aAAA,GAAgB,cAAA,GAAiB,cAAA;AAAA,IACnC;AAEA,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,aAAa,QAAA,EAAU;AAGzB,MAAA,iBAAA,GAAoB,eAAA,CAAgB,MAAA;AAAA,QAAO,CAAC,IAAA,EAAM,IAAA,KAChD,IAAA,IAAQ,gBAAgB,IAAA,GAAO,IAAA;AAAA,QAC7B,gBAAgB,CAAC;AAAA,OAAC;AAAA,IACxB,CAAA,MAAO;AAGL,MAAA,iBAAA,GAAoB,eAAA,CAAgB,MAAA;AAAA,QAAO,CAAC,IAAA,EAAM,IAAA,KAChD,QAAQ,aAAA,IAAiB,IAAA,GAAO,OAAO,IAAA,GAAO,IAAA;AAAA,QAC5C,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAC;AAAA,OAAC;AAAA,IACjD;AAEA,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,wBAAA,EAA0B;AAAA,MAC1D,UAAA,EAAY,GAAG,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,MAAM,CAAA,CAAA;AAAA,MAC1D,YAAA,EAAc,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAAA,MAC5C,GAAA;AAAA,MACA,cAAA,EAAgB,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAA;AAAA,MACxC,cAAA,EAAgB,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAA;AAAA,MACxC,aAAA,EAAe,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAA;AAAA,MACtC,iBAAiB,eAAA,IAAmB,MAAA;AAAA,MACpC,QAAA;AAAA,MACA,kBAAA,EAAoB;AAAA,KACrB,CAAA;AAED,IAAA,OAAO,iBAAA;AAAA,EACT;AAAA,EAEO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,IAAA,CAAK,2BAA2B,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,GAAA,EAAyC;AAC9D,IAAA,OAAO,OAAO,QAAQ,QAAA,IAAY,GAAA,KAAQ,QAAQ,MAAA,IAAU,GAAA,IAAQ,IAA2B,IAAA,KAAS,OAAA;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,GAAA,EAAyC;AAC9D,IAAA,OAAO,OAAO,QAAQ,QAAA,IAAY,GAAA,KAAQ,QAAQ,MAAA,IAAU,GAAA,IAAQ,IAA2B,IAAA,KAAS,OAAA;AAAA,EAC1G;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,MAAM,WAAwC,EAAC;AAE/C,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AACtC,MAAA,MAAM,SAAsB,EAAC;AAE7B,MAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAE/B,QAAA,IAAI,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA,EAAG;AAC5B,UAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA;AAChD,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,MAAA,CAAO,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA,UAC5B;AACA,UAAA;AAAA,QACF;AAGA,QAAA,IAAI,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA,EAAG;AAC5B,UAAA,MAAM,UAAA,GAAa,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAA;AAC9C,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA,UACxB;AACA,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,WAAA,GAAc,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,CAAI,IAAA;AACxD,QAAA,MAAM,QAAQ,OAAO,GAAA,KAAQ,WAAW,GAAA,GAAM,GAAA,CAAI,SAAS,GAAA,CAAI,IAAA;AAC/D,QAAA,MAAM,iBAAiB,OAAO,GAAA,KAAQ,QAAA,GAAW,IAAA,GAAQ,IAAI,cAAA,IAAkB,IAAA;AAC/E,QAAA,MAAM,WAAW,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAA,GAAU,IAAI,QAAA,IAAY,MAAA;AAGrE,QAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AACrC,UAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,kBAAA,EAAqB,WAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC9H,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,cAAc,CAAA;AAC7D,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAE1B,QAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,YAAY,WAAW,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAA;AAAA,MAC1E,CAAC,CAAA;AAED,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA;AACxB,QAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM;AAAA,UACjC,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,MAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAW,OAAO,QAAA,IAAY,CAAA;AAAA,UAC9B;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,IAAI,KAAK,MAAA,CAAO,KAAA,IAAS,KAAK,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACrD,MAAA,MAAM,aAA0B,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC/D,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,MAAM,IAAA,CAAK;AAAA,OACb,CAAE,CAAA;AAEF,MAAA,QAAA,CAAS,OAAO,CAAA,GAAI,UAAA;AACpB,MAAA,IAAA,CAAK,YAAA,CAAa,IAAI,OAAA,EAAS;AAAA,QAC7B,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,SAAA;AAAA,QACR,QAAA,EAAU,CAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,yBAAA,EAA2B,UAAU,CAAA;AAAA,IACzE;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,0BAAA,EAA4B,EAAE,SAAS,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,CAAA;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,eAAA,EAAyD;AACjF,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,eAAA,KAAoB,KAAK,MAAA,CAAO,QAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,aAAqB,cAAA,EAAiC;AAC7E,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAC7B,IAAA,MAAM,eAAA,GAAkB,CAAA,CAAA,EAAI,IAAA,CAAK,aAAa,CAAA,CAAA;AAE9C,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,EAAA,EAAK,IAAA,CAAK,gBAAgB,CAAA,EAAG,eAAe,CAAA,KAAA,CAAA;AAAA,IAC7F,CAAA,MAAO;AAEL,MAAA,OAAO,GAAG,QAAQ,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,WAAW,KAAK,eAAe,CAAA,KAAA,CAAA;AAAA,IACrE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,oBAAoB,GAAA,EAA6C;AACvE,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,IAAY,MAAA;AAGjC,IAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AACrC,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,wBAAA,EAA2B,GAAA,CAAI,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,CAAA;AACjI,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,kBAAkB,eAAe,CAAA;AACpF,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,IAAA;AAC/B,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,IAAkB,IAAA;AAC7C,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,IAAkB,MAAA;AAG7C,IAAA,MAAM,cAAc,CAAA,EAAG,aAAa,GAAG,GAAA,CAAI,IAAI,IAAI,cAAc,CAAA,CAAA;AAGjE,IAAA,MAAM,QAAA,GAAW,cAAA,GACb,CAAA,EAAG,aAAa,GAAG,GAAA,CAAI,IAAI,CAAA,EAAG,IAAA,CAAK,gBAAgB,CAAA,MAAA,CAAA,GACnD,CAAA,EAAG,aAAa,CAAA,EAAG,IAAI,IAAI,CAAA,MAAA,CAAA;AAE/B,IAAA,MAAM,MAAA,GAAsB;AAAA,MAC1B,EAAE,KAAA,EAAc,GAAA,EAAK,WAAA,EAAY;AAAA,MACjC,EAAE,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,MAAA,CAAA,EAAU,KAAK,QAAA;AAAS,KAC3C;AAEA,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,eAAA,EAAkB,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI;AAAA,MAC9D,QAAA,EAAU,WAAA;AAAA,MACV,KAAA,EAAO,QAAA;AAAA,MACP,OAAA,EAAS,CAAC,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,MAAA,CAAQ;AAAA,KAClC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,mBAAmB,GAAA,EAA2C;AACpE,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,IAAY,MAAA;AAGjC,IAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AACrC,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,wBAAA,EAA2B,GAAA,CAAI,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,CAAA;AACjI,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,kBAAkB,gBAAgB,CAAA;AACrF,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,IAAA;AAG/B,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,GACZ,CAAA,EAAG,aAAa,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,CAAA,GAC1B,CAAA,EAAG,aAAa,CAAA,EAAG,IAAI,IAAI,CAAA,UAAA,CAAA;AAE/B,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,eAAA,EAAkB,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI;AAAA,MAC9D,GAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAS,GAAA,CAAI;AAAA,KACd,CAAA;AAGD,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,OAAO,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,oBAAA,GAAoD;AAC7D,IAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,EACd;AAAA,EAEQ,oBAAA,GAA6B;AACnC,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAC,UAAA,EAAY,MAAM,CAAA,KAAM;AAC9D,MAAA,MAAM,eAAe,MAAA,CAAO,MAAA;AAAA,QAC1B,CAAC,KAAK,KAAA,KAAU;AACd,UAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,YAAA,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,GAAI,EAAE,KAAK,KAAA,CAAM,GAAA,EAAK,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK;AAAA,UACxD,CAAA,MAAO;AACL,YAAA,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,GAAI,KAAA,CAAM,GAAA;AAAA,UAC3B;AACA,UAAA,OAAO,GAAA;AAAA,QACT,CAAA;AAAA,QACA;AAAC,OACH;AAEA,MAAA,MAAA,CAAO,SAAA,CAAU,YAAY,YAAY,CAAA;AAAA,IAC3C,CAAC,CAAA;AAED,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,2BAAA,EAA6B,EAAE,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAG,CAAA;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAa,UAAA,CACX,UAAA,EACA,UAAA,EACA,aAAA,EACe;AACf,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAEpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAE,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAA,CAAc,+CAAe,WAAA,KAAe,CAAA;AAClD,IAAA,MAAM,YAAA,GAAA,CAAe,+CAAe,YAAA,KAAgB,CAAA;AAEpD,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,MAAA,GAAS,SAAA;AACrB,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAE7C,MAAA,MAAM,MAAA,CAAO,UAAA,CAAW,UAAA,EAAY,CAAC,QAAA,KAAa;AAChD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,gBAAA,GAAA,CAAoB,cAAc,QAAA,IAAY,YAAA;AACpD,UAAA,UAAA,CAAW;AAAA,YACT,UAAA;AAAA,YACA,QAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,WAAA,CAAY,OAAO,MAAM,CAAA;AAAA,YACvD,KAAA,EAAO,YAAY,MAAA,CAAO,MAAA;AAAA,YAC1B,UAAA,EAAY,QAAA;AAAA,YACZ,gBAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAED,MAAA,WAAA,CAAY,MAAA,GAAS,QAAA;AACrB,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAE7C,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,eAAA,EAAkB,UAAU,CAAA,CAAE,CAAA;AAAA,IAClE,SAAS,KAAA,EAAO;AACd,MAAA,WAAA,CAAY,MAAA,GAAS,OAAA;AACrB,MAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AACpB,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAE7C,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,uBAAA,EAA0B,UAAU,IAAI,KAAK,CAAA;AAC/E,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,mBAAmB,UAAA,EAAiE;AAC/F,IAAA,MAAM,kBAAkB,KAAA,CAAM,IAAA,CAAK,KAAK,YAAA,CAAa,MAAA,EAAQ,CAAA,CAC1D,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,aAAa,CAAC,CAAA,CACxC,IAAI,CAAC,MAAA,KAAW,OAAO,IAAI,CAAA;AAE9B,IAAA,MAAM,eAAe,eAAA,CAAgB,MAAA;AACrC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,eAAA,CAAgB,QAAQ,CAAA,EAAA,EAAK;AAC/C,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,CAAC,CAAA,EAAG,YAAY,EAAE,WAAA,EAAa,CAAA,EAAG,YAAA,EAAc,CAAA;AAAA,IACxF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,cAAc,UAAA,EAAiE;AAC1F,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,CAAO,OAAA,CAChC,OAAO,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,MAAM,CAAA,CACjC,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,IAAI,CAAA;AAE9B,IAAA,MAAM,eAAe,cAAA,CAAe,MAAA;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,CAAe,QAAQ,CAAA,EAAA,EAAK;AAC9C,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,cAAA,CAAe,CAAC,CAAA,EAAG,YAAY,EAAE,WAAA,EAAa,CAAA,EAAG,YAAA,EAAc,CAAA;AAAA,IACvF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,eAAe,UAAA,EAA6B;AACjD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,OAAA,CAAO,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,YAAW,QAAA,IAAY,KAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKO,sBAAA,GAAiC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,CAAA,CACzC,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,QAAA,KAAa,CAAC,CAAA,CAAE,MAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,qBAAA,GAAgC;AACrC,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAChB,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA;AAAA,EACxC;AAGF;;;ACvjBO,IAAM,YAAA,GAAe;AAAA,EAC1B,aAAA,EAAe,OAAO,eAAe,CAAA;AAAA,EACrC,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,EACzB,QAAA,EAAU,OAAO,UAAU,CAAA;AAAA,EAC3B,QAAA,EAAU,OAAO,UAAU;AAC7B,CAAA;ACoEO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAoD;AAAA,EAC9E,IAAA,GAAe,eAAA;AAAA,EACf,QAAA,GAAmB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,eAAyB,EAAC;AAAA,EAEzB,YAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA,GAA6B,IAAA;AAAA,EAC7B,MAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,mBAAA,GAAgD,WAAA;AAAA,EAChD,aAAA;AAAA,EACA,eAAA,GAA4C,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBpD,YAAY,MAAA,EAA6B;AACvC,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAC9B;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA;AAAA,IAC1B;AAGA,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,MAAA,CAAO,SAAA;AACjC,IAAA,IAAA,CAAK,YAAA,GAAe,KAAK,aAAA,CAAc,KAAA;AACvC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,aAAA,CAAc,MAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,iBAAA,CAAkB,OAAe,MAAA,EAA0C;AACjF,IAAA,OAAO,KAAA,IAAS,SAAS,WAAA,GAAc,UAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAgB,WAAA,EAA0D;AAChF,IAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,MAAA,IAAI,IAAA,CAAK,OAAO,QAAA,EAAU;AACxB,QAAA,OAAO,KAAK,MAAA,CAAO,QAAA;AAAA,MACrB;AACA,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,+DAA+D,CAAA;AAC/F,MAAA,OAAO,KAAK,MAAA,CAAO,SAAA;AAAA,IACrB;AACA,IAAA,OAAO,KAAK,MAAA,CAAO,SAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,WAAA,GAAwC;AACjD,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,WAAW,MAAA,EAA0B;AAC1C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAKf,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,MAAA;AACpC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,MAAM,OAAA,GAAU,OAAA;AACvB,MAAA,MAAA,CAAO,MAAM,MAAA,GAAS,GAAA;AACtB,MAAA,MAAA,CAAO,MAAM,OAAA,GAAU,GAAA;AACvB,MAAA,MAAA,CAAO,MAAM,KAAA,GAAQ,MAAA;AACrB,MAAA,MAAA,CAAO,MAAM,MAAA,GAAS,MAAA;AACtB,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,uBAAA,EAAyB,MAAM,CAAA;AAAA,IAElE;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAGrB,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,qCAAA,EAAuC,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EAE7F;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,MAAA,EAA0B;AACvC,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,gCAAgC,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,OAAA,KAAY,IAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,CAAC,YAAA,CAAa,QAAQ,CAAA,CAAE,KAAA,EAAe,QAAgB,UAAA,EAA6B;AAClF,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,aAAA,EAAe;AACxC,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,iDAAiD,CAAA;AACjF,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,MAAM,CAAA;AAC3D,IAAA,IAAI,cAAA,KAAmB,KAAK,mBAAA,EAAqB;AAC/C,MAAA,MAAM,iBAAiB,IAAA,CAAK,mBAAA;AAC5B,MAAA,IAAA,CAAK,mBAAA,GAAsB,cAAA;AAC3B,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,eAAA,CAAgB,cAAc,CAAA;AACxD,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,aAAA,CAAc,KAAA;AACvC,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,aAAA,CAAc,MAAA;AAGxC,MAAA,IAAA,CAAK,KAAK,2BAAA,EAA6B;AAAA,QACrC,cAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,qBAAA,EAAuB;AAAA,QACtD,WAAA,EAAa,cAAA;AAAA,QACb,aAAa,IAAA,CAAK,YAAA;AAAA,QAClB,cAAc,IAAA,CAAK;AAAA,OACpB,CAAA;AAAA,IACH;AAMA,IAAA,MAAM,gBAAA,GAAmB,KAAK,aAAA,CAAc,gBAAA;AAC5C,IAAA,MAAM,eAAe,KAAA,GAAQ,MAAA;AAC7B,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,IAAI,aAAA,GAAgB,MAAA;AAEpB,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,GAAA,EAAK,KAAK,GAAA,CAAI,gBAAA,CAAiB,GAAA,EAAK,YAAY,CAAC,CAAA;AAEhG,MAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,QAAA,IAAI,eAAe,YAAA,EAAc;AAE/B,UAAA,aAAA,GAAgB,KAAA,GAAQ,YAAA;AAAA,QAC1B,CAAA,MAAO;AAEL,UAAA,YAAA,GAAe,MAAA,GAAS,YAAA;AAAA,QAC1B;AAEA,QAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,sBAAA,EAAwB;AAAA,UACvD,YAAA;AAAA,UACA,YAAA;AAAA,UACA,aAAA,EAAe,KAAA;AAAA,UACf,cAAA,EAAgB,MAAA;AAAA,UAChB,YAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MAEH;AAAA,IACF;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAA,CAAO,KAAA,GAAQ,gBAAgB,CAAC,CAAA;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAA,CAAO,MAAA,GAAS,iBAAiB,CAAC,CAAA;AAKvD,IAAA,IAAI,MAAA,GAAS,eAAe,IAAA,CAAK,YAAA;AACjC,IAAA,IAAI,MAAA,GAAS,gBAAgB,IAAA,CAAK,aAAA;AAClC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,SAAA,IAAa,SAAA;AAGlD,IAAA,IAAI,SAAA,KAAc,MAAA,IAAU,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU;AACvD,MAAA,MAAM,QAAA,GAAW,KAAK,aAAA,CAAc,QAAA;AACpC,MAAA,MAAM,OAAA,GAAU,SAAS,GAAA,IAAO,CAAA;AAChC,MAAA,MAAM,SAAA,GAAY,SAAS,KAAA,IAAS,CAAA;AACpC,MAAA,MAAM,UAAA,GAAa,SAAS,MAAA,IAAU,CAAA;AACtC,MAAA,MAAM,QAAA,GAAW,SAAS,IAAA,IAAQ,CAAA;AAGlC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,GAAe,QAAA,GAAW,SAAA;AACjD,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,GAAgB,OAAA,GAAU,UAAA;AAGlD,MAAA,MAAM,aAAa,YAAA,GAAe,SAAA;AAClC,MAAA,MAAM,aAAa,aAAA,GAAgB,UAAA;AAGnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AAGjD,MAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AACnC,MAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AAEnC,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,+BAAA,EAAiC;AAAA,QAChE,QAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA,EAAgB,MAAA;AAAA,QAChB,cAAA,EAAgB;AAAA,OACjB,CAAA;AAAA,IAEH;AAEA,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA;AAO1F,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,eAAe,KAAK,CAAA;AACxD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAG1D,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,KAAK,CAAA;AAG1C,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,SAAA,IAAa,QAAA;AAElD,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,QAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAA,CAAO,YAAA,GAAe,WAAA,IAAe,CAAC,CAAA;AAClD,QAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,aAAA,GAAgB,YAAA,IAAgB,CAAC,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAA,CAAO,YAAA,GAAe,WAAA,IAAe,CAAC,CAAA;AAClD,QAAA,GAAA,GAAM,CAAA;AACN,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAA,CAAO,YAAA,GAAe,WAAA,IAAe,CAAC,CAAA;AAClD,QAAA,GAAA,GAAM,aAAA,GAAgB,YAAA;AACtB,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,GAAO,CAAA;AACP,QAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,aAAA,GAAgB,YAAA,IAAgB,CAAC,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,GAAO,YAAA,GAAe,WAAA;AACtB,QAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,aAAA,GAAgB,YAAA,IAAgB,CAAC,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,GAAO,CAAA;AACP,QAAA,GAAA,GAAM,CAAA;AACN,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAA,GAAO,YAAA,GAAe,WAAA;AACtB,QAAA,GAAA,GAAM,CAAA;AACN,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,IAAA,GAAO,CAAA;AACP,QAAA,GAAA,GAAM,aAAA,GAAgB,YAAA;AACtB,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,IAAA,GAAO,YAAA,GAAe,WAAA;AACtB,QAAA,GAAA,GAAM,aAAA,GAAgB,YAAA;AACtB,QAAA;AAAA;AAIJ,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,QAAQ,UAAU,CAAA;AAG9D,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,KAAA,CAAM,QAAA,CAAS,IAAI,OAAA,GAAU,IAAA,EAAM,UAAU,GAAG,CAAA;AAErE,IAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,GAAO,KAAA;AAChC,IAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,GAAM,KAAA;AAC9B,IAAA,MAAM,gBAAA,GAAA,CAAoB,eAAe,IAAA,IAAQ,KAAA;AACjD,IAAA,MAAM,iBAAA,GAAA,CAAqB,gBAAgB,GAAA,IAAO,KAAA;AAGlD,IAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,MACrB,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,WAAA,EAAa,KAAA;AAAA,MACb,YAAA,EAAc,MAAA;AAAA,MACd,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAa,IAAA,CAAK,mBAAA;AAAA,MAClB,eAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,gBAAA,EAAkB,IAAA,CAAK,eAAe,CAAA;AAGhD,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,uBAAA,EAAyB;AAAA,MACxD,aAAa,IAAA,CAAK,mBAAA;AAAA,MAClB,WAAA,EAAa,KAAA;AAAA,MACb,YAAA,EAAc,MAAA;AAAA,MACd,YAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA,EAAe,IAAA;AAAA,MACf,YAAA,EAAc;AAAA,KACf,CAAA;AAID,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAW,KAAA,GAAgB;AACzB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAW,MAAA,GAAiB;AAC1B,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAA,GAAoB;AACzB,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAW,YAAA,GAAwB;AACjC,IAAA,OAAO,SAAS,iBAAA,KAAsB,IAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAa,iBAAiB,KAAA,EAAgC;AAC5D,IAAA,MAAM,kBAAA,GAAqB,KAAA,IAAS,CAAC,IAAA,CAAK,YAAA;AAE1C,IAAA,IAAI;AACF,MAAA,IAAI,kBAAA,IAAsB,CAAC,IAAA,CAAK,YAAA,EAAc;AAC5C,QAAA,MAAM,QAAA,CAAS,gBAAgB,iBAAA,EAAkB;AACjD,QAAA,IAAA,CAAK,IAAA,CAAK,0BAAA,EAA4B,EAAE,YAAA,EAAc,MAAM,CAAA;AAC5D,QAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAW,CAAC,kBAAA,IAAsB,IAAA,CAAK,YAAA,EAAc;AACnD,QAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,QAAA,IAAA,CAAK,IAAA,CAAK,0BAAA,EAA4B,EAAE,YAAA,EAAc,OAAO,CAAA;AAC7D,QAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,wBAAwB,CAAA;AAAA,MAC3D;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,0BAAA,EAA4B,KAAK,CAAA;AAClE,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,0BAA0B,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,SAAS,UAAA,EAA6B;AAE3C,IAAA,OAAO,KAAA;AAAA,EACT;AAGF;;;AC1hBO,SAAS,0BAA0B,IAAA,EAA6C;AACrF,EAAA,MAAM,eAAe,IAAA,CAAK,eAAA,IAAmB,CAAC,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AAC/D,EAAA,MAAM,cAAc,IAAA,CAAK,cAAA,IAAkB,CAAC,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA;AAE5D,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,YAAA;AAAA,IACH,CAAA,EAAG,WAAA;AAAA,IACH,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,IACzB,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK;AAAA,GAC7B;AACF;ACbO,IAAM,cAAA,GAAN,cACGC,YAAAA,CACgB;AAAA,EACR,IAAA,GAAO,gBAAA;AAAA,EACP,QAAA,GAAW,CAAA;AAAA,EAG3B,WAAA,GAAc;AACZ,IAAA,KAAA,EAAM;AAAA,EACR;AAAA,EAEA,MAAM,WAAW,OAAA,EAAoC;AACnD,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAAA,EACjD;AAAA,EAEA,CAAC,YAAA,CAAa,aAAa,CAAA,CAAE,OAAA,EAA2B;AACtD,IAAC,IAAA,CAAK,KAAa,cAAqB,CAAA;AACxC,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,4BAA4B,CAAA;AAAA,EAChE;AAAA,EAEA,CAAC,YAAA,CAAa,OAAO,CAAA,CAAE,OAAA,EAA2B;AAChD,IAAC,IAAA,CAAK,KAAa,cAAqB,CAAA;AACxC,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,4BAA4B,CAAA;AAAA,EAChE;AAAA,EAEA,CAAC,YAAA,CAAa,QAAQ,CAAA,CAAE,OAAA,EAA2B;AACjD,IAAC,IAAA,CAAK,KAAa,eAAsB,CAAA;AACzC,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,6BAA6B,CAAA;AAAA,EACjE;AAAA,EAEA,CAAC,YAAA,CAAa,QAAQ,CAAA,CAAE,OAAe,MAAA,EAAyB;AAC9D,IAAC,IAAA,CAAK,IAAA,CAAa,eAAA,EAAwB,KAAA,EAAO,MAAM,CAAA;AACxD,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,gCAAgC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACnF,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,YAAY,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAA,CAAiD,UAAa,IAAA,EAAmE;AAC/H,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,MAAA,EAAS,KAAe,IAAI,IAAI,CAAA;AAClE,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAc,GAAI,IAAY,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAA,CAAsD,KAAA,EAAA,GAAa,IAAA,EAAwE;AAC/I,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,WAAA,EAAc,KAAe,IAAI,IAAI,CAAA;AACvE,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,KAAY,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA,CAAI,UAAU,GAAA,CAAI,CAAC,QAAA,KAAa,OAAA,CAAQ,QAAQ,QAAA,CAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACjG,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,eAAA,CAAyC,UAAa,IAAA,EAA0B;AAC9E,IAAA,MAAM,MAAA,GAAsB;AAAA,MAC1B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,CAAO,WAAmB,CAAA,EAAG;AAC3B,QAAA,IAAI,QAAA,IAAY,KAAK,QAAA,EAAU;AAC7B,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,UAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,QAAQ,IAAA,EAAW;AACjB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MACd;AAAA,KACF;AAEA,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,iBAAA,EAAoB,KAAe,IAAI,IAAI,CAAA;AAG7E,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,EAAc,GAAG,IAAA,EAAM,MAAM,CAAA;AAExC,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,oBAAoB,KAAe,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA;AAAA,IACtF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,oBAAA,CACJ,KAAA,EAAA,GACG,IAAA,EACmB;AACtB,IAAA,MAAM,MAAA,GAAsB;AAAA,MAC1B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,CAAO,WAAmB,CAAA,EAAG;AAC3B,QAAA,IAAI,QAAA,IAAY,KAAK,QAAA,EAAU;AAC7B,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,UAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,QAAQ,IAAA,EAAW;AACjB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MACd;AAAA,KACF;AAEA,IAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAe,IAAI,IAAI,CAAA;AAElF,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,KAAY,CAAA;AAE7C,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI,OAAO,SAAA,EAAW;AACtB,MAAA,MAAM,QAAQ,OAAA,CAAQ,QAAA,CAAS,GAAG,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,IACjD;AAEA,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,SAAA,CAAU,gBAAgB,CAAA,CAAE,KAAA,CAAM,0BAA0B,KAAe,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA;AAAA,IAC5F;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AC9CO,IAAM,aAAN,MAAyC;AAAA;AAAA;AAAA;AAAA,EAIvC,IAAA,GAAe,YAAA;AAAA;AAAA;AAAA;AAAA,EAKf,QAAA,GAAmB,GAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,eAAyB,EAAC;AAAA,EAEzB,MAAA;AAAA,EACA,kBAAA;AAAA,EAMA,aAAA,GAAgB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUjB,WAAW,MAAA,EAA0B;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,IAAA,CAAK,kBAAA,GAAqB,CAAC,IAAA,EAAc,SAAA,EAAmB,OAAe,OAAA,KAAoB;AAE7F,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,IAAA,GAAO,GAAI,CAAA;AAExC,MAAA,IAAA,CAAK,MAAA,CAAO,SAAS,SAAS,CAAA;AAAA,IAChC,CAAA;AAGA,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,kBAAkB,CAAA;AAEvC,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,0DAA0D,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,MAAA,EAA0B;AACvC,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,8BAA8B,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,CAAC,YAAA,CAAa,OAAO,CAAA,CAAE,OAAA,EAA2B;AAChD,IAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAClB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,oBAAoB,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,CAAC,YAAA,CAAa,QAAQ,CAAA,CAAE,OAAA,EAA2B;AACjD,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AACjB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAOO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA;AAC1C,MAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,8BAA8B,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,wBAAwB,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAAS,UAAA,EAA6B;AAG3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,eAAe,IAAA,EAA8C;AAClE,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,uBAAA,EAAyB,IAAI,CAAA;AAC3D,IAAA,OAAO,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,MAAA,CACL,MAAA,EACA,QAAA,GAAmB,GAAA,EACnB,IAAA,EAC0B;AAC1B,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAA,CAAA,CAAG,CAAA;AACrE,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,iBAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAA;AAC7B,MAAA,MAAM,KAAA,GAAyB,IAAA,CAAK,EAAA,CAAG,MAAA,EAAQ;AAAA,QAC7C,KAAA,EAAO,CAAA;AAAA,QACP,QAAA;AAAA,QACA,GAAG,IAAA;AAAA,QACH,YAAY,MAAM;AAChB,UAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,EAAA;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,OAAA,CACL,MAAA,EACA,QAAA,GAAmB,GAAA,EACnB,IAAA,EAC0B;AAC1B,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA,CAAG,CAAA;AACtE,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,iBAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAA;AAC7B,MAAA,MAAM,KAAA,GAAyB,IAAA,CAAK,EAAA,CAAG,MAAA,EAAQ;AAAA,QAC7C,KAAA,EAAO,CAAA;AAAA,QACP,QAAA;AAAA,QACA,GAAG,IAAA;AAAA,QACH,YAAY,MAAM;AAChB,UAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,EAAA;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,OAAA,CACL,MAAA,EACA,QAAA,GAAmB,GAAA,EACnB,IAAA,EAC0B;AAE1B,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,MACrB,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK;AAAA,KACvB;AAGA,IAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA;AAEzB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA;AAAA,MACtB,4BAA4B,WAAA,CAAY,CAAC,KAAK,WAAA,CAAY,CAAC,UAAU,QAAQ,CAAA,CAAA;AAAA,KAC/E;AAGA,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,iBAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAA;AAC7B,MAAA,MAAM,KAAA,GAAyB,IAAA,CAAK,EAAA,CAAG,MAAA,CAAO,KAAA,EAAO;AAAA,QACnD,GAAG,WAAA,CAAY,CAAA;AAAA,QACf,GAAG,WAAA,CAAY,CAAA;AAAA,QACf,QAAA;AAAA,QACA,IAAA,EAAM,eAAA;AAAA,QACN,GAAG,IAAA;AAAA,QACH,YAAY,MAAM;AAChB,UAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,EAAA;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,QAAA,CACL,MAAA,EACA,QAAA,GAAmB,GAAA,EACnB,IAAA,EAC0B;AAC1B,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAA,CAAG,CAAA;AACvE,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,iBAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAA;AAC7B,MAAA,MAAM,KAAA,GAAyB,IAAA,CAAK,EAAA,CAAG,MAAA,CAAO,KAAA,EAAO;AAAA,QACnD,CAAA,EAAG,CAAA;AAAA,QACH,CAAA,EAAG,CAAA;AAAA,QACH,QAAA;AAAA,QACA,IAAA,EAAM,cAAA;AAAA,QACN,GAAG,IAAA;AAAA,QACH,YAAY,MAAM;AAChB,UAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,EAAA;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,OACL,MAAA,EACA,CAAA,EACA,CAAA,EACA,QAAA,GAAmB,KACnB,IAAA,EAC0B;AAC1B,IAAA,SAAA,CAAU,YAAY,EAAE,KAAA,CAAM,CAAA,qBAAA,EAAwB,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA,CAAG,CAAA;AAClF,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,iBAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAA;AAC7B,MAAA,MAAM,KAAA,GAAyB,IAAA,CAAK,EAAA,CAAG,MAAA,EAAQ;AAAA,QAC7C,CAAA;AAAA,QACA,CAAA;AAAA,QACA,QAAA;AAAA,QACA,GAAG,IAAA;AAAA,QACH,YAAY,MAAM;AAChB,UAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,EAAA;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBO,OAAA,CACL,MAAA,EACA,KAAA,EACA,IAAA,EAC0B;AAC1B,IAAA,SAAA,CAAU,YAAY,EAAE,KAAA,CAAM,CAAA,0BAAA,EAAA,CAA6B,6BAAM,QAAA,KAAY,GAAG,KAAK,KAAK,CAAA;AAC1F,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,iBAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAA;AAC7B,MAAA,MAAM,KAAA,GAAyB,IAAA,CAAK,EAAA,CAAG,MAAA,EAAQ;AAAA,QAC7C,GAAG,KAAA;AAAA,QACH,GAAG,IAAA;AAAA,QACH,YAAY,MAAM;AAChB,UAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,EAAA;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,QAAA,CACL,UAAA,EACA,OAAA,GAAkB,GAAA,EACW;AAC7B,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,QAAA,GAAW,KAAK,cAAA,CAAe,EAAE,YAAY,MAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG,CAAA;AAE5E,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAA,KAAU;AACpC,QAAA,QAAA,CAAS,GAAA,CAAI,MAAA,EAAO,EAAG,KAAA,GAAQ,OAAO,CAAA;AAAA,MACxC,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBO,WAAA,CACL,KAAA,EACA,QAAA,EACA,MAAA,EACiB;AACjB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,0BAAA,EAA6B,KAAK,CAAA,CAAA,CAAG,CAAA;AACnE,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,QAAA,EAAU,MAAM,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,MAAM,QAAA,EAAiC;AAC5C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,IAAA,CAAK,WAAA,CAAY,UAAU,OAAO,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AACF;;;ACnhBO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,QAAA,EAAU,SAAA;AAAA;AAAA,EAEV,MAAA,EAAQ;AACV;AAOO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,UAAA,EAAY,WAAA;AAAA;AAAA,EAEZ,QAAA,EAAU,SAAA;AAAA;AAAA,EAEV,UAAA,EAAY;AACd;AAOO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,WAAA,EAAa,YAAA;AAAA;AAAA,EAEb,SAAA,EAAW,UAAA;AAAA;AAAA,EAEX,UAAA,EAAY;AACd;AASO,IAAM,YAAA,GAAe;AAAA,EAC1B,GAAG,UAAA;AAAA,EACH,GAAG,YAAA;AAAA,EACH,GAAG;AACL;;;ACFO,IAAM,eAAA,GAAN,cAA8BA,YAAAA,CAAa;AAAA,EACxC,IAAA,uBAAkC,GAAA,EAAI;AAAA,EACtC,WAAA,uBAA+B,GAAA,EAAI;AAAA,EACnC,YAAA,uBAAgC,GAAA,EAAI;AAAA,EACpC,MAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,SAAA,CAAU,iBAAiB,CAAA,CAAE,IAAA,CAAK,6BAA6B,CAAA;AAC/D,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAuB;AAE7B,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,CAAC,KAAA,KAAU;AAC5C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY;AAGlC,MAAA,IAAI,IAAA,CAAK,OAAO,kBAAA,IAAsB,IAAA,CAAK,OAAO,kBAAA,CAAmB,QAAA,CAAS,GAAG,CAAA,EAAG;AAClF,QAAA,KAAA,CAAM,cAAA,EAAe;AAAA,MACvB;AAGA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,KAAA,MAAA;AAGjC,MAAA,IAAI,OAAA,IAAW,CAAC,KAAA,CAAM,MAAA,EAAQ;AAG9B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAA,CAAK,WAAA,CAAY,IAAI,GAAG,CAAA;AACxB,QAAA,IAAA,CAAK,IAAA,CAAK,IAAI,GAAA,EAAA,MAAA,YAAkB;AAEhC,QAAA,SAAA,CAAU,iBAAiB,CAAA,CAAE,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAE,CAAA;AAIxD,QAAA,MAAM,QAAA,GAAqB;AAAA,UACzB,GAAA;AAAA,UACA,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,QAAA,EAAU;AAAA,SACZ;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,QAAQ,CAAA;AAAA,MACzC;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,CAAC,KAAA,KAAU;AAC1C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY;AAGlC,MAAA,IAAI,IAAA,CAAK,OAAO,kBAAA,IAAsB,IAAA,CAAK,OAAO,kBAAA,CAAmB,QAAA,CAAS,GAAG,CAAA,EAAG;AAClF,QAAA,KAAA,CAAM,cAAA,EAAe;AAAA,MACvB;AAGA,MAAA,IAAA,CAAK,YAAA,CAAa,IAAI,GAAG,CAAA;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK,IAAI,GAAA,EAAA,IAAA,UAAgB;AAG9B,MAAA,SAAA,CAAU,iBAAiB,CAAA,CAAE,KAAA,CAAM,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AAIzD,MAAA,MAAM,QAAA,GAAqB;AAAA,QACzB,GAAA;AAAA,QACA,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,MAAA,EAAQ,KAAA;AAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAEA,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACvC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYO,MAAA,GAAe;AAEpB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBO,OAAO,GAAA,EAAsB;AAClC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA,KAAA,MAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,KAAK,GAAA,EAAsB;AAChC,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA;AAC7C,IAAA,OAAO,CAAC,KAAA,IAAS,KAAA,KAAA,IAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,cAAc,GAAA,EAAsB;AACzC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,eAAe,GAAA,EAAsB;AAC1C,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,SAAA,CAAU,iBAAiB,CAAA,CAAE,IAAA,CAAK,4BAA4B,CAAA;AAAA,EAChE;AACF,CAAA;;;ACnJO,IAAM,WAAA,GAAN,cAA0BA,YAAAA,CAAqC;AAAA,EAC7D,IAAA,GAAe,aAAA;AAAA,EACf,QAAA,GAAmB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,eAAyB,EAAC;AAAA;AAAA,EAG1B,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA;AAAA,EAGP,aAAA,GAAmC;AAAA,IAClD,QAAA,EAAU,GAAA;AAAA,IACV,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,oBAAoB,CAAC,KAAA,EAAO,SAAS,SAAA,EAAW,WAAA,EAAa,aAAa,YAAY;AAAA,GACxF;AAAA,EAEA,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,KAAA,EAAM;AAGN,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,aAAA,EAAe,GAAG,MAAA,EAAO;AAGjD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAC9B;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA;AAAA,IAC1B;AAGA,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,kCAAA,EAAoC,KAAK,MAAM,CAAA;AAI7E,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAG/C,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAA,GAA4B;AAElC,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,UAAA,CAAW,QAAA,EAAU,CAAC,KAAA,KAAoB;AACzD,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,KAAK,CAAA;AAAA,IACxC,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,UAAA,CAAW,MAAA,EAAQ,CAAC,KAAA,KAAoB;AACvD,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,KAAK,CAAA;AAAA,IACtC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,MAAA,EAA0B;AAE1C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAEf,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAErB,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,0DAAA,EAA4D,KAAK,MAAM,CAAA;AAAA,EAEvG;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,MAAA,EAA0B;AACvC,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,8BAA8B,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,MAAA,GAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,SAAS,UAAA,EAA6B;AAE3C,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,OAAA,KAAY,KAAA,EAAO;AACjC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AAIrB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AAErB,IAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AAGtB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAErB,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,wBAAwB,CAAA;AAAA,EACxD;AAGF;ACxOA,IAAM,gBAAA,GAAmB,IAAA;AAEzB,IAAI,WAAA,GAAoC,IAAA;AACxC,IAAM,wBAAA,uBAA+B,GAAA,EAA2B;AAEhE,SAAS,sBAAsB,GAAA,EAAwC;AACrE,EAAA,IAAI,CAAC,KAAK,OAAO,gBAAA;AACjB,EAAA,OAAO,GAAA,CAAI,MAAK,CAAE,WAAA,GAAc,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,gBAAA;AACnD;AAGO,SAAS,sBAAA,CAAuB,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,MAAA,EAAgB;AAC9E,EAAA,MAAM,MAAM,IAAI,eAAA,CAAgB,MAAM,CAAA,CAAE,IAAI,KAAK,CAAA;AACjD,EAAA,OAAO,sBAAsB,GAAG,CAAA;AAClC;AAEA,SAAS,yBAAA,GAA4B;AACnC,EAAA,OAAO,CAAC,OAAgB,MAAA,KAAwC;AAC9D,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,KAAA,GAAQ,MAAM,IAAA,EAAK;AAAA,IACrB;AAEA,IAAA,IAAI,WAAW,UAAA,KAAe,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,CAAA,EAAK;AACpF,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,YAAA;AACH,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,CAAM,KAAK,GAAG,OAAO,KAAA;AAC7D,QAAA,OAAO,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,MACzB,KAAK,WAAA;AACH,QAAA,OAAA,CAAQ,KAAA,IAAS,EAAA,EAAI,QAAA,EAAS,CAAE,iBAAA,EAAkB;AAAA,MACpD,KAAK,WAAA;AACH,QAAA,OAAA,CAAQ,KAAA,IAAS,EAAA,EAAI,QAAA,EAAS,CAAE,iBAAA,EAAkB;AAAA,MACpD,KAAK,WAAA;AACH,QAAA,OAAA,CAAQ,KAAA,IAAS,IACd,QAAA,EAAS,CACT,MAAM,kBAAkB,CAAA,CACxB,GAAA,CAAI,CAAC,IAAA,KAAiB;AACrB,UAAA,IAAI,UAAU,IAAA,CAAK,IAAI,KAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAC9C,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,IAAA,CACJ,mBAAkB,CAClB,OAAA;AAAA,YACC,YAAA;AAAA,YACA,CAAC,CAAA,EAAG,MAAA,EAAQ,SAAA,KAAc,MAAA,GAAS,UAAU,iBAAA;AAAkB,WACjE;AAAA,QACJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAAA,MACZ,KAAK,OAAA;AACH,QAAA,OAAA,CAAQ,KAAA,IAAS,IACd,QAAA,EAAS,CACT,MAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAiB;AACrB,UAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,iBAAA,EAAkB,GAAA,CAAK,IAAA,IAAQ,EAAA,EAAI,KAAA,CAAM,CAAC,CAAA,CAAE,iBAAA,EAAkB;AAAA,QACtF,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,MACb;AACE,QAAA,OAAO,KAAA;AAAA;AACX,EACF,CAAA;AACF;AAGA,eAAsB,YAAA,GAA8B;AAClD,EAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,WAAA,GAAA,CAAe,YAAY;AACzB,IAAA,MAAM,eAAe,sBAAA,EAAuB;AAE5C,IAAA,MAAM,QACH,GAAA,CAAI,OAAO,EACX,GAAA,CAAI,gBAAgB,EACpB,GAAA,CAAI;AAAA,MACH,IAAA,EAAM,eAAA;AAAA,MACN,IAAA,EAAM,eAAA;AAAA,MACN,QAAQ,KAAA,EAAgB;AACtB,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,UAAA,OAAO,MAAM,IAAA,EAAK;AAAA,QACpB;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACD,EACA,IAAA,CAAK;AAAA,MACJ,GAAA,EAAK,YAAA;AAAA,MACL,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,MAC1B,WAAA,EAAa,CAAC,gBAAgB,CAAA;AAAA,MAC9B,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,KAAA,EAAO,CAAC,aAAA,EAAe,cAAA,EAAgB,UAAU,WAAW,CAAA;AAAA,QAC5D,iBAAA,EAAmB,KAAA;AAAA,QACnB,MAAA,EAAQ,CAAC,cAAA,EAAgB,QAAQ;AAAA,OACnC;AAAA,MACA,OAAA,EAAS;AAAA,QACP,QAAA,EAAU,kBAAkB,sBAAsB,CAAA;AAAA,QAClD,iBAAA,EAAmB,EAAE,CAAA,EAAG,OAAA;AAAQ,OAClC;AAAA,MACA,aAAA,EAAe;AAAA,QACb,WAAA,EAAa,KAAA;AAAA,QACb,QAAQ,yBAAA;AAA0B,OACpC;AAAA,MACA,WAAA,EAAa,CAAC,eAAe;AAAA,KAC9B,CAAA;AAEH,IAAA,OAAA,CAAQ,EAAA,CAAG,iBAAA,EAAmB,CAAC,GAAA,KAAQ;AACrC,MAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAC5C,MAAA,KAAA,MAAW,YAAY,wBAAA,EAA0B;AAC/C,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,SAAA,CAAU,YAAY,EAAE,IAAA,CAAK,kBAAA,EAAoB,EAAE,QAAA,EAAU,kBAAA,IAAsB,CAAA;AAAA,EACrF,CAAA,GAAG;AAEH,EAAA,IAAI;AACF,IAAA,MAAM,WAAA;AAAA,EACR,SAAS,KAAA,EAAO;AACd,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,2BAAA,EAA6B,KAAK,CAAA;AAChE,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEO,SAAS,CAAA,CAAE,KAAa,OAAA,EAA2C;AACxE,EAAA,OAAO,OAAA,CAAQ,CAAA,CAAE,GAAA,EAAK,OAAO,CAAA;AAC/B;AAEA,eAAsB,eAAe,GAAA,EAA4B;AAC/D,EAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAC5C,EAAA,MAAM,OAAA,CAAQ,eAAe,UAAU,CAAA;AACzC;AAEO,SAAS,kBAAA,GAA6B;AAC3C,EAAA,OAAO,qBAAA,CAAsB,QAAQ,QAAQ,CAAA;AAC/C;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA,CAAQ,aAAA;AACjB;AASO,SAAS,eAAA,GAAkB;AAChC,EAAA,OAAO,OAAA;AACT;;;AC7IO,IAAM,gBAAN,MAA4C;AAAA,EAC1C,IAAA,GAAe,eAAA;AAAA,EACf,QAAA,GAAmB,GAAA;AAAA,EACnB,eAAyB,EAAC;AAAA,EACzB,OAAA,GAA6B,IAAA;AAAA,EAC7B,MAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,QAAA,EAAU,GAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACX;AAEA,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAEjC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IAAgB,EAAC;AAE5C,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAa,WAAW,MAAA,EAAmC;AACzD,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAEf,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,wDAAwD,CAAA;AACxF,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAEhB,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,EAAa;AACnB,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,gEAAgE,CAAA;AAAA,IAClG,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,qCAAA,EAAuC,KAAK,CAAA;AAC7E,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEO,CAAA,CAAE,KAAa,OAAA,EAA2C;AAC/D,IAAA,OAAO,CAAA,CAAE,KAAK,OAAO,CAAA;AAAA,EACvB;AAAA,EAEA,MAAa,eAAe,GAAA,EAA4B;AACtD,IAAA,IAAI;AACF,MAAA,MAAM,eAAe,GAAG,CAAA;AACxB,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,CAAA,qBAAA,EAAwB,GAAG,CAAA,CAAE,CAAA;AAAA,IAC/D,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,CAAA,6BAAA,EAAgC,GAAG,KAAK,KAAK,CAAA;AAC9E,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEO,kBAAA,GAA6B;AAClC,IAAA,OAAO,kBAAA,EAAmB;AAAA,EAC5B;AAAA,EAEO,OAAA,GAAmB;AACxB,IAAA,OAAO,WAAA,EAAY;AAAA,EACrB;AAAA,EAEA,IAAW,IAAA,GAAO;AAChB,IAAA,OAAO,eAAA,EAAgB;AAAA,EACzB;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,0BAA0B,CAAA;AAAA,EAC5D;AAGF;;;ACXO,IAAM,cAAN,MAA0C;AAAA,EACxC,IAAA,GAAe,aAAA;AAAA,EACf,QAAA,GAAmB,EAAA;AAAA,EACnB,eAAyB,EAAC;AAAA;AAAA,EAEzB,MAAA,GAA4B,IAAA;AAAA,EAC5B,YAAA,GAA6B,IAAA;AAAA,EAC7B,MAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,MAAA;AAAA,EACA,IAAA,GAAyB,IAAA;AAAA;AAAA,EAEjC,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,IAAA,CAAK,MAAA,uBAAa,GAAA,EAAI;AAGtB,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACX;AAEA,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAEjC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IAAgB,EAAC;AAG5C,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAC9B;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA;AAAA,IAC1B;AAGA,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,kCAAA,EAAoC,KAAK,MAAM,CAAA;AAAA,EAE/E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,WAAW,MAAA,EAAmC;AAEzD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAA,IAAQ,OAAO,OAAA,CAAQ,KAAA;AAG/C,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,IAAA,KAAS;AACnC,MAAA,KAAA,CAAM,UAAU,MAAM,CAAA;AACtB,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAI,CAAA,CAAE,CAAA;AAAA,IAE9E,CAAC,CAAA;AAED,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,yBAAyB,CAAA;AAAA,EAEzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAQ,MAAA,EAAmC;AAGtD,IAAA,IAAI,IAAA,CAAK,OAAO,YAAA,IAAgB,IAAA,CAAK,OAAO,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,EAAG;AACzE,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA;AAAA,IACjD;AAEA,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,sBAAsB,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,aAAA,CAAc,MAAc,KAAA,EAAoB;AACrD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,gBAAA,EAAmB,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAC1E,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,KAAA,CAAM,SAAA,CAAU,KAAK,MAAM,CAAA;AAC3B,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAA;AAAA,IAE1E;AAGA,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC3B,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,MAAa,WAAA,CAAY,IAAA,EAAc,MAAA,EAAiC;AAtN1E,IAAA,IAAA,EAAA,EAAA,EAAA;AAwNI,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,OAAA,KAAY,KAAA,EAAO;AACjC,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,wDAAwD,CAAA;AACtF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,wDAAwD,CAAA;AACtF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA,UAAA,CAAA;AAC3B,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA;AACpC,MAAA,MAAM,IAAI,MAAM,KAAK,CAAA;AAAA,IACvB;AAEA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAGtC,IAAA,IAAI,IAAA,CAAK,iBAAiB,SAAA,EAAW;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;AAE3D,IAAA,IAAI;AAEF,MAAA,IAAI,KAAK,YAAA,EAAc;AACrB,QAAA,MAAM,IAAA,CAAK,aAAa,IAAA,EAAK;AAC7B,QAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,WAAA,CAAY,IAAA,CAAK,YAAA,CAAA;AAAA,MAC9B;AAGA,MAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,QAAA,CAAS,IAAA,CAAK,YAAA,CAAA;AACzB,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA;AAGpC,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,gBAAA,EAAmB,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IAEjF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,gCAAA,EAAkC,KAAK,CAAA;AAAA,IACxE,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,eAAA,GAAgC;AACrC,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,SAAS,SAAA,EAA4B;AAE1C,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,OAAA,KAAY,KAAA,EAAO;AACjC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,CAAC,IAAA,CAAK,eAAA,EAAiB;AAC9C,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,SAAS,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,CAAC,YAAA,CAAa,QAAQ,CAAA,CAAE,OAAe,MAAA,EAAyB;AAC9D,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,KAAA,EAAO,MAAM,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAIO,OAAA,GAAgB;AAnTzB,IAAA,IAAA,EAAA;AAqTI,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,IAAA,CAAK,aAAa,IAAA,EAAK;AACvB,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,WAAA,CAAY,IAAA,CAAK,YAAA,CAAA;AAC5B,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AAAA,IACtB;AAGA,IAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAClB,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,yBAAyB,CAAA;AAAA,EACzD;AACF;AC9PO,IAAe,KAAA,GAAf,cAA6B,SAAA,CAAU;AAAA,EAG5C,YAAmB,SAAA,EAAmB;AACpC,IAAA,KAAA,EAAM;AADW,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAEjB,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AACb,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,EAC1B;AAAA,EANU,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBH,UAAU,MAAA,EAA0B;AACzC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,MAAM,MAAA,EAAiC;AAClD,IAAA,MAAM,KAAK,YAAA,EAAa;AACxB,IAAA,MAAM,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,IAAA,GAAsB;AACjC,IAAA,MAAM,KAAK,MAAA,EAAO;AAClB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAgB,YAAA,GAA8B;AAAA,EAE9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAgB,QAAQ,OAAA,EAAkC;AAExD,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAgB,MAAA,GAAwB;AAEtC,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBU,OAAA,GAAgB;AAAA,EAE1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,OAAO,UAAA,EAA0B;AAAA,EAIxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,QAAA,CAAS,QAAgB,OAAA,EAAuB;AAAA,EAGvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,QAAA,GAA6B;AAClC,IAAA,IAAI,OAAA,GAA4B,IAAA;AAEhC,IAAA,OAAO,OAAA,IAAW,QAAQ,MAAA,EAAQ;AAChC,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,IACpB;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AC7OO,IAAM,eAAN,MAA2C;AAAA,EACzC,IAAA,GAAe,cAAA;AAAA,EACf,QAAA,GAAmB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,eAAyB,EAAC;AAAA,EAEzB,OAAA,GAA6B,IAAA;AAAA,EAC7B,MAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAExB,YAAY,MAAA,EAA4B;AAEtC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,GAAA,EAAK;AAAA,KACP;AAGA,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAGjC,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAC9B;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,MAAA,EAA0B;AAC1C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAEf,IAAA,IAAI;AACF,MAAO,MAAA,CAAA,IAAA,CAAK;AAAA,QACV,GAAA,EAAK,KAAK,MAAA,CAAO,GAAA;AAAA;AAAA;AAAA,QAGjB,cAAA,EAAgB,IAAA;AAAA,QAChB,YAAA,EAAc;AAAA;AAAA,UAEL,MAAA,CAAA,yBAAA,CAA0B,EAAE,MAAA,EAAQ,CAAC,OAAO,OAAA,EAAS,MAAM,GAAG,CAAA;AAAA,UAC9D,MAAA,CAAA,yBAAA,EAA0B;AAAA,UAC1B,MAAA,CAAA,iBAAA,EAAkB;AAAA,UAClB,MAAA,CAAA,uBAAA;AAAwB,SACjC;AAAA,QACA,YAAA,EAAc;AAAA,UACZ,UAAA,EAAY;AAAA,SACd;AAAA,QACA,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,QAAA,IAAY,aAAA;AAAA;AAAA,QAErC,gBAAA,EAAkB,CAAA;AAAA;AAAA;AAAA,QAElB,uBAAA,EAAyB,CAAC,WAAW,CAAA;AAAA;AAAA,QAErC,wBAAA,EAA0B,GAAA;AAAA;AAAA,QAC1B,wBAAA,EAA0B,CAAA;AAAA;AAAA,QAC1B,WAAW,KAAA,EAAO;AAEhB,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,OACD,CAAA;AAED,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,MAAA,SAAA,CAAU,cAAc,CAAA,CAAE,IAAA,CAAK,uCAAA,EAAyC,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,IAE9F,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,cAAc,CAAA,CAAE,KAAA,CAAM,oCAAA,EAAsC,KAAK,CAAA;AAC3E,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,MAAA,EAA0B;AAEvC,IAAO,MAAA,CAAA,OAAA,CAAQ;AAAA,MACb,EAAA,EAAI;AAAA;AAAA,KAEL,CAAA;AAGD,IAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AACjC,IAAO,kBAAW,QAAA,EAAU;AAAA,MAC1B,WAAA,EAAa,OAAA;AAAA;AAAA,MACb,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QAC7B,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO;AAAA,OAChC;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,IAAA;AAAA,QAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS;AAAA;AACtC,KACD,CAAA;AAED,IAAA,SAAA,CAAU,cAAc,CAAA,CAAE,KAAA,CAAM,+BAA+B,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAA,CAAa,OAAc,KAAA,EAAmC;AACnE,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,SAAA,CAAU,cAAc,CAAA,CAAE,IAAA,CAAK,+CAAA,EAAiD,KAAK,CAAA;AACrF,MAAA;AAAA,IACF;AAEA,IAAO,MAAA,CAAA,SAAA,CAAU,CAAC,KAAA,KAAU;AAC1B,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,UAAA,CAAW,cAAc,KAAK,CAAA;AAAA,MACtC;AACA,MAAO,wBAAiB,KAAK,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,cAAA,CACL,OAAA,EACA,KAAA,GAA8B,MAAA,EAC9B,KAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,SAAA,CAAU,cAAc,CAAA,CAAE,IAAA,CAAK,iDAAA,EAAmD,OAAO,CAAA;AACzF,MAAA;AAAA,IACF;AAEA,IAAO,MAAA,CAAA,SAAA,CAAU,CAAC,KAAA,KAAU;AAC1B,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,UAAA,CAAW,cAAc,KAAK,CAAA;AAAA,MACtC;AACA,MAAO,MAAA,CAAA,cAAA,CAAe,SAAS,KAAK,CAAA;AAAA,IACtC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,aAAA,CACL,OAAA,EACA,QAAA,GAAmB,QAAA,EACnB,QAA8B,MAAA,EACxB;AACN,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA;AAAA,IACF;AAEA,IAAO,MAAA,CAAA,aAAA,CAAc;AAAA,MACnB,OAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KACzB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,SAAS,UAAA,EAA6B;AAE3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AAErB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,SAAA,CAAU,cAAc,CAAA,CAAE,IAAA,CAAK,yBAAyB,CAAA;AAAA,EAC1D;AAGF;;;ACkHO,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,SAAA,CAAA,GAAU,iBAAA;AACV,EAAAA,gBAAA,UAAA,CAAA,GAAW,kBAAA;AACX,EAAAA,gBAAA,SAAA,CAAA,GAAU,iBAAA;AACV,EAAAA,gBAAA,OAAA,CAAA,GAAQ,eAAA;AACR,EAAAA,gBAAA,SAAA,CAAA,GAAU,iBAAA;AACV,EAAAA,gBAAA,gBAAA,CAAA,GAAiB,iBAAA;AANP,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;AC/QL,IAAM,aAAA,GAAN,cAA4BD,YAAAA,CAAqC;AAAA,EAC/D,IAAA,GAAO,eAAA;AAAA,EACP,QAAA,GAAW,EAAA;AAAA,EACX,YAAA,GAAe,CAAC,gBAAgB,CAAA;AAAA,EAK/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAGA,QAAA,GAAmC,IAAA;AAAA;AAAA,EAGnC,WAAA,GAAiC,IAAA;AAAA,EAEzC,YAAY,MAAA,EAA6B;AACvC,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AAGtB,IAAA,IAAA,CAAK,QAAQ,EAAA,CAAA,iBAAA,gBAA2B,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,sCAA6B,CAAA;AAC9F,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA;AAAA,MAAA,kBAAA;AAAA,MAEX,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAA,EAAA,kBAAA;AAA6B,KACxD;AACA,IAAA,IAAA,CAAK,QAAQ,EAAA,CAAA,iBAAA,gBAA2B,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,sCAA6B,CAAA;AAC9F,IAAA,IAAA,CAAK,QAAQ,EAAA,CAAA,eAAA,cAAyB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,kCAA2B,CAAA;AAC1F,IAAA,IAAA,CAAK,QAAQ,EAAA,CAAA,iBAAA,gBAA2B,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,sCAA6B,CAAA;AAE9F,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,uBAAuB,CAAA;AAAA,EAEzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,WAAW,MAAA,EAAmC;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,2BAA2B,CAAA;AAAA,EAE7D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAQ,OAAA,EAAoC;AACvD,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAChC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,0BAA0B,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,QAAwB,IAAA,EAAqB;AAClE,IAAA,MAAM,YAAA,GAA6B;AAAA,MACjC,MAAA,EAAQ,IAAA;AAAA,MACR;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,YAAY,CAAA;AAE9B,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,KAAA,CAAM,CAAA,OAAA,EAAU,MAAM,IAAI,IAAI,CAAA;AAAA,EAE3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,UAAA,GAAuC;AAElD,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA;AAErD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAW;AAG/C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,cAAc,QAAA,CAAS,UAAA;AAE5B,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB;AAAA,MACjD,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,WAAW,QAAA,CAAS;AAAA,KACrB,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,IAAA,CAAK,MAAA,EAAgB,QAAA,EAAkB,UAAA,EAAgD;AAClG,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,sBAAsB,EAAE,QAAA,EAAU,YAAY,CAAA;AAE9E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK;AAAA,MACvC,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAS;AAAA,MACjC;AAAA,KACD,CAAA;AAED,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,wBAAA,EAA0B,QAAQ,CAAA;AAElE,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,UAAA,CAAW,KAAA,EAAgB,OAAA,EAA4C;AAElF,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,uBAAuB,EAAE,KAAA,EAAO,SAAS,CAAA;AAEzE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,OAAO,OAAO,CAAA;AAE7D,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB;AAAA,MACjD,OAAA,EAAS,SAAS,OAAA,CAAQ,MAAA;AAAA,MAC1B,aAAa,QAAA,CAAS;AAAA,KACvB,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,SAAS,OAAA,EAAwC;AAC5D,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,mBAAA,EAAqB,EAAE,SAAS,CAAA;AAEhE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,OAAO,CAAA;AAEpD,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,eAAA,EAAiB;AAAA,MAC/C,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,MAAM,QAAA,CAAS;AAAA,KAChB,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,UAAA,GAAwC;AAEnD,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA;AAErD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAW;AAE/C,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB;AAAA,MACjD,cAAc,QAAA,CAAS,YAAA;AAAA,MACvB,UAAU,QAAA,CAAS;AAAA,KACpB,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,OAAO,KAAA,EAA0C;AAE5D,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,mBAAA,EAAqB,EAAE,OAAO,CAAA;AAE9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAO,KAAK,CAAA;AAEhD,IAAA,SAAA,CAAU,eAAe,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB;AAAA,MACjD,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,WAAW,QAAA,CAAS;AAAA,KACrB,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAW,SAAA,GAAoB;AAC7B,IAAA,OAAO,KAAK,OAAA,CAAQ,SAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,OAAA,GAAkC;AAC3C,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAA,GAAgC;AACzC,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,cAAA,GAAiC;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF;AC5QO,IAAe,cAAA,GAAf,cAAsCA,YAAAA,CAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkE9C,UAAA,CAAW,QAAwB,IAAA,EAAqB;AAChE,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EACxB;AACF;;;ACvDO,IAAM,UAAA,GAAN,cAAyB,cAAA,CAAe;AAAA,EACrC,UAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EAER,YAAY,MAAA,EAA0B;AACpC,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC/C,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAO,cAAA,IAAkB,GAAA;AAG/C,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,wBAAA,EAA0B;AAAA,MACrD,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AAAA,EAEH;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,SAAA,GAAoB;AAC7B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAA,GAAuC;AAElD,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA;AAElD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAyB,OAAO,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,CAAA,CAAE,CAAA;AAEzF,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB,QAAQ,CAAA;AAGxD,IAAA,IAAA,CAAK,4CAAmC,QAAQ,CAAA;AAChD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,KAAK,OAAA,EAAqD;AACrE,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,mBAAA,EAAqB,OAAO,CAAA;AAEzD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAA0B,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,CAAA,KAAA,CAAA,EAAS,OAAO,CAAA;AAEzG,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,eAAA,EAAiB,QAAQ,CAAA;AAGtD,IAAA,IAAA,CAAK,8CAAoC,QAAQ,CAAA;AACjD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAA,CAAW,KAAA,EAAgB,OAAA,EAA4C;AAClF,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,uBAAuB,EAAE,KAAA,EAAO,SAAS,CAAA;AAGtE,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,IAAA,IAAI,UAAU,MAAA,EAAW,MAAA,CAAO,IAAI,UAAA,EAAY,KAAA,CAAM,UAAU,CAAA;AAChE,IAAA,IAAI,YAAY,MAAA,EAAW,MAAA,CAAO,IAAI,SAAA,EAAW,OAAA,CAAQ,UAAU,CAAA;AAEnE,IAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAS;AACpC,IAAA,MAAM,GAAA,GAAM,WAAA,GAAc,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,YAAY,WAAW,CAAA,CAAA,GAAK,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,CAAA,QAAA,CAAA;AAE5G,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAyB,OAAO,GAAG,CAAA;AAE/D,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB,QAAQ,CAAA;AAExD,IAAA,IAAA,CAAK,4CAAmC,QAAQ,CAAA;AAChD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,SAAS,OAAA,EAAwC;AAC5D,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,mBAAA,EAAqB,EAAE,SAAS,CAAA;AAE7D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,KAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAU,CAAA,OAAA,EAAU,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,KAClE;AAEA,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,eAAA,EAAiB,QAAQ,CAAA;AAEtD,IAAA,IAAA,CAAK,4CAAmC,QAAQ,CAAA;AAChD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAA,GAAwC;AACnD,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,qBAAqB,CAAA;AAGlD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAA0B,OAAO,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,CAAA,QAAA,CAAU,CAAA;AAElG,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB,QAAQ,CAAA;AAExD,IAAA,IAAA,CAAK,mDAA0C,QAAQ,CAAA;AACvD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,OAAO,KAAA,EAA0C;AAE5D,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,mBAAA,EAAqB,EAAE,OAAO,CAAA;AAE3D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAA0B,KAAA,EAAO,YAAY,IAAA,CAAK,UAAU,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,CAAA;AAE1G,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB,QAAQ,CAAA;AAExD,IAAA,IAAA,CAAK,8CAAoC,QAAQ,CAAA;AACjD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,OAAA,CAAW,MAAA,EAAgB,IAAA,EAAc,IAAA,EAA4B;AACjF,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAA,KAAW;AACzC,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,IAAI,CAAA,CAAA;AAClC,MAAA,MAAM,GAAA,GAAM,IAAI,cAAA,EAAe;AAE/B,MAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,GAAG,CAAA;AACpB,MAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,kBAAkB,CAAA;AACjD,MAAA,GAAA,CAAI,gBAAA,CAAiB,gBAAgB,kBAAkB,CAAA;AACvD,MAAA,GAAA,CAAI,UAAU,IAAA,CAAK,cAAA;AAEnB,MAAA,GAAA,CAAI,SAAS,MAAM;AACjB,QAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,GAAA,CAAI,SAAS,GAAA,EAAK;AACzC,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAc,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,YAAY,CAAA;AAE/C,YAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,qBAAqB,EAAE,GAAA,EAAK,UAAU,CAAA;AAEpE,YAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,UAClB,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,YAAA,GAA6B;AAAA,cACjC,IAAA,EAAM,GAAA;AAAA,cACN,OAAA,EAAS,0BAAA;AAAA,cACT,OAAO,GAAA,CAAI;AAAA,aACb;AACA,YAAA,IAAA,CAAK,wCAAiC,YAAY,CAAA;AAClD,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,0BAA0B,CAAC,CAAA;AAAA,UAC9C;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAI,YAAA;AACJ,UAAA,IAAI;AACF,YAAA,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,YAAY,CAAA;AAAA,UAC5C,CAAA,CAAA,MAAQ;AACN,YAAA,YAAA,GAAe;AAAA,cACb,MAAM,GAAA,CAAI,MAAA;AAAA,cACV,SAAS,GAAA,CAAI,UAAA;AAAA,cACb,OAAO,GAAA,CAAI;AAAA,aACb;AAAA,UACF;AACA,UAAA,IAAA,CAAK,wCAAiC,YAAY,CAAA;AAClD,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,YAAA,CAAa,OAAA,IAAW,GAAA,CAAI,UAAU,CAAA,CAAE,CAAC,CAAA;AAAA,QACnF;AAAA,MACF,CAAA;AAEA,MAAA,GAAA,CAAI,UAAU,MAAM;AAClB,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,KAAW,CAAA,GAAI,MAAA,GAAS,eAAA;AAC3C,QAAA,MAAM,YAAA,GAA6B;AAAA,UACjC,IAAA,EAAM,CAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AACA,QAAA,IAAA,CAAK,wCAAiC,YAAY,CAAA;AAClD,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MAC1B,CAAA;AAEA,MAAA,GAAA,CAAI,UAAU,MAAM;AAClB,QAAA,MAAM,YAAA,GAA6B;AAAA,UACjC,IAAA,EAAM,EAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AACA,QAAA,IAAA,CAAK,wCAAiC,YAAY,CAAA;AAClD,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA,MACrC,CAAA;AAEA,MAAA,GAAA,CAAI,YAAY,MAAM;AACpB,QAAA,MAAM,YAAA,GAA6B;AAAA,UACjC,IAAA,EAAM,GAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AACA,QAAA,IAAA,CAAK,4CAAmC,YAAY,CAAA;AACpD,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA,MACrC,CAAA;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,KAAA,CAAA;AAEjD,QAAA,SAAA,CAAU,YAAY,EAAE,KAAA,CAAM,iBAAA,EAAmB,EAAE,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,UAAA,EAAY,CAAA;AAElF,QAAA,GAAA,CAAI,KAAK,UAAU,CAAA;AAAA,MACrB,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,YAAA,GAA6B;AAAA,UACjC,IAAA,EAAM,GAAA;AAAA,UACN,OAAA,EAAS,wBAAA;AAAA,UACT,KAAA,EAAO,OAAO,KAAK;AAAA,SACrB;AACA,QAAA,IAAA,CAAK,wCAAiC,YAAY,CAAA;AAClD,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;;;ACjRA,IAAM,SAAA,GAAY,mCAAA;AAClB,IAAM,iBAAA,GAAoB,GAAA;AAE1B,IAAI,QAAA,GAA0B,IAAA;AAW9B,eAAsB,eAAA,CAAgB,OAAA,GAAkC,EAAC,EAAoB;AAC3F,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,OAAA,CAAQ,WAAA,IAAe,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AAChF,EAAA,MAAM,YAAY,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA,IAAK,MAAA,CAAO,IAAI,IAAI,CAAA;AAC3D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,QAAA,GAAW,SAAA;AACX,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,QAAA,GAAW,OAAA,CAAQ,QAAA;AACnB,IAAA,OAAO,OAAA,CAAQ,QAAA;AAAA,EACjB;AAEA,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,YAAY,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,iBAAiB,CAAA;AAExE,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,SAAA,EAAW,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA;AACrE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,QAAA,GAAW,IAAA,CAAK,EAAA;AAChB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,SAAS,CAAA;AAAA,EACxB;AACF;;;ACEO,IAAM,UAAA,GAAN,cAAyB,UAAA,CAAW;AAAA,EACjC,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAE1B,YAAY,MAAA,EAA0B;AAEpC,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG,MAAA;AAAA,MACH,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,EAAA;AACvB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AAG7D,IAAA,IAAA,CAAK,iBAAA,GAAoB;AAAA,MACvB,YACE,IAAA,CAAK,WAAA,CAAY,IAAI,YAAY,CAAA,IACjC,OAAO,UAAA,IACP,sCAAA;AAAA,MACF,UAAU,IAAA,CAAK,WAAA,CAAY,IAAI,UAAU,CAAA,IAAK,OAAO,QAAA,IAAY,cAAA;AAAA,MACjE,QACE,IAAA,CAAK,WAAA,CAAY,IAAI,QAAQ,CAAA,IAC7B,OAAO,MAAA,IACP,sCAAA;AAAA,MACF,SAAA,EAAW,OAAO,SAAA,CAAU,SAAA;AAAA,MAC5B,UAAU,IAAA,CAAK,WAAA,CAAY,IAAI,UAAU,CAAA,IAAK,OAAO,QAAA,IAAY;AAAA,KACnE;AACA,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,wBAAA,EAA0B,KAAK,iBAAiB,CAAA;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAsB,UAAA,GAAuC;AAE3D,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,MAAM,KAAK,aAAA,EAAc;AAAA,IAC3B;AAGA,IAAA,OAAO,MAAM,UAAA,EAAW;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA0C;AACtD,IAAA,MAAM,EAAA,GAAK,MAAM,eAAA,CAAgB;AAAA,MAC/B,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAED,IAAA,MAAM,cAAA,GAAuC;AAAA,MAC3C,GAAG,IAAA,CAAK,iBAAA;AAAA,MACR;AAAA,KACF;AAEA,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAC,CAAA,QAAA,CAAA;AAE9B,IAAA,SAAA,CAAU,YAAY,EAAE,IAAA,CAAK,qBAAA,EAAuB,EAAE,GAAA,EAAK,IAAA,EAAM,gBAAgB,CAAA;AAEjF,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,MAAM,OAAA,GAAU,IAAI,cAAA,EAAe;AACnC,MAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,GAAG,CAAA;AACxB,MAAA,OAAA,CAAQ,gBAAA,CAAiB,gBAAgB,kBAAkB,CAAA;AAC3D,MAAA,OAAA,CAAQ,OAAA,GAAU,KAAK,gBAAgB,CAAA;AAEvC,MAAA,OAAA,CAAQ,SAAS,MAAM;AACrB,QAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,GAAA,IAAO,OAAA,CAAQ,SAAS,GAAA,EAAK;AACjD,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAA4B,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA;AAGjE,YAAA,IAAA,CAAK,YAAY,IAAI,QAAA,CAAS,SAAA;AAC9B,YAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAEvB,YAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,iBAAA,EAAmB;AAAA,cAC9C,WAAW,QAAA,CAAS,SAAA;AAAA,cACpB,OAAO,QAAA,CAAS;AAAA,aACjB,CAAA;AAED,YAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,UAClB,SAAS,KAAA,EAAO;AACd,YAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,kCAAA,EAAoC,KAAK,CAAA;AACvE,YAAA,MAAA,CAAO,KAAK,CAAA;AAAA,UACd;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,WAAW,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA,EAAA,EAAK,QAAQ,YAAY,CAAA,CAAA;AAChE,UAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,0BAAA,EAA4B,QAAQ,CAAA;AAClE,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,QAC5B;AAAA,MACF,CAAA;AAEA,MAAA,OAAA,CAAQ,UAAU,MAAM;AACtB,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,MAAA,GAAS,eAAA;AAC/C,QAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,gCAAA,EAAmC,MAAM,CAAA,CAAA,CAAG,CAAA;AAC1E,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MAC1B,CAAA;AAEA,MAAA,OAAA,CAAQ,YAAY,MAAM;AACxB,QAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,0BAA0B,CAAA;AACxD,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA,MACrC,CAAA;AAEA,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA;AAAA,MAC7C,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,uCAAA,EAAyC,KAAK,CAAA;AAC5E,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;AC3FO,IAAM,IAAA,GAAN,cAA4BA,YAAAA,CAAgD;AAAA,EACzE,IAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,EAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAER,WAAA,CAAY,SAAyB,MAAA,EAAa;AAChD,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,YAAA,IAAgB,MAAA,CAAO,KAAK,IAAA,CAAK,IAAI,EAAE,CAAC,CAAA;AACpE,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,EAAA,GAAK,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,SAAS,SAAA,EAAyB;AA/GpC,IAAA,IAAA,EAAA,EAAA,EAAA;AAgHI,IAAA,MAAM,WAAW,IAAA,CAAK,YAAA;AACtB,IAAA,IAAI,QAAA,GAAW,SAAA;AAGf,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG;AACzB,MAAA,QAAA,GAAW,IAAA,CAAK,YAAA;AAGhB,MAAA,IAAA,CAAI,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,MAAA,KAAb,mBAAqB,SAAA,EAAW;AAClC,QAAA,SAAA,CAAU,MAAM,CAAA,CAAE,IAAA;AAAA,UAChB,CAAA,OAAA,EAAU,SAAS,CAAA,yDAAA,EAA4D,IAAA,CAAK,YAAY,CAAA,CAAA;AAAA,SAClG;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AAEpB,MAAA,IAAA,CAAK,KAAK,cAAA,EAAgB;AAAA,QACxB,IAAA,EAAM,IAAA;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,aAAA,GAA6B;AAnK/B,IAAA,IAAA,EAAA;AAoKI,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA;AAI/C,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,UAAA,GAAa,WAAA;AAAA,IACf,CAAA,MAAA,IAAW,CAAC,WAAA,EAAa;AACvB,MAAA,UAAA,GAAa,WAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,UAAA,GAAa,KAAA,CAAM,EAAC,EAAG,WAAA,EAAa,WAAW,CAAA;AAAA,IACjD;AAGA,IAAA,MAAM,YAAA,GAAA,CAAA,CAAe,UAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,oBAC9B,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,UAAU,CAAA,GACvC,UAAA;AAGJ,IAAA,OAAO,MAAA,CAAO,OAAO,YAAY,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAA+B,GAAA,EAA0B;AACvD,IAAA,MAAM,gBAAA,GAAmB,KAAK,aAAA,EAAc;AAC5C,IAAA,OAAO,gBAAA,GAAmB,gBAAA,CAAiB,GAAG,CAAA,GAAI,MAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,SAAA,EAA4B;AACnC,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAA,GAAgB;AAvOlB,IAAA,IAAA,EAAA;AAyOI,IAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAGrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAGxB,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,mBAAa,cAAA,CAAe,IAAA,CAAA;AAAA,EAC9B;AACF;;;AClEO,IAAM,aAAN,MAAyC;AAAA,EACvC,IAAA,GAAe,YAAA;AAAA,EACf,QAAA,GAAmB,EAAA;AAAA,EACnB,eAAyB,EAAC;AAAA,EAEzB,KAAA,uBAAoC,GAAA,EAAI;AAAA,EACxC,SAAA,uBAAmE,GAAA,EAAI;AAAA,EACvE,WAAA,GAAsB,EAAA;AAAA,EACtB,MAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,aAAkC,EAAC;AAAA,EAE3C,WAAA,CAAY,MAAA,GAA2B,EAAC,EAAG;AACzC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,WAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAa,IAAA;AAAA,MACb,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EAEA,MAAa,WAAW,MAAA,EAAmC;AACzD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,oCAAA,EAAsC,KAAK,MAAM,CAAA;AAAA,EAEhF;AAAA,EAEO,QAAQ,MAAA,EAA0B;AACvC,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACrD;AAAA,EAEO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,IAAA,CAAK,uBAAuB,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,WACL,OAAA,EACqD;AACrD,IAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,IAAA;AAErC,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa;AACvC,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAClE,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAE1C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,QAAA,EAAA;AACP,QAAA,SAAA,CAAU,YAAY,EAAE,KAAA,CAAM,CAAA,qBAAA,EAAwB,QAAQ,CAAA,YAAA,EAAe,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,CAAA;AAE/F,QAAA,MAAME,KAAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,MAAM,CAAA;AACzC,QAAA,OAAO,EAAE,IAAA,EAAMA,KAAAA,EAAiB,QAAQ,MAAA,CAAO,MAAA,EAAQ,QAAQ,IAAA,EAAK;AAAA,MACtE;AAEA,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,IAAA,CAAK,sBAAyB,OAAO,CAAA;AAC9D,MAAA,IAAA,CAAK,UAAU,GAAA,CAAI,QAAA,EAAU,EAAE,MAAA,EAAQ,QAAA,EAAU,GAAG,CAAA;AAEpD,MAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAA;AAExE,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM;AAAA,IACvC;AAEA,IAAA,OAAO,IAAA,CAAK,sBAAyB,OAAO,CAAA;AAAA,EAC9C;AAAA,EAEQ,sBAAyB,OAAA,EAA4D;AAC3F,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAQ,OAAA,EAAS,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,WAAW,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACrC,IAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,EACxB;AAAA,EAEO,aAAa,IAAA,EAAyB;AAC3C,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAC3B,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAE,CAAA;AAE1D,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,eAAe,IAAA,EAAgC;AACpD,IAAA,MAAM,SAAS,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,KAAK,KAAA,EAAM;AAC5D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACxC,IAAA,IAAI,SAAS,SAAA,CAAU,YAAY,EAAE,KAAA,CAAM,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAE,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,SAAS,SAAA,EAAyB;AACvC,IAAA,IAAA,CAAK,WAAA,GAAc,SAAA;AAGnB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC3B,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5B,QAAA,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA,MACzB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,SAAA,CAAU,YAAY,EAAE,IAAA,CAAK,CAAA,eAAA,EAAkB,SAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,MAAA,CAAQ,CAAA;AAAA,EAEzF;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEO,YAAA,GAAuB;AAC5B,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA,EAEO,WAAA,GAA2B;AAChC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAAA,EACvC;AAAA,EAEO,aAAA,GAAsB;AAC3B,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACnD;AAAA,EAEO,YAAY,EAAA,EAAmC;AACpD,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AAAA,EAC1B;AAAA,EAuBO,aAAA,CAAc,YAA0C,KAAA,EAAmB;AAChF,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACC,KAAAA,EAAM,GAAG,CAAA,KAAM;AAClD,QAAA,IAAA,CAAK,aAAA,CAAcA,OAAM,GAAG,CAAA;AAAA,MAC9B,CAAC,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,UAAA;AACb,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,YAAY,IAAI,CAAA;AAG7D,IAAA,IAAI,aAAa,KAAA,EAAO;AAExB,IAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,IAAA,EAAM,KAAK,CAAA;AAEnD,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,iBAAA,EAAoB,IAAI,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAE,CAAA;AAGnF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,sBAAA,CAAuB,IAAI,CAAA;AAGtD,IAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC9B,MAAA,IAAA,CAAK,KAAK,cAAA,EAAgB;AAAA,QACxB,IAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,cAAc,IAAA,EAAoB;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,IAAA,CAAK,UAAA;AACvB,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,IAAI,CAAA;AAAA,EACrD;AAAA,EAEO,eAAA,GAAwB;AAC7B,IAAA,IAAA,CAAK,aAAa,EAAC;AACnB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAAA,EACzD;AAAA,EAEO,UAAA,GAAmB;AACxB,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,SAAA,CAAU,YAAY,CAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA;AAAA,EACpD;AAAA,EAEO,aAAA,GAAqG;AAC1G,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,MAAO;AAAA,MAC1E,GAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,UAAU,KAAA,CAAM;AAAA,KAClB,CAAE,CAAA;AACF,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAM,OAAA,EAAQ;AAAA,EAC9C;AAAA,EAEQ,iBAAiB,OAAA,EAAmC;AAC1D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,sBAAA,CAAuB,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC9D,IAAA,OAAO,IAAA,CAAK,WAAW,UAAU,CAAA;AAAA,EACnC;AAAA,EAEQ,sBAAA,CAAuB,GAAA,EAAU,KAAA,GAAgB,CAAA,EAAW;AAElE,IAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,QAAA;AAEvB,IAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,MAAA;AACzB,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,WAAA;AAC9B,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAA,CAAK,UAAU,GAAG,CAAA;AAGtD,IAAA,MAAM,eAAA,GAAkB,IAAI,WAAA,IAAe,GAAA,CAAI,gBAAgB,MAAA,IAAU,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAC3F,IAAA,IAAI,eAAA,EAAiB;AAEnB,MAAA,OAAO,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,CAAA,CAAA,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,MAAA,MAAMC,SAAkB,EAAC;AACzB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,QAAAA,MAAAA,CAAM,KAAK,IAAA,CAAK,sBAAA,CAAuB,IAAI,CAAC,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,MAC3D;AACA,MAAA,OAAO,GAAA,GAAMA,MAAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,GAAA;AAAA,IACjC;AAEA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACnC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,GAAG,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,IACzF;AACA,IAAA,OAAO,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,GAAA;AAAA,EACjC;AAAA,EAEQ,WAAW,GAAA,EAAqB;AACtC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC7B,MAAA,IAAA,GAAA,CAAQ,IAAA,IAAQ,KAAK,IAAA,GAAO,IAAA;AAC5B,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,QAAQ,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAAA,EAC5C;AAAA;AAAA,EAGO,iBAAoB,QAAA,EAAgB;AACzC,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAAA,EACxD;AAAA;AAAA,EAGQ,iBAAA,CAAkB,GAAA,EAAU,IAAA,EAAc,KAAA,EAAkB;AAClE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,OAAA,GAAU,GAAA;AAEd,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,IAAI,EAAE,GAAA,IAAO,OAAA,CAAA,IAAY,OAAO,OAAA,CAAQ,GAAG,MAAM,QAAA,EAAU;AACzD,QAAA,OAAA,CAAQ,GAAG,IAAI,EAAC;AAAA,MAClB;AACA,MAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,IACvB;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,KAAA;AAAA,EACnC;AAAA;AAAA,EAGQ,iBAAA,CAAkB,KAAU,IAAA,EAAmB;AACrD,IAAA,OAAO,KAAK,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AAC9C,MAAA,OAAO,WAAW,OAAA,CAAQ,GAAG,MAAM,MAAA,GAAY,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAAA,IAChE,GAAG,GAAG,CAAA;AAAA,EACR;AAAA;AAAA,EAGQ,gBAAA,CAAoB,KAAQ,UAAA,EAAoC;AACtE,IAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,GAAA;AAI5C,IAAA,IAAI,GAAA,CAAI,WAAA,KAAgB,MAAA,IAAU,GAAA,CAAI,gBAAgB,KAAA,EAAO;AAC3D,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,MAAA,OAAO,GAAA,CAAI,IAAI,CAAC,IAAA,KAAS,KAAK,gBAAA,CAAiB,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,SAAc,EAAC;AAErB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAE9E,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACtC,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,UAAA,EAAY,YAAY,CAAA;AACrE,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,aAAA,KAAkB,MAAA,GAAY,aAAA,GAAgB,KAAA;AAAA,MAC9D,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AAEpC,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGQ,uBAAuB,YAAA,EAAmC;AAChE,IAAA,MAAM,gBAA6B,EAAC;AACpC,IAAA,MAAM,cAAA,GAAiB,MAAM,YAAY,CAAA,CAAA,CAAA;AAEzC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC3B,MAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,cAAc,CAAA,EAAG;AAC/C,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,MACzB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA,EAGQ,gBAAA,CAAiB,MAAiB,cAAA,EAAiC;AACzE,IAAA,MAAM,WAAY,IAAA,CAAa,IAAA;AAC/B,IAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,cAAc,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGQ,sBAAA,CAAuB,KAAU,cAAA,EAAiC;AACxE,IAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,KAAA;AAE5C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,MAAA,OAAO,GAAA,CAAI,KAAK,CAAC,IAAA,KAAS,KAAK,sBAAA,CAAuB,IAAA,EAAM,cAAc,CAAC,CAAA;AAAA,IAC7E;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,EAAG;AACtC,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,cAAA,EAAgB;AACzD,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,QAAA,IAAI,IAAA,CAAK,sBAAA,CAAuB,KAAA,EAAO,cAAc,CAAA,EAAG;AACtD,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAGF;AC3fO,IAAM,cAAN,MAA0C;AAAA,EACxC,IAAA,GAAe,aAAA;AAAA,EACf,QAAA,GAAmB,EAAA;AAAA,EACnB,YAAA,GAAyB,CAAC,gBAAgB,CAAA;AAAA,EAEzC,MAAA;AAAA;AAAA,EAGA,cAAA,uBAAuD,GAAA,EAAI;AAAA;AAAA,EAG3D,QAAA,uBAAiD,GAAA,EAAI;AAAA;AAAA,EAGrD,gBAAA,uBAAsD,GAAA,EAAI;AAAA;AAAA,EAG1D,eAAA,uBAAiD,GAAA,EAAI;AAAA;AAAA,EAGrD,aAAA,GAAwB,CAAA;AAAA;AAAA,EAGxB,SAAA,GAAqB,KAAA;AAAA;AAAA,EAGrB,cAAA,uBAAiE,GAAA,EAAI;AAAA;AAAA,EAGrE,mBAAA,uBAAuD,GAAA,EAAI;AAAA;AAAA,EAG3D,mBAAA,uBAAoD,GAAA,EAAI;AAAA;AAAA,EAGxD,cAAA,uBAA0C,GAAA,EAAI;AAAA;AAAA,EAG9C,cAAA,uBAAoD,GAAA,EAAI;AAAA,EAEhE,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,YAAA,EAAc,CAAA;AAAA,MACd,UAAA,EAAY,IAAA;AAAA,MACZ,gBAAA,EAAkB,KAAA;AAAA,MAClB,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAK,cAAc,CAAA,EAAE;AAAA,QACtC,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAK,cAAc,CAAA,EAAE;AAAA,QACtC,GAAA,EAAK,EAAE,MAAA,EAAQ,CAAA,EAAK,cAAc,EAAA,EAAG;AAAA,QACrC,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA,EAAK,cAAc,CAAA;AAAE,OACrC;AAAA,MACA,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,YAAA,IAAgB,CAAA;AAAA,EACnD;AAAA,EAEA,MAAa,WAAW,OAAA,EAAoC;AAE1D,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAGxB,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,CAAe,gBAAgB,CAAA;AAC9D,IAAA,IAAI,iDAAgB,oBAAA,EAAsB;AACxC,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,eAAe,oBAAA,EAAsB;AAClE,QAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,OAAuB,CAAA;AAAA,MACzD;AACA,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,qDAAA,EAAuD;AAAA,QACpF,KAAA,EAAO,KAAK,eAAA,CAAgB,IAAA;AAAA,QAC5B,QAAA,EAAU,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,eAAe;AAAA,OAClD,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB;AACjC,MAAA,KAAA,CAAM,gBAAA,GAAmB,KAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,gBAAA,GAAmB,IAAA;AAAA,IAC3B;AAGA,IAAA,KAAA,CAAM,YAAY,IAAA,CAAK,aAAA;AAGvB,IAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AAC1B,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB;AAEA,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,yBAAA,EAA2B;AAAA,MACvD,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,MACzC,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,UAAA,EAAY,KAAK,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AAAA,EAEO,QAAQ,OAAA,EAA2B;AACxC,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,EACvD;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAC/B,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,CAAC,KAAA,KAAU,YAAA,CAAa,KAAK,CAAC,CAAA;AAC1D,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,wBAAwB,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAA,GAA2B;AACjC,IAAA,MAAM,eAAA,GAAuD;AAAA,MAC3D,KAAA,EAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,cAAc,CAAA,EAAE;AAAA,MACtC,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAK,cAAc,CAAA,EAAE;AAAA,MACtC,GAAA,EAAK,EAAE,MAAA,EAAQ,GAAA,EAAK,cAAc,EAAA,EAAG;AAAA,MACrC,EAAA,EAAI,EAAE,MAAA,EAAQ,GAAA,EAAK,cAAc,CAAA;AAAE,KACrC;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,EAAC;AAEhD,IAAA,KAAA,MAAW,WAAW,CAAC,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,EAAqB;AACvE,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,GAAG,gBAAgB,OAAO,CAAA;AAAA,QAC1B,GAAG,eAAe,OAAO;AAAA,OAC3B;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,GAAwB;AAC9B,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,IAAI,KAAK,SAAA,EAAW;AAGpB,MAAA,IAAI,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,YAAA,EAAc;AAC/C,QAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,YAAA;AAC1B,QAAA,IAAI,GAAA,CAAI,UAAU,WAAA,EAAa;AAC7B,UAAA,GAAA,CAAI,MAAA,EAAO,CAAE,IAAA,CAAK,MAAM;AACtB,YAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,YAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,uBAAuB,CAAA;AAAA,UACvD,CAAC,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,QACnB;AAAA,MACF;AAGA,MAAA,QAAA,CAAS,mBAAA,CAAoB,YAAA,EAAc,MAAA,EAAQ,IAAI,CAAA;AACvD,MAAA,QAAA,CAAS,mBAAA,CAAoB,UAAA,EAAY,MAAA,EAAQ,IAAI,CAAA;AACrD,MAAA,QAAA,CAAS,mBAAA,CAAoB,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAClD,MAAA,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,MAAA,EAAQ,IAAI,CAAA;AAAA,IACtD,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,YAAA,EAAc,MAAA,EAAQ,IAAI,CAAA;AACpD,IAAA,QAAA,CAAS,gBAAA,CAAiB,UAAA,EAAY,MAAA,EAAQ,IAAI,CAAA;AAClD,IAAA,QAAA,CAAS,gBAAA,CAAiB,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAC/C,IAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,EAAW,MAAA,EAAQ,IAAI,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,UAAA,CACL,UAAA,EACA,OAAA,EACA,OAAA,EACM;AACN,IAAA,MAAM,aAAA,GAAgBC,MAAAA,CAAO,GAAA,CAAW,UAAU,CAAA;AAElD,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,iBAAA,EAAoB,UAAU,CAAA,8BAAA,CAAgC,CAAA;AAC5F,MAAA;AAAA,IACF;AAGA,IAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAGhC,IAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,cAAA,CAAe,IAAI,SAAA,EAAW;AAAA,QACjC,UAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAAA,MAC7C;AAAA,IACF;AAEA,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,MAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAM,CAAA,YAAA,EAAe,UAAU,CAAA,CAAA,EAAI;AAAA,MAC9F,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,kBAAA,CACX,UAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAQ,CAAA;AACrC,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,MAAA,IAAA,CAAK,UAAA,CAAW,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,4BAAA,EAA+B,QAAQ,IAAI,KAAK,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,UAAA,CAAW,OAAe,OAAA,EAA6B;AAC5D,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAa,IAAA,CAAK,KAAA,EAAe,OAAA,GAAuB,EAAC,EAAmC;AAlU9F,IAAA,IAAA,EAAA,EAAA,EAAA;AAoUI,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,iBAAA,EAAmB;AAC9C,MAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,IAC9B;AAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAEhD,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,SAAA;AAEJ,IAAA,MAAM,YAAA,GAAe,UAAA,GAAa,UAAA,CAAW,UAAA,GAAa,KAAA;AAE1D,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,SAAA,GAAY,UAAA,CAAW,SAAA;AAAA,IACzB;AAGA,IAAA,aAAA,GAAgBA,MAAAA,CAAO,IAAW,YAAY,CAAA;AAC9C,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAE,CAAA;AACpE,QAAA,aAAA,GAAgB,MAAMA,MAAAA,CAAO,IAAA,CAAY,YAAY,CAAA;AAAA,MACvD,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,iBAAA,EAAoB,KAAK,IAAI,KAAK,CAAA;AAChE,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,WAAU,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA,KAAW,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AACrE,IAAA,MAAM,gBAAgB,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA;AAC7D,IAAA,MAAM,aAAA,GAAA,CAAgB,+CAAe,MAAA,KAAU,CAAA;AAC/C,IAAA,MAAM,YAAA,GAAA,CAAe,+CAAe,YAAA,KAAgB,EAAA;AAGpD,IAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,IAAU,CAAA;AACrC,IAAA,MAAM,OAAA,GAAA,CAAU,+CAAe,KAAA,KAAS,KAAA;AACxC,IAAA,MAAM,WAAA,GAAc,OAAA,GAAU,CAAA,GAAI,UAAA,GAAa,aAAA;AAG/C,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAA,EAAO,UAAU,CAAA;AAGzC,IAAA,MAAM,mBAAmB,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,KAAK,EAAC;AAC9D,IAAA,IAAI,gBAAA,CAAiB,UAAU,YAAA,EAAc;AAE3C,MAAA,MAAM,MAAA,GAAS,iBAAiB,KAAA,EAAM;AACtC,MAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,IAAA,EAAA;AAAA,IACV;AAGA,IAAA,MAAM,eAAA,GAAkB,QAAQ,YAAA,KAAiB,MAAA;AAGjD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAAA,IAC/B;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAmB;AAAA,QACvB,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,eAAA,GAAkB,KAAA,GAAS,OAAA,CAAQ,IAAA,IAAQ,KAAA;AAAA,QACjD,KAAA,EAAO,QAAQ,KAAA,IAAS,CAAA;AAAA,QACxB,UAAU,OAAA,CAAQ;AAAA,OACpB;AAEA,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,CAAA,EAAW;AAC/B,QAAA,WAAA,CAAY,QAAQ,OAAA,CAAQ,KAAA;AAAA,MAC9B;AACA,MAAA,IAAI,OAAA,CAAQ,QAAQ,KAAA,CAAA,EAAW;AAC7B,QAAA,WAAA,CAAY,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B;AAEA,MAAA,IAAI,QAAA;AAEJ,MAAA,IAAI,SAAA,EAAW;AAEb,QAAA,WAAA,CAAY,MAAA,GAAS,SAAA;AAAA,MACvB;AAEA,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,IAAA,CAAK,WAAW,CAAA;AAGjD,MAAA,MAAM,YAAY,UAAA,YAAsB,OAAA;AACxC,MAAA,MAAM,aAAA,GAAA,CAAgB,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,iBAAf,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6B,KAAA;AACnD,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,CAAA,CAAA,EAAI;AAAA,QAClE,SAAA;AAAA,QACA,iBAAA,EAAmB,aAAA;AAAA,QACnB,UAAA,EAAY,SAAA,GAAY,SAAA,GAAY,OAAO,UAAA;AAAA,QAC3C,aAAA;AAAA,QACA,SAAA,EAAW,CAAC,SAAA,IAAa,QAAQ,yCAAoB,MAAA,CAAA,KAAW;AAAA,OACjE,CAAA;AAED,MAAA,QAAA,GAAW,UAAA;AAGX,MAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA,EAAG;AACrC,QAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,MACrC;AACA,MAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA,CAAG,KAAK,QAAQ,CAAA;AAG/C,MAAA,MAAM,YAAY,OAAA,CAAQ,KAAA;AAC1B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,UAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,SAAA,EAAW,EAAE,CAAA;AAAA,QACvC;AACA,QAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,CAAG,KAAK,QAAQ,CAAA;AAAA,MACnD;AAGA,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA;AAE5C,QAAA,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA;AAAA,MAC7C;AAGA,MAAA,MAAM,kBAAkB,MAAM;AAC5B,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACjD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA;AACtC,UAAA,IAAI,QAAQ,CAAA,CAAA,EAAI;AACd,YAAA,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACzB;AAAA,QACF;AAGA,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA;AACpD,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,MAAM,IAAA,GAAO,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA;AACxC,YAAA,IAAI,SAAS,CAAA,CAAA,EAAI;AACf,cAAA,UAAA,CAAW,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA;AAGA,MAAA,QAAA,CAAS,IAAA,CAAK,OAAO,MAAM;AACzB,QAAA,eAAA,EAAgB;AAGhB,QAAA,IAAI,eAAA,IAAmB,KAAK,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA,KAAM,QAAA,IAAY,OAAA,CAAQ,YAAA,KAAiB,KAAA,CAAA,EAAW;AAC7G,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,YAAY,CAAA;AACxD,UAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,YAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,YAAA,IAAI,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA,EAAG;AACvC,cAAA,IAAA,CAAK,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,YAC1B;AAAA,UACF,GAAG,KAAK,CAAA;AACR,UAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAAA,QACtC;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,eAAe,CAAA;AAErC,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAK,IAAI,KAAK,CAAA;AACtE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,KAAA,EAAqB;AACpC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC/C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,MAAM,CAAA;AACvC,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,KAAA,EAAqB;AAEpC,IAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,KAAK,CAAA;AACrC,IAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,KAAK,CAAA;AACrC,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,IAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAE7B,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACjD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,CAAS,MAAM,CAAA;AAC/C,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,IACpC;AAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,MAAM,UAAA,GAAA,CAAa,yCAAY,UAAA,KAAc,KAAA;AAC7C,IAAA,MAAM,aAAA,GAAgBA,MAAAA,CAAO,GAAA,CAAW,UAAU,CAAA;AAClD,IAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,IAAA,EAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,OAAA,EAA6B;AAC9C,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAClD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AACnD,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,MAAA,MAAM,gBAAA,GAAA,CAAmB,yCAAY,OAAA,KAAW,YAAA;AAEhD,MAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,CAAS,MAAM,CAAA;AAC/C,QAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,KAAK,CAAA;AACrC,QAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,KAAK,CAAA;AACrC,QAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAC7B,QAAA,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,MAC5B;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,eAAA,CAAgB,QAAQ,CAAC,KAAA,KAAU,KAAK,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AAErB,IAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAC/B,IAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAC/B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,CAAC,KAAA,KAAU,YAAA,CAAa,KAAK,CAAC,CAAA;AAC1D,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAE1B,IAAA,KAAA,CAAM,OAAA,EAAQ;AACd,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,MAAM,KAAA,EAAqB;AAChC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,MAAM,UAAA,GAAA,CAAa,yCAAY,UAAA,KAAc,KAAA;AAC7C,IAAA,MAAM,aAAA,GAAgBA,MAAAA,CAAO,GAAA,CAAW,UAAU,CAAA;AAClD,IAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,KAAA,EAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,KAAA,EAAqB;AACjC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,MAAM,UAAA,GAAA,CAAa,yCAAY,UAAA,KAAc,KAAA;AAC7C,IAAA,MAAM,aAAA,GAAgBA,MAAAA,CAAO,GAAA,CAAW,UAAU,CAAA;AAClD,IAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,EAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,MAAA,CAAO,KAAA,EAAe,QAAA,EAAkB,OAAA,GAAuB,EAAC,EAAkB;AAC7F,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,EAAE,GAAG,SAAS,CAAA;AACtD,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,QAAA,CAAS,MAAA,GAAS,CAAA;AAElB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,MAAM,WAAU,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA,KAAW,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AACrE,IAAA,MAAM,YAAA,GAAe,QAAQ,MAAA,IAAU,CAAA;AAGvC,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,CAAA,EAAE;AAEzB,IAAAC,KAAAA,CAAK,GAAG,KAAA,EAAO;AAAA,MACb,KAAA,EAAO,YAAA;AAAA,MACP,QAAA;AAAA,MACA,IAAA,EAAM,YAAA;AAAA,MACN,UAAU,MAAM;AAEd,QAAA,MAAM,gBAAgB,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA;AAC7D,QAAA,MAAM,OAAA,GAAA,CAAU,+CAAe,KAAA,KAAS,KAAA;AACxC,QAAA,MAAM,aAAA,GAAA,CAAgB,+CAAe,MAAA,KAAU,CAAA;AAE/C,QAAA,QAAA,CAAS,MAAA,GAAS,OAAA,GAAU,CAAA,GAAI,KAAA,CAAM,KAAA,GAAQ,aAAA;AAAA,MAChD;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,OAAA,CAAQ,KAAA,EAAe,QAAA,EAAkB,YAAqB,IAAA,EAAqB;AAC9F,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACjD,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAE1C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,MAAM,WAAU,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA,KAAW,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAErE,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa;AAE3C,MAAA,MAAM,cAAc,QAAA,CAAS,MAAA;AAE7B,MAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAEpC,QAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,CAAA,EAAE;AAEzB,QAAAA,KAAAA,CAAK,GAAG,KAAA,EAAO;AAAA,UACb,KAAA,EAAO,CAAA;AAAA,UACP,QAAA;AAAA,UACA,IAAA,EAAM,WAAA;AAAA,UACN,UAAU,MAAM;AAEd,YAAA,MAAM,gBAAgB,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA;AAC7D,YAAA,MAAM,OAAA,GAAA,CAAU,+CAAe,KAAA,KAAS,KAAA;AACxC,YAAA,MAAM,aAAA,GAAA,CAAgB,+CAAe,MAAA,KAAU,CAAA;AAE/C,YAAA,QAAA,CAAS,MAAA,GAAS,OAAA,GAAU,CAAA,GAAI,WAAA,GAAc,MAAM,KAAA,GAAQ,aAAA;AAAA,UAC9D,CAAA;AAAA,UACA,YAAY,MAAM;AAChB,YAAA,IAAI,SAAA,EAAW;AACb,cAAA,QAAA,CAAS,IAAA,EAAK;AAAA,YAChB;AACA,YAAA,OAAA,EAAQ;AAAA,UACV;AAAA,SACD,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAE1B,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,SAAA,CACX,SAAA,EACA,SACA,QAAA,EACA,OAAA,GAAuB,EAAC,EACT;AACf,IAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChB,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,QAAQ,CAAA;AAAA,MAChC,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,QAAA,EAAU,OAAO;AAAA,KACvC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,cAAA,CAAe,OAAA,EAAuB,QAAA,EAAiC;AAClF,IAAA,MAAM,mBAA6B,EAAC;AAEpC,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAClD,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAE5B,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AACnD,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,MAAA,MAAM,gBAAA,GAAA,CAAmB,yCAAY,OAAA,KAAW,YAAA;AAEhD,MAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,QAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAAA,MAC7B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AAEnC,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,gBAAA,CAAiB,GAAA,CAAI,CAAC,KAAA,KAAU,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,IAAI,CAAC,CAAC,CAAA;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAa,OAAA,CACX,KAAA,EACA,QAAA,EACA,OAAA,GAA0B,EAAC,EACK;AAChC,IAAA,MAAM,EAAE,iBAAiB,IAAA,GAAO,WAAA,EAAa,SAAS,eAAA,EAAiB,GAAG,aAAY,GAAI,OAAA;AAG1F,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,MAAM,UAAU,eAAA,KAAmB,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,YAAW,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAExF,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,qCAAA,EAAwC,KAAK,CAAA,CAAA,CAAG,CAAA;AAC9E,MAAA,OAAO,KAAK,MAAA,CAAO,KAAA,EAAO,UAAU,WAAW,CAAA,CAAE,KAAK,MAAM;AAC1D,QAAA,MAAMC,UAAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACjD,QAAA,OAAA,CAAOA,UAAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,UAAAA,CAAYA,UAAAA,CAAU,SAAS,CAAA,CAAA,KAAM,IAAA;AAAA,MAC9C,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,cAAc,eAAA,IAAmB,QAAA;AAEvC,IAAA,IAAI,SAAS,YAAA,EAAc;AAEzB,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,WAAW,CAAA;AAC9C,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,WAAW,CAAA;AAAA,IAChD,CAAA,MAAO;AAEL,MAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChB,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,WAAW,CAAA;AAAA,QACxC,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,WAAW;AAAA,OACzC,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACjD,IAAA,OAAA,CAAO,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAY,SAAA,CAAU,MAAA,GAAS,CAAA,CAAA,KAAM,IAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,gBAAA,CAAiB,SAAuB,MAAA,EAAsB;AACnE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AACjD,MAAA,MAAA,CAAO,MAAA,GAAS,SAAA;AAChB,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAGjC,MAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,QAAA,IAAA,CAAK,yBAAA,CAA0B,SAAS,SAAS,CAAA;AAAA,MACnD;AAEA,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,WAAW,OAAO,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAiB,OAAA,EAA+B;AA7yBzD,IAAA,IAAA,EAAA;AA8yBI,IAAA,OAAA,CAAA,CAAO,UAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,KAAzB,mBAA4B,MAAA,KAAU,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,OAAA,EAA6B;AAC9C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAEjC,MAAA,IAAA,CAAK,yBAAA,CAA0B,SAAS,CAAC,CAAA;AACzC,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,QAAA,EAAW,OAAO,CAAA,MAAA,CAAQ,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,OAAA,EAA6B;AAChD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAEjC,MAAA,IAAA,CAAK,yBAAA,CAA0B,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA;AACrD,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,QAAA,EAAW,OAAO,CAAA,QAAA,CAAU,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,yBAAA,CAA0B,SAAuB,aAAA,EAA6B;AACpF,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAClD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AACnD,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,MAAA,MAAM,gBAAA,GAAA,CAAmB,yCAAY,OAAA,KAAW,YAAA;AAChD,MAAA,IAAI,qBAAqB,OAAA,EAAS;AAEhC,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA;AACtD,QAAA,MAAM,cAAc,WAAA,GAAc,aAAA;AAElC,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAA6B;AAC9C,UAAA,QAAA,CAAS,MAAA,GAAS,WAAA;AAAA,QACpB,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,eAAe,OAAA,EAAgC;AA52BxD,IAAA,IAAA,EAAA;AA62BI,IAAA,OAAA,CAAA,CAAO,UAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,KAAzB,mBAA4B,KAAA,KAAS,KAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,OAAA,EAA6B;AAC/C,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAClD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AACnD,MAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAA6B,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,MACxE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,OAAA,EAA6B;AAChD,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAClD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AACnD,MAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAA6B,QAAA,CAAS,SAAS,KAAK,CAAA;AAAA,MACzE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAW,aAAa,MAAA,EAAgB;AACtC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AACpD,IAAA,KAAA,CAAM,YAAY,IAAA,CAAK,aAAA;AACvB,IAAA,SAAA,CAAU,aAAa,CAAA,CAAE,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAA,CAAK,aAAa,CAAA,CAAE,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,YAAA,GAAuB;AAChC,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAA,GAAsB;AAC/B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,YAAA,EAAiD;AACxE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC/B,MAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,YAAA;AACnB,MAAA,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,MAAY,GAAA,GAAM,GAAA,GAAM,EAAE,CAAA,GAAI,GAAA;AAAA,IACvD;AACA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,KAAA,EAAqB;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC3C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,oBAAoB,KAAA,EAAqB;AAC9C,IAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA,EAAG;AACxC,MAAA,SAAA,CAAU,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,sBAAA,EAAyB,KAAK,CAAA,gCAAA,CAAkC,CAAA;AAC9F,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAG7B,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA;AAG1D,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,eAAe,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,eAAe,KAAA,EAAwB;AAC5C,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,qBAAqB,KAAA,EAAwB;AAClD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAAA,EACtC;AAGF;;;ACr+BA,SAAS,UAAU,CAAA,EAAG;AAClB,EAAA,OAAO,CAAA;AACX;AACA,SAAS,QAAQ,KAAA,EAAO;AACpB,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AACvC;AACA,SAAS,WAAW,KAAA,EAAO;AACvB,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AAC9C;AACA,SAAS,SAAS,KAAA,EAAO;AACrB,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AAC9C;AACA,SAAS,eAAA,CAAgB,IAAI,EAAA,EAAI;AAC7B,EAAA,IAAI,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ;AACzB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,QAAQ,CAAA,EAAA,EAAK;AAChC,IAAA,IAAI,EAAA,CAAG,CAAC,CAAA,KAAM,EAAA,CAAG,CAAC,CAAA,EAAG;AACjB,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,SAAA,CAAU,IAAI,EAAA,EAAI;AACvB,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,EAAE,GAAG,GAAG,MAAA,CAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AACzE,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAChC,IAAA,MAAM,EAAA,GAAK,GAAG,GAAG,CAAA;AACjB,IAAA,MAAM,EAAA,GAAK,GAAG,GAAG,CAAA;AACjB,IAAA,OAAO,SAAS,EAAE,CAAA,IAAK,SAAS,EAAE,CAAA,GAC5B,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAI,MAAM,CAAA,EAAG,EAAE,CAAC,GAAG,GAAG,SAAA,CAAU,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,CAAC,GAAG,GAAG,OAAO,EAAA,GAAK,EAAA,GAAK,IAAI,CAAA;AAAA,EAC1J,CAAA,EAAG,EAAE,CAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAAO;AACtB,EAAA,IAAI,CAAC,UAAA,CAAW,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,QAAA,IAAY,KAAA;AACvB;AAEA,IAAM,kBAAA,GAAqB;AAAA,EACvB,iBAAiB,MAAM,gCAAA;AAAA,EACvB,aAAA,EAAe,CAAC,OAAA,KAAY,CAAA,wBAAA,EAA2B,QAAQ,IAAI,CAAA,CAAA,CAAA;AAAA,EACnE,oBAAA,EAAsB,CAAC,OAAA,KAAY,CAAA,4BAAA,EAA+B,QAAQ,GAAG,CAAA,CAAA,CAAA;AAAA,EAC7E,cAAA,EAAgB,CAAC,OAAA,KAAY,CAAA,sBAAA,EAAyB,KAAK,SAAA,CAAU,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA,CAAA;AAAA,EACpF,aAAa,MAAM,CAAA,qBAAA,CAAA;AAAA,EACnB,aAAA,EAAe,CAAC,OAAA,KAAY,CAAA,6BAAA,EAAgC,QAAQ,EAAE,CAAA,CAAA,CAAA;AAAA,EACtE,gBAAA,EAAkB,CAAC,OAAA,KAAY,CAAA,UAAA,EAAa,QAAQ,IAAI,CAAA,WAAA,CAAA;AAAA,EACxD,mBAAmB,MAAM;AAC7B,CAAA;AACA,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,EACV,OAAO,eAAA,GAAkB;AACrB,IAAA,OAAO,IAAI,QAAA,CAAQ,EAAE,IAAA,EAAM,mBAAmB,CAAA;AAAA,EAClD;AAAA,EACA,OAAO,WAAA,GAAc;AACjB,IAAA,OAAO,IAAI,QAAA,CAAQ;AAAA,MACf,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,OAAO,aAAA,CAAc,QAAA,EAAU,EAAA,EAAI;AAC/B,IAAA,OAAO,IAAI,QAAA,CAAQ;AAAA,MACf,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACL,EAAA,EAAI,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,EAAE,CAAA;AAAA;AACzB,KACH,CAAA;AAAA,EACL;AAAA,EACA,OAAO,iBAAiB,IAAA,EAAM;AAC1B,IAAA,OAAO,IAAI,QAAA,CAAQ;AAAA,MACf,IAAA,EAAM,kBAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACL;AAAA;AACJ,KACH,CAAA;AAAA,EACL;AAAA,EACA,OAAO,iBAAA,GAAoB;AACvB,IAAA,OAAO,IAAI,QAAA,CAAQ,EAAE,IAAA,EAAM,qBAAqB,CAAA;AAAA,EACpD;AAAA,EACA,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAI,EAAA;AACJ,IAAA,IAAA,CAAK,OAAA,GAAA,CACA,EAAA,GAAK,kBAAA,CAAmB,MAAA,CAAO,IAAI,CAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,kBAAA;AACvG,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC7B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA;AACrC,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAAA,EACvB;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAChB;AACJ,CAAA;AAEA,IAAM,aAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EAChB,WAAA,CAAY,KAAK,GAAA,EAAK;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACf;AAAA,EACA,OAAO,WAAW,GAAA,EAAK;AACnB,IAAA,IAAI,QAAQ,IAAA,EAAM;AACd,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAO,QAAQ,UAAA,EAAY;AACtD,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,IAAA,GAAO;AACH,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,EAC7B;AAAA,EACA,MAAM,KAAA,EAAO;AACT,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AAAA,EAC1B;AAAA,EACA,aAAA,CAAc,MAAM,KAAA,EAAO;AACvB,IAAA,MAAM,QAAA,GAAW,KAAK,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,cAAA,CAAc,UAAA,CAAW,QAAQ,CAAA,EAAG;AACrC,MAAA,MAAM,QAAQ,WAAA,EAAY;AAAA,IAC9B;AACA,IAAA,IAAI,EAAE,QAAQ,QAAA,CAAA,EAAW;AACrB,MAAA,MAAM,OAAA,CAAQ,iBAAiB,IAAI,CAAA;AAAA,IACvC;AACA,IAAA,QAAA,CAAS,IAAI,CAAA,GAAI,KAAA;AAAA,EACrB;AACJ,CAAA;AAEA,IAAM,UAAN,MAAc;AAAA,EACV,WAAA,GAAc;AACV,IAAA,IAAA,CAAK,aAAa,EAAC;AAAA,EACvB;AAAA,EACA,EAAA,CAAG,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa;AAChC,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACzC,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,GAAI,EAAC;AAAA,IAC9C;AACA,IAAA,SAAA,CAAU,IAAA,CAAK;AAAA,MACX,OAAA;AAAA,MACA,GAAA,EAAA,CAAM,EAAA,GAAK,WAAA,KAAgB,IAAA,IAAQ,WAAA,KAAgB,MAAA,GAAS,MAAA,GAAS,WAAA,CAAY,GAAA,MAAS,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK;AAAA,KAC1H,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,GAAA,EAAK;AAChB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AAC3C,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,IAAA,CAAK,WAAW,SAAS,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,CAAC,QAAA,KAAa;AACxD,QAAA,OAAO,SAAS,GAAA,KAAQ,GAAA;AAAA,MAC5B,CAAC,CAAA;AAAA,IACL;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,IAAA,CAAK,WAAW,KAAA,EAAO;AACnB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AAC3C,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC5B,MAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC1B,CAAC,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,CAAY,cAAc,MAAA,EAAQ;AAC9B,IAAA,IAAI,EAAA;AACJ,IAAA,IAAA,CAAK,cAAc,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,UAAA;AAC1E,IAAA,IAAA,CAAK,WAAW,EAAA,GAAK,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,SAAS,MAAA,GAAS,MAAA,CAAO,MAAA,MAAY,IAAA,IAAQ,OAAO,MAAA,GAAS,EAAA,GAAM,CAAC,EAAA,EAAI,OAAO,EAAA,KAAO,EAAA;AACzI,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,SAAA,GAAY,YAAA;AAAA,EACrB;AAAA,EACA,IAAI,UAAA,GAAa;AACb,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EAChB;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EAChB;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,YAAY,QAAA,EAAU;AAAA,MACvB,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAA,CAAY,UAAU,OAAA,EAAS;AAC3B,IAAA,MAAM,IAAA,GAAO,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,SAAS,OAAA,GAAU;AAAA,MAC5D,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACV;AACA,IAAA,MAAM,mBAAmB,IAAA,CAAK,WAAA,GACxB,KAAK,WAAA,CAAY,SAAA,CAAU,QAAQ,CAAA,GACnC,QAAA;AACN,IAAA,MAAM,YAAY,IAAA,CAAK,SAAA;AACvB,IAAA,MAAM,OAAA,GAAU,CAAC,IAAA,CAAK,OAAA,CAAQ,WAAW,gBAAgB,CAAA;AACzD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,CAAK,SAAA,EAAW;AAC7B,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,cAAA,EAAgB;AAAA,MAC9B,MAAA,EAAQ;AAAA,KACX,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA;AACjB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,OAAA,EAAS,IAAA;AAAA,MACT,gBAAA,EAAkB,SAAA;AAAA,MAClB,QAAA,EAAU,gBAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,YAAY,YAAA,EAAc;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AAAA,EAClB;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAO;AAAA,MACpB,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAA,CAAY,OAAO,OAAA,EAAS;AACxB,IAAA,MAAM,IAAA,GAAO,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,SAAS,OAAA,GAAU;AAAA,MAC5D,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACV;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA;AACvB,IAAA,IAAI,SAAA,KAAc,KAAA,IAAS,CAAC,IAAA,CAAK,SAAA,EAAW;AACxC,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,cAAA,EAAgB;AAAA,MAC9B,MAAA,EAAQ;AAAA,KACX,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,OAAA,EAAS,IAAA;AAAA,MACT,gBAAA,EAAkB,SAAA;AAAA,MAClB,UAAU,IAAA,CAAK,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,yBAAN,MAA6B;AAAA,EACzB,YAAY,KAAA,EAAO;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,cAAA,EAAgB,KAAK,oBAAoB,CAAA;AAChE,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AAAA,EACxD;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,KAAK,MAAA,CAAO,QAAA;AAAA,EACvB;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAE,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EAC5F;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAE,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACtF;AACJ,CAAA;AAEA,SAAS,WAAA,CAAY,cAAc,MAAA,EAAQ;AACvC,EAAA,MAAM,aAAa,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,UAAA;AAC1E,EAAA,MAAM,SAAS,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,MAAA;AACtE,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,EAAQ;AACxB,IAAA,OAAO,IAAI,eAAe,YAAY,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,IAAI,YAAA,CAAa,YAAA,EAAc,MAAM,CAAA;AAChD;AACA,SAAS,oBAAoB,KAAA,EAAO;AAChC,EAAA,OAAO;AAAA,IACH,IAAI,uBAAuB,KAAK,CAAA;AAAA,IAChC,CAAC,UAAU,OAAA,KAAY;AACnB,MAAA,KAAA,CAAM,WAAA,CAAY,UAAU,OAAO,CAAA;AAAA,IACvC;AAAA,GACJ;AACJ;AAEA,IAAM,QAAA,GAAN,MAAM,SAAA,CAAS;AAAA,EACX,YAAY,QAAA,EAAU;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,QAAA;AACf,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,OAAA,EAAS;AAC5B,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC1B,MAAA,CAAA,CAAE,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,MAAM;AACzB,QAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,UACxB,GAAA;AAAA,UACA,MAAA,EAAQ;AAAA,SACX,CAAA;AAAA,MACL,CAAC,CAAA;AAAA,IACL;AAAA,EACJ;AAAA,EACA,OAAO,WAAW,YAAA,EAAc;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ;AAC3B,MAAA,OAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AAAA,QACpB,CAAC,GAAG,GAAG,WAAA,CAAY,YAAA,CAAa,GAAG,CAAC;AAAA,OACvC,CAAA;AAAA,IACL,CAAA,EAAG,EAAE,CAAA;AAAA,EACT;AAAA,EACA,OAAO,WAAW,YAAA,EAAc;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AACzC,IAAA,OAAO,IAAI,UAAS,IAAI,CAAA;AAAA,EAC5B;AAAA,EACA,IAAI,GAAA,EAAK;AACL,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAE,QAAA;AAAA,EAC7B;AAAA,EACA,GAAA,CAAI,KAAK,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAE,QAAA,GAAW,KAAA;AAAA,EACjC;AAAA,EACA,MAAM,GAAA,EAAK;AACP,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EAC3B;AACJ,CAAA;AAEA,IAAM,0BAAN,MAA8B;AAAA,EAC1B,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAS,UAAA,CAAW;AAAA,MAC9B,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACf,CAAA;AAAA,EACL;AAAA,EACA,UAAU,KAAA,EAAO;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAAA,EAC7C;AACJ,CAAA;AAEA,IAAM,kBAAN,MAAsB;AAAA,EAClB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAS,UAAA,CAAW;AAAA,MAC9B,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACf,CAAA;AAAA,EACL;AAAA,EACA,UAAU,KAAA,EAAO;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAG;AACf,MAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAG;AACf,MAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,IAAA,EAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AAAA,EACA,UAAU,KAAA,EAAO;AACb,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,IAAA;AAC7B,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA,CAAA,CAAO,KAAA,GAAQ,CAAA,IAAK,KAAK,IAAI,CAAA;AAC5C,IAAA,OAAO,CAAA,GAAI,IAAI,IAAA,CAAK,IAAA;AAAA,EACxB;AACJ,CAAA;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACpB,YAAY,IAAA,EAAM;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EAC3B;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AACJ,CAAA;AACA,IAAM,oBAAA,GAAuB;AAAA,EACzB,MAAM,CAAC,EAAA,EAAI,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,EACjC,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,IAAA,EAAM,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,IAAM,EAAA;AAAA,EACxB,IAAA,EAAM,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,IAAM,EAAA;AAAA,EACxB,KAAA,EAAO,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,KAAO,EAAA;AAAA,EAC1B,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK,EAAA;AAAA,EACtB,GAAA,EAAK,CAAC,EAAA,EAAI,EAAA,KAAO,EAAA,GAAK;AAC1B,CAAA;AACA,IAAM,sBAAN,MAA0B;AAAA,EACtB,WAAA,CAAY,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO;AAC/B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACjB;AAAA,EACA,QAAA,GAAW;AACP,IAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA;AAC7C,IAAA,IAAI,CAAC,EAAA,EAAI;AACL,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,OAAO,EAAA,CAAG,KAAK,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAAA,EACzD;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA,CAAK,KAAK,QAAA,EAAS;AAAA,MACnB,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,MACpB;AAAA,KACJ,CAAE,KAAK,GAAG,CAAA;AAAA,EACd;AACJ,CAAA;AACA,IAAM,mBAAA,GAAsB;AAAA,EACxB,GAAA,EAAK,CAAC,CAAA,KAAM,CAAA;AAAA,EACZ,GAAA,EAAK,CAAC,CAAA,KAAM,CAAC,CAAA;AAAA,EACb,GAAA,EAAK,CAAC,CAAA,KAAM,CAAC;AACjB,CAAA;AACA,IAAM,qBAAN,MAAyB;AAAA,EACrB,WAAA,CAAY,UAAU,IAAA,EAAM;AACxB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,EACtB;AAAA,EACA,QAAA,GAAW;AACP,IAAA,MAAM,EAAA,GAAK,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AAC5C,IAAA,IAAI,CAAC,EAAA,EAAI;AACL,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,EAAA,CAAG,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,CAAA;AAAA,EACxC;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,CAAC,IAAA,EAAM,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,UAAA,CAAW,QAAA,EAAS,EAAG,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,EAC1E;AACJ,CAAA;AAEA,SAAS,cAAc,OAAA,EAAS;AAC5B,EAAA,OAAO,CAAC,MAAM,MAAA,KAAW;AACrB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAM,MAAM,CAAA;AACtC,MAAA,IAAI,WAAW,EAAA,EAAI;AACf,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,OAAO,EAAA;AAAA,EACX,CAAA;AACJ;AACA,SAAS,cAAA,CAAe,MAAM,MAAA,EAAQ;AAClC,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,MAAM,MAAM,CAAA;AAC1C,EAAA,OAAA,CAAQ,EAAA,GAAM,KAAK,CAAA,CAAE,CAAC,OAAQ,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AAC/D;AACA,SAAS,gBAAA,CAAiB,MAAM,MAAA,EAAQ;AACpC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAChC,EAAA,OAAO,EAAA,CAAG,KAAA,CAAM,SAAS,CAAA,GAAI,EAAA,GAAK,EAAA;AACtC;AACA,SAAS,iBAAA,CAAkB,MAAM,MAAA,EAAQ;AACrC,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,MAAM,SAAS,CAAA;AAC7C,EAAA,OAAA,CAAQ,EAAA,GAAM,KAAK,CAAA,CAAE,CAAC,OAAQ,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AAC/D;AACA,SAAS,iBAAA,CAAkB,MAAM,MAAA,EAAQ;AACrC,EAAA,MAAM,EAAA,GAAK,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AACzC,EAAA,IAAI,OAAO,EAAA,EAAI;AACX,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAClC,EAAA,MAAA,IAAU,CAAA;AACV,EAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAC9B,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAC1C,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA,GAAO,GAAA;AAClB;AACA,SAAS,gBAAA,CAAiB,MAAM,MAAA,EAAQ;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAC/B,EAAA,MAAA,IAAU,CAAA;AACV,EAAA,IAAI,CAAA,CAAE,WAAA,EAAY,KAAM,GAAA,EAAK;AACzB,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,EAAA,GAAK,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AACzC,EAAA,IAAI,OAAO,EAAA,EAAI;AACX,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAA,GAAI,EAAA;AACf;AACA,SAAS,yBAAA,CAA0B,MAAM,MAAA,EAAQ;AAC7C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAChC,EAAA,IAAI,OAAO,GAAA,EAAK;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,IAAA,EAAM,MAAM,CAAA;AACzC,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAC/C;AACA,SAAS,mBAAA,CAAoB,MAAM,MAAA,EAAQ;AACvC,EAAA,MAAM,GAAA,GAAM,yBAAA,CAA0B,IAAA,EAAM,MAAM,CAAA;AAClD,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACjC,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,GAAA,EAAK;AACb,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAC1C,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,OAAO,GAAA,GAAM,GAAA,GAAM,GAAA,GAAM,gBAAA,CAAiB,MAAM,MAAM,CAAA;AAC1D;AACA,SAAS,mBAAA,CAAoB,MAAM,MAAA,EAAQ;AACvC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACjC,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,GAAA,EAAK;AACb,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAC1C,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA,GAAM,GAAA,GAAM,gBAAA,CAAiB,IAAA,EAAM,MAAM,CAAA;AACpD;AACA,SAAS,mBAAA,CAAoB,MAAM,MAAA,EAAQ;AACvC,EAAA,MAAM,GAAA,GAAM,yBAAA,CAA0B,IAAA,EAAM,MAAM,CAAA;AAClD,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA,GAAM,gBAAA,CAAiB,IAAA,EAAM,MAAM,CAAA;AAC9C;AACA,IAAM,qBAAqB,aAAA,CAAc;AAAA,EACrC,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACJ,CAAC,CAAA;AACD,SAAS,iBAAA,CAAkB,MAAM,MAAA,EAAQ;AACrC,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,MAAM,QAAQ,CAAA;AAC5C,EAAA,OAAA,CAAQ,EAAA,GAAM,KAAK,CAAA,CAAE,CAAC,OAAQ,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AAC/D;AACA,SAAS,wBAAA,CAAyB,MAAM,MAAA,EAAQ;AAC5C,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACpC,EAAA,MAAA,IAAU,MAAA,CAAO,MAAA;AACjB,EAAA,IAAI,MAAA,CAAO,WAAA,EAAY,KAAM,IAAA,EAAM;AAC/B,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAC1C,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA,GAAS,GAAA;AACpB;AACA,SAAS,eAAA,CAAgB,MAAM,MAAA,EAAQ;AACnC,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,MAAM,SAAS,CAAA;AAC7C,EAAA,OAAA,CAAQ,EAAA,GAAM,KAAK,CAAA,CAAE,CAAC,OAAQ,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AAC/D;AACA,SAAS,uBAAA,CAAwB,MAAM,MAAA,EAAQ;AAC3C,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACpC,EAAA,MAAA,IAAU,MAAA,CAAO,MAAA;AACjB,EAAA,IAAI,MAAA,CAAO,WAAA,EAAY,KAAM,IAAA,EAAM;AAC/B,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AACxC,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA,GAAS,GAAA;AACpB;AACA,SAAS,aAAA,CAAc,MAAM,MAAA,EAAQ;AACjC,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,MAAM,aAAa,CAAA;AACjD,EAAA,OAAA,CAAQ,EAAA,GAAM,KAAK,CAAA,CAAE,CAAC,OAAQ,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AAC/D;AACA,SAAS,qBAAA,CAAsB,MAAM,MAAA,EAAQ;AACzC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACpC,EAAA,MAAA,IAAU,MAAA,CAAO,MAAA;AACjB,EAAA,IAAI,MAAA,CAAO,WAAA,EAAY,KAAM,IAAA,EAAM;AAC/B,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,aAAA,CAAc,IAAA,EAAM,MAAM,CAAA;AACtC,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA,GAAS,GAAA;AACpB;AACA,IAAM,+BAA+B,aAAA,CAAc;AAAA,EAC/C,wBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACJ,CAAC,CAAA;AACD,IAAM,qBAAqB,aAAA,CAAc;AAAA,EACrC,4BAAA;AAAA,EACA;AACJ,CAAC,CAAA;AAED,SAAS,YAAA,CAAa,MAAM,MAAA,EAAQ;AAChC,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,IAAA,EAAM,MAAM,CAAA;AAC3C,EAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,EAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO;AAAA,IACH,SAAA,EAAW,IAAI,iBAAA,CAAkB,GAAG,CAAA;AAAA,IACpC;AAAA,GACJ;AACJ;AACA,SAAS,4BAAA,CAA6B,MAAM,MAAA,EAAQ;AAChD,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAChC,EAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,EAAA,IAAI,OAAO,GAAA,EAAK;AACZ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAA,GAAS,IAAA,CAAK,MAAA;AACd,EAAA,MAAA,IAAU,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA;AACvC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAChC,EAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,EAAA,IAAI,OAAO,GAAA,EAAK;AACZ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO;AAAA,IACH,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB;AAAA,GACJ;AACJ;AACA,SAAS,sBAAA,CAAuB,MAAM,MAAA,EAAQ;AAC1C,EAAA,IAAI,EAAA;AACJ,EAAA,OAAA,CAAS,EAAA,GAAK,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,4BAAA,CAA6B,IAAA,EAAM,MAAM,CAAA;AACxH;AACA,SAAS,oBAAA,CAAqB,MAAM,MAAA,EAAQ;AACxC,EAAA,MAAM,IAAA,GAAO,sBAAA,CAAuB,IAAA,EAAM,MAAM,CAAA;AAChD,EAAA,IAAI,IAAA,EAAM;AACN,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAChC,EAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,EAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,IAAO,OAAO,GAAA,EAAK;AACxC,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,IAAA,EAAM,MAAM,CAAA;AAC7C,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAA,GAAS,GAAA,CAAI,MAAA;AACb,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,SAAA,EAAW,IAAI,kBAAA,CAAmB,EAAA,EAAI,IAAI,SAAS;AAAA,GACvD;AACJ;AACA,SAAS,kBAAA,CAAmB,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ;AAC3C,EAAA,MAAA,IAAU,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA;AACvC,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,MAAA,CAAO,CAACC,GAAAA,KAAO,IAAA,CAAK,UAAA,CAAWA,GAAAA,EAAI,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA;AAC5D,EAAA,IAAI,CAAC,EAAA,EAAI;AACL,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,EAAA,MAAA,IAAU,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA;AACvC,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACd;AACJ;AACA,SAAS,qCAAA,CAAsC,YAAY,GAAA,EAAK;AAC5D,EAAA,OAAO,CAAC,MAAM,MAAA,KAAW;AACrB,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAA,GAAS,SAAA,CAAU,MAAA;AACnB,IAAA,IAAI,OAAO,SAAA,CAAU,SAAA;AACrB,IAAA,WAAS;AACL,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,GAAA,EAAK,IAAA,EAAM,MAAM,CAAA;AAC/C,MAAA,IAAI,CAAC,EAAA,EAAI;AACL,QAAA;AAAA,MACJ;AACA,MAAA,MAAA,GAAS,EAAA,CAAG,MAAA;AACZ,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA;AACxC,MAAA,IAAI,CAAC,QAAA,EAAU;AACX,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,MAAA,GAAS,QAAA,CAAS,MAAA;AAClB,MAAA,IAAA,GAAO,IAAI,mBAAA,CAAoB,EAAA,CAAG,QAAA,EAAU,IAAA,EAAM,SAAS,SAAS,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,IAAA,GACD;AAAA,MACE,MAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACf,GACE,IAAA;AAAA,EACV,CAAA;AACJ;AACA,IAAM,8BAAA,GAAiC;AAAA,EACnC,CAAC,IAAI,CAAA;AAAA,EACL,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACd,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAAA,EAClB,CAAC,GAAG,CAAA;AAAA,EACJ,CAAC,GAAG,CAAA;AAAA,EACJ,CAAC,GAAG;AACR,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,EAAQ,GAAA,KAAQ;AACtB,EAAA,OAAO,qCAAA,CAAsC,QAAQ,GAAG,CAAA;AAC5D,CAAA,EAAG,oBAAoB,CAAA;AACvB,SAAS,eAAA,CAAgB,MAAM,MAAA,EAAQ;AACnC,EAAA,MAAA,IAAU,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA;AACvC,EAAA,OAAO,8BAAA,CAA+B,MAAM,MAAM,CAAA;AACtD;AACA,SAAS,0BAA0B,IAAA,EAAM;AACrC,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,IAAA,EAAM,CAAC,CAAA;AACpC,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA,GAAS,eAAe,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA;AAC/D,EAAA,IAAI,MAAA,KAAW,KAAK,MAAA,EAAQ;AACxB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA,CAAK,SAAA;AAChB;AAEA,SAAS,YAAY,IAAA,EAAM;AACvB,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,CAAA,GAAI,0BAA0B,IAAI,CAAA;AACxC,EAAA,OAAA,CAAQ,EAAA,GAAK,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,GAAS,MAAA,GAAS,CAAA,CAAE,QAAA,EAAS,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAA;AACtG;AACA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,MAAM,EAAA,GAAK,YAAY,KAAK,CAAA;AAC5B,IAAA,IAAI,CAAC,OAAA,CAAQ,EAAE,CAAA,EAAG;AACd,MAAA,OAAO,EAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,CAAA;AACX;AACA,SAAS,eAAe,KAAA,EAAO;AAC3B,EAAA,OAAO,OAAO,KAAK,CAAA;AACvB;AACA,SAAS,sBAAsB,MAAA,EAAQ;AACnC,EAAA,OAAO,CAAC,KAAA,KAAU;AACd,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,EAC1D,CAAA;AACJ;AAEA,SAAS,QAAA,CAAS,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,QAAQ,IAAA,EAAM;AACjD,EAAA,MAAM,CAAA,GAAA,CAAK,KAAA,GAAQ,MAAA,KAAW,IAAA,GAAO,MAAA,CAAA;AACrC,EAAA,OAAO,MAAA,GAAS,KAAK,IAAA,GAAO,MAAA,CAAA;AAChC;AACA,SAAS,iBAAiB,KAAA,EAAO;AAC7B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACrC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC9B,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,MAAA;AACnC;AACA,SAAS,cAAA,CAAe,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK;AACrC,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAC7C;AACA,SAAS,SAAA,CAAU,OAAO,GAAA,EAAK;AAC3B,EAAA,OAAA,CAAS,KAAA,GAAQ,MAAO,GAAA,IAAO,GAAA;AACnC;AACA,SAAS,wBAAA,CAAyB,QAAQ,QAAA,EAAU;AAChD,EAAA,OAAO,CAAC,OAAA,CAAQ,MAAA,CAAO,IAAI,IACrB,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAA,GAC5B,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,QAAQ,GAAG,CAAC,CAAA;AAChD;AACA,SAAS,oBAAoB,MAAA,EAAQ;AACjC,EAAA,IAAI,EAAA;AACJ,EAAA,OAAA,CAAQ,KAAK,MAAA,CAAO,IAAA,MAAU,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,CAAA;AAC/D;AACA,SAAS,uBAAA,CAAwB,QAAQ,QAAA,EAAU;AAC/C,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAA,CAAK,EAAA,GAAK,MAAA,CAAO,UAAU,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,QAAQ,CAAA;AAClF,EAAA,OAAO,IAAA,KAAS,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3E;AACA,SAAS,oBAAA,CAAqB,QAAQ,YAAA,EAAc;AAChD,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,IAAI,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,YAAY,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,sBAAsB,MAAA,EAAQ;AACnC,EAAA,IAAI,CAAC,QAAQ,MAAA,CAAO,GAAG,KAAK,CAAC,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,EAAG;AAC9C,IAAA,OAAO,IAAI,uBAAA,CAAwB;AAAA,MAC/B,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACf,CAAA;AAAA,EACL;AACA,EAAA,IAAI,CAAC,QAAQ,MAAA,CAAO,GAAG,KAAK,CAAC,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,EAAG;AAC9C,IAAA,OAAO,IAAI,eAAA,CAAgB;AAAA,MACvB,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACf,CAAA;AAAA,EACL;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,2BAAA,CAA4B,QAAQ,YAAA,EAAc;AACvD,EAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,EAAA,OAAO;AAAA,IACH,SAAA,EAAA,CAAY,EAAA,GAAK,MAAA,CAAO,MAAA,MAAY,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,qBAAA,CAAsB,wBAAA,CAAyB,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,IACrI,QAAA,EAAA,CAAW,KAAK,MAAA,CAAO,QAAA,MAAc,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,mBAAA,CAAoB,MAAM,CAAA;AAAA,IAC5F,YAAA,EAAA,CAAe,EAAA,GAAK,MAAA,CAAO,YAAA,MAAkB,IAAA,IAAQ,OAAO,MAAA,GAAS,EAAA,GAAK,uBAAA,CAAwB,MAAA,EAAQ,YAAY;AAAA,GAC1H;AACJ;AACA,SAAS,kCAAkC,CAAA,EAAG;AAC1C,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,EAAE,QAAA,CAAS,QAAA;AAAA,IACnB,QAAA,EAAU,EAAE,QAAA,CAAS,MAAA;AAAA,IACrB,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,IAChB,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,IAChB,YAAA,EAAc,EAAE,QAAA,CAAS,MAAA;AAAA,IACzB,IAAA,EAAM,EAAE,QAAA,CAAS;AAAA,GACrB;AACJ;AAEA,SAAS,gBAAgB,MAAA,EAAQ;AAC7B,EAAA,OAAO;AAAA,IACH,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,SAAA,EAAW,SAAS,UAAA,CAAW,2BAAA,CAA4B,OAAO,MAAA,EAAQ,MAAA,CAAO,YAAY,CAAC;AAAA,GAClG;AACJ;AAEA,IAAM,WAAN,MAAe;AAAA,EACX,YAAY,UAAA,EAAY;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACtB;AAAA,EACA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA;AAAA,EAChC;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AAAA,EACnD;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AAAA,EACtD;AAAA,EACA,IAAI,MAAA,GAAS;AACT,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAAA,EACjD;AAAA,EACA,IAAI,OAAO,MAAA,EAAQ;AACf,IAAA,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAAA,EAClD;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAAA,EAClD;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,WAAA,CAAY,KAAK,CAAA;AAAA,EAC5C;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,IAAA,CAAK,WAAW,WAAA,EAAY;AAAA,EACvC;AACJ,CAAA;AAEA,IAAM,UAAN,MAAc;AAAA,EACV,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AACJ,CAAA;AACA,IAAM,aAAA,GAAN,cAA4B,OAAA,CAAQ;AAAA,EAChC,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM;AAC7B,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,SAAS,IAAA,GAAO,IAAA;AAAA,EAC1D;AACJ,CAAA;AACA,IAAM,WAAA,GAAN,cAA0B,OAAA,CAAQ;AAAA,EAC9B,WAAA,CAAY,QAAQ,QAAA,EAAU;AAC1B,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EACpB;AACJ,CAAA;AACA,IAAM,gBAAA,GAAN,cAA+B,OAAA,CAAQ;AAAA,EACnC,WAAA,CAAY,QAAQ,KAAA,EAAO;AACvB,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACjB;AACJ,CAAA;AACA,IAAM,YAAA,GAAN,cAA2B,OAAA,CAAQ;AAAA,EAC/B,WAAA,CAAY,QAAQ,WAAA,EAAa;AAC7B,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,WAAA;AAAA,EAClB;AACJ,CAAA;AAEA,IAAM,UAAA,GAAN,cAAyB,QAAA,CAAS;AAAA,EAC9B,YAAY,UAAA,EAAY;AACpB,IAAA,KAAA,CAAM,UAAU,CAAA;AAChB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AAAA,EAClE;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAA;AAAA,EAChD;AAAA,EACA,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,KAAK,UAAA,CAAW,GAAA;AAAA,EAC3B;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,WAAW,GAAA,GAAM,GAAA;AAAA,EAC1B;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,KAAA,EAAM;AAAA,EAChC;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,MAAM,KAAA,GAAQ,KAAK,UAAA,CAAW,KAAA;AAC9B,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,EAAU,IAAI,aAAA,CAAc,MAAM,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,EACjH;AACJ,CAAA;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACpB,WAAA,CAAY,OAAO,OAAA,EAAS;AACxB,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,cAAA,EAAgB,KAAK,oBAAoB,CAAA;AAChE,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACpD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAAA,EAC/B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,KAAK,MAAA,CAAO,QAAA;AAAA,EACvB;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA;AAAA,EAC3B;AAAA,EACA,WAAA,CAAY,UAAU,OAAA,EAAS;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,QAAA,EAAU,OAAO,CAAA;AAAA,EAC7C;AAAA,EACA,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AAAA,EAC7C;AAAA,EACA,IAAA,GAAO;AACH,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC3C;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAE,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EAC5F;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAE,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACtF;AACJ,CAAA;AACA,SAAS,oBAAoB,CAAA,EAAG;AAC5B,EAAA,IAAI,EAAE,aAAa,CAAA,CAAA,EAAI;AACnB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,CAAA,GAAI,EAAE,SAAS,CAAA;AACrB,EAAA,OAAO,SAAA,CAAU,CAAC,CAAA,IAAK,MAAA,IAAU,KAAK,OAAA,IAAW,CAAA;AACrD;AAEA,SAAS,WAAA,CAAY,OAAO,cAAA,EAAgB;AACxC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ;AACrC,IAAA,IAAI,QAAQ,MAAA,EAAW;AACnB,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,eAAe,GAAG,CAAA;AACjC,IAAA,MAAMC,OAAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AAChC,IAAA,OAAOA,QAAO,SAAA,GACR,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,GAAG,CAAA,EAAG,EAAE,CAAC,GAAG,GAAGA,OAAAA,CAAO,KAAA,EAAO,CAAA,GAAI,MAAA;AAAA,EAC3E,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,UAAU,MAAM,CAAA;AAC3B;AACA,SAAS,UAAA,CAAW,OAAO,SAAA,EAAW;AAClC,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS;AAC/B,IAAA,IAAI,QAAQ,MAAA,EAAW;AACnB,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,UAAU,MAAA,EAAW;AACjD,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,OAAO,CAAC,GAAG,GAAA,EAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,EAAE,CAAA;AACT;AACA,SAAS,SAAS,KAAA,EAAO;AACrB,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAC5B;AACA,SAAS,yBAAyB,KAAA,EAAO;AACrC,EAAA,OAAO,CAAC,QAAA,KAAa,CAAC,CAAA,KAAM;AACxB,IAAA,IAAI,CAAC,QAAA,IAAY,CAAA,KAAM,MAAA,EAAW;AAC9B,MAAA,OAAO;AAAA,QACH,SAAA,EAAW,KAAA;AAAA,QACX,KAAA,EAAO;AAAA,OACX;AAAA,IACJ;AACA,IAAA,IAAI,QAAA,IAAY,MAAM,MAAA,EAAW;AAC7B,MAAA,OAAO;AAAA,QACH,SAAA,EAAW,IAAA;AAAA,QACX,KAAA,EAAO;AAAA,OACX;AAAA,IACJ;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,IAAA,OAAO,WAAW,MAAA,GACZ;AAAA,MACE,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO;AAAA,KACX,GACE;AAAA,MACE,SAAA,EAAW,KAAA;AAAA,MACX,KAAA,EAAO;AAAA,KACX;AAAA,EACR,CAAA;AACJ;AACA,SAAS,0BAA0B,QAAA,EAAU;AACzC,EAAA,OAAO;AAAA,IACH,QAAQ,CAAC,KAAA,KAAU,wBAAA,CAAyB,KAAK,EAAE,QAAQ,CAAA;AAAA,IAC3D,OAAA,EAAS,wBAAA,CAAyB,CAAC,CAAA,KAAM,OAAO,MAAM,SAAA,GAAY,CAAA,GAAI,MAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IACzF,MAAA,EAAQ,wBAAA,CAAyB,CAAC,CAAA,KAAM,OAAO,MAAM,QAAA,GAAW,CAAA,GAAI,MAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IACvF,MAAA,EAAQ,wBAAA,CAAyB,CAAC,CAAA,KAAM,OAAO,MAAM,QAAA,GAAW,CAAA,GAAI,MAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IACvF,QAAA,EAAU,wBAAA,CAAyB,CAAC,CAAA,KACpC,OAAO,MAAM,UAAA,GAAa,CAAA,GAAI,MAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IACjD,QAAA,EAAU,CAAC,KAAA,KAAU,wBAAA,CAAyB,CAAC,CAAA,KAAO,CAAA,KAAM,KAAA,GAAQ,KAAA,GAAQ,MAAU,CAAA,CAAE,QAAQ,CAAA;AAAA,IAChG,KAAK,wBAAA,CAAyB,CAAC,CAAA,KAAM,CAAC,EAAE,QAAQ,CAAA;AAAA,IAChD,MAAA,EAAQ,CAAC,cAAA,KAAmB,wBAAA,CAAyB,CAAC,CAAA,KAAM;AACxD,MAAA,IAAI,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG;AACd,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,OAAO,WAAA,CAAY,GAAG,cAAc,CAAA;AAAA,IACxC,CAAC,EAAE,QAAQ,CAAA;AAAA,IACX,KAAA,EAAO,CAAC,UAAA,KAAe,wBAAA,CAAyB,CAAC,CAAA,KAAM;AACnD,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACnB,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,OAAO,UAAA,CAAW,GAAG,UAAU,CAAA;AAAA,IACnC,CAAC,EAAE,QAAQ;AAAA,GACf;AACJ;AACA,IAAM,YAAA,GAAe;AAAA,EACjB,QAAA,EAAU,0BAA0B,IAAI,CAAA;AAAA,EACxC,QAAA,EAAU,0BAA0B,KAAK;AAC7C,CAAA;AACA,SAAS,WAAA,CAAY,OAAO,cAAA,EAAgB;AACxC,EAAA,MAAM,GAAA,GAAM,eAAe,YAAY,CAAA;AACvC,EAAA,MAAM,SAAS,YAAA,CAAa,QAAA,CAAS,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AACtD,EAAA,OAAO,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,KAAA,GAAQ,MAAA;AAC7C;AAEA,SAAS,gBAAA,CAAiB,KAAA,EAAO,WAAA,EAAa,MAAA,EAAQ,QAAA,EAAU;AAC5D,EAAA,IAAI,WAAA,IAAe,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG;AACpC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,KAAA,EAAO,MAAM,CAAA;AACxC,EAAA,OAAO,MAAA,GAAS,QAAA,CAAS,MAAM,CAAA,GAAI,KAAA;AACvC;AACA,SAAS,gBAAA,CAAiB,aAAa,SAAA,EAAW;AAC9C,EAAA,IAAI,EAAA;AACJ,EAAA,OAAO,SAAA,CAAA,CAAW,EAAA,GAAK,WAAA,KAAgB,IAAA,IAAQ,gBAAgB,MAAA,GAAS,MAAA,GAAS,WAAA,EAAY,MAAO,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAI,SAAS,CAAA;AAClJ;AAEA,SAAS,uBAAuB,EAAA,EAAI;AAChC,EAAA,OAAO,OAAA,IAAW,EAAA;AACtB;AAEA,SAAS,eAAe,CAAA,EAAG;AACvB,EAAA,IAAI,CAAC,UAAA,CAAW,CAAC,CAAA,IAAK,EAAE,aAAa,CAAA,CAAA,EAAI;AACrC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,IAAI,CAAA,CAAE,OAAA;AACZ,EAAA,OAAO,UAAU,CAAC,CAAA;AACtB;AAEA,IAAM,MAAA,GAAS,4BAAA;AACf,SAAS,YAAY,OAAA,EAAS;AAC1B,EAAA,OAAA,CAAQ,YAAA;AACZ;AACA,SAAS,4BAAA,CAA6B,SAAS,QAAA,EAAU;AACrD,EAAA,MAAMC,EAAAA,GAAI,QAAQ,KAAA,CAAM,UAAA;AACxB,EAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,MAAA;AAC3B,EAAA,QAAA,EAAS;AACT,EAAA,OAAA,CAAQ,MAAM,UAAA,GAAaA,EAAAA;AAC/B;AACA,SAAS,cAAc,GAAA,EAAK;AACxB,EAAA,OAAO,IAAI,YAAA,KAAiB,MAAA;AAChC;AACA,SAAS,eAAA,GAAkB;AACvB,EAAA,OAAO,UAAA;AACX;AACA,SAAS,iBAAA,GAAoB;AACzB,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,eAAA,EAAiB,CAAA;AAC7C,EAAA,OAAO,SAAA,CAAU,QAAA;AACrB;AACA,SAAS,iBAAiB,aAAA,EAAe;AACrC,EAAA,MAAM,GAAA,GAAM,cAAc,aAAA,CAAc,WAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,YAAY,UAAA,IAAc,GAAA;AAChC,EAAA,OAAO,SAAA,GACD,aAAA,CAAc,UAAA,CAAW,IAAA,EAAM;AAAA,IAC7B,kBAAA,EAAoB;AAAA,GACvB,CAAA,GACC,IAAA;AACV;AACA,IAAM,yBAAA,GAA4B;AAAA,EAC9B,KAAA,EAAO,2BAAA;AAAA,EACP,QAAA,EAAU,2BAAA;AAAA,EACV,MAAA,EAAQ;AACZ,CAAA;AACA,SAAS,oBAAA,CAAqBC,WAAU,MAAA,EAAQ;AAC5C,EAAA,MAAM,IAAA,GAAOA,SAAAA,CAAS,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AACnD,EAAA,IAAA,CAAK,SAAA,GAAY,0BAA0B,MAAM,CAAA;AACjD,EAAA,OAAO,IAAA;AACX;AACA,SAAS,eAAA,CAAgB,aAAA,EAAe,OAAA,EAAS,KAAA,EAAO;AACpD,EAAA,aAAA,CAAc,YAAA,CAAa,OAAA,EAAS,aAAA,CAAc,QAAA,CAAS,KAAK,CAAC,CAAA;AACrE;AACA,SAAS,cAAc,OAAA,EAAS;AAC5B,EAAA,IAAI,QAAQ,aAAA,EAAe;AACvB,IAAA,OAAA,CAAQ,aAAA,CAAc,YAAY,OAAO,CAAA;AAAA,EAC7C;AACJ;AACA,SAAS,oBAAoB,OAAA,EAAS;AAClC,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,WAAA,CAAY,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC3C;AACJ;AACA,SAAS,iBAAiB,OAAA,EAAS;AAC/B,EAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAClC,IAAA,OAAA,CAAQ,WAAA,CAAY,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,EAC7C;AACJ;AACA,SAAS,eAAe,EAAA,EAAI;AACxB,EAAA,IAAI,GAAG,aAAA,EAAe;AAClB,IAAA,OAAO,SAAA,CAAU,GAAG,aAAa,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,4BAA4B,EAAA,EAAI;AAChC,IAAA,OAAO,EAAA,CAAG,sBAAA;AAAA,EACd;AACA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,SAAA,CAAU,OAAO,UAAA,EAAY;AAClC,EAAA,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC/B,IAAA,UAAA,CAAW,GAAG,QAAQ,CAAA;AAAA,EAC1B,CAAC,CAAA;AACD,EAAA,UAAA,CAAW,MAAM,QAAQ,CAAA;AAC7B;AACA,SAAS,YAAA,CAAa,QAAA,EAAU,GAAA,EAAK,UAAA,EAAY;AAC7C,EAAA,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG,UAAU,CAAA;AAC7C;AAEA,IAAM,MAAA,GAAS,IAAA;AACf,SAAS,UAAU,QAAA,EAAU;AACzB,EAAA,MAAM,EAAA,GAAK,CAAC,eAAA,EAAiB,YAAA,KAAiB;AAC1C,IAAA,OAAO;AAAA,MACH,MAAA;AAAA,MACA,GAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAA;AAAA,MACA,eAAA,GAAkB,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA,GAAK,EAAA;AAAA,MAC1C,YAAA,GAAe,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,GAAK;AAAA,KACxC,CAAE,KAAK,EAAE,CAAA;AAAA,EACb,CAAA;AACA,EAAA,OAAO,EAAA;AACX;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,SAAS,eAAA,CAAgB,KAAK,KAAA,EAAO;AACjC,EAAA,MAAM,IAAA,GAAO,IAAI,sBAAA,EAAuB;AACxC,EAAA,MAAM,YAAY,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AAC9C,IAAA,OAAO,GAAA,CAAI,eAAe,IAAI,CAAA;AAAA,EAClC,CAAC,CAAA;AACD,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AACnC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,IAAA,CAAK,YAAY,QAAQ,CAAA;AAAA,EAC7B,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACX;AACA,IAAM,YAAN,MAAgB;AAAA,EACZ,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,CAAC,KAAA,KAAU;AAC3C,MAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChB,QAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AAAA,MACrD,CAAA,MACK;AACD,QAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AACpD,QAAA,gBAAA,CAAiB,SAAS,CAAA;AAC1B,QAAA,SAAA,CAAU,WAAA,CAAY,eAAA,CAAgB,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,MACrD;AAAA,IACJ,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AAAA,EACxB;AACJ,CAAA;AAEA,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,eAAA;AAC9B,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,eAAA,CAAgB,SAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,SAAA,CAAU,GAAA,EAAK;AAAA,MAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,YAAA,CAAa,WAAA,CAAY,IAAA,CAAK,eAAA,CAAgB,KAAK,OAAO,CAAA;AAAA,EACxE;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,MACzC,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACpC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,MAC1B,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO;AAAA,KAChC,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,SAAS,oBAAA,GAAuB;AAC5B,EAAA,OAAO,CAAC,WAAA,EAAa,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AACpD;AAEA,IAAM,IAAA,GAAO,UAAU,EAAE,CAAA;AACzB,IAAM,qBAAA,GAAwB;AAAA,EAC1B,SAAA,EAAW,MAAA;AAAA,EACX,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM,KAAA;AAAA,EACN,QAAA,EAAU;AACd,CAAA;AACA,IAAM,kBAAN,MAAsB;AAAA,EAClB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AACnB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,OAAA;AACvB,IAAA,IAAA,CAAK,MAAM,KAAA,CAAM,WAAW,EAAE,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACrD,MAAA,oBAAA,EAAqB,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpC,QAAA,IAAA,CAAK,UAAU,MAAA,CAAO,IAAA,CAAK,QAAW,qBAAA,CAAsB,GAAG,CAAC,CAAC,CAAA;AAAA,MACrE,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzC,QAAA,IAAA,CAAK,UAAU,GAAA,CAAI,IAAA,CAAK,QAAW,qBAAA,CAAsB,GAAG,CAAC,CAAC,CAAA;AAAA,MAClE,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,CAAU,cAAc,MAAM;AAC/B,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,MAAA,GAAS;AACT,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAChB;AAAA,EACA,IAAI,OAAO,MAAA,EAAQ;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAA,EAAU,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,CAAQ,YAAY,IAAI,CAAA;AAAA,EAC7E;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,MACzC,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,MACrB,MAAA,EAAQ,EAAE,QAAA,CAAS;AAAA,KACvB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,SAAA,CAAU,YAAY,MAAM,CAAA;AACjC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,IAAA,CAAK,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA;AAAA,EACjF;AACJ,CAAA;AAEA,IAAM,2BAAA,GAAN,cAA0C,eAAA,CAAgB;AAAA,EACtD,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,CAAO,eAAA,CAAgB,KAAA,EAAO;AAC/C,MAAA,MAAM,QAAQ,iBAAA,EAAkB;AAAA,IACpC;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,eAAA,CAAgB,SAAA;AACzC,IAAA,MAAM,EAAA,GAAK,IAAI,eAAA,CAAgB,GAAA,EAAK;AAAA,MAChC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,iBAAiB,MAAA,CAAO;AAAA,KAC3B,CAAA;AACD,IAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,IAAI,SAAA,CAAU,GAAA,EAAK;AAAA,MAClE,OAAO,MAAA,CAAO,KAAA;AAAA,MACd;AAAA,KACH,CAAA,EAAG,SAAA,EAAsB,CAAC,CAAA;AAC/B,IAAA,IAAA,CAAK,eAAA,GAAkB,EAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,eAAA;AAC9B,IAAA,IAAA,CAAK,KAAK,YAAA,CAAa,WAAA,CAAY,IAAA,CAAK,eAAA,CAAgB,KAAK,OAAO,CAAA;AAAA,EACxE;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,CAAC,CAAA,KAAM;AAClC,MAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,MAAA,OAAO,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA,IACtB,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,CAAC,CAAA,KAAA,CAChC,EAAA,GAAA,CAAM,EAAA,GAAA,CAAM,EAAA,GAAK,IAAA,CAAK,eAAA,EAAiB,WAAA,MAAiB,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,IAAA,CAAK,EAAA,EAAI,KAAK,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAA,CAAA;AAAA,IACxJ,CAAA,EAAG,CAAC,CAAA,MAAO;AAAA,MACP,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAI,OAAO,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,KAAA,CAAM,WAAW,MAAA,CAAO,KAAA;AAAA,MACjC;AACA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,IAAA,OAAO,iBAAiB,MAAM,KAAA,CAAM,aAAY,EAAG,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,KAAK,KAAA,CAAM,QAAA,IAAY,IAAA,CAAK,eAAA,CAAgB,aAAa,CAAA,EAAA,CAAK,EAAA,GAAA,CAAM,EAAA,GAAA,CAAM,KAAK,IAAA,CAAK,eAAA,EAAiB,iBAAiB,IAAA,IAAQ,EAAA,KAAO,SAAS,MAAA,GAAS,EAAA,CAAG,IAAA,CAAK,EAAE,OAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAG,CAAC,CAAA;AAAA,EACrS;AACJ,CAAA;AAEA,SAAS,aAAa,KAAA,EAAO;AACzB,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAI,KAAK,CAAA;AACtC,EAAA,OAAO,MAAA,CAAO,KAAA;AACd,EAAA,OAAO,MAAA;AACX;AACA,IAAM,iBAAA,GAAN,cAAgC,2BAAA,CAA4B;AAAA,EACxD,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAAA,EACtB;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA;AAAA,MAAiB,KAAA;AAAA,MACxB,CAAC,EAAA,KAAO,KAAA,CAAM,WAAA,CAAY,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,MAAG,CAAC,CAAA,MAAO;AAAA,QACpD,GAAA,EAAK,EAAE,QAAA,CAAS;AAAA,OACpB,CAAA;AAAA,MAAI,CAAC,MAAA,KAAW;AACZ,QAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAClB,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,KAAC;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,iBAAiB,MAAM,YAAA,CAAa,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG;AAAA,MAC7D,OAAA,EAAS;AAAA,QACL,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAA;AAAA,QAC/B,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,IAAA;AAAK,OAC1C;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACb,CAAA;AAAA,EACL;AACJ,CAAA;AACA,SAAS,oBAAoB,EAAA,EAAI;AAC7B,EAAA,OAAO,sBAAA,CAAuB,EAAE,CAAA,IAAK,cAAA,CAAe,GAAG,KAAK,CAAA;AAChE;AAEA,IAAM,sBAAA,GAAN,cAAqC,iBAAA,CAAkB;AAAA,EACnD,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,OAAO,CAAC,CAAA,KAAM,MAAM,WAAA,CAAY,CAAC,CAAA,EAAG,CAAC,CAAA,MAAO;AAAA,MAChE,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO;AAAA,QACvB,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,OACrB;AAAA,KACL,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,QAAQ,KAAK,CAAA;AAC9C,MAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AACJ,CAAA;AACA,SAAS,yBAAyB,EAAA,EAAI;AAClC,EAAA,OAAO,sBAAA,CAAuB,EAAE,CAAA,IAAK,mBAAA,CAAoB,GAAG,KAAK,CAAA;AACrE;AAEA,SAAS,UAAA,CAAW,QAAQ,UAAA,EAAY;AACpC,EAAA,OAAO,MAAA,CAAO,SAAS,UAAA,EAAY;AAC/B,IAAA,MAAA,CAAO,KAAK,MAAS,CAAA;AAAA,EACzB;AACJ;AACA,SAAS,iBAAiB,UAAA,EAAY;AAClC,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,UAAA,CAAW,QAAQ,UAAU,CAAA;AAC7B,EAAA,OAAO,MAAA;AACX;AACA,SAAS,oBAAoB,MAAA,EAAQ;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,MAAS,CAAA;AACtC,EAAA,OAAO,SAAA,CAAU,QAAQ,CAAA,GAAI,MAAA,GAAS,OAAO,KAAA,CAAM,CAAA,EAAG,KAAK,CAAC,CAAA;AAChE;AACA,SAAS,kBAAA,CAAmB,QAAQ,QAAA,EAAU;AAC1C,EAAA,MAAM,YAAY,CAAC,GAAG,mBAAA,CAAoB,MAAM,GAAG,QAAQ,CAAA;AAC3D,EAAA,IAAI,SAAA,CAAU,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AAClC,IAAA,SAAA,CAAU,MAAA,CAAO,CAAA,EAAG,SAAA,CAAU,MAAA,GAAS,OAAO,MAAM,CAAA;AAAA,EACxD,CAAA,MACK;AACD,IAAA,UAAA,CAAW,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,SAAA;AACX;AAEA,IAAM,sBAAN,MAA0B;AAAA,EACtB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,MAAA,GAAS,WAAA,CAAY,gBAAA,CAAiB,MAAA,CAAO,UAAU,CAAC,CAAA;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,cAAA,EAAgB,KAAK,oBAAoB,CAAA;AAChE,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACpD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,KAAK,MAAA,CAAO,QAAA;AAAA,EACvB;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA;AAAA,EAC3B;AAAA,EACA,WAAA,CAAY,UAAU,OAAA,EAAS;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,QAAA,EAAU,OAAO,CAAA;AAAA,EAC7C;AAAA,EACA,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,MAAA,CAAO,WAAW,kBAAA,CAAmB,IAAA,CAAK,OAAO,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,EACvF;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAE,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EAC5F;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAE,CAAA,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACtF;AACJ,CAAA;AACA,SAAS,sBAAsB,CAAA,EAAG;AAC9B,EAAA,IAAI,EAAE,aAAa,CAAA,CAAA,EAAI;AACnB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,CAAA,GAAI,EAAE,SAAS,CAAA;AACrB,EAAA,OAAO,UAAU,CAAC,CAAA,IAAK,MAAA,IAAU,CAAA,IAAK,EAAE,OAAA,IAAW,CAAA,CAAA;AACvD;AAEA,IAAM,wBAAA,GAAN,cAAuC,iBAAA,CAAkB;AAAA,EACrD,WAAA,GAAc;AACV,IAAA,OAAO,gBAAA,CAAiB,MAAM,KAAA,CAAM,WAAA,EAAY,EAAG;AAAA,MAC/C,OAAA,EAAS;AAAA,QACL,QAAA,EAAU;AAAA;AACd,KACH,CAAA;AAAA,EACL;AACJ,CAAA;AACA,SAAS,2BAA2B,EAAA,EAAI;AACpC,EAAA,OAAQ,sBAAA,CAAuB,EAAE,CAAA,IAC7B,qBAAA,CAAsB,GAAG,KAAK,CAAA;AACtC;AAEA,IAAM,SAAA,GAAN,cAAwB,QAAA,CAAS;AAAA,EAC7B,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,IAAI,EAAA;AACJ,IAAA,OAAA,CAAQ,EAAA,GAAK,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,EAAA;AAAA,EACvG;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC7D;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAA;AACjD,IAAA,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAC1B,MAAA,EAAA,CAAG,IAAI,YAAA,CAAa,IAAA,EAAM,EAAA,CAAG,WAAW,CAAC,CAAA;AAAA,IAC7C,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAA;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,OAAO,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAA;AAEA,SAAS,UAAA,CAAW,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ;AACzC,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,SAAS,CAAA;AAAA,EAChC,CAAA,MACK;AACD,IAAA,IAAA,CAAK,SAAA,CAAU,OAAO,SAAS,CAAA;AAAA,EACnC;AACJ;AACA,SAAS,gBAAA,CAAiB,MAAM,SAAA,EAAW;AACvC,EAAA,OAAO,CAAC,KAAA,KAAU;AACd,IAAA,UAAA,CAAW,IAAA,EAAM,WAAW,KAAK,CAAA;AAAA,EACrC,CAAA;AACJ;AACA,SAAS,sBAAA,CAAuB,OAAO,IAAA,EAAM;AACzC,EAAA,SAAA,CAAU,KAAA,EAAO,CAAC,IAAA,KAAS;AACvB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,SAAS,IAAA,GAAO,EAAA;AAAA,EACjE,CAAC,CAAA;AACL;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,aAAN,MAAiB;AAAA,EACb,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,sBAAA,CAAuB,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,OAAO,GAAG,SAAS,CAAA;AAC7D,IAAA,IAAA,CAAK,aAAA,CAAc,YAAY,SAAS,CAAA;AAAA,EAC5C;AACJ,CAAA;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACnB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,GAAA,EAAK;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,gBAAA,CAAiB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EACnE;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,MACzC,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACpC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,MAC1B,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO;AAAA,KAChC,CAAA;AAAA,EACL;AAAA,EACA,SAAS,EAAA,EAAI;AACT,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAA,EAAS;AAAA,MACvB,WAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,qBAAA,GAAN,cAAoC,eAAA,CAAgB;AAAA,EAChD,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,MAAM,EAAA,GAAK,IAAI,gBAAA,CAAiB,GAAA,EAAK;AAAA,MACjC,OAAO,MAAA,CAAO,WAAA;AAAA,MACd,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,MAAM,EAAA,GAAK,IAAI,eAAA,CAAgB,GAAA,EAAK;AAAA,MAChC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,MAAA,CAAO,UAAA;AAAA,MACd,eAAA,EAAiB;AAAA,KACpB,CAAA;AACD,IAAA,KAAA,CAAM;AAAA,MACF,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,IAAA,CAAK,gBAAA,GAAmB,EAAA;AACxB,IAAA,IAAA,CAAK,eAAA,GAAkB,EAAA;AAAA,EAC3B;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,OAAO,CAAC,CAAA,KAAM,MAAM,WAAA,CAAY,CAAC,CAAA,IACrD,IAAA,CAAK,gBAAA,CAAiB,WAAA,CAAY,CAAC,CAAA,IACnC,IAAA,CAAK,gBAAgB,WAAA,CAAY,CAAC,GAAG,OAAO,EAAC,CAAA,EAAI,MAAM,IAAI,CAAA;AAAA,EACnE;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,gBAAA,CAAiB,MAAM,KAAA,CAAM,WAAA,IAAe,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,IAAI,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA,EAAG,KAAK,eAAA,CAAgB,WAAA,EAAa,CAAC,CAAA;AAAA,EAChK;AACJ,CAAA;AAEA,IAAM,SAAN,MAAa;AAAA,EACT,YAAY,IAAA,EAAM;AACd,IAAA,MAAM,CAAC,IAAA,EAAM,UAAU,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,SAAA,CAAU,CAAC,GAAG,EAAE,CAAA;AACtC,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,SAAA,CAAU,CAAC,GAAG,EAAE,CAAA;AACtC,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,SAAA,CAAU,CAAC,GAAG,EAAE,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,SAAS,UAAA,GAAa,IAAA;AAAA,EAClF;AAAA,EACA,QAAA,GAAW;AACP,IAAA,MAAM,IAAA,GAAO,CAAC,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC1D,IAAA,OAAO,IAAA,CAAK,UAAA,KAAe,IAAA,GAAO,CAAC,IAAA,EAAM,KAAK,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AAAA,EAC1E;AACJ,CAAA;AAEA,IAAM,SAAA,GAAY,IAAI,MAAA,CAAO,OAAO,CAAA;AAEpC,SAAS,aAAa,MAAA,EAAQ;AAC1B,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,IAAA,EAAM,SAAA,IAAa,MAAM,CAAA;AACpD;AAEA,IAAM,oBAAoB,YAAA,CAAa;AAAA,EACnC,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,OAAO,MAAA,EAAQ;AACX,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,KAAA,EAAO,EAAE,QAAA,CAAS,MAAA;AAAA,MAClB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAAA,MAClC,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,IAAA;AAAA,EACzC,CAAA;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,OAAO,IAAI,qBAAA,CAAsB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC5C,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAA,EAAa,SAAS,UAAA,CAAW;AAAA,QAC7B,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,MACD,UAAA,EAAY,SAAS,UAAA,CAAW;AAAA,QAC5B,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,MACD,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,IAAA,CAAK,sBAAsB,qBAAA,EAAuB;AAClD,MAAA,OAAO,IAAI,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAC,CAAA;AAED,SAAS,gBAAA,CAAiB,KAAK,MAAA,EAAQ;AACnC,EAAA,OAAO,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AACpF;AACA,SAAS,gBAAA,CAAiB,KAAK,MAAA,EAAQ;AACnC,EAAA,OAAO,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AACpF;AACA,SAAS,aAAA,CAAc,KAAK,MAAA,EAAQ;AAChC,EAAA,OAAO,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,CAAC,CAAA;AACjF;AAEA,SAAS,cAAc,KAAA,EAAO;AAC1B,EAAA,IAAI,CAAC,UAAA,CAAW,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,SAAA,IAAa,KAAA,IAAS,OAAO,KAAA,CAAM,OAAA,KAAY,UAAA;AAC1D;AAEA,SAAS,mBAAA,CAAoB,KAAK,GAAA,EAAK;AACnC,EAAA,IAAI,CAAC,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA,EAAG;AAChC,IAAA,MAAM,QAAQ,WAAA,EAAY;AAAA,EAC9B;AACA,EAAA,OAAO,IAAI,aAAA,CAAc,GAAA,EAAK,GAAG,CAAA;AACrC;AACA,IAAM,UAAN,MAAc;AAAA,EACV,WAAA,CAAY,YAAY,IAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,MAAM,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,aAAA,EAAe,IAAA,CAAK,kBAAkB,CAAA;AAAA,EAC1D;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,KAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,EAAE,CAAC,CAAA;AAAA,EAC9E;AAAA,EACA,UAAA,CAAW,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY;AAChC,IAAA,MAAM,SAAS,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,GAAS,aAAa,EAAC;AAC5E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,aAAA;AACrC,IAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,aAAA,CAAc,KAAK,mBAAA,CAAoB,MAAA,EAAQ,GAAG,CAAA,EAAG,MAAM,CAAA;AACjF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,EAAE,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EACrC;AAAA,EACA,UAAU,MAAA,EAAQ;AACd,IAAA,OAAO,gBAAA,CAAiB,MAAM,MAAM,CAAA;AAAA,EACxC;AAAA,EACA,UAAU,MAAA,EAAQ;AACd,IAAA,OAAO,gBAAA,CAAiB,MAAM,MAAM,CAAA;AAAA,EACxC;AAAA,EACA,OAAO,MAAA,EAAQ;AACX,IAAA,OAAO,aAAA,CAAc,MAAM,MAAM,CAAA;AAAA,EACrC;AAAA,EACA,GAAA,CAAI,KAAK,SAAA,EAAW;AAChB,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA;AACf,IAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AACvC,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,OAAO,GAAA,EAAK;AACR,IAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAAA,EAC/C;AAAA,EACA,SAAS,MAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,aAAA;AACrC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,KAAK,MAAM,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,EAAE,CAAA;AACnC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EACrC;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,KAAM;AACzB,MAAA,IAAI,aAAA,CAAc,CAAC,CAAA,EAAG;AAClB,QAAA,CAAA,CAAE,OAAA,EAAQ;AAAA,MACd;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EACA,mBAAmB,EAAA,EAAI;AACnB,IAAA,MAAM,KAAK,EAAA,CAAG,eAAA;AACd,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,EAAE,CAAA;AACnC,IAAA,MAAM,UAAU,cAAA,CAAe,EAAA,CAAG,KAAK,CAAA,GAAI,EAAA,CAAG,MAAM,OAAA,GAAU,IAAA;AAC9D,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,EAAU,IAAI,aAAA,CAAc,KAAK,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,IAAA,KAAS,EAAA,CAAG,KAAA,CAAM,UAAU,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,EAC7H;AACJ,CAAA;AAEA,IAAM,iBAAA,GAAN,cAAgC,QAAA,CAAS;AAAA,EACrC,WAAA,CAAY,YAAY,IAAA,EAAM;AAC1B,IAAA,KAAA,CAAM,UAAU,CAAA;AAChB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,CAAQ,UAAA,CAAW,gBAAgB,IAAI,CAAA;AAAA,EAC/D;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AAAA,EAC1B;AACJ,CAAA;AAEA,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EACnD,YAAY,MAAA,EAAQ;AAChB,IAAA,KAAA,CAAM;AAAA,MACF,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAA,EAAW,OAAO,cAAA,CAAe;AAAA,KACpC,CAAA;AACD,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAAA,EACjC;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,OAAO,CAAC,CAAA,KAAM,MAAM,WAAA,CAAY,CAAC,CAAA,EAAG,CAAC,CAAA,MAAO;AAAA,MAChE,UAAU,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,CAAA,CAAE,SAAS,GAAG;AAAA,KAC7C,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,OAAO,KAAK,cAAA,CAAe,IAAA,CAAK,SAAS,KAAA,CAAM,CAAC,GAAG,KAAA,KAAU;AACzD,QAAA,OAAO,CAAA,CAAE,WAAA,CAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MAC/C,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,gBAAA,CAAiB,MAAM,KAAA,CAAM,WAAA,EAAY,EAAG;AAAA,MAC/C,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa;AAAA,KACzE,CAAA;AAAA,EACL;AACJ,CAAA;AACA,SAAS,2BAA2B,EAAA,EAAI;AACpC,EAAA,OAAO,gBAAA,IAAoB,EAAA;AAC/B;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACnB,YAAY,OAAA,EAAS;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,MAAA,uBAAa,GAAA,EAAI;AACtB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EACpB;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACjC;AAAA,EACA,KAAK,QAAA,EAAU;AACX,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,QAAA,EAAS,EAAG;AAChC,MAAA,IAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AAChB,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,SAAS,IAAA,EAAM;AACX,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,EAC/B;AAAA,EACA,GAAA,CAAI,MAAM,SAAA,EAAW;AACjB,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACrB,MAAA,MAAM,QAAQ,iBAAA,EAAkB;AAAA,IACpC;AACA,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,KAAK,MAAA,CAAO,MAAA;AAChE,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,MAAA,CAAO,IAAI,IAAI,CAAA;AACpB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AAClC,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,OAAA,CAAQ,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,IAAA,CAAK,aAAa,CAAA;AAC5C,MAAA,OAAA,CAAQ,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,gBAAgB,CAAA;AAClD,MAAA,OAAA,CAAQ,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC9B,QAAA,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,MACrB,CAAC,CAAA;AAAA,IACL;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAA,EAAO;AAAA,MACrB,KAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,OAAO,IAAA,EAAM;AACT,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACtC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AACvB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AAClC,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,OAAA,CAAQ,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC9B,QAAA,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MACxB,CAAC,CAAA;AACD,MAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,aAAa,CAAA;AAC7C,MAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,gBAAgB,CAAA;AAAA,IACvD;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,KAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,cAAc,EAAA,EAAI;AACd,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AACvB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAA,EAAO;AAAA,MACrB,OAAO,EAAA,CAAG,KAAA;AAAA,MACV,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,IAAA,EAAM,IAAA;AAAA,MACN,QAAQ,EAAA,CAAG;AAAA,KACd,CAAA;AAAA,EACL;AAAA,EACA,iBAAiB,EAAA,EAAI;AACjB,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,EAAA,CAAG,IAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,OAAO,EAAA,CAAG,KAAA;AAAA,MACV,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,IAAA,EAAM,IAAA;AAAA,MACN,QAAQ,EAAA,CAAG;AAAA,KACd,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,SAAS,wBAAA,CAAyB,KAAK,CAAA,EAAG;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,EAAA,GAAK,IAAI,CAAC,CAAA;AAChB,IAAA,IAAI,sBAAA,CAAuB,EAAE,CAAA,IAAK,EAAA,CAAG,UAAU,CAAA,EAAG;AAC9C,MAAA,OAAO,EAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,0BAA0B,EAAA,EAAI;AACnC,EAAA,OAAO,2BAA2B,EAAE,CAAA,GAC9B,GAAG,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,GAC/B,IAAA;AACV;AACA,IAAM,OAAN,MAAW;AAAA,EACP,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,uBAAA,GAA0B,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,uBAAA,GAA0B,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,uBAAA,GAA0B,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,UAAU,EAAA,GAAK,MAAA,CAAO,WAAW,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA;AACnE,IAAA,CAAC,EAAA,GAAK,IAAA,CAAK,MAAA,MAAY,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,KAAA,CAAM,WAAW,CAAA,CAAE,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,uBAAuB,CAAA;AAC/H,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,gBAAA,CAAiB,yBAAyB,CAAA;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,KAAK,SAAS,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,YAAY,CAAA;AAAA,EACtD;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,KAAK,MAAA,CAAO,KAAA;AAAA,EACvB;AAAA,EACA,GAAA,CAAI,IAAI,SAAA,EAAW;AACf,IAAA,IAAI,EAAA;AACJ,IAAA,CAAC,EAAA,GAAK,GAAG,MAAA,MAAY,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,MAAA,CAAO,EAAE,CAAA;AAClE,IAAA,EAAA,CAAG,MAAA,GAAS,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AAAA,EACjC;AAAA,EACA,OAAO,EAAA,EAAI;AACP,IAAA,EAAA,CAAG,MAAA,GAAS,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,EACzB;AAAA,EACA,KAAK,MAAA,EAAQ;AACT,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,QAAA,EAAS,CAAE,OAAO,MAAM,CAAA;AAAA,EAC/C;AAAA,EACA,UAAU,EAAA,EAAI;AACV,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,IAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAA,EAAO;AAAA,MACrB,iBAAiB,EAAA,CAAG,IAAA;AAAA,MACpB,OAAO,EAAA,CAAG,KAAA;AAAA,MACV,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACX,CAAA;AACD,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,EAAA,CAAG,IAAA;AACd,IAAA,EAAA,CAAG,SAAA,CAAU,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,uBAAuB,CAAA;AAC9D,IAAA,EAAA,CAAG,KAAA,CACE,MAAM,WAAW,CAAA,CACjB,QAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,uBAAuB,CAAA;AACtD,IAAA,EAAA,CAAG,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,eAAe,CAAA;AAC/C,IAAA,IAAI,sBAAA,CAAuB,EAAE,CAAA,EAAG;AAC5B,MAAA,EAAA,CAAG,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,mBAAmB,CAAA;AAAA,IAC1D,CAAA,MAAA,IACS,0BAAA,CAA2B,EAAE,CAAA,EAAG;AACrC,MAAA,MAAM,IAAA,GAAO,GAAG,cAAA,CAAe,IAAA;AAC/B,MAAA,IAAI,IAAA,EAAM;AACN,QAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,QAAA,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AACvC,QAAA,OAAA,CAAQ,EAAA,CAAG,aAAA,EAAe,IAAA,CAAK,kBAAkB,CAAA;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,IAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,iBAAiB,EAAA,CAAG,IAAA;AAAA,MACpB,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACX,CAAA;AACD,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,EAAA,CAAG,IAAA;AACd,IAAA,IAAI,sBAAA,CAAuB,EAAE,CAAA,EAAG;AAC5B,MAAA,EAAA,CAAG,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,KAAK,mBAAmB,CAAA;AAAA,IAC3D,CAAA,MAAA,IACS,0BAAA,CAA2B,EAAE,CAAA,EAAG;AACrC,MAAA,MAAM,IAAA,GAAO,GAAG,cAAA,CAAe,IAAA;AAC/B,MAAA,IAAI,IAAA,EAAM;AACN,QAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AACxC,QAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,kBAAkB,CAAA;AAAA,MACtD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gBAAA,GAAmB;AACf,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,EAAA,KAAO,CAAC,EAAA,CAAG,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AACjF,IAAA,MAAM,gBAAA,GAAmB,aAAa,CAAC,CAAA;AACvC,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAA,KAAO;AAC9B,MAAA,MAAM,KAAK,EAAC;AACZ,MAAA,IAAI,OAAO,gBAAA,EAAkB;AACzB,QAAA,EAAA,CAAG,KAAK,OAAO,CAAA;AACf,QAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IACN,IAAA,CAAK,MAAA,CAAO,IAAI,WAAW,CAAA,CAAE,QAAA,CAAS,WAAW,CAAA,EAAG;AACpD,UAAA,EAAA,CAAG,KAAK,WAAW,CAAA;AAAA,QACvB;AAAA,MACJ;AACA,MAAA,IAAI,OAAO,eAAA,EAAiB;AACxB,QAAA,EAAA,CAAG,KAAK,MAAM,CAAA;AACd,QAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,IAAI,WAAW,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,EAAG;AACnE,UAAA,EAAA,CAAG,KAAK,UAAU,CAAA;AAAA,QACtB;AAAA,MACJ;AACA,MAAA,EAAA,CAAG,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,IAChC,CAAC,CAAA;AAAA,EACL;AAAA,EACA,uBAAA,GAA0B;AACtB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,wBAAwB,GAAA,EAAK;AACzB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,eAAA,GAAkB;AACd,IAAA,MAAM,cAAc,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,EAAA,KAAO;AACjD,MAAA,OAAO,EAAA,CAAG,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AAAA,IACtC,CAAC,CAAA;AACD,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,EAAA,KAAO;AACxB,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IACzB,CAAC,CAAA;AAAA,EACL;AAAA,EACA,oBAAoB,EAAA,EAAI;AACpB,IAAA,MAAM,KAAK,wBAAA,CAAyB,IAAA,CAAK,KAAK,sBAAsB,CAAA,EAAG,GAAG,MAAM,CAAA;AAChF,IAAA,IAAI,CAAC,EAAA,EAAI;AACL,MAAA,MAAM,QAAQ,eAAA,EAAgB;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,aAAA,EAAe;AAAA,MAC7B,eAAA,EAAiB,EAAA;AAAA,MACjB,SAAS,EAAA,CAAG,OAAA;AAAA,MACZ,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,cAAc,CAAA,EAAG;AACb,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU;AAAA,MACxB,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,mBAAmB,EAAA,EAAI;AACnB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,aAAA,EAAe;AAAA,MAC7B,iBAAiB,EAAA,CAAG,eAAA;AAAA,MACpB,SAAS,EAAA,CAAG,OAAA;AAAA,MACZ,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AAAA,EACA,uBAAA,GAA0B;AACtB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,EAC1B;AACJ,CAAA;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK;AAAA,MAClB,KAAA,EAAO,MAAA,CAAO,IAAA,GAAO,MAAA,GAAY,MAAA,CAAO,KAAA;AAAA,MACxC,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,IAAA,CAAK,UAAU,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,SAAA,CAAU,cAAc,MAAM;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,KAAK,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACrD,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC/B,QAAA,EAAA,CAAG,SAAA,CAAU,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAAA,MACrC;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAW,EAAA,EAAI;AACX,IAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACV,MAAA;AAAA,IACJ;AACA,IAAA,eAAA,CAAgB,KAAK,OAAA,EAAS,EAAA,CAAG,gBAAgB,IAAA,CAAK,OAAA,EAAS,GAAG,KAAK,CAAA;AAAA,EAC3E;AAAA,EACA,cAAc,EAAA,EAAI;AACd,IAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACV,MAAA;AAAA,IACJ;AACA,IAAA,aAAA,CAAc,EAAA,CAAG,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA;AAAA,EACjD;AACJ,CAAA;AAEA,SAAS,WAAA,GAAc;AACnB,EAAA,OAAO,IAAI,QAAA,CAAS;AAAA,IAChB,SAAA,EAAW,WAAA,CAAY,EAAC,EAAG;AAAA,MACvB,MAAA,EAAQ;AAAA,KACX;AAAA,GACJ,CAAA;AACL;AAEA,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,QAAA,CAAS;AAAA,EAC5B,YAAY,QAAA,EAAU;AAClB,IAAA,KAAA,CAAM,QAAQ,CAAA;AAAA,EAClB;AAAA,EACA,OAAO,OAAO,QAAA,EAAU;AACpB,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,QAAA;AAAA,MACA,cAAA,EAAgB,IAAA;AAAA,MAChB,eAAA,EAAiB,KAAA;AAAA,MACjB,iBAAA,EAAmB;AAAA,KACvB;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA;AACxC,IAAA,OAAO,IAAI,UAAS,IAAI,CAAA;AAAA,EAC5B;AAAA,EACA,IAAI,aAAA,GAAgB;AAChB,IAAA,IAAI,EAAA;AACJ,IAAA,OAAA,CAAQ,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,mBAAmB,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAAA,EACpG;AAAA,EACA,IAAI,WAAA,GAAc;AACd,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACrB,MAAA,OAAO,GAAA;AAAA,IACX;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,gBAAgB,CAAA;AAC1C,IAAA,IAAI,KAAK,GAAA,CAAI,iBAAiB,KAAK,CAAC,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACnD,MAAA,OAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EACA,iBAAA,CAAkB,MAAM,iBAAA,EAAmB;AACvC,IAAA,MAAM,WAAW,MAAM;AACnB,MAAA,MAAM,WAAW,IAAA,CAAK,aAAA;AACtB,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,IAAA,CAAK,SAAA,CAAU,IAAI,iBAAiB,CAAA;AAAA,MACxC,CAAA,MACK;AACD,QAAA,IAAA,CAAK,SAAA,CAAU,OAAO,iBAAiB,CAAA;AAAA,MAC3C;AAAA,IACJ,CAAA;AACA,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AACvC,IAAA,YAAA,CAAa,IAAA,EAAM,qBAAqB,QAAQ,CAAA;AAAA,EACpD;AAAA,EACA,iBAAA,GAAoB;AAChB,IAAA,IAAA,CAAK,GAAA,CAAI,mBAAmB,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,GAAA,CAAI,kBAAkB,IAAI,CAAA;AAC/B,IAAA,IAAA,CAAK,GAAA,CAAI,aAAa,IAAI,CAAA;AAAA,EAC9B;AACJ,CAAA;AACA,SAAS,2BAAA,CAA4B,QAAQ,gBAAA,EAAkB;AAC3D,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,4BAAA,CAA6B,kBAAkB,MAAM;AACjD,IAAA,MAAA,CAAO,GAAA,CAAI,kBAAkB,IAAI,CAAA;AACjC,IAAA,MAAA,CAAO,GAAA,CAAI,qBAAqB,IAAI,CAAA;AACpC,IAAA,WAAA,CAAY,gBAAgB,CAAA;AAC5B,IAAA,MAAA,GAAS,gBAAA,CAAiB,YAAA;AAC1B,IAAA,MAAA,CAAO,GAAA,CAAI,qBAAqB,IAAI,CAAA;AACpC,IAAA,WAAA,CAAY,gBAAgB,CAAA;AAAA,EAChC,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACX;AACA,SAAS,WAAA,CAAY,UAAU,IAAA,EAAM;AACjC,EAAA,IAAA,CAAK,KAAA,CAAM,SAAS,QAAA,CAAS,WAAA;AACjC;AACA,SAAS,YAAA,CAAa,UAAU,IAAA,EAAM;AAClC,EAAA,QAAA,CAAS,MAAM,UAAU,CAAA,CAAE,OAAA,CAAQ,EAAA,CAAG,gBAAgB,MAAM;AACxD,IAAA,QAAA,CAAS,GAAA,CAAI,aAAa,KAAK,CAAA;AAC/B,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,gBAAgB,CAAC,CAAA,EAAG;AACzC,MAAA,MAAM,CAAA,GAAI,2BAAA,CAA4B,QAAA,EAAU,IAAI,CAAA;AACpD,MAAA,IAAI,IAAI,CAAA,EAAG;AACP,QAAA,QAAA,CAAS,GAAA,CAAI,kBAAkB,CAAC,CAAA;AAAA,MACpC;AAAA,IACJ;AACA,IAAA,QAAA,CAAS,GAAA,CAAI,mBAAmB,IAAI,CAAA;AACpC,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EACpB,CAAC,CAAA;AACD,EAAA,QAAA,CAAS,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,MAAM;AAChC,IAAA,WAAA,CAAY,UAAU,IAAI,CAAA;AAAA,EAC9B,CAAC,CAAA;AACD,EAAA,WAAA,CAAY,UAAU,IAAI,CAAA;AAC1B,EAAA,IAAA,CAAK,gBAAA,CAAiB,eAAA,EAAiB,CAAC,EAAA,KAAO;AAC3C,IAAA,IAAI,EAAA,CAAG,iBAAiB,QAAA,EAAU;AAC9B,MAAA;AAAA,IACJ;AACA,IAAA,QAAA,CAAS,iBAAA,EAAkB;AAAA,EAC/B,CAAC,CAAA;AACL;AAEA,IAAM,SAAA,GAAN,cAAwB,iBAAA,CAAkB;AAAA,EACtC,WAAA,CAAY,YAAY,IAAA,EAAM;AAC1B,IAAA,KAAA,CAAM,YAAY,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,UAAA,CAAW,SACX,KAAA,CAAM,UAAU,EAChB,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC9B,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,MAAA,EAAQ,IAAI,YAAY,IAAA,EAAM,EAAA,CAAG,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,IACxE,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC/B,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,EAAE,CAAA;AAAA,IACnC,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,EAClD;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AAAA,EACrD;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA;AAAA,EAC5C;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AAAA,EAC5C;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,KAAK,QAAA,CAAS,QAAA;AAAA,EACzB;AAAA,EACA,UAAA,CAAW,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY;AAChC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,MAAA,EAAQ,KAAK,UAAU,CAAA;AAAA,EAC3D;AAAA,EACA,UAAU,MAAA,EAAQ;AACd,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,UAAU,MAAA,EAAQ;AACd,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,OAAO,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAAA,EACtC;AAAA,EACA,GAAA,CAAI,KAAK,SAAA,EAAW;AAChB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,SAAS,CAAA;AAAA,EAC3C;AAAA,EACA,OAAO,GAAA,EAAK;AACR,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,EAC5B;AAAA,EACA,SAAS,MAAA,EAAQ;AACb,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,EACxC;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAM,uBAAA,GAA0B,UAAU,KAAK,CAAA;AAE/C,IAAM,aAAN,MAAiB;AAAA,EACb,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAI,EAAA;AACJ,IAAA,IAAA,CAAK,UAAA,GAAa,WAAW,EAAA,GAAK,MAAA,CAAO,cAAc,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,KAAK,CAAA;AACzF,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,KAAK,UAAA,EAAW,EAAG,yBAAyB,CAAA;AACvE,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,QAAA;AACxB,IAAA,IAAA,CAAK,SAAA,CAAU,kBAAkB,IAAA,CAAK,OAAA,EAAS,KAAK,UAAA,CAAW,MAAA,EAAW,UAAU,CAAC,CAAA;AACrF,IAAA,YAAA,CAAa,IAAA,CAAK,SAAA,EAAW,WAAA,EAAa,gBAAA,CAAiB,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,MAAA,EAAW,KAAK,CAAC,CAAC,CAAA;AAC3G,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA;AAC7C,IAAA,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,CAAC,KAAA,KAAU;AAC3C,MAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChB,QAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,KAAK,UAAA,CAAW,MAAA,EAAW,KAAK,CAAC,CAAA;AAAA,MAChE,CAAA,MACK;AACD,QAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,MAAA,CAAO,KAAK,UAAA,CAAW,MAAA,EAAW,KAAK,CAAC,CAAA;AAAA,MACnE;AAAA,IACJ,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA;AAC5C,IAAA,sBAAA,CAAuB,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,OAAO,GAAG,SAAS,CAAA;AAC7D,IAAA,IAAA,CAAK,aAAA,CAAc,YAAY,SAAS,CAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,CAAc,YAAY,QAAQ,CAAA;AACvC,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC7C,IAAA,aAAA,CAAc,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,aAAa,CAAA;AACtC,IAAA,IAAA,CAAK,gBAAA,GAAmB,aAAA;AAAA,EAC5B;AACJ,CAAA;AAEA,IAAM,gBAAA,GAAN,cAA+B,wBAAA,CAAyB;AAAA,EACpD,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAI,EAAA;AACJ,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAA,CAAQ,EAAA,GAAK,MAAA,CAAO,cAAc,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAI,CAAA;AAC7F,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,GAAA,EAAK;AAAA,MAC7B,QAAA;AAAA,MACA,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAA,EAAU,MAAA,CAAO,IAAA,GAAO,KAAA,GAAQ,MAAA;AAAA,MAChC,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,cAAA,EAAgB,IAAI,cAAA,CAAe;AAAA,MAC5E,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,IAAA,CAAK,gBAAA;AAAA,MACd,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA,EAAG,IAAA,EAAY,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,YAAA,CAAa,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAA;AACtD,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,OAAO,MAAM;AAC7C,MAAA,IAAA,CAAK,SAAS,iBAAA,EAAkB;AAAA,IACpC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AAChD,MAAA,IAAA,CAAK,SAAS,iBAAA,EAAkB;AAAA,IACpC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,gBAAA,CAAiB,OAAA,EAAS,KAAK,aAAa,CAAA;AAAA,EACxE;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,KAAK,OAAA,CAAQ,aAAA;AAAA,EAC7B;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,OAAO,CAAC,CAAA,KAAM,MAAM,WAAA,CAAY,CAAC,CAAA,EAAG,CAAC,CAAA,MAAO;AAAA,MAChE,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,MACrB,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAA;AAC7C,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACpC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,gBAAA,CAAiB,MAAM,KAAA,CAAM,WAAA,EAAY,EAAG;AAAA,MAC/C,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,MACtC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO;AAAA,KAChC,CAAA;AAAA,EACL;AAAA,EACA,aAAA,GAAgB;AACZ,IAAA,IAAA,CAAK,QAAA,CAAS,IAAI,UAAA,EAAY,CAAC,KAAK,QAAA,CAAS,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,EAChE;AACJ,CAAA;AAEA,IAAM,oBAAoB,YAAA,CAAa;AAAA,EACnC,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,OAAO,MAAA,EAAQ;AACX,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,KAAA,EAAO,EAAE,QAAA,CAAS,MAAA;AAAA,MAClB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAAA,MAClC,QAAA,EAAU,EAAE,QAAA,CAAS;AAAA,KACzB,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,IAAA;AAAA,EACzC,CAAA;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,OAAO,IAAI,gBAAA,CAAiB,IAAA,CAAK,QAAA,EAAU;AAAA,MACvC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,KAAK,MAAA,CAAO,QAAA;AAAA,MACtB,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,QACvB,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,MACD,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,EAAE,IAAA,CAAK,UAAA,YAAsB,gBAAA,CAAA,EAAmB;AAChD,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAI,SAAA,CAAU,IAAA,CAAK,UAAA,EAAY,KAAK,IAAI,CAAA;AAAA,EACnD;AACJ,CAAC,CAAA;AAED,IAAM,IAAA,GAAO,UAAU,EAAE,CAAA;AACzB,SAAS,eAAA,CAAgB,MAAM,QAAA,EAAU;AACrC,EAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,IAAA,CAAK,MAAA,EAAW,QAAQ,CAAC,CAAA;AAC3D;AACA,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkB,QAAA,CAAS;AAAA,EAC7B,YAAY,QAAA,EAAU;AAClB,IAAA,IAAI,EAAA;AACJ,IAAA,KAAA,CAAM,QAAQ,CAAA;AACd,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,6BAAA,GACD,IAAA,CAAK,6BAAA,CAA8B,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,CAAC,IAAA,CAAK,eAAA,EAAiB,IAAA,CAAK,kBAAkB,CAAA,GAAI,oBAAoB,WAAA,CAAY,IAAA,CAAK,kBAAA,EAAoB,CAAC,CAAA;AAC5G,IAAA,IAAA,CAAK,MAAM,UAAU,CAAA,CAAE,QAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,iBAAiB,CAAA;AAClE,IAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAE,QAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,eAAe,CAAA;AAC9D,IAAA,CAAC,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,QAAQ,OAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,GAAG,cAAA,CAAe,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,6BAA6B,CAAA;AAAA,EAC5I;AAAA,EACA,OAAO,OAAO,gBAAA,EAAkB;AAC5B,IAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,IAAA,MAAM,eAAe,gBAAA,KAAqB,IAAA,IAAQ,gBAAA,KAAqB,MAAA,GAAS,mBAAmB,EAAC;AACpG,IAAA,OAAO,IAAI,UAAA,CAAU,QAAA,CAAS,UAAA,CAAW;AAAA,MACrC,WAAW,EAAA,GAAK,YAAA,CAAa,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,MACxE,QAAA,EAAU,KAAA;AAAA,MACV,SAAS,EAAA,GAAK,YAAA,CAAa,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,MACpE,SAAS,EAAA,GAAK,YAAA,CAAa,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK;AAAA,KACvE,CAAC,CAAA;AAAA,EACN;AAAA,EACA,IAAI,cAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EAChB;AAAA,EACA,mBAAmB,IAAA,EAAM;AACrB,IAAA,SAAA,CAAU,IAAA,CAAK,eAAA,EAAiB,eAAA,CAAgB,IAAA,EAAM,UAAU,CAAC,CAAA;AACjE,IAAA,YAAA,CAAa,IAAA,EAAM,QAAA,EAAU,eAAA,CAAgB,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,EAChE;AAAA,EACA,aAAa,MAAA,EAAQ;AACjB,IAAA,SAAA,CAAU,IAAA,CAAK,eAAA,EAAiB,CAAC,QAAA,KAAa;AAC1C,MAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACL;AAAA,EACA,aAAa,IAAA,EAAM;AACf,IAAA,SAAA,CAAU,IAAA,CAAK,eAAA,EAAiB,CAAC,QAAA,KAAa;AAC1C,MAAA,IAAA,CAAK,QAAA,GAAW,WAAW,EAAA,GAAK,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACL;AAAA,EACA,cAAc,QAAA,EAAU;AACpB,IAAA,IAAA,CAAK,MAAM,UAAU,CAAA,CAAE,QAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,QAAA,KAAa;AACtD,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,QAAA,EAAS;AAAA,MACb;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,KAAA,CAAM,QAAQ,CAAA;AACnC,IAAA,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,KAAA,CAAM,MAAM,CAAA;AAAA,EACnC;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAAA,MAC7B,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,QAAQ;AAAA,KAC7B;AAAA,EACJ;AAAA,EACA,kBAAA,GAAqB;AACjB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA;AAChC,IAAA,MAAM,cAAA,GAAiB,MAAA,GAAS,MAAA,CAAO,cAAA,CAAe,QAAA,GAAW,KAAA;AACjE,IAAA,OAAO,cAAA,IAAkB,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAAA,EAChD;AAAA,EACA,qBAAA,GAAwB;AACpB,IAAA,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,kBAAA,EAAoB,CAAA;AAAA,EACrD;AAAA,EACA,iBAAA,GAAoB;AAChB,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC/B;AAAA,EACA,6BAAA,GAAgC;AAC5B,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC/B;AAAA,EACA,gBAAgB,EAAA,EAAI;AAChB,IAAA,IAAI,EAAA;AACJ,IAAA,MAAM,aAAa,EAAA,CAAG,gBAAA;AACtB,IAAA,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,GAAS,MAAA,GAAS,UAAA,CAAW,eAAe,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,6BAA6B,CAAA;AAC1I,IAAA,CAAC,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,QAAQ,OAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,GAAG,cAAA,CAAe,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,6BAA6B,CAAA;AACxI,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC/B;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,cAAN,MAAkB;AAAA,EACd,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC7C,IAAA,aAAA,CAAc,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACrC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,aAAa,CAAA;AACtC,IAAA,IAAA,CAAK,gBAAA,GAAmB,aAAA;AAAA,EAC5B;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,cAAN,MAAkB;AAAA,EACd,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,UAAA,EAAY,CAAC,QAAA,KAAa;AACjD,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AAAA,MACrD,CAAA,MACK;AACD,QAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AAAA,MACxD;AAAA,IACJ,CAAC,CAAA;AACD,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,sBAAA,CAAuB,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,OAAO,GAAG,SAAS,CAAA;AAC7D,IAAA,IAAA,CAAK,aAAA,CAAc,YAAY,SAAS,CAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AAAA,EACxB;AACJ,CAAA;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACpB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,WAAA,CAAY,GAAA,EAAK;AAAA,MAC7B,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,gBAAA,CAAiB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EACnE;AAAA,EACA,QAAA,GAAW;AACP,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAA,EAAS;AAAA,MACvB,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,iBAAA,GAAN,cAAgC,wBAAA,CAAyB;AAAA,EACrD,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,MAAM,IAAA,GAAO,IAAI,WAAA,CAAY,GAAA,EAAK;AAAA,MAC9B,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,cAAA,EAAgB,IAAI,cAAA,CAAe;AAAA,MAC5E,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,IAAA,CAAK,gBAAA;AAAA,MACd,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA,EAAG,IAAA,EAAY,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,iBAAA,CAAkB,GAAA,EAAK;AAAA,MAClC,OAAO,MAAA,CAAO,SAAA;AAAA,MACd,SAAA,EAAW,UAAU,MAAA;AAAO,KAC/B,CAAA;AACD,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,EAAA,CAAG,OAAA,EAAS,KAAK,YAAY,CAAA;AAC9C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,UAAA,EAAY,CAAC,QAAA,KAAa;AAC/C,MAAA,IAAA,CAAK,cAAA,CAAe,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AAClD,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,CAAC,QAAQ,CAAA;AAAA,IAC1C,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,cAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EAChB;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,OAAO,CAAC,CAAA,KAAM,MAAM,WAAA,CAAY,CAAC,CAAA,EAAG,CAAC,CAAA,MAAO;AAAA,MAChE,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,MACrB,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,OAAO,QAAQ,CAAA;AAC9C,MAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,OAAO,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,gBAAA,CAAiB,MAAM,KAAA,CAAM,WAAA,EAAY,EAAG;AAAA,MAC/C,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,UAAU,CAAA;AAAA,MACvC,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,OAAO;AAAA,KACpC,CAAA;AAAA,EACL;AAAA,EACA,YAAA,GAAe;AACX,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAAA,EACnC;AACJ,CAAA;AAEA,IAAM,MAAA,GAAN,cAAqB,iBAAA,CAAkB;AAAA,EACnC,WAAA,CAAY,YAAY,IAAA,EAAM;AAC1B,IAAA,KAAA,CAAM,YAAY,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC/B,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,EAAE,CAAA;AAAA,IACnC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,WAAW,GAAA,CAAI,aAAA,CAAc,QAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAAA,EACzE;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,KAAK,QAAA,CAAS,QAAA;AAAA,EACzB;AAAA,EACA,QAAQ,MAAA,EAAQ;AACZ,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,aAAA;AACzC,IAAA,MAAM,EAAA,GAAK,IAAI,iBAAA,CAAkB,GAAA,EAAK;AAAA,MAClC,OAAO,WAAA,EAAY;AAAA,MACnB,SAAA,EAAW,SAAS,UAAA,CAAW;AAAA,QAC3B,QAAA,EAAU,KAAA;AAAA,QACV,OAAO,MAAA,CAAO;AAAA,OACjB,CAAA;AAAA,MACD,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,QACvB,QAAA,EAAU;AAAA,OACb,CAAA;AAAA,MACD,SAAA,EAAW,UAAU,MAAA;AAAO,KAC/B,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,EAAE,CAAA;AACpC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,OAAO,KAAK,CAAA;AAAA,EAC/C;AAAA,EACA,WAAW,KAAA,EAAO;AACd,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EACtD;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,UAAU,EAAA,EAAI;AACV,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,QAAA,EAAU,IAAI,iBAAiB,IAAA,EAAM,EAAA,CAAG,QAAQ,CAAC,CAAA;AAAA,EACxE;AACJ,CAAA;AAEA,IAAM,UAAA,GAAN,cAAyB,iBAAA,CAAkB;AAAA,EACvC,IAAI,KAAA,GAAQ;AACR,IAAA,IAAI,EAAA;AACJ,IAAA,OAAA,CAAQ,EAAA,GAAK,IAAA,CAAK,UAAA,CAAW,cAAA,CAAe,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,EAAA;AAAA,EACrG;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,cAAA,CAAe,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC3D;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AAAA,EAC/C;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AAAA,EAClD;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,KAAK,QAAA,CAAS,QAAA;AAAA,EACzB;AAAA,EACA,UAAU,MAAA,EAAQ;AACd,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,UAAU,MAAA,EAAQ;AACd,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,OAAO,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAAA,EACtC;AAAA,EACA,GAAA,CAAI,KAAK,SAAA,EAAW;AAChB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,SAAS,CAAA;AAAA,EACpC;AAAA,EACA,OAAO,GAAA,EAAK;AACR,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,EAC5B;AAAA,EACA,UAAA,CAAW,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY;AAChC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,MAAA,EAAQ,KAAK,UAAU,CAAA;AAAA,EAC3D;AAAA,EACA,SAAS,MAAA,EAAQ;AACb,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,EACxC;AACJ,CAAA;AAEA,IAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAM,MAAN,MAAU;AAAA,EACN,WAAA,GAAc;AACV,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC7B,IAAA,IAAA,CAAK,aAAA,GAAgB,YAAY,kBAAkB,CAAA;AACnD,IAAA,IAAA,CAAK,SAAS,EAAC;AAAA,EACnB;AAAA,EACA,GAAA,CAAI,MAAM,SAAA,EAAW;AACjB,IAAA,MAAM,QAAQ,SAAA,KAAc,IAAA,IAAQ,cAAc,MAAA,GAAS,SAAA,GAAY,KAAK,MAAA,CAAO,MAAA;AACnF,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,qBAAqB,CAAA;AACpD,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA,EACxB;AAAA,EACA,OAAO,IAAA,EAAM;AACT,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACtC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAC3B,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,qBAAqB,CAAA;AACrD,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA,EACxB;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,cAAc,QAAA,GAAW,kBAAA;AAC9B,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,IAAA;AACtB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,gBAAgB,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAC7D,IAAA,IAAI,gBAAgB,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,QAAA,CAAA,CAAE,WAAW,CAAA,KAAM,CAAA;AAAA,MACvB,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,cAAc,QAAA,GAAW,CAAA;AAAA,IAClC,CAAA,MACK;AACD,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,QAAA,CAAA,CAAE,WAAW,CAAA,KAAM,aAAA;AAAA,MACvB,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,cAAc,QAAA,GAAW,aAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,MAAM,QAAA,GAAW,KAAA;AAAA,EAC1B;AAAA,EACA,sBAAsB,EAAA,EAAI;AACtB,IAAA,IAAI,GAAG,QAAA,EAAU;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,KAAM,GAAG,MAAM,CAAA;AAC1D,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,QAAA,CAAA,CAAE,WAAW,CAAA,KAAM,KAAA;AAAA,MACvB,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,cAAc,QAAA,GAAW,KAAA;AAAA,IAClC,CAAA,MACK;AACD,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACxB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,UAAN,MAAc;AAAA,EACV,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAK,EAAG,yBAAyB,CAAA;AAC5D,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,SAAA,CAAU,MAAA,CAAO,OAAO,gBAAA,CAAiB,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAC,CAAA;AAC9E,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC5C,IAAA,YAAA,CAAa,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACpC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,YAAY,CAAA;AACrC,IAAA,IAAA,CAAK,eAAA,GAAkB,YAAA;AAAA,EAC3B;AACJ,CAAA;AAEA,IAAM,aAAA,GAAN,cAA4B,wBAAA,CAAyB;AAAA,EACjD,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AACpB,IAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,EAAK;AAAA,MAC1B,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,KAAA,CAAM;AAAA,MACF,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,cAAA,EAAgB,IAAI,cAAA,CAAe;AAAA,QAC/B,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,SAAS,IAAA,CAAK,eAAA;AAAA,QACd,WAAW,MAAA,CAAO;AAAA,OACrB,CAAA;AAAA,MACD;AAAA,KACH,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,cAAA,CAAe,IAAA;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,IAAA,CAAK,UAAU,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AAC5C,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACf;AAAA,EACA,GAAA,CAAI,IAAI,SAAA,EAAW;AACf,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AAAA,EAC9C;AAAA,EACA,OAAO,KAAA,EAAO;AACV,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,MAAA,CAAO,IAAA,CAAK,eAAe,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EAC5E;AAAA,EACA,WAAW,EAAA,EAAI;AACX,IAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,EAAA,CAAG,eAAA;AACd,IAAA,eAAA,CAAgB,IAAA,CAAK,KAAK,YAAA,EAAc,EAAA,CAAG,eAAe,IAAA,CAAK,OAAA,EAAS,GAAG,KAAK,CAAA;AAChF,IAAA,EAAA,CAAG,cAAA,CAAe,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,KAAK,SAAS,CAAA;AACxD,IAAA,IAAA,CAAK,IAAI,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,EAC3C;AAAA,EACA,cAAc,EAAA,EAAI;AACd,IAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,EAAA,CAAG,eAAA;AACd,IAAA,aAAA,CAAc,EAAA,CAAG,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA;AAC5C,IAAA,EAAA,CAAG,cAAA,CAAe,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAC9C,IAAA,IAAA,CAAK,IAAI,MAAA,CAAO,EAAA,CAAG,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,EAC9C;AACJ,CAAA;AAEA,IAAM,iBAAiB,YAAA,CAAa;AAAA,EAChC,EAAA,EAAI,KAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,OAAO,MAAA,EAAQ;AACX,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,EAAE,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,MAAA,EAAQ,CAAC,CAAA;AAAA,MACvE,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK;AAAA,KACnC,CAAE,CAAA;AACF,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,EAAG;AACtC,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,EAC5B,CAAA;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,MAAM,CAAA,GAAI,IAAI,aAAA,CAAc,IAAA,CAAK,QAAA,EAAU;AAAA,MACvC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC7B,MAAA,MAAM,EAAA,GAAK,IAAI,iBAAA,CAAkB,IAAA,CAAK,QAAA,EAAU;AAAA,QAC5C,OAAO,WAAA,EAAY;AAAA,QACnB,SAAA,EAAW,SAAS,UAAA,CAAW;AAAA,UAC3B,QAAA,EAAU,KAAA;AAAA,UACV,OAAO,CAAA,CAAE;AAAA,SACZ,CAAA;AAAA,QACD,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,UACvB,QAAA,EAAU;AAAA,SACb,CAAA;AAAA,QACD,SAAA,EAAW,UAAU,MAAA;AAAO,OAC/B,CAAA;AACD,MAAA,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,IACZ,CAAC,CAAA;AACD,IAAA,OAAO,CAAA;AAAA,EACX,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,IAAA,CAAK,sBAAsB,aAAA,EAAe;AAC1C,MAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,KAAK,IAAI,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,IAAA,CAAK,sBAAsB,iBAAA,EAAmB;AAC9C,MAAA,OAAO,IAAI,UAAA,CAAW,IAAA,CAAK,UAAA,EAAY,KAAK,IAAI,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAC,CAAA;AAED,SAAS,qBAAA,CAAsB,QAAQ,IAAA,EAAM;AACzC,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AACpC,EAAA,IAAI,CAAC,EAAA,EAAI;AACL,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,IAC5C,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,IACrB,MAAA,EAAQ,EAAE,QAAA,CAAS;AAAA,GACvB,CAAE,CAAA;AACF,EAAA,OAAO,OAAO,UAAA,CAAW;AAAA,IACrB,OAAO,WAAA,EAAY;AAAA,IACnB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,MAAA,EAAQ,SAAA,CAAU,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,EAAA,CAAG,MAAM,CAAA,EAAG,EAAE,QAAA,EAAU,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAAA,IACnN,SAAA,EAAW,UAAU,MAAA,CAAO;AAAA,MACxB,UAAU,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,QAAA;AAAA,MACjE,QAAQ,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO;AAAA,KAClE;AAAA,GACJ,CAAA;AACL;AAEA,IAAM,mBAAA,GAAN,cAAkC,UAAA,CAAW;AAAA,EACzC,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,SAAS,CAAA;AAAA,EAC9D;AAAA,EACA,IAAI,QAAQ,OAAA,EAAS;AACjB,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,WAAW,OAAO,CAAA;AAAA,EAChE;AACJ,CAAA;AAEA,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,GAAc;AACV,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAAA,EAC/B;AAAA,EACA,OAAA,GAAU;AAAA,EAAE;AAAA,EACZ,IAAA,GAAO;AACH,IAAA,IAAI,KAAK,QAAA,EAAU;AACf,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,EAAQ;AAAA,MACtB,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,KAAK,QAAA,EAAU;AACvB,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,IAAA,CAAK,SAAA,EAAU;AAAA,EACnB;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EAChB;AAAA,EACA,IAAI,SAAS,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,IAAI,KAAK,SAAA,EAAW;AAChB,MAAA,IAAA,CAAK,WAAA,EAAY;AAAA,IACrB,CAAA,MACK;AACD,MAAA,IAAA,CAAK,SAAA,EAAU;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,WAAA,EAAY;AAAA,EACrB;AAAA,EACA,WAAA,GAAc;AACV,IAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,WAAA;AACtB,IAAA,IAAI,GAAA,EAAK;AACL,MAAA,GAAA,CAAI,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA,IACnC;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EACA,SAAA,GAAY;AACR,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,IAAI,IAAA,CAAK,aAAa,CAAA,EAAG;AACrB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,WAAA;AACtB,IAAA,IAAI,GAAA,EAAK;AACL,MAAA,IAAA,CAAK,WAAW,GAAA,CAAI,WAAA,CAAY,IAAA,CAAK,OAAA,EAAS,KAAK,SAAS,CAAA;AAAA,IAChE;AAAA,EACJ;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAI,KAAK,SAAA,EAAW;AAChB,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,EAAQ;AAAA,MACtB,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,sBAAN,MAA0B;AAAA,EACtB,YAAY,WAAA,EAAa;AACrB,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACvB;AAAA,EACA,UAAU,KAAA,EAAO;AACb,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,CAAC,QAAQ,CAAA,KAAM;AAC1C,MAAA,OAAO,CAAA,CAAE,UAAU,MAAM,CAAA;AAAA,IAC7B,GAAG,KAAK,CAAA;AAAA,EACZ;AACJ,CAAA;AACA,SAAS,cAAA,CAAe,GAAG,eAAA,EAAiB;AACxC,EAAA,IAAI,aAAa,eAAA,EAAiB;AAC9B,IAAA,OAAO,CAAA;AAAA,EACX;AACA,EAAA,IAAI,aAAa,mBAAA,EAAqB;AAClC,IAAA,MAAM,SAAS,CAAA,CAAE,WAAA,CAAY,MAAA,CAAO,CAAC,WAAW,EAAA,KAAO;AACnD,MAAA,IAAI,SAAA,EAAW;AACX,QAAA,OAAO,SAAA;AAAA,MACX;AACA,MAAA,OAAO,EAAA,YAAc,kBAAkB,EAAA,GAAK,IAAA;AAAA,IAChD,GAAG,IAAI,CAAA;AACP,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,YAAY,OAAA,EAAS;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAS,UAAA,CAAW;AAAA,MAC9B;AAAA,KACH,CAAA;AAAA,EACL;AAAA,EACA,UAAU,KAAA,EAAO;AACb,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AACtC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,KAAS;AAClC,MAAA,OAAO,KAAK,KAAA,KAAU,KAAA;AAAA,IAC1B,CAAC,EAAE,MAAA,GAAS,CAAA;AACZ,IAAA,OAAO,OAAA,GAAU,KAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA;AAAA,EACrC;AACJ,CAAA;AAEA,SAAS,iBAAiB,KAAA,EAAO;AAC7B,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,CAAA,GAAI,YAAA;AACV,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,IAAA,OAAA,CAAQ,KAAK,WAAA,CAAY,EAAE,OAAO,KAAA,EAAM,EAAG,CAACC,EAAAA,MAAO;AAAA,MAC/C,OAAOA,EAAAA,CAAE,QAAA,CAAS,KAAA,CAAMA,EAAAA,CAAE,SAAS,MAAA,CAAO;AAAA,QACtC,IAAA,EAAMA,GAAE,QAAA,CAAS,MAAA;AAAA,QACjB,KAAA,EAAOA,GAAE,QAAA,CAAS;AAAA,OACrB,CAAC;AAAA,MACJ,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,SAAS,EAAA,CAAG,KAAA;AAAA,EACjD;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,CACtB,KAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACX;AACA,SAAS,qBAAqB,OAAA,EAAS;AACnC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,OAAA;AAAA,EACX;AACA,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACnC,IAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAY,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,EACnD,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACX;AACA,SAAS,qBAAqB,OAAA,EAAS;AACnC,EAAA,OAAO,CAAC,OAAA,CAAQ,OAAO,CAAA,GACjB,IAAI,cAAA,CAAe,oBAAA,CAAqB,SAAA,CAAU,OAAO,CAAC,CAAC,CAAA,GAC3D,IAAA;AACV;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,WAAN,MAAe;AAAA,EACX,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,QAAA,CAAS,WAAA,CAAY,oBAAA,CAAqB,GAAA,EAAK,UAAU,CAAC,CAAA;AAC1D,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AACjC,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,CAAC,IAAA,KAAS;AAC3C,MAAA,mBAAA,CAAoB,KAAK,aAAa,CAAA;AACtC,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,KAAS;AACnB,QAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,QAAA,UAAA,CAAW,cAAc,IAAA,CAAK,IAAA;AAC9B,QAAA,IAAA,CAAK,aAAA,CAAc,YAAY,UAAU,CAAA;AAAA,MAC7C,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACjB,CAAC,CAAA;AAAA,EACL;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,SAAS,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AAC5D,IAAA,IAAA,CAAK,cAAc,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,EAC1E;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,GAAA,EAAK;AAAA,MAC1B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,gBAAA,CAAiB,QAAA,EAAU,KAAK,eAAe,CAAA;AAAA,EAC3E;AAAA,EACA,gBAAgB,CAAA,EAAG;AACf,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,CAAA,CAAE,aAAa,CAAA;AAC5C,IAAA,IAAA,CAAK,KAAA,CAAM,WACP,IAAA,CAAK,KAAA,CAAM,IAAI,SAAS,CAAA,CAAE,UAAA,CAAW,aAAa,CAAA,CAAE,KAAA;AAAA,EAC5D;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,MACzC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,gBAAgB;AAAA,KAC/C,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,SAAA,EAAW,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAC,CAAA;AAC9D,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,MAC1B,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAS;AAAA,KACpC,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,YAAN,MAAgB;AAAA,EACZ,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,SAAA,CAAU,MAAA,CAAO,OAAO,gBAAA,CAAiB,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,EAAW,GAAG,CAAC,CAAC,CAAA;AAAA,EAChF;AACJ,CAAA;AAEA,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC9B,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,SAAA,CAAU,GAAA,EAAK;AAAA,MAC3B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,WAAN,MAAe;AAAA,EACX,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAC/C,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,SAAA,CAAU,IAAA,GAAO,MAAA;AACjB,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,SAAS,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAChD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAA,CAAK,YAAA,CAAa,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,EAC5D;AAAA,EACA,SAAA,GAAY;AACR,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,GAAA,EAAK;AAAA,MAC1B,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,QAAA,EAAU,KAAK,cAAc,CAAA;AAAA,EACzE;AAAA,EACA,eAAe,CAAA,EAAG;AACd,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,CAAA,CAAE,aAAa,CAAA;AAC3C,IAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAW,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,WAAA;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,KAAK,OAAA,EAAQ;AAAA,EACtB;AACJ,CAAA;AAEA,SAAS,aAAa,KAAA,EAAO;AACzB,EAAA,OAAO,OAAO,KAAK,CAAA;AACvB;AACA,SAAS,gBAAgB,KAAA,EAAO;AAC5B,EAAA,IAAI,UAAU,OAAA,EAAS;AACnB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAC,CAAC,KAAA;AACb;AACA,SAAS,iBAAiB,KAAA,EAAO;AAC7B,EAAA,OAAO,aAAa,KAAK,CAAA;AAC7B;AAEA,SAAS,eAAe,OAAA,EAAS;AAC7B,EAAA,OAAO,CAAC,IAAA,KAAS;AACb,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,EAAQ,MAAA,KAAW;AACtC,MAAA,IAAI,WAAW,IAAA,EAAM;AACjB,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,OAAO,OAAO,IAAI,CAAA;AAAA,IACtB,GAAG,IAAI,CAAA;AAAA,EACX,CAAA;AACJ;AAEA,IAAM,cAAA,GAAiB,sBAAsB,CAAC,CAAA;AAC9C,SAAS,iBAAiB,KAAA,EAAO;AAC7B,EAAA,OAAO,cAAA,CAAe,KAAK,CAAA,GAAI,GAAA;AACnC;AAEA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,OAAO,OAAO,KAAK,CAAA;AACvB;AACA,SAAS,aAAa,KAAA,EAAO;AACzB,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,cAAc,EAAE,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,UAAU,EAAG;AAC/D,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,SAAS,gBAAgB,QAAA,EAAU;AAC/B,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,QAAA,EAAS;AACT,IAAA,QAAA,GAAW,KAAA;AAAA,EACf;AACA,EAAA,OAAA,CAAQ,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AACjC,IAAA,eAAA,CAAgB,MAAM;AAClB,MAAA,SAAA,CAAU,WAAA,CAAY,QAAQ,OAAA,CAAQ,QAAA,EAAU,UAAU,QAAQ,CAAA,EAAG,GAAG,OAAO,CAAA;AAAA,IACnF,CAAC,CAAA;AAAA,EACL,CAAC,CAAA;AACD,EAAA,SAAA,CAAU,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AACnC,IAAA,eAAA,CAAgB,MAAM;AAClB,MAAA,OAAA,CAAQ,WAAA,CAAY,SAAS,OAAA,CAAQ,QAAA,EAAU,UAAU,QAAQ,CAAA,EAAG,GAAG,OAAO,CAAA;AAAA,IAClF,CAAC,CAAA;AACD,IAAA,eAAA,CAAgB,MAAM;AAClB,MAAA,SAAA,CAAU,WAAA,CAAY,QAAQ,OAAA,CAAQ,QAAA,EAAU,UAAU,QAAQ,CAAA,EAAG,GAAG,OAAO,CAAA;AAAA,IACnF,CAAC,CAAA;AAAA,EACL,CAAC,CAAA;AACD,EAAA,eAAA,CAAgB,MAAM;AAClB,IAAA,SAAA,CAAU,YAAY,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,SAAA,CAAU,QAAQ,CAAA,EAAG;AAAA,MACjE,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL,CAAC,CAAA;AACL;AAEA,SAAS,aAAA,CAAc,UAAU,IAAA,EAAM;AACnC,EAAA,MAAM,IAAA,GAAO,YAAY,IAAA,CAAK,MAAA,GAAS,MAAM,CAAA,CAAA,IAAM,IAAA,CAAK,WAAW,EAAA,GAAK,CAAA,CAAA;AACxE,EAAA,IAAI,KAAK,KAAA,EAAO;AACZ,IAAA,OAAO,CAAC,IAAA;AAAA,EACZ,CAAA,MAAA,IACS,KAAK,OAAA,EAAS;AACnB,IAAA,OAAO,CAAC,IAAA;AAAA,EACZ;AACA,EAAA,OAAO,CAAA;AACX;AACA,SAAS,oBAAoB,EAAA,EAAI;AAC7B,EAAA,OAAO;AAAA,IACH,QAAQ,EAAA,CAAG,MAAA;AAAA,IACX,OAAA,EAAS,GAAG,GAAA,KAAQ,WAAA;AAAA,IACpB,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,KAAA,EAAO,GAAG,GAAA,KAAQ;AAAA,GACtB;AACJ;AACA,SAAS,sBAAsB,EAAA,EAAI;AAC/B,EAAA,OAAO;AAAA,IACH,QAAQ,EAAA,CAAG,MAAA;AAAA,IACX,OAAA,EAAS,GAAG,GAAA,KAAQ,WAAA;AAAA,IACpB,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,KAAA,EAAO,GAAG,GAAA,KAAQ;AAAA,GACtB;AACJ;AACA,SAAS,mBAAmB,GAAA,EAAK;AAC7B,EAAA,OAAO,GAAA,KAAQ,aAAa,GAAA,KAAQ,WAAA;AACxC;AACA,SAAS,WAAW,GAAA,EAAK;AACrB,EAAA,OAAO,kBAAA,CAAmB,GAAG,CAAA,IAAK,GAAA,KAAQ,eAAe,GAAA,KAAQ,YAAA;AACrE;AAEA,SAAS,eAAA,CAAgB,IAAI,IAAA,EAAM;AAC/B,EAAA,IAAI,EAAA,EAAI,EAAA;AACR,EAAA,MAAM,GAAA,GAAM,KAAK,aAAA,CAAc,WAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,KAAK,qBAAA,EAAsB;AACxC,EAAA,OAAO;AAAA,IACH,CAAA,EAAG,EAAA,CAAG,KAAA,IAAA,CAAA,CAAW,EAAA,GAAM,GAAA,IAAO,GAAA,CAAI,OAAA,MAAc,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,CAAA,IAAK,IAAA,CAAK,IAAA,CAAA;AAAA,IACvF,CAAA,EAAG,EAAA,CAAG,KAAA,IAAA,CAAA,CAAW,EAAA,GAAM,GAAA,IAAO,GAAA,CAAI,OAAA,MAAc,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,CAAA,IAAK,IAAA,CAAK,GAAA;AAAA,GAC3F;AACJ;AACA,IAAM,iBAAN,MAAqB;AAAA,EACjB,YAAY,OAAA,EAAS;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA;AACb,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC3B,IAAA,OAAA,CAAQ,gBAAA,CAAiB,YAAA,EAAc,IAAA,CAAK,aAAA,EAAe;AAAA,MACvD,OAAA,EAAS;AAAA,KACZ,CAAA;AACD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,YAAA,EAAc;AAAA,MACrD,OAAA,EAAS;AAAA,KACZ,CAAA;AACD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,UAAA,EAAY,IAAA,CAAK,WAAW,CAAA;AACrD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,YAAY,CAAA;AAAA,EAC3D;AAAA,EACA,iBAAiB,MAAA,EAAQ;AACrB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,qBAAA,EAAsB;AAC9C,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ;AAAA,QACJ,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK;AAAA,OACjB;AAAA,MACA,OAAO,MAAA,GACD;AAAA,QACE,GAAG,MAAA,CAAO,CAAA;AAAA,QACV,GAAG,MAAA,CAAO;AAAA,OACd,GACE;AAAA,KACV;AAAA,EACJ;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAI,EAAA;AACJ,IAAA,EAAA,CAAG,cAAA,EAAe;AAClB,IAAA,CAAC,EAAA,GAAK,GAAG,aAAA,MAAmB,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,GAAG,KAAA,EAAM;AACtE,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,aAAA;AACvB,IAAA,GAAA,CAAI,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,oBAAoB,CAAA;AAC3D,IAAA,GAAA,CAAI,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,kBAAkB,CAAA;AACvD,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,EAAQ;AAAA,MACtB,QAAQ,EAAA,CAAG,MAAA;AAAA,MACX,MAAM,IAAA,CAAK,gBAAA,CAAiB,gBAAgB,EAAA,EAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MAC3D,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,EAAA,CAAG;AAAA,KAChB,CAAA;AAAA,EACL;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,EAAQ;AAAA,MACtB,QAAQ,EAAA,CAAG,MAAA;AAAA,MACX,MAAM,IAAA,CAAK,gBAAA,CAAiB,gBAAgB,EAAA,EAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MAC3D,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,EAAA,CAAG;AAAA,KAChB,CAAA;AAAA,EACL;AAAA,EACA,mBAAmB,EAAA,EAAI;AACnB,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,aAAA;AACvB,IAAA,GAAA,CAAI,mBAAA,CAAoB,WAAA,EAAa,IAAA,CAAK,oBAAoB,CAAA;AAC9D,IAAA,GAAA,CAAI,mBAAA,CAAoB,SAAA,EAAW,IAAA,CAAK,kBAAkB,CAAA;AAC1D,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,EAAM;AAAA,MACpB,QAAQ,EAAA,CAAG,MAAA;AAAA,MACX,MAAM,IAAA,CAAK,gBAAA,CAAiB,gBAAgB,EAAA,EAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MAC3D,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,EAAA,CAAG;AAAA,KAChB,CAAA;AAAA,EACL;AAAA,EACA,cAAc,EAAA,EAAI;AACd,IAAA,EAAA,CAAG,cAAA,EAAe;AAClB,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,qBAAA,EAAsB;AAC9C,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,EAAQ;AAAA,MACtB,QAAQ,EAAA,CAAG,MAAA;AAAA,MACX,IAAA,EAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,GACtB;AAAA,QACE,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,IAAA;AAAA,QACxB,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK;AAAA,UAE1B,MAAS,CAAA;AAAA,MACf,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,EAAA,CAAG;AAAA,KAChB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAAA,EACtB;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,qBAAA,EAAsB;AAC9C,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,EAAQ;AAAA,MACtB,QAAQ,EAAA,CAAG,MAAA;AAAA,MACX,IAAA,EAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,GACtB;AAAA,QACE,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,IAAA;AAAA,QACxB,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK;AAAA,UAE1B,MAAS,CAAA;AAAA,MACf,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,EAAA,CAAG;AAAA,KAChB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAAA,EACtB;AAAA,EACA,YAAY,EAAA,EAAI;AACZ,IAAA,IAAI,EAAA;AACJ,IAAA,MAAM,KAAA,GAAA,CAAS,EAAA,GAAK,EAAA,CAAG,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAA,CAAK,UAAA;AACpF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,qBAAA,EAAsB;AAC9C,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,EAAM;AAAA,MACpB,QAAQ,EAAA,CAAG,MAAA;AAAA,MACX,IAAA,EAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,GACtB;AAAA,QACE,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,IAAA;AAAA,QACxB,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK;AAAA,UAE1B,MAAS,CAAA;AAAA,MACf,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,EAAA,CAAG;AAAA,KAChB,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,UAAU,GAAA,CAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AACzD,IAAA,IAAI,OAAO,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,KAAK,MAAA,EAAW,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,IACpE;AACA,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,SAAA,CAAU,IAAA,GAAO,MAAA;AACjB,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,SAAS,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,QAAA;AACxB,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,iBAAiB,CAAA;AAC1D,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AACjC,IAAA,IAAA,CAAK,WAAA,GAAc,QAAA;AACnB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AACnD,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,IAAA,CAAK,WAAA,CAAY,YAAY,SAAS,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,MAAM,CAAA;AACnD,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACjC,IAAA,SAAA,CAAU,YAAY,QAAQ,CAAA;AAC9B,IAAA,IAAA,CAAK,cAAA,GAAiB,QAAA;AACtB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,MAAM,CAAA;AACnD,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACjC,IAAA,SAAA,CAAU,YAAY,QAAQ,CAAA;AAC9B,IAAA,IAAA,CAAK,cAAA,GAAiB,QAAA;AACtB,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,WAAA,CAAY,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,IAAI,GAAG,CAAA;AAC3C,IAAA,IAAA,CAAK,WAAA,CAAY,YAAY,WAAW,CAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AACpB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAChD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,kBAAkB,EAAA,EAAI;AAClB,IAAA,IAAI,EAAA,CAAG,aAAa,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AACpD,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAA;AACjD,IAAA,MAAM,IAAI,EAAA,CAAG,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,IAAI,cAAc,CAAA;AACtD,IAAA,MAAM,MAAM,CAAA,IAAK,CAAA,GAAI,IAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAK,CAAA,CAAA;AAC3C,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,CAAC,GAAA,EAAK,IAAI,CAAE,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,IAAA,EAAM,GAAA,EAAK,CAAC,CAAA,EAAA,EAAK,GAAA,GAAM,GAAG,CAAA,IAAA,EAAO,GAAG,CAAA,IAAA,EAAO,MAAM,GAAG,CAAA,EAAA,CAAA,EAAM,KAAK,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,EAAA,CAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAC3H,IAAA,IAAA,CAAK,eAAe,cAAA,CAAe,IAAA,EAAM,GAAA,EAAK,CAAA,OAAA,EAAU,CAAC,CAAA,EAAA,CAAI,CAAA;AAC7D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAA,CAAK,YAAA,CAAa,WAAA,GAAc,SAAA,CAAU,IAAA,CAAK,MAAM,QAAQ,CAAA;AAC7D,IAAA,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA;AAAA,EACvC;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAA,CAAK,YAAA,CAAa,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,EAC3D;AAAA,EACA,SAAA,GAAY;AACR,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,uBAAN,MAA2B;AAAA,EACvB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAI,EAAA;AACJ,IAAA,IAAA,CAAK,eAAA,GAAkB,CAAA;AACvB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,gBAAgB,EAAA,GAAK,MAAA,CAAO,iBAAiB,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA;AAC/E,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,SAAA,GAAY,YAAY,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,cAAA,CAAe,GAAA,EAAK;AAAA,MAChC,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,QAAA,EAAU,KAAK,cAAc,CAAA;AACrE,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,SAAA,EAAW,KAAK,eAAe,CAAA;AACvE,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,OAAA,EAAS,KAAK,aAAa,CAAA;AACnE,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,WAAW,CAAA;AACnD,IAAA,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,IAAA,CAAK,cAAc,CAAA;AACzC,IAAA,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,IAAA,CAAK,cAAc,CAAA;AACzC,IAAA,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,IAAA,CAAK,YAAY,CAAA;AAAA,EACzC;AAAA,EACA,gBAAgB,KAAA,EAAO;AACnB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,MAAM,GAAA,GAAA,CAAO,EAAA,GAAK,IAAA,CAAK,YAAA,MAAkB,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,GAAA,CAAI,KAAK,CAAA;AACtF,IAAA,MAAM,GAAA,GAAA,CAAO,EAAA,GAAK,IAAA,CAAK,YAAA,MAAkB,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,GAAA,CAAI,KAAK,CAAA;AACtF,IAAA,IAAI,CAAA,GAAI,KAAA;AACR,IAAA,IAAI,QAAQ,MAAA,EAAW;AACnB,MAAA,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAAA,IACvB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAW;AACnB,MAAA,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,CAAA;AAAA,EACX;AAAA,EACA,eAAe,CAAA,EAAG;AACd,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,CAAA,CAAE,aAAa,CAAA;AAC3C,IAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAW,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,WAAW,CAAA;AAAA,IAC1D;AACA,IAAA,IAAA,CAAK,KAAK,OAAA,EAAQ;AAAA,EACtB;AAAA,EACA,gBAAgB,EAAA,EAAI;AAChB,IAAA,MAAM,IAAA,GAAO,cAAc,IAAA,CAAK,KAAA,CAAM,IAAI,UAAU,CAAA,EAAG,mBAAA,CAAoB,EAAE,CAAC,CAAA;AAC9E,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,YAAY,IAAA,CAAK,eAAA,CAAgB,KAAK,KAAA,CAAM,QAAA,GAAW,IAAI,CAAA,EAAG;AAAA,MACrE,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,cAAc,EAAA,EAAI;AACd,IAAA,MAAM,IAAA,GAAO,cAAc,IAAA,CAAK,KAAA,CAAM,IAAI,UAAU,CAAA,EAAG,mBAAA,CAAoB,EAAE,CAAC,CAAA;AAC9E,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MACxC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,KAAA,CAAM,QAAA;AAClC,IAAA,IAAA,CAAK,UAAU,QAAA,GAAW,CAAA;AAAA,EAC9B;AAAA,EACA,sBAAsB,IAAA,EAAM;AACxB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,IAAA,CAAK,OAAO,KAAA,GAAQ,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,gBAAgB,IAAA,CAAK,eAAA,GAAkB,KAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,cAAc,CAAC,CAAA;AAAA,EAC1F;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,qBAAA,CAAsB,EAAA,CAAG,IAAI,CAAA;AAC5C,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,EAAG;AAAA,MACtB,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,CAAU,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,WAAW,IAAA,CAAK,eAAA;AAAA,EACzD;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,qBAAA,CAAsB,EAAA,CAAG,IAAI,CAAA;AAC5C,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,EAAG;AAAA,MACtB,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AACD,IAAA,IAAA,CAAK,UAAU,QAAA,GAAW,IAAA;AAAA,EAC9B;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,aAAN,MAAiB;AAAA,EACb,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,SAAS,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AACtC,IAAA,IAAA,CAAK,WAAA,GAAc,QAAA;AACnB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,SAAS,CAAA;AAChD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,CAAA,GAAI,eAAe,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,EAAU,IAAA,CAAK,OAAO,GAAA,CAAI,KAAK,GAAG,IAAA,CAAK,MAAA,CAAO,IAAI,KAAK,CAAA,EAAG,GAAG,GAAG,CAAA,EAAG,GAAG,GAAG,CAAA;AACtH,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AAAA,EACvC;AAAA,EACA,SAAA,GAAY;AACR,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACnB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,GAAA,EAAK;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,YAAY,CAAA;AAC3D,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,oBAAoB,CAAA;AAC5D,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,oBAAoB,CAAA;AAC5D,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,KAAK,YAAY,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,SAAA,EAAW,KAAK,UAAU,CAAA;AAClE,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EAClE;AAAA,EACA,mBAAA,CAAoB,GAAG,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,EAAE,KAAA,EAAO;AACV,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,cAAA,CAAe,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,EACxJ;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAW,EAAA,EAAI;AACX,IAAA,MAAM,IAAA,GAAO,cAAc,IAAA,CAAK,KAAA,CAAM,IAAI,UAAU,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAChF,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,WAAW,IAAA,EAAM;AAAA,MAC/C,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,SAAS,EAAA,EAAI;AACT,IAAA,MAAM,IAAA,GAAO,cAAc,IAAA,CAAK,KAAA,CAAM,IAAI,UAAU,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAChF,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MACxC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,QAAQ,CAAA;AAC/B,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,UAAA;AAC1B,IAAA,UAAA,CAAW,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AAC/C,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,QAAA;AACxB,IAAA,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AAAA,EACrC;AACJ,CAAA;AAEA,IAAM,uBAAN,MAA2B;AAAA,EACvB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,gBAAA,CAAiB,GAAA,EAAK;AAAA,MACtC,OAAO,MAAA,CAAO,WAAA;AAAA,MACd,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,oBAAA,CAAqB,GAAA,EAAK;AAAA,MACxC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,MAAA,CAAO,SAAA;AAAA,MACd,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,cAAA,CAAe,GAAA,EAAK;AAAA,MAChC,UAAA,EAAY,KAAK,QAAA,CAAS,IAAA;AAAA,MAC1B,QAAA,EAAU,KAAK,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACL;AAAA,EACA,IAAI,gBAAA,GAAmB;AACnB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EACA,IAAI,cAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,MACzC,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,MAChB,GAAA,EAAK,EAAE,QAAA,CAAS;AAAA,KACpB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,MAAM,WAAA,GAAc,KAAK,QAAA,CAAS,KAAA;AAClC,MAAA,WAAA,CAAY,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AACjC,MAAA,WAAA,CAAY,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AACjC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,MAAM,WAAA,GAAc,KAAK,QAAA,CAAS,KAAA;AAClC,IAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,MAC1B,GAAA,EAAK,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AAAA,MAC1B,GAAA,EAAK,WAAA,CAAY,GAAA,CAAI,KAAK;AAAA,KAC7B,CAAA;AAAA,EACL;AACJ,CAAA;AACA,SAAS,sBAAsB,MAAA,EAAQ;AACnC,EAAA,OAAO;AAAA,IACH,WAAA,EAAa,IAAI,QAAA,CAAS;AAAA,MACtB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACf,CAAA;AAAA,IACD,SAAA,EAAW,IAAI,QAAA,CAAS;AAAA,MACpB,SAAA,EAAW,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,MACvC,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAA,EAAc,WAAA,CAAY,MAAA,CAAO,YAAY;AAAA,KAChD;AAAA,GACL;AACJ;AAEA,IAAM,WAAA,GAAc;AAAA,EAChB,iBAAA,EAAmB;AACvB,CAAA;AACA,SAAS,UAAU,GAAA,EAAK;AACpB,EAAA,OAAO,CAAA,EAAA,EAAK,WAAA,CAAY,GAAG,CAAC,CAAA,CAAA;AAChC;AAEA,SAAS,2BAA2B,CAAA,EAAG;AACnC,EAAA,OAAO,kCAAkC,CAAC,CAAA;AAC9C;AACA,SAAS,0BAA0B,KAAA,EAAO;AACtC,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AAClB,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,OAAO,WAAA,CAAY,OAAO,0BAA0B,CAAA;AACxD;AACA,SAAS,yBAAA,CAA0B,QAAQ,YAAA,EAAc;AACrD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACT,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,MAAM,cAAc,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,MAAA,EAAQ,YAAY,CAAA;AACpD,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,EAAA,GAAK,sBAAsB,MAAM,CAAA;AACvC,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAI,oBAAoB,WAAW,CAAA;AAC9C;AAEA,SAAS,aAAa,GAAA,EAAK;AACvB,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA,CAAI,UAAU,SAAA,CAAU,KAAA;AACnC;AAEA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,OAAA,EAAS;AACzC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,cAAA,CAAe,QAAQ,KAAA,EAAO;AACnC,EAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AACtB;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,SAAA,CAAU,IAAA,GAAO,UAAA;AACjB,IAAA,IAAA,CAAK,YAAA,CAAa,YAAY,SAAS,CAAA;AACvC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAA,CAAO,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,YAAY,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,WAAA,CAAY,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACnC,IAAA,IAAA,CAAK,YAAA,CAAa,YAAY,WAAW,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,GAAA,EAAK,OAAO,CAAA;AAClD,IAAA,WAAA,CAAY,YAAY,QAAQ,CAAA;AAChC,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,YAAA,CAAa,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,QAAA;AAAA,EAC3C;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACrB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,GAAA,EAAK;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,QAAA,EAAU,KAAK,cAAc,CAAA;AACrE,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,gBAAA,CAAiB,WAAA,EAAa,KAAK,iBAAiB,CAAA;AAAA,EAC/E;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,EAAA,CAAG,aAAa,CAAA;AAC5C,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,SAAA,CAAU,OAAA;AAChC,IAAA,EAAA,CAAG,cAAA,EAAe;AAClB,IAAA,EAAA,CAAG,eAAA,EAAgB;AAAA,EACvB;AAAA,EACA,kBAAkB,EAAA,EAAI;AAClB,IAAA,EAAA,CAAG,cAAA,EAAe;AAAA,EACtB;AACJ,CAAA;AAEA,SAAS,mBAAmB,MAAA,EAAQ;AAChC,EAAA,MAAM,cAAc,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAA;AAC9C,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAI,oBAAoB,WAAW,CAAA;AAC9C;AACA,IAAM,qBAAqB,YAAA,CAAa;AAAA,EACpC,EAAA,EAAI,YAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC5B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,gBAAgB,CAAA;AAAA,MAC3C,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK;AAAA,KACvC,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU,eAAA;AAAA,IACnB,UAAA,EAAY,CAAC,IAAA,KAAS,kBAAA,CAAmB,KAAK,MAAM,CAAA;AAAA,IACpD,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,IAAA,MAAM,EAAA,GAAK,CAAA,IAAK,cAAA,CAAe,CAAA,EAAG,cAAc,CAAA;AAChD,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,OAAO,IAAI,eAAe,GAAA,EAAK;AAAA,QAC3B,KAAA,EAAO,IAAI,QAAA,CAAS;AAAA,UAChB,OAAA,EAAS,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,SAAS;AAAA,SACrC,CAAA;AAAA,QACD,KAAA;AAAA,QACA,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,IACL;AACA,IAAA,OAAO,IAAI,mBAAmB,GAAA,EAAK;AAAA,MAC/B,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,aAAa,SAAA,EAAW;AACrD,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,cAAA,EAAgB;AAC3D,MAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAC,CAAA;AAED,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,YAAN,MAAgB;AAAA,EACZ,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,EAAW,UAAU,CAAC,CAAA;AAC3E,IAAA,YAAA,CAAa,MAAA,CAAO,QAAA,EAAU,WAAA,EAAa,gBAAA,CAAiB,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,EAAW,KAAK,CAAC,CAAC,CAAA;AACjG,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,QAAA,CAAS,YAAY,UAAU,CAAA;AAC/B,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,QAAA,CAAS,YAAY,QAAQ,CAAA;AAC7B,IAAA,IAAA,CAAK,WAAA,GAAc,QAAA;AACnB,IAAA,IAAI,MAAA,CAAO,iBAAiB,QAAA,EAAU;AAClC,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,MAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,MAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AAAA,IACzB,CAAA,MACK;AACD,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACzB;AAAA,EACJ;AACJ,CAAA;AAEA,SAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAChC,EAAA,MAAM,IAAI,IAAA,GAAO,IAAA;AACjB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,CAAA,GAAA,CAAK,OAAO,IAAA,IAAQ,CAAA;AAC1B,EAAA,IAAI,MAAM,CAAA,EAAG;AACT,IAAA,CAAA,GAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,OAAO,CAAC,CAAA,CAAA;AACrC,IAAA,IAAI,OAAO,IAAA,EAAM;AACb,MAAA,CAAA,GAAA,CAAK,KAAK,EAAA,IAAM,CAAA;AAAA,IACpB,CAAA,MAAA,IACS,OAAO,IAAA,EAAM;AAClB,MAAA,CAAA,GAAI,CAAA,GAAA,CAAK,KAAK,EAAA,IAAM,CAAA;AAAA,IACxB,CAAA,MACK;AACD,MAAA,CAAA,GAAI,CAAA,GAAA,CAAK,KAAK,EAAA,IAAM,CAAA;AAAA,IACxB;AACA,IAAA,CAAA,GAAI,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,CAAC,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,GAAA,EAAK,IAAI,GAAG,CAAA;AACrC;AACA,SAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,EAAA,MAAM,EAAA,GAAA,CAAO,CAAA,GAAI,GAAA,GAAO,GAAA,IAAO,GAAA;AAC/B,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,KAAK,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,GAAI,EAAA,GAAK,CAAC,CAAA,IAAK,EAAA;AACvC,EAAA,MAAM,CAAA,GAAI,KAAK,CAAA,GAAI,IAAA,CAAK,IAAM,EAAA,GAAK,EAAA,GAAM,IAAK,CAAC,CAAA,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AACnB,EAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,EAAA,IAAI,EAAA,IAAM,CAAA,IAAK,EAAA,GAAK,EAAA,EAAI;AACpB,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,GAAA,EAAK;AAC3B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,GAAA,IAAO,EAAA,GAAK,GAAA,EAAK;AAC5B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,GAAA,IAAO,EAAA,GAAK,GAAA,EAAK;AAC5B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,GAAA,IAAO,EAAA,GAAK,GAAA,EAAK;AAC5B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MACK;AACD,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,CAAA,CAAE,KAAK,CAAA,IAAK,GAAA,EAAA,CAAM,KAAK,CAAA,IAAK,GAAA,EAAA,CAAM,EAAA,GAAK,CAAA,IAAK,GAAG,CAAA;AAC1D;AACA,SAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAChC,EAAA,MAAM,IAAI,IAAA,GAAO,IAAA;AACjB,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,MAAM,CAAA,EAAG;AACT,IAAA,CAAA,GAAI,CAAA;AAAA,EACR,CAAA,MAAA,IACS,SAAS,EAAA,EAAI;AAClB,IAAA,CAAA,GAAI,EAAA,IAAA,CAAA,CAAU,EAAA,GAAK,EAAA,IAAM,CAAA,GAAK,IAAK,CAAA,IAAK,CAAA,CAAA;AAAA,EAC5C,CAAA,MAAA,IACS,SAAS,EAAA,EAAI;AAClB,IAAA,CAAA,GAAI,EAAA,IAAA,CAAO,EAAA,GAAK,EAAA,IAAM,CAAA,GAAI,CAAA,CAAA;AAAA,EAC9B,CAAA,MACK;AACD,IAAA,CAAA,GAAI,EAAA,IAAA,CAAO,EAAA,GAAK,EAAA,IAAM,CAAA,GAAI,CAAA,CAAA;AAAA,EAC9B;AACA,EAAA,MAAM,CAAA,GAAI,IAAA,KAAS,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,IAAA;AAC/B,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,OAAO,CAAC,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,IAAI,GAAG,CAAA;AAC/B;AACA,SAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,cAAA,CAAe,CAAA,GAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,IAAI,EAAA,GAAK,EAAA;AACf,EAAA,MAAM,CAAA,GAAI,KAAK,CAAA,GAAI,IAAA,CAAK,IAAM,EAAA,GAAK,EAAA,GAAM,IAAK,CAAC,CAAA,CAAA;AAC/C,EAAA,MAAM,IAAI,EAAA,GAAK,CAAA;AACf,EAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,EAAA,IAAI,EAAA,IAAM,CAAA,IAAK,EAAA,GAAK,EAAA,EAAI;AACpB,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,GAAA,EAAK;AAC3B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,GAAA,IAAO,EAAA,GAAK,GAAA,EAAK;AAC5B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,GAAA,IAAO,EAAA,GAAK,GAAA,EAAK;AAC5B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MAAA,IACS,EAAA,IAAM,GAAA,IAAO,EAAA,GAAK,GAAA,EAAK;AAC5B,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B,CAAA,MACK;AACD,IAAA,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,CAAA,CAAE,KAAK,CAAA,IAAK,GAAA,EAAA,CAAM,KAAK,CAAA,IAAK,GAAA,EAAA,CAAM,EAAA,GAAK,CAAA,IAAK,GAAG,CAAA;AAC1D;AACA,SAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,EAAA,MAAM,EAAA,GAAK,CAAA,GAAK,CAAA,IAAK,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,GAAI,GAAG,CAAA,CAAA,IAAO,CAAA,GAAI,GAAA,CAAA;AAC1D,EAAA,OAAO;AAAA,IACH,CAAA;AAAA,IACA,EAAA,KAAO,CAAA,GAAK,CAAA,IAAK,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,GAAI,GAAG,CAAA,CAAA,GAAM,EAAA,GAAK,CAAA;AAAA,IACtD,CAAA,GAAK,KAAK,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,GAAI,GAAG,CAAA,CAAA,IAAO,CAAA,GAAI,GAAA;AAAA,GACnD;AACJ;AACA,SAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,EAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,GAAA,CAAK,KAAK,GAAA,GAAM,CAAA,CAAA,GAAM,MAAM,GAAG,CAAA;AACrD,EAAA,OAAO,CAAC,CAAA,EAAG,EAAA,KAAO,CAAA,GAAK,CAAA,GAAI,CAAA,GAAK,EAAA,GAAK,CAAA,EAAI,CAAA,IAAK,GAAA,GAAM,CAAA,CAAA,IAAO,CAAA,GAAI,GAAA,CAAI,CAAA;AACvE;AACA,SAAS,qBAAqB,KAAA,EAAO;AACjC,EAAA,OAAO,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AACxC;AACA,SAAS,oBAAA,CAAqB,OAAO,KAAA,EAAO;AACxC,EAAA,OAAO,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAK,CAAA;AAC/C;AACA,IAAM,kBAAA,GAAqB;AAAA,EACvB,GAAA,EAAK;AAAA,IACD,GAAA,EAAK,CAAC,CAAA,EAAG,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,IAC1B,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACT;AAAA,EACA,GAAA,EAAK;AAAA,IACD,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK,CAAC,CAAA,EAAG,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,IAC1B,GAAA,EAAK;AAAA,GACT;AAAA,EACA,GAAA,EAAK;AAAA,IACD,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK,CAAC,CAAA,EAAG,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,GAAG,CAAC;AAAA;AAElC,CAAA;AACA,SAAS,qBAAA,CAAsB,MAAM,IAAA,EAAM;AACvC,EAAA,OAAO;AAAA,IACH,IAAA,KAAS,OAAA,GAAU,CAAA,GAAI,IAAA,KAAS,QAAQ,GAAA,GAAM,GAAA;AAAA,IAC9C,IAAA,KAAS,OAAA,GAAU,CAAA,GAAI,IAAA,KAAS,QAAQ,GAAA,GAAM,GAAA;AAAA,IAC9C,IAAA,KAAS,OAAA,GAAU,CAAA,GAAI,IAAA,KAAS,QAAQ,GAAA,GAAM;AAAA,GAClD;AACJ;AACA,SAAS,YAAA,CAAa,KAAK,GAAA,EAAK;AAC5B,EAAA,OAAO,GAAA,KAAQ,GAAA,GAAM,GAAA,GAAM,SAAA,CAAU,KAAK,GAAG,CAAA;AACjD;AACA,SAAS,wBAAA,CAAyB,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM;AACtD,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,EAAA,GAAK,qBAAA,CAAsB,IAAA,EAAM,IAAI,CAAA;AAC3C,EAAA,OAAO;AAAA,IACH,SAAS,KAAA,GACH,cAAA,CAAe,UAAA,CAAW,CAAC,GAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,IACtC,YAAA,CAAa,UAAA,CAAW,CAAC,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAA;AAAA,IACvC,eAAe,UAAA,CAAW,CAAC,GAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAA;AAAA,IACtC,eAAe,UAAA,CAAW,CAAC,GAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAA;AAAA,IACtC,cAAA,CAAA,CAAgB,EAAA,GAAK,UAAA,CAAW,CAAC,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,CAAA,EAAG,CAAC;AAAA,GAChF;AACJ;AACA,SAAS,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI;AAC7C,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,IAAA,EAAM,IAAI,CAAA;AAC5C,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,IAAA,EAAM,EAAE,CAAA;AAC1C,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAW,CAAA,GAAI,GAAA,CAAI,KAAK,CAAA,GAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAChE;AACA,SAAS,YAAA,CAAa,UAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AACxC,EAAA,MAAM,WAAW,gBAAA,CAAiB,UAAA,EAAY,KAAK,IAAA,EAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,mBAAmB,IAAA,CAAK,IAAI,EAAE,EAAA,CAAG,IAAI,CAAA,CAAE,GAAG,QAAQ,CAAA;AACjE,EAAA,OAAO,iBAAiB,MAAA,EAAQ,EAAA,CAAG,IAAA,EAAM,KAAA,EAAO,GAAG,IAAI,CAAA;AAC3D;AAEA,IAAM,QAAA,GAAN,MAAM,SAAA,CAAS;AAAA,EACX,OAAO,KAAA,GAAQ;AACX,IAAA,OAAO,IAAI,SAAA,CAAS,CAAC,GAAG,CAAA,EAAG,CAAC,GAAG,KAAK,CAAA;AAAA,EACxC;AAAA,EACA,WAAA,CAAY,OAAO,IAAA,EAAM;AACrB,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,wBAAA,CAAyB,KAAA,EAAO,IAAA,EAAM,KAAK,IAAI,CAAA;AAAA,EACjE;AAAA,EACA,cAAc,QAAA,EAAU;AACpB,IAAA,OAAO,oBAAA,CAAqB,YAAA,CAAa,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK,EAAG,EAAE,IAAA,EAAM,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,GAAS,QAAA,GAAW,KAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACjO;AAAA,EACA,YAAA,GAAe;AACX,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,OAAO;AAAA,MACH,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACb,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACb,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACb,CAAA,EAAG,SAAS,CAAC;AAAA,KACjB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,MAAM,CAAA;AAC7B,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACvC,IAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/B,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,aAAA;AAC7B,IAAA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA;AAC9C,IAAA,OAAA,CAAQ,YAAY,MAAM,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACrC,IAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAC7B,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,YAAA;AAC5B,IAAA,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC5C,IAAA,OAAA,CAAQ,YAAY,KAAK,CAAA;AACzB,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACvC,IAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AACjC,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,IAAA,IAAI,OAAO,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,WAAA,GAAc;AAAA,QACf,OAAA,EAAS,OAAO,UAAA,CAAW,OAAA;AAAA,QAC3B,IAAA,EAAM,OAAO,UAAA,CAAW;AAAA,OAC5B;AACA,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACrC,MAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAC7B,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,MAAA,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/B,MAAA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AACnD,MAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AACxB,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,MAAA,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/B,MAAA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAChD,MAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AACxB,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,IAClC;AAAA,EACJ;AAAA,EACA,IAAI,oBAAA,GAAuB;AACvB,IAAA,MAAM,KAAA,GAAQ;AAAA,MACV,KAAK,cAAA,CAAe,OAAA;AAAA,MACpB,KAAK,aAAA,CAAc,OAAA;AAAA,MACnB,KAAK,UAAA,CAAW,iBAAA;AAAA,MAChB,GAAG,KAAK,UAAA,CAAW,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,EAAE,YAAY;AAAA,KAC3D;AACA,IAAA,IAAI,KAAK,WAAA,EAAa;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,WAAA,CAAY,OAAA,CAAQ,SAAS,IAAA,CAAK,WAAA,CAAY,KAAK,YAAY,CAAA;AAAA,IACnF;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AACJ,CAAA;AAEA,SAAS,eAAe,KAAA,EAAO;AAC3B,EAAA,OAAO,KAAA,KAAU,KAAA,GAAQ,KAAA,GAAQ,KAAA,KAAU,UAAU,OAAA,GAAU,MAAA;AACnE;AACA,SAAS,sBAAsB,MAAA,EAAQ;AACnC,EAAA,OAAO,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,IAC/B,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO;AAAA,MACrB,KAAA,EAAO,EAAE,QAAA,CAAS,OAAA;AAAA,MAClB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,cAAc;AAAA,KACzC,CAAA;AAAA,IACD,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,IACrB,MAAA,EAAQ,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,iBAAiB,CAAA;AAAA,IAC3C,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK;AAAA,GACvC,CAAE,CAAA;AACN;AACA,SAAS,oBAAoB,QAAA,EAAU;AACnC,EAAA,OAAO,WAAW,GAAA,GAAM,CAAA;AAC5B;AACA,SAAS,iBAAiB,MAAA,EAAQ;AAC9B,EAAA,IAAI,EAAA;AACJ,EAAA,OAAA,CAAQ,KAAK,MAAA,CAAO,KAAA,MAAW,QAAQ,EAAA,KAAO,MAAA,GAAS,SAAS,EAAA,CAAG,IAAA;AACvE;AAEA,IAAM,aAAN,MAAiB;AAAA,EACb,WAAA,CAAY,OAAO,IAAA,EAAM;AACrB,IAAA,IAAA,CAAK,IAAA,GAAO,OAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,wBAAA,CAAyB,KAAA,EAAO,IAAA,EAAM,KAAK,IAAI,CAAA;AAAA,EACjE;AAAA,EACA,cAAc,QAAA,EAAU;AACpB,IAAA,OAAO,oBAAA,CAAqB,YAAA,CAAa,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK,EAAG,EAAE,IAAA,EAAM,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,GAAS,QAAA,GAAW,KAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACjO;AAAA,EACA,YAAA,GAAe;AACX,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,OAAO;AAAA,MACH,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACb,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACb,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACb,CAAA,EAAG,SAAS,CAAC;AAAA,KACjB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,uBAAA,GAA0B;AAAA,EAC5B,KAAK,CAAC,KAAA,EAAO,SAAS,IAAI,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,EAC9C,OAAO,CAAC,KAAA,EAAO,SAAS,IAAI,UAAA,CAAW,OAAO,IAAI;AACtD,CAAA;AACA,SAAS,WAAA,CAAY,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM;AACpC,EAAA,OAAO,uBAAA,CAAwB,IAAI,CAAA,CAAE,KAAA,EAAO,IAAI,CAAA;AACpD;AACA,SAAS,aAAa,CAAA,EAAG;AACrB,EAAA,OAAO,EAAE,IAAA,KAAS,OAAA;AACtB;AACA,SAAS,WAAW,CAAA,EAAG;AACnB,EAAA,OAAO,EAAE,IAAA,KAAS,KAAA;AACtB;AACA,SAAS,kBAAkB,EAAA,EAAI;AAC3B,EAAA,MAAM,KAAA,GAAQ,GAAG,aAAA,EAAc;AAC/B,EAAA,MAAM,EAAA,GAAK,qBAAA,CAAsB,EAAA,CAAG,IAAA,EAAM,KAAK,CAAA;AAC/C,EAAA,OAAO,IAAI,QAAA,CAAS;AAAA,IAChB,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAAA,IAC7C,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAAA,IAC7C,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAAA,IAC7C,MAAM,CAAC;AAAA,GACX,EAAG,GAAG,IAAI,CAAA;AACd;AACA,SAAS,kBAAkB,EAAA,EAAI;AAC3B,EAAA,MAAM,KAAA,GAAQ,GAAG,aAAA,EAAc;AAC/B,EAAA,MAAM,EAAA,GAAK,qBAAA,CAAsB,EAAA,CAAG,IAAA,EAAM,KAAK,CAAA;AAC/C,EAAA,OAAO,IAAI,UAAA,CAAW;AAAA,IAClB,QAAA,CAAS,MAAM,CAAC,CAAA,EAAG,GAAG,EAAA,CAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,QAAA,CAAS,MAAM,CAAC,CAAA,EAAG,GAAG,EAAA,CAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,QAAA,CAAS,MAAM,CAAC,CAAA,EAAG,GAAG,EAAA,CAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,MAAM,CAAC;AAAA,GACX,EAAG,GAAG,IAAI,CAAA;AACd;AACA,SAAS,YAAA,CAAa,GAAG,IAAA,EAAM;AAC3B,EAAA,IAAI,CAAA,CAAE,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,CAAA;AAAA,EACX;AACA,EAAA,IAAI,UAAA,CAAW,CAAC,CAAA,IAAK,IAAA,KAAS,OAAA,EAAS;AACnC,IAAA,OAAO,kBAAkB,CAAC,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,YAAA,CAAa,CAAC,CAAA,IAAK,IAAA,KAAS,KAAA,EAAO;AACnC,IAAA,OAAO,kBAAkB,CAAC,CAAA;AAAA,EAC9B;AACA,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AACpC;AAEA,SAAS,uBAAA,CAAwB,IAAI,EAAA,EAAI;AACrC,EAAA,OAAQ,EAAA,CAAG,KAAA,KAAU,EAAA,CAAG,KAAA,IACpB,GAAG,IAAA,KAAS,EAAA,CAAG,IAAA,IACf,EAAA,CAAG,QAAA,KAAa,EAAA,CAAG,QAAA,IACnB,EAAA,CAAG,SAAS,EAAA,CAAG,IAAA;AACvB;AACA,SAAS,0BAAA,CAA2B,MAAM,GAAA,EAAK;AAC3C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC9B,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,IAAI,GAAG,GAAG,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,IAAA,CAAK,IAAI,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,IAAA,GAAO,GAAA,EAAK,GAAG,CAAA;AACtD;AACA,IAAM,gBAAA,GAAmB;AAAA,EACrB,GAAA,EAAK,CAAC,KAAA,KAAU,KAAA;AAAA,EAChB,IAAA,EAAM,CAAC,KAAA,KAAW,KAAA,GAAQ,GAAA,GAAO,GAAA;AAAA,EACjC,KAAK,CAAC,KAAA,KAAW,KAAA,GAAQ,GAAA,IAAQ,IAAI,IAAA,CAAK,EAAA,CAAA;AAAA,EAC1C,IAAA,EAAM,CAAC,KAAA,KAAU,KAAA,GAAQ;AAC7B,CAAA;AACA,SAAS,sBAAsB,IAAA,EAAM;AACjC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,iCAAiC,CAAA;AACtD,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,WAAW,IAAI,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,EAAE,CAAC,CAAA;AAChB,EAAA,OAAO,gBAAA,CAAiB,IAAI,CAAA,CAAE,KAAK,CAAA;AACvC;AACA,SAAS,kCAAkC,IAAA,EAAM;AAC7C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,kFAAkF,CAAA;AACvG,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG;AAAA,GACxC;AACA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,KAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACvD,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,wBAAwB,IAAA,EAAM;AACnC,EAAA,MAAM,KAAA,GAAQ,kCAAkC,IAAI,CAAA;AACpD,EAAA,OAAO,KAAA,GAAQ,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAChD;AACA,SAAS,mCAAmC,IAAA,EAAM;AAC9C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,2GAA2G,CAAA;AAChI,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,CAAC;AAAA,GACtC;AACA,EAAA,IAAI,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IACd,KAAA,CAAM,MAAM,CAAC,CAAC,KACd,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IACd,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,yBAAyB,IAAA,EAAM;AACpC,EAAA,MAAM,KAAA,GAAQ,mCAAmC,IAAI,CAAA;AACrD,EAAA,OAAO,KAAA,GAAQ,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAChD;AACA,SAAS,kCAAkC,IAAA,EAAM;AAC7C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,sGAAsG,CAAA;AAC3H,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,qBAAA,CAAsB,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IAC1B,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG;AAAA,GACxC;AACA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,KAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACvD,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,wBAAwB,IAAA,EAAM;AACnC,EAAA,MAAM,KAAA,GAAQ,kCAAkC,IAAI,CAAA;AACpD,EAAA,OAAO,KAAA,GAAQ,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAChD;AACA,SAAS,yBAAyB,IAAA,EAAM;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,+HAA+H,CAAA;AACpJ,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,qBAAA,CAAsB,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IAC1B,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACpC,0BAAA,CAA2B,CAAA,CAAE,CAAC,CAAA,EAAG,CAAC;AAAA,GACtC;AACA,EAAA,IAAI,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IACd,KAAA,CAAM,MAAM,CAAC,CAAC,KACd,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IACd,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,yBAAyB,IAAA,EAAM;AACpC,EAAA,MAAM,KAAA,GAAQ,yBAAyB,IAAI,CAAA;AAC3C,EAAA,OAAO,KAAA,GAAQ,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAChD;AACA,SAAS,2BAA2B,IAAA,EAAM;AACtC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,4CAA4C,CAAA;AACpE,EAAA,IAAI,IAAA,EAAM;AACN,IAAA,OAAO;AAAA,MACH,SAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,EAAE,CAAA;AAAA,MAC9B,SAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,EAAE,CAAA;AAAA,MAC9B,SAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,EAAE;AAAA,KAClC;AAAA,EACJ;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,4DAA4D,CAAA;AACvF,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,OAAO;AAAA,MACH,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,MACvB,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,MACvB,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE;AAAA,KAC3B;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,iBAAiB,IAAA,EAAM;AAC5B,EAAA,MAAM,KAAA,GAAQ,2BAA2B,IAAI,CAAA;AAC7C,EAAA,OAAO,KAAA,GAAQ,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAChD;AACA,SAAS,4BAA4B,IAAA,EAAM;AACvC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,yDAAyD,CAAA;AACjF,EAAA,IAAI,IAAA,EAAM;AACN,IAAA,OAAO;AAAA,MACH,SAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,EAAE,CAAA;AAAA,MAC9B,SAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,EAAE,CAAA;AAAA,MAC9B,SAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,CAAC,GAAG,EAAE,CAAA;AAAA,MAC9B,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAC;AAAA,KAC1D;AAAA,EACJ;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,6EAA6E,CAAA;AACxG,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,OAAO;AAAA,MACH,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,MACvB,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,MACvB,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,MACvB,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAC;AAAA,KACnD;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,kBAAkB,IAAA,EAAM;AAC7B,EAAA,MAAM,KAAA,GAAQ,4BAA4B,IAAI,CAAA;AAC9C,EAAA,OAAO,KAAA,GAAQ,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAChD;AACA,SAAS,8BAA8B,IAAA,EAAM;AACzC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,uGAAuG,CAAA;AAC5H,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACf,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACf,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC;AAAA,GACnB;AACA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,KAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACvD,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,2BAA2B,IAAA,EAAM;AACtC,EAAA,OAAO,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,KAAA,GAAQ,8BAA8B,IAAI,CAAA;AAChD,IAAA,OAAO,KAAA,GAAQ,WAAA,CAAY,KAAA,EAAO,KAAA,EAAO,IAAI,CAAA,GAAI,IAAA;AAAA,EACrD,CAAA;AACJ;AACA,SAAS,+BAA+B,IAAA,EAAM;AAC1C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,uIAAuI,CAAA;AAC5J,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACf,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACf,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACf,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC;AAAA,GACnB;AACA,EAAA,IAAI,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IACd,KAAA,CAAM,MAAM,CAAC,CAAC,KACd,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,IACd,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,4BAA4B,IAAA,EAAM;AACvC,EAAA,OAAO,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,KAAA,GAAQ,+BAA+B,IAAI,CAAA;AACjD,IAAA,OAAO,KAAA,GAAQ,WAAA,CAAY,KAAA,EAAO,KAAA,EAAO,IAAI,CAAA,GAAI,IAAA;AAAA,EACrD,CAAA;AACJ;AACA,IAAM,iBAAA,GAAoB;AAAA,EACtB;AAAA,IACI,MAAA,EAAQ,0BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,2BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,iCAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,kCAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,iCAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,wBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,6BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd,GACJ;AAAA,EACA;AAAA,IACI,MAAA,EAAQ,8BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACd;AAER,CAAA;AACA,SAAS,kBAAkB,IAAA,EAAM;AAC7B,EAAA,OAAO,iBAAA,CAAkB,OAAO,CAAC,IAAA,EAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,WAAU,KAAM;AACrE,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA,CAAO,IAAI,CAAA,GAAI,SAAA,GAAY,IAAA;AAAA,EACtC,GAAG,IAAI,CAAA;AACX;AACA,SAAS,uBAAA,CAAwB,IAAA,EAAM,IAAA,GAAO,KAAA,EAAO;AACjD,EAAA,MAAM,CAAA,GAAI,kBAAkB,IAAI,CAAA;AAChC,EAAA,IAAI,CAAC,CAAA,EAAG;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI,CAAA,CAAE,QAAA,KAAa,KAAA,IAAS,IAAA,KAAS,OAAA,EAAS;AAC1C,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,CAAC,CAAA,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EAC9D;AACA,EAAA,IAAI,CAAA,CAAE,aAAa,MAAA,EAAQ;AACvB,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG,EAAE,IAAA,EAAY,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,wBAAwB,IAAA,EAAM;AACnC,EAAA,MAAM,OAAA,GAAU;AAAA,IACZ,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACJ;AACA,EAAoB;AAChB,IAAA,OAAA,CAAQ,KAAK,0BAAA,CAA2B,KAAK,CAAA,EAAG,2BAAA,CAA4B,KAAK,CAAC,CAAA;AAAA,EACtF;AAIA,EAAA,MAAM,MAAA,GAAS,eAAe,OAAO,CAAA;AACrC,EAAA,OAAO,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,MAAA,GAAS,OAAO,IAAI,CAAA;AAC1B,IAAA,OAAO,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAA,GAAI,IAAA;AAAA,EACjD,CAAA;AACJ;AACA,SAAS,mBAAmB,KAAA,EAAO;AAC/B,EAAA,MAAM,MAAA,GAAS,wBAAwB,KAAK,CAAA;AAC5C,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,SAAS,KAAA,EAAM;AAAA,EAC1B;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,OAAO,WAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,SAAS,KAAA,EAAM;AAC1E;AACA,SAAS,SAAS,IAAA,EAAM;AACpB,EAAA,MAAM,GAAA,GAAM,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,IAAI,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA;AAChE,EAAA,OAAO,GAAA,CAAI,MAAA,KAAW,CAAA,GAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC1C;AACA,SAAS,mBAAA,CAAoB,KAAA,EAAO,MAAA,GAAS,GAAA,EAAK;AAC9C,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,CAAM,aAAA,CAAc,KAAK,CAAC,CAAA,CACxD,GAAA,CAAI,QAAQ,CAAA,CACZ,IAAA,CAAK,EAAE,CAAA;AACZ,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA;AAC5B;AACA,SAAS,oBAAA,CAAqB,KAAA,EAAO,MAAA,GAAS,GAAA,EAAK;AAC/C,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,aAAA,CAAc,KAAK,CAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,CAAC,SAAA,CAAU,CAAC,GAAG,SAAA,CAAU,CAAC,GAAG,SAAA,CAAU,CAAC,GAAG,SAAA,CAAU,CAAC,IAAI,GAAG,CAAA,CACtE,IAAI,QAAQ,CAAA,CACZ,KAAK,EAAE,CAAA;AACZ,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA;AAC5B;AACA,SAAS,2BAA2B,KAAA,EAAO;AACvC,EAAA,MAAM,SAAA,GAAY,sBAAsB,CAAC,CAAA;AACzC,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,KAAK,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,EAAA,CAAG,aAAA,CAAc,KAAK,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,SAAA,CAAU,IAAI,CAAC,CAAA;AACzF,EAAA,OAAO,CAAA,IAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAClC;AACA,SAAS,4BAA4B,KAAA,EAAO;AACxC,EAAA,MAAM,UAAA,GAAa,sBAAsB,CAAC,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,sBAAsB,CAAC,CAAA;AAC5C,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,KAAK,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,GAAG,aAAA,CAAc,KAAK,EAAE,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACvD,IAAA,MAAM,SAAA,GAAY,KAAA,KAAU,CAAA,GAAI,UAAA,GAAa,YAAA;AAC7C,IAAA,OAAO,UAAU,IAAI,CAAA;AAAA,EACzB,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACnC;AACA,SAAS,2BAA2B,KAAA,EAAO;AACvC,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,sBAAsB,CAAC,CAAA;AAAA,IACvB,gBAAA;AAAA,IACA;AAAA,GACJ;AACA,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,KAAK,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,EAAA,CAAG,aAAA,CAAc,KAAK,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU,UAAA,CAAW,KAAK,CAAA,CAAE,IAAI,CAAC,CAAA;AACxG,EAAA,OAAO,CAAA,IAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAClC;AACA,SAAS,4BAA4B,KAAA,EAAO;AACxC,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,sBAAsB,CAAC,CAAA;AAAA,IACvB,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,sBAAsB,CAAC;AAAA,GAC3B;AACA,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,KAAK,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,EAAA,CACT,aAAA,CAAc,KAAK,CAAA,CACnB,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,UAAA,CAAW,KAAK,CAAA,CAAE,IAAI,CAAC,CAAA;AACjD,EAAA,OAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACnC;AACA,SAAS,sBAAA,CAAuB,OAAO,IAAA,EAAM;AACzC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,IAAA,KAAS,OAAA,GAAU,IAAI,CAAC,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAC5B,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AACnC,EAAA,MAAM,QAAQ,oBAAA,CAAqB,EAAA,CAAG,cAAc,KAAK,CAAC,EAAE,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU,CAAA,EAAG,MAAM,KAAK,CAAC,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AACtH,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAC/B;AACA,SAAS,8BAA8B,IAAA,EAAM;AACzC,EAAA,OAAO,CAAC,KAAA,KAAU,sBAAA,CAAuB,KAAA,EAAO,IAAI,CAAA;AACxD;AACA,SAAS,uBAAA,CAAwB,OAAO,IAAA,EAAM;AAC1C,EAAA,MAAM,UAAA,GAAa,sBAAsB,CAAC,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,qBAAA,CAAsB,IAAA,KAAS,OAAA,GAAU,IAAI,CAAC,CAAA;AACnE,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AACjC,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,GAAG,aAAA,CAAc,KAAK,EAAE,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACvD,IAAA,MAAM,SAAA,GAAY,KAAA,KAAU,CAAA,GAAI,UAAA,GAAa,YAAA;AAC7C,IAAA,OAAO,GAAG,KAAA,CAAM,KAAK,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAAA,EAC9C,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAC/B;AACA,SAAS,+BAA+B,IAAA,EAAM;AAC1C,EAAA,OAAO,CAAC,KAAA,KAAU,uBAAA,CAAwB,KAAA,EAAO,IAAI,CAAA;AACzD;AACA,IAAM,uBAAA,GAA0B;AAAA,EAC5B;AAAA,IACI,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA;AAAA,IACI,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA;AAAA,IACI,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA;AAAA,IACI,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA;AAAA,IACI,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA;AAAA,IACI,MAAA,EAAQ;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,GAAG,CAAC,KAAA,EAAO,OAAO,EAAE,MAAA,CAAO,CAAC,MAAM,IAAA,KAAS;AACvC,IAAA,OAAO;AAAA,MACH,GAAG,IAAA;AAAA,MACH;AAAA,QACI,MAAA,EAAQ;AAAA,UACJ,KAAA,EAAO,KAAA;AAAA,UACP,IAAA,EAAM,KAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV;AAAA,SACJ;AAAA,QACA,WAAA,EAAa,8BAA8B,IAAI;AAAA,OACnD;AAAA,MACA;AAAA,QACI,MAAA,EAAQ;AAAA,UACJ,KAAA,EAAO,IAAA;AAAA,UACP,IAAA,EAAM,KAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV;AAAA,SACJ;AAAA,QACA,WAAA,EAAa,+BAA+B,IAAI;AAAA;AACpD,KACJ;AAAA,EACJ,CAAA,EAAG,EAAE;AACT,CAAA;AACA,SAAS,qBAAqB,MAAA,EAAQ;AAClC,EAAA,OAAO,uBAAA,CAAwB,MAAA,CAAO,CAAC,IAAA,EAAM,GAAA,KAAQ;AACjD,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,wBAAwB,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA,GAC3C,IAAI,WAAA,GACJ,IAAA;AAAA,EACV,GAAG,IAAI,CAAA;AACX;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAA,CAAO,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACvC,IAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAC/B,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,OAAA,CAAQ,YAAY,SAAS,CAAA;AAC7B,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAClB,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,WAAA,CAAY,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,CAAY,YAAY,WAAW,CAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,IAAI,QAAA,CAAS,CAAC,UAAU,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,GAAG,SAAA,CAAU,CAAC,CAAA,EAAG,CAAC,GAAG,KAAK,CAAA;AACnF,IAAA,MAAM,UAAA,GAAa,IAAI,QAAA,CAAS,CAAC,UAAU,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,GAAG,SAAA,CAAU,CAAC,CAAA,EAAG,GAAG,GAAG,KAAK,CAAA;AACtF,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,UAAA;AAAA,MACA,4BAA4B,SAAS,CAAA;AAAA,MACrC,4BAA4B,UAAU;AAAA,KAC1C;AACA,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,UAAA,GAAa,mBAAmB,aAAA,CAAc,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC7E,IAAA,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,eAAA,GAAkB,2BAAA,CAA4B,CAAC,CAAA;AACvE,IAAA,MAAM,IAAA,GAAO,SAAS,SAAA,CAAU,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAG,CAAA;AAChD,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AAAA,EACzC;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACrB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,GAAA,EAAK;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,OAAO,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,KAAK,YAAY,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,SAAA,EAAW,KAAK,UAAU,CAAA;AAC7D,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EAC7D;AAAA,EACA,mBAAA,CAAoB,GAAG,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,EAAE,KAAA,EAAO;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AACnC,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,CAAE,cAAc,KAAK,CAAA;AACvC,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA,EAAG,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,EACtE;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAW,EAAA,EAAI;AACX,IAAA,MAAM,OAAO,aAAA,CAAc,mBAAA,CAAoB,IAAI,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAC/E,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,CAAE,cAAc,KAAK,CAAA;AAC1C,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,IAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAAA,MAC7D,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,SAAS,EAAA,EAAI;AACT,IAAA,MAAM,OAAO,aAAA,CAAc,mBAAA,CAAoB,IAAI,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAC/E,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MACxC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,QAAQ,CAAA;AAC/B,SAAS,wBAAwB,GAAA,EAAK;AAClC,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ;AAAA,IACV,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,IAC5B,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,IAC5B,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,IAC5B,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA;AAAM,GAChC;AACA,EAAA,UAAA,CAAW,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,CAAC,MAAM,IAAA,KAAS;AAChD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC1C,IAAA,OAAA,CAAQ,cAAc,IAAA,CAAK,IAAA;AAC3B,IAAA,OAAA,CAAQ,QAAQ,IAAA,CAAK,KAAA;AACrB,IAAA,IAAA,CAAK,YAAY,OAAO,CAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACX,CAAA,EAAG,GAAA,CAAI,sBAAA,EAAwB,CAAC,CAAA;AAChC,EAAA,OAAO,UAAA;AACX;AACA,IAAM,iBAAN,MAAqB;AAAA,EACjB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,wBAAwB,GAAG,CAAA;AAC5C,IAAA,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACvC,IAAA,QAAA,CAAS,WAAA,CAAY,KAAK,iBAAiB,CAAA;AAC3C,IAAA,MAAA,CAAO,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA;AAC5C,IAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC9C,IAAA,cAAA,CAAe,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACvC,IAAA,cAAA,CAAe,WAAA,CAAY,oBAAA,CAAqB,GAAA,EAAK,UAAU,CAAC,CAAA;AAChE,IAAA,QAAA,CAAS,YAAY,cAAc,CAAA;AACnC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,UAAA;AAC1B,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,CAAC,IAAA,KAAS;AAC7B,MAAA,IAAA,CAAK,UAAU,KAAA,GAAQ,IAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,iBAAA,GAAoB;AACpB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EAChB;AAAA,EACA,IAAI,UAAA,GAAa;AACb,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EAChB;AAAA,EACA,IAAI,WAAW,UAAA,EAAY;AACvB,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,EAC1B;AAAA,EACA,gBAAA,GAAmB;AACf,IAAA,mBAAA,CAAoB,KAAK,WAAW,CAAA;AACpC,IAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,aAAA;AACzB,IAAA,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC5B,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,MAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,MAAA,QAAA,CAAS,WAAA,CAAY,EAAE,OAAO,CAAA;AAC9B,MAAA,IAAA,CAAK,WAAA,CAAY,YAAY,QAAQ,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,SAAS,kBAAkB,IAAA,EAAM;AAC7B,EAAA,OAAO,qBAAA,CAAsB,IAAA,KAAS,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA;AACzD;AACA,SAAS,kBAAA,CAAmB,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO;AAC3C,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,IAAA,EAAM,IAAI,EAAE,KAAK,CAAA;AACnD,EAAA,OAAO,IAAI,uBAAA,CAAwB;AAAA,IAC/B,GAAA,EAAK,CAAA;AAAA,IACL;AAAA,GACH,CAAA;AACL;AACA,SAAS,yBAAA,CAA0B,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO;AACnD,EAAA,OAAO,IAAI,qBAAqB,GAAA,EAAK;AAAA,IACjC,eAAe,KAAA,KAAU,CAAA,GAAI,QAAQ,KAAA,KAAU,CAAA,GAAI,IAAI,KAAA,GAAQ,KAAA;AAAA,IAC/D,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,MACvB,SAAA,EAAW,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAA;AAAA,MAC7C,QAAA,EAAU,oBAAoB,KAAK,CAAA;AAAA,MACnC,YAAA,EAAc,MAAA,CAAO,SAAA,KAAc,OAAA,GAAU,IAAA,GAAO;AAAA,KACvD,CAAA;AAAA,IACD,KAAA,EAAO,YAAY,CAAA,EAAG;AAAA,MAClB,YAAY,kBAAA,CAAmB,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,WAAW,KAAK;AAAA,KAC3E,CAAA;AAAA,IACD,WAAW,MAAA,CAAO;AAAA,GACrB,CAAA;AACL;AACA,SAAS,0BAAA,CAA2B,KAAK,MAAA,EAAQ;AAC7C,EAAA,MAAM,EAAA,GAAK;AAAA,IACP,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,MAAA,EAAQ,WAAA;AAAA,IACR,WAAW,MAAA,CAAO;AAAA,GACtB;AACA,EAAA,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AACxB,IAAA,MAAM,CAAA,GAAI,yBAAA,CAA0B,GAAA,EAAK,EAAA,EAAI,CAAC,CAAA;AAC9C,IAAA,aAAA,CAAc;AAAA,MACV,SAAS,MAAA,CAAO,KAAA;AAAA,MAChB,WAAW,CAAA,CAAE,KAAA;AAAA,MACb,QAAQ,CAAA,EAAG;AACP,QAAA,MAAM,EAAA,GAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,SAAS,CAAA;AAC3C,QAAA,OAAO,EAAA,CAAG,aAAA,CAAc,MAAA,CAAO,SAAS,EAAE,CAAC,CAAA;AAAA,MAC/C,CAAA;AAAA,MACA,QAAA,CAAS,GAAG,CAAA,EAAG;AACX,QAAA,MAAM,aAAa,MAAA,CAAO,SAAA;AAC1B,QAAA,MAAM,EAAA,GAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,SAAS,CAAA;AAC3C,QAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,aAAA,CAAc,UAAU,CAAA;AACzC,QAAA,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACX,QAAA,MAAMC,EAAAA,GAAI,WAAA,CAAY,oBAAA,CAAqB,oBAAA,CAAqB,KAAK,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,UAAA,EAAY,MAAA,CAAO,SAAS,CAAA;AAC/G,QAAA,OAAO,YAAA,CAAaA,IAAG,KAAK,CAAA;AAAA,MAChC;AAAA,KACH,CAAA;AACD,IAAA,OAAO,CAAA;AAAA,EACX,CAAC,CAAA;AACL;AACA,SAAS,mBAAA,CAAoB,KAAK,MAAA,EAAQ;AACtC,EAAA,MAAM,CAAA,GAAI,IAAI,cAAA,CAAe,GAAA,EAAK;AAAA,IAC9B,MAAA,EAAQ,wBAAwB,KAAK,CAAA;AAAA,IACrC,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,MACvB,SAAA,EAAW;AAAA,KACd,CAAA;AAAA,IACD,KAAA,EAAO,WAAA,CAAY,QAAA,CAAS,KAAA,EAAO,CAAA;AAAA,IACnC,WAAW,MAAA,CAAO;AAAA,GACrB,CAAA;AACD,EAAA,aAAA,CAAc;AAAA,IACV,SAAS,MAAA,CAAO,KAAA;AAAA,IAChB,WAAW,CAAA,CAAE,KAAA;AAAA,IACb,OAAA,EAAS,CAAC,CAAA,KAAM,IAAI,QAAA,CAAS,oBAAA,CAAqB,CAAA,CAAE,aAAA,EAAe,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA;AAAA,IAC5E,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,QAAA,CAAS,oBAAA,CAAqB,qBAAqB,CAAA,CAAE,aAAA,CAAc,EAAE,IAAI,CAAC,GAAG,CAAA,CAAE,aAAA,GAAgB,CAAC,CAAC,CAAA,EAAG,CAAA,CAAE,IAAI;AAAA,GACrI,CAAA;AACD,EAAA,OAAO,CAAC,CAAC,CAAA;AACb;AACA,SAAS,YAAY,IAAA,EAAM;AACvB,EAAA,OAAO,IAAA,KAAS,KAAA;AACpB;AACA,IAAM,uBAAN,MAA2B;AAAA,EACvB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,SAAA,GAAY,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,SAAS,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,2BAAA,CAA4B,GAAG,CAAA;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,cAAA,CAAe,GAAA,EAAK;AAAA,MAChC,MAAM,IAAA,CAAK,SAAA;AAAA,MACX,YAAY,CAAC,IAAA,CAAK,IAAA,CAAK,CAAC,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,EAAE,IAAI,CAAA;AAAA,MACpE,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,gBAAA,CAAiB,QAAA,EAAU,KAAK,mBAAmB,CAAA;AAAA,EACnF;AAAA,EACA,4BAA4B,GAAA,EAAK;AAC7B,IAAA,MAAM,IAAA,GAAO,KAAK,SAAA,CAAU,QAAA;AAC5B,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACnB,MAAA,OAAO,2BAA2B,GAAA,EAAK;AAAA,QACnC,SAAA,EAAW,IAAA;AAAA,QACX,WAAW,IAAA,CAAK,UAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,IACL;AACA,IAAA,OAAO,oBAAoB,GAAA,EAAK;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AAAA,EACA,oBAAoB,EAAA,EAAI;AACpB,IAAA,MAAM,aAAa,EAAA,CAAG,aAAA;AACtB,IAAA,IAAA,CAAK,SAAA,CAAU,WAAW,UAAA,CAAW,KAAA;AACrC,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,2BAAA,CAA4B,IAAA,CAAK,IAAA,CAAK,QAAQ,aAAa,CAAA;AAC5E,IAAA,IAAA,CAAK,IAAA,CAAK,aAAa,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,EAAA,KAAO,GAAG,IAAI,CAAA;AAAA,EACxD;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAA,CAAO,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AAC1C,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,CAAC,CAAC,CAAA,GAAI,CAAA,CAAE,cAAc,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,eAAA,GAAkB,0BAAA,CAA2B,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAG,KAAK,CAAC,CAAA;AACtG,IAAA,MAAM,OAAO,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAG,CAAA;AACvC,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AAAA,EACzC;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACrB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,GAAA,EAAK;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,OAAO,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,KAAK,YAAY,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,SAAA,EAAW,KAAK,UAAU,CAAA;AAC7D,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EAC7D;AAAA,EACA,mBAAA,CAAoB,GAAG,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,EAAE,KAAA,EAAO;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,MAAM,QAAA,CAAS,cAAA,CAAe,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,KAAK,GAAG,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,GAAG,GAAG,CAAA;AAC5F,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,CAAE,cAAc,KAAK,CAAA;AACzC,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAA,CAAS,CAAC,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,EACpE;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAW,EAAA,EAAI;AACX,IAAA,MAAM,OAAO,aAAA,CAAc,mBAAA,CAAoB,KAAK,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAChF,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,CAAE,cAAc,KAAK,CAAA;AAC1C,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAA,CAAS,CAAC,CAAA,GAAI,IAAA,EAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,KAAK,CAAA,EAAG;AAAA,MAC7D,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,SAAS,EAAA,EAAI;AACT,IAAA,MAAM,OAAO,aAAA,CAAc,mBAAA,CAAoB,KAAK,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAChF,IAAA,IAAI,SAAS,CAAA,EAAG;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MACxC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,gBAAN,MAAoB;AAAA,EAChB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAA,CAAO,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,MAAA,GAAS,YAAA;AACpB,IAAA,UAAA,CAAW,KAAA,GAAQ,YAAA;AACnB,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,IAAA,CAAK,aAAa,CAAA;AAC/C,IAAA,IAAI,CAAC,GAAA,EAAK;AACN,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,KAAK,aAAA,CAAc,KAAA;AACjC,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,CAAc,MAAA;AAClC,IAAA,MAAM,UAAU,GAAA,CAAI,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,OAAO,MAAM,CAAA;AACpD,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,MAAA,EAAQ,EAAA,EAAA,EAAM;AAChC,MAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,KAAA,EAAO,EAAA,EAAA,EAAM;AAC/B,QAAA,MAAM,IAAI,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,KAAA,EAAO,GAAG,GAAG,CAAA;AACvC,QAAA,MAAM,IAAI,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,MAAA,EAAQ,KAAK,CAAC,CAAA;AACxC,QAAA,MAAM,WAAW,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAC9C,QAAA,MAAM,CAAA,GAAA,CAAK,EAAA,GAAK,KAAA,GAAQ,EAAA,IAAM,CAAA;AAC9B,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AACpB,QAAA,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AACxB,QAAA,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AACxB,QAAA,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA;AAAA,MAClB;AAAA,IACJ;AACA,IAAA,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,SAAS,QAAA,CAAS,CAAC,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAG,CAAA;AACjD,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,SAAS,QAAA,CAAS,CAAC,GAAG,CAAA,EAAG,GAAA,EAAK,KAAK,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AAAA,EACvC;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,sBAAN,MAA0B;AAAA,EACtB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,aAAA,CAAc,GAAA,EAAK;AAAA,MAC/B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,OAAO,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,KAAK,YAAY,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,SAAA,EAAW,KAAK,UAAU,CAAA;AAC7D,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EAC7D;AAAA,EACA,mBAAA,CAAoB,GAAG,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,EAAE,KAAA,EAAO;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA;AAChE,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK,CAAC,CAAA;AAC5D,IAAA,MAAM,CAAC,CAAA,MAAO,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC1D,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,UAAA,EAAY,KAAA,EAAO,CAAC,CAAA,EAAG,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,EAC/E;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAW,EAAA,EAAI;AACX,IAAA,IAAI,UAAA,CAAW,EAAA,CAAG,GAAG,CAAA,EAAG;AACpB,MAAA,EAAA,CAAG,cAAA,EAAe;AAAA,IACtB;AACA,IAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,oBAAoB,KAAK,CAAA;AAC1C,IAAA,MAAM,EAAA,GAAK,aAAA,CAAc,QAAA,EAAU,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAC5D,IAAA,MAAM,EAAA,GAAK,aAAA,CAAc,QAAA,EAAU,mBAAA,CAAoB,EAAE,CAAC,CAAA;AAC1D,IAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;AACtB,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,GAAI,EAAA,EAAI,CAAC,CAAA,EAAG,KAAK,CAAA,EAAG;AAAA,MAChE,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,SAAS,EAAA,EAAI;AACT,IAAA,MAAM,QAAA,GAAW,oBAAoB,KAAK,CAAA;AAC1C,IAAA,MAAM,EAAA,GAAK,aAAA,CAAc,QAAA,EAAU,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAC5D,IAAA,MAAM,EAAA,GAAK,aAAA,CAAc,QAAA,EAAU,mBAAA,CAAoB,EAAE,CAAC,CAAA;AAC1D,IAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;AACtB,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MACxC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,wBAAN,MAA4B;AAAA,EACxB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,kBAAA,CAAmB,GAAA,EAAK;AAAA,MAC1C,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,mBAAA,CAAoB,GAAA,EAAK;AAAA,MAC5C,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,aAAA,GAClB;AAAA,MACE,OAAA,EAAS,IAAI,kBAAA,CAAmB,GAAA,EAAK;AAAA,QACjC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,MACD,IAAA,EAAM,IAAI,oBAAA,CAAqB,GAAA,EAAK;AAAA,QAChC,MAAA,EAAQ,WAAA;AAAA,QACR,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,UACvB,YAAA,EAAc,IAAA;AAAA,UACd,QAAA,EAAU,GAAA;AAAA,UACV,SAAA,EAAW,sBAAsB,CAAC;AAAA,SACrC,CAAA;AAAA,QACD,KAAA,EAAO,YAAY,CAAA,EAAG;AAAA,UAClB,UAAA,EAAY,IAAI,uBAAA,CAAwB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG;AAAA,SAC7D,CAAA;AAAA,QACD,WAAW,IAAA,CAAK;AAAA,OACnB;AAAA,KACL,GACE,IAAA;AACN,IAAA,IAAI,KAAK,SAAA,EAAW;AAChB,MAAA,aAAA,CAAc;AAAA,QACV,SAAS,IAAA,CAAK,KAAA;AAAA,QACd,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAA;AAAA,QAC/B,SAAS,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,GAAgB,CAAC,CAAA;AAAA,QACnC,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM;AAChB,UAAA,MAAM,KAAA,GAAQ,EAAE,aAAA,EAAc;AAC9B,UAAA,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACX,UAAA,OAAO,IAAI,QAAA,CAAS,KAAA,EAAO,CAAA,CAAE,IAAI,CAAA;AAAA,QACrC;AAAA,OACH,CAAA;AAAA,IACL;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,oBAAA,CAAqB,GAAA,EAAK;AAAA,MACzC,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,eAAA,CAAgB,GAAA,EAAK;AAAA,MACjC,UAAA,EAAY,KAAK,SAAA,GACX;AAAA,QACE,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAA;AAAA,QAChC,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK;AAAA,OAC9B,GACE,IAAA;AAAA,MACN,YAAA,EAAc,KAAK,UAAA,CAAW,IAAA;AAAA,MAC9B,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,aAAA,EAAe,KAAK,WAAA,CAAY,IAAA;AAAA,MAChC,SAAA,EAAW,KAAK,OAAA,CAAQ,IAAA;AAAA,MACxB,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AAAA,EACA,IAAI,eAAA,GAAkB;AAClB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAChB;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,OAAO,CAAA;AAC9B,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACnC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,QAAA;AACzB,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,eAAA,GAAkB,oBAAA,CAAqB,KAAK,CAAA;AAAA,EACvE;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,wBAAN,MAA4B;AAAA,EACxB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,eAAA,CAAgB,GAAA,EAAK;AAAA,MACjC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AAChD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,qBAAA,CAAsB,GAAA,EAAK;AAAA,MAC3C,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA;AACtC,IAAA,UAAA,CAAW,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,aAAa,CAAA;AACtD,IAAA,UAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,cAAc,CAAA;AACxD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,cAAA,CAAe,GAAA,EAAK;AAAA,MAClC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,QACvB,WAAW,MAAA,CAAO;AAAA,OACrB,CAAA;AAAA,MACD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,SAAA,CAAU,GAAA,EAAK;AAAA,MAC3B,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,cAAc,MAAA,CAAO;AAAA,KACxB,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,aAAA,CAAc,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC9D,IAAA,IAAA,CAAK,KAAK,WAAA,CAAY,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAC1D,IAAA,IAAA,CAAK,QACD,MAAA,CAAO,YAAA,KAAiB,OAAA,GAClB,IAAI,gBAAgB,GAAA,EAAK;AAAA,MACvB,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA,GACC,IAAA;AACV,IAAA,MAAM,OAAA,GAAU,IAAI,qBAAA,CAAsB,GAAA,EAAK;AAAA,MAC3C,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,OAAA,CAAQ,IAAA,CAAK,oBAAA,CAAqB,OAAA,CAAQ,CAAC,IAAA,KAAS;AAChD,MAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,iBAAiB,CAAA;AACpD,MAAA,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,oBAAoB,CAAA;AAAA,IAC9D,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,KAAK,OAAO,CAAA;AACrD,MAAA,IAAA,CAAK,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,OAAA,CAAQ,KAAK,OAAO,CAAA;AACxD,MAAA,aAAA,CAAc;AAAA,QACV,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAAA,QACxC,SAAA,EAAW,KAAK,KAAA,CAAM,KAAA;AAAA,QACtB,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA;AAAA,QAChB,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM;AAAA,OACvB,CAAA;AAAA,IACL,CAAA,MAAA,IACS,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe;AAC9B,MAAA,IAAA,CAAK,KAAK,aAAA,CAAc,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC9D,MAAA,YAAA,CAAa,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAAA,IACxD;AAAA,EACJ;AAAA,EACA,IAAI,cAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,cAAc,CAAA,EAAG;AACb,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,OAAA;AACvB,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,CAAA,CAAE,aAAa,CAAA;AAC5C,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,GAAW,KAAA;AAAA,IAChC;AAAA,EACJ;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,UAAA,EAAY,CAAC,KAAK,SAAA,CAAU,GAAA,CAAI,UAAU,CAAC,CAAA;AAC9D,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,oBAAA,CAAqB,CAAC,EAAE,KAAA,EAAM;AAAA,IACrD;AAAA,EACJ;AAAA,EACA,kBAAkB,EAAA,EAAI;AAClB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA;AAC7B,IAAA,MAAM,UAAA,GAAa,eAAe,EAAE,CAAA;AACpC,IAAA,IAAI,UAAA,IAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AACzC,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,UAAA,IACA,UAAA,KAAe,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,iBAClC,CAAC,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA,EAAG;AACpC,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,GAAW,KAAA;AAAA,EAChC;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,IAAI,EAAA,CAAG,QAAQ,QAAA,EAAU;AACrB,QAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,GAAW,KAAA;AAAA,MAChC;AAAA,IACJ,CAAA,MAAA,IACS,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe;AAC9B,MAAA,IAAI,EAAA,CAAG,QAAQ,QAAA,EAAU;AACrB,QAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,CAAc,KAAA,EAAM;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AACJ,CAAA;AAEA,SAAS,iBAAiB,KAAA,EAAO;AAC7B,EAAA,OAAO,oBAAA,CAAqB,MAAM,aAAA,CAAc,KAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC7E,IAAA,OAAQ,MAAA,IAAU,CAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,GAAA;AAAA,EAC/C,GAAG,CAAC,CAAA;AACR;AACA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,OAAQ,KAAA,CAAM,cAAc,KAAK,CAAA,CAAE,OAAO,CAAC,MAAA,EAAQ,MAAM,KAAA,KAAU;AAC/D,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,KAAA,KAAU,IAAI,IAAA,GAAO,GAAA,GAAM,IAAI,CAAA,GAAI,GAAA;AAC1D,IAAA,OAAQ,UAAU,CAAA,GAAK,GAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA;AACd;AACA,SAAS,iBAAiB,GAAA,EAAK;AAC3B,EAAA,OAAO,IAAI,QAAA,CAAS,CAAE,GAAA,IAAO,EAAA,GAAM,GAAA,EAAO,GAAA,IAAO,CAAA,GAAK,GAAA,EAAM,GAAA,GAAM,GAAI,CAAA,EAAG,KAAK,CAAA;AAClF;AACA,SAAS,kBAAkB,GAAA,EAAK;AAC5B,EAAA,OAAO,IAAI,QAAA,CAAS;AAAA,IACf,OAAO,EAAA,GAAM,GAAA;AAAA,IACb,OAAO,EAAA,GAAM,GAAA;AAAA,IACb,OAAO,CAAA,GAAK,GAAA;AAAA,IACb,SAAS,GAAA,GAAM,GAAA,EAAM,CAAA,EAAG,GAAA,EAAK,GAAG,CAAC;AAAA,KAClC,KAAK,CAAA;AACZ;AACA,SAAS,mBAAmB,KAAA,EAAO;AAC/B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,SAAS,KAAA,EAAM;AAAA,EAC1B;AACA,EAAA,OAAO,iBAAiB,KAAK,CAAA;AACjC;AACA,SAAS,oBAAoB,KAAA,EAAO;AAChC,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,SAAS,KAAA,EAAM;AAAA,EAC1B;AACA,EAAA,OAAO,kBAAkB,KAAK,CAAA;AAClC;AAEA,SAAS,mBAAA,CAAoB,KAAK,GAAA,EAAK;AACnC,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAA,CAAQ,GAAG,CAAA,EAAG;AACzC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA,IAAO,GAAA,IAAO,OAAO,GAAA,CAAI,GAAG,CAAA,KAAM,QAAA;AAC7C;AACA,SAAS,iBAAiB,GAAA,EAAK;AAC3B,EAAA,OAAQ,mBAAA,CAAoB,GAAA,EAAK,GAAG,CAAA,IAChC,mBAAA,CAAoB,KAAK,GAAG,CAAA,IAC5B,mBAAA,CAAoB,GAAA,EAAK,GAAG,CAAA;AACpC;AACA,SAAS,kBAAkB,GAAA,EAAK;AAC5B,EAAA,OAAO,gBAAA,CAAiB,GAAG,CAAA,IAAK,mBAAA,CAAoB,KAAK,GAAG,CAAA;AAChE;AACA,SAAS,cAAc,GAAA,EAAK;AACxB,EAAA,OAAO,iBAAiB,GAAG,CAAA;AAC/B;AACA,SAAS,WAAA,CAAY,IAAI,EAAA,EAAI;AACzB,EAAA,IAAI,EAAA,CAAG,IAAA,KAAS,EAAA,CAAG,IAAA,EAAM;AACrB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,EAAA,CAAG,IAAA,KAAS,EAAA,CAAG,IAAA,EAAM;AACrB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,MAAA,GAAS,GAAG,aAAA,EAAc;AAChC,EAAA,MAAM,MAAA,GAAS,GAAG,aAAA,EAAc;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAA,EAAG;AACzB,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,mCAAmC,GAAA,EAAK;AAC7C,EAAA,OAAO,OAAO,GAAA,GAAM,CAAC,IAAI,CAAA,EAAG,GAAA,CAAI,GAAG,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAC,IAAI,CAAC,GAAA,CAAI,GAAG,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3E;AAEA,SAAS,wBAAwB,MAAA,EAAQ;AACrC,EAAA,MAAM,SAAA,GAAY,qBAAqB,MAAM,CAAA;AAC7C,EAAA,OAAO,SAAA,GACD,CAAC,MAAA,EAAQ,KAAA,KAAU;AACjB,IAAA,cAAA,CAAe,MAAA,EAAQ,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EAC3C,CAAA,GACE,IAAA;AACV;AACA,SAAS,wBAAwB,aAAA,EAAe;AAC5C,EAAA,MAAM,aAAA,GAAgB,gBAAgB,iBAAA,GAAoB,gBAAA;AAC1D,EAAA,OAAO,CAAC,QAAQ,KAAA,KAAU;AACtB,IAAA,cAAA,CAAe,MAAA,EAAQ,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,EAC/C,CAAA;AACJ;AACA,SAAS,oBAAA,CAAqB,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM;AAC/C,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,GAAG,YAAA,EAAa;AAC5B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AAC/B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AAC/B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AAC/B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AACnC;AACA,SAAS,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM;AAC9C,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,GAAG,YAAA,EAAa;AAC5B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AAC/B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AAC/B,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA;AACnC;AACA,SAAS,uBAAA,CAAwB,eAAe,IAAA,EAAM;AAClD,EAAA,OAAO,CAAC,QAAQ,OAAA,KAAY;AACxB,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,oBAAA,CAAqB,MAAA,EAAQ,SAAS,IAAI,CAAA;AAAA,IAC9C,CAAA,MACK;AACD,MAAA,mBAAA,CAAoB,MAAA,EAAQ,SAAS,IAAI,CAAA;AAAA,IAC7C;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,qBAAqB,WAAA,EAAa;AACvC,EAAA,IAAI,EAAA;AACJ,EAAA,IAAA,CAAK,EAAA,GAAK,WAAA,KAAgB,IAAA,IAAQ,WAAA,KAAgB,MAAA,GAAS,MAAA,GAAS,WAAA,CAAY,KAAA,MAAW,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,GAAG,KAAA,EAAO;AAClI,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,SAAS,kBAAkB,aAAA,EAAe;AACtC,EAAA,OAAO,aAAA,GACD,CAAC,CAAA,KAAM,oBAAA,CAAqB,CAAA,EAAG,IAAI,CAAA,GACnC,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,EAAG,IAAI,CAAA;AAC5C;AACA,SAAS,WAAW,MAAA,EAAQ;AACxB,EAAA,IAAI,WAAW,MAAA,EAAQ;AACnB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AACzB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX;AACA,IAAM,yBAAyB,YAAA,CAAa;AAAA,EACxC,EAAA,EAAI,oBAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,CAAC,UAAA,CAAW,MAAM,CAAA,EAAG;AACrB,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,sBAAsB,MAAM,CAAA;AAC3C,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,aAAA,EAAe,oBAAA,CAAqB,MAAM,GAAG;AAAA,KACpG,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,IAAA,KAAS;AACd,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,aAAA,GACb,mBAAA,GACA,kBAAA;AAAA,IACV,CAAA;AAAA,IACA,MAAA,EAAQ,WAAA;AAAA,IACR,MAAA,EAAQ,CAAC,IAAA,KAAS;AACd,MAAA,OAAO,uBAAA,CAAwB,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAAA,IAC5D;AAAA,GACJ;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,OAAO,IAAI,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU;AAAA,MACtC,SAAA,EAAW,KAAA;AAAA,MACX,QAAA,EAAA,CAAW,KAAK,IAAA,CAAK,MAAA,CAAO,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,MACvE,SAAA,EAAW,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAAA,MACtD,MAAA,EAAQ,wBAAwB,KAAK,CAAA;AAAA,MACrC,YAAA,EAAA,CAAe,KAAK,IAAA,CAAK,MAAA,CAAO,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,OAAA;AAAA,MACzE,aAAA,EAAe,KAAK,MAAA,CAAO,aAAA;AAAA,MAC3B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,SAAS,eAAA,CAAgB,OAAO,IAAA,EAAM;AAClC,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACvB,IAAA,OAAO,YAAA,CAAa,QAAA,CAAS,KAAA,EAAM,EAAG,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,MAAM,KAAA,GAAQ,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,IAAI,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA;AAAA,EACpC;AACA,EAAA,IAAI,SAAS,OAAA,EAAS;AAClB,IAAA,MAAM,KAAA,GAAQ,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,IAAI,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,YAAA,CAAa,QAAA,CAAS,KAAA,EAAM,EAAG,KAAK,CAAA;AAC/C;AAEA,SAAS,mBAAmB,YAAA,EAAc;AACtC,EAAA,OAAO,kBAAkB,YAAY,CAAA;AACzC;AACA,SAAS,+BAA+B,IAAA,EAAM;AAC1C,EAAA,OAAO,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,KAAA,EAAO,IAAI,CAAA;AACrC,IAAA,OAAO,YAAA,CAAa,GAAG,KAAK,CAAA;AAAA,EAChC,CAAA;AACJ;AACA,SAAS,0BAAA,CAA2B,eAAe,IAAA,EAAM;AACrD,EAAA,OAAO,CAAC,KAAA,KAAU;AACd,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,OAAO,uBAAA,CAAwB,OAAO,IAAI,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,sBAAA,CAAuB,OAAO,IAAI,CAAA;AAAA,EAC7C,CAAA;AACJ;AACA,IAAM,yBAAyB,YAAA,CAAa;AAAA,EACxC,EAAA,EAAI,oBAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACvB,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,sBAAsB,MAAM,CAAA;AAC3C,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,YAAY,EAAA,GAAK,gBAAA,CAAiB,MAAM,CAAA,MAAO,IAAA,IAAQ,OAAO,MAAA,GAAS,EAAA,GAAK,OAAO;AAAA,KAC1I,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,QAAQ,CAAC,IAAA,KAAS,8BAAA,CAA+B,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,IACtE,MAAA,EAAQ,WAAA;AAAA,IACR,MAAA,EAAQ,CAAC,IAAA,KAAS,uBAAA,CAAwB,kBAAA,CAAmB,KAAK,YAAY,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,SAAS;AAAA,GAC1G;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,IAAA,CAAK,YAAY,CAAA;AACzD,IAAA,OAAO,IAAI,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU;AAAA,MACtC,SAAA,EAAW,KAAK,MAAA,CAAO,SAAA;AAAA,MACvB,QAAA,EAAA,CAAW,KAAK,IAAA,CAAK,MAAA,CAAO,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,MACvE,SAAA,EAAW,0BAAA,CAA2B,aAAA,EAAe,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,MAC1E,MAAA,EAAQ,wBAAwB,KAAK,CAAA;AAAA,MACrC,YAAA,EAAA,CAAe,KAAK,IAAA,CAAK,MAAA,CAAO,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,OAAA;AAAA,MACzE,aAAA;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,IAAM,yBAAyB,YAAA,CAAa;AAAA,EACxC,EAAA,EAAI,oBAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AACxB,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,KAAA,EAAO,gBAAA,CAAiB,MAAM,CAAC,CAAA;AACtE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,WAAA,GAAc,qBAAqB,MAAM,CAAA;AAC/C,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,sBAAsB,MAAM,CAAA;AAC3C,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,MAAA,EAAgB,WAAA,EAA0B;AAAA,KACjG,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,QAAQ,MAAM,kBAAA;AAAA,IACd,MAAA,EAAQ,WAAA;AAAA,IACR,MAAA,EAAQ,CAAC,IAAA,KAAS;AACd,MAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AACzD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACT,QAAA,MAAM,QAAQ,WAAA,EAAY;AAAA,MAC9B;AACA,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,GACJ;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,OAAO,IAAI,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU;AAAA,MACtC,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA;AAAA,MAC9B,QAAA,EAAA,CAAW,KAAK,IAAA,CAAK,MAAA,CAAO,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,MACvE,SAAA,EAAW,KAAK,MAAA,CAAO,WAAA;AAAA,MACvB,MAAA,EAAQ,wBAAwB,KAAK,CAAA;AAAA,MACrC,YAAA,EAAA,CAAe,KAAK,IAAA,CAAK,MAAA,CAAO,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,OAAA;AAAA,MACzE,aAAA,EAAe,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA;AAAA,MAClC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,IAAM,oBAAN,MAAwB;AAAA,EACpB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AACzB,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,QAAA;AAAA,EACvB;AAAA,EACA,UAAU,KAAA,EAAO;AACb,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,CACd,YAAA,CAAa,KAAK,CAAA,CAClB,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAAE,MAAA,IAAI,EAAA,EAAI,EAAA;AAAI,MAAA,OAAA,CAAQ,MAAM,EAAA,GAAK,IAAA,CAAK,UAAA,CAAW,KAAK,OAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,GAAG,SAAA,CAAU,IAAI,OAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA;AAAA,IAAM,CAAC,CAAA;AACpL,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,KAAK,CAAA;AAAA,EACzC;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,QAAQ,CAAA;AAC/B,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC1B,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,MAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,MAAA,QAAA,CAAS,WAAA,CAAY,EAAE,OAAO,CAAA;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,SAAS,oBAAA,CAAqB,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO;AAC9C,EAAA,OAAO,IAAI,qBAAqB,GAAA,EAAK;AAAA,IACjC,aAAA,EAAe,UAAU,CAAA,GAAI,KAAA,GAAQ,UAAU,MAAA,CAAO,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,KAAA;AAAA,IAChF,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAA;AAAA,IAC1B,KAAA,EAAO,YAAY,CAAA,EAAG;AAAA,MAClB,UAAA,EAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE;AAAA,KAClC,CAAA;AAAA,IACD,WAAW,MAAA,CAAO;AAAA,GACrB,CAAA;AACL;AACA,IAAM,wBAAN,MAA4B;AAAA,EACxB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU,oBAAA,CAAqB,GAAA,EAAK,MAAA,EAAQ,KAAK,CAAC,CAAA;AAClF,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;AAC5B,MAAA,aAAA,CAAc;AAAA,QACV,SAAS,IAAA,CAAK,KAAA;AAAA,QACd,WAAW,CAAA,CAAE,KAAA;AAAA,QACb,OAAA,EAAS,CAAC,CAAA,KAAM,MAAA,CAAO,SAAS,YAAA,CAAa,CAAC,EAAE,KAAK,CAAA;AAAA,QACrD,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM;AAChB,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,QAAA,CAAS,YAAA,CAAa,CAAC,CAAA;AAC5C,UAAA,KAAA,CAAM,KAAK,CAAA,GAAI,CAAA;AACf,UAAA,OAAO,MAAA,CAAO,QAAA,CAAS,cAAA,CAAe,KAAK,CAAA;AAAA,QAC/C;AAAA,OACH,CAAA;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,eAAA,CAAgB,GAAA,EAAK;AAAA,MACjC,WAAW,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,EAAA,KAAO,GAAG,IAAI;AAAA,KAC3C,CAAA;AAAA,EACL;AAAA,EACA,IAAI,eAAA,GAAkB;AAClB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AACJ,CAAA;AAEA,IAAM,qBAAA,GAAN,cAAoC,UAAA,CAAW;AAAA,EAC3C,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,KAAK,UAAA,CAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC3E;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACzE;AAAA,EACA,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,KAAK,UAAA,CAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC3E;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACzE;AACJ,CAAA;AAEA,SAAS,kBAAA,CAAmB,QAAQ,YAAA,EAAc;AAC9C,EAAA,MAAM,cAAc,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,MAAA,EAAQ,YAAY,CAAA;AACpD,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,EAAA,GAAK,sBAAsB,MAAM,CAAA;AACvC,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAA;AAC9C,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAI,oBAAoB,WAAW,CAAA;AAC9C;AACA,IAAM,oBAAoB,YAAA,CAAa;AAAA,EACnC,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,KAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,iCAAA,CAAkC,CAAC,CAAC,CAAA,EAAG,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,gBAAgB,CAAA,EAAG,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,CAAE,CAAA;AAC1M,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU,iBAAA;AAAA,IACnB,YAAY,CAAC,IAAA,KAAS,mBAAmB,IAAA,CAAK,MAAA,EAAQ,KAAK,YAAY,CAAA;AAAA,IACvE,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,IAAA,MAAM,EAAA,GAAK,CAAA,IAAK,cAAA,CAAe,CAAA,EAAG,cAAc,CAAA;AAChD,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,OAAO,IAAI,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU;AAAA,QACrC,KAAA,EAAO,IAAI,QAAA,CAAS;AAAA,UAChB,OAAA,EAAS,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,SAAS;AAAA,SACrC,CAAA;AAAA,QACD,KAAA;AAAA,QACA,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,IACL;AACA,IAAA,MAAM,YAAA,GAAe,2BAAA,CAA4B,IAAA,CAAK,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAC5E,IAAA,MAAM,GAAA,GAAM,CAAA,IAAK,cAAA,CAAe,CAAA,EAAG,uBAAuB,CAAA;AAC1D,IAAA,IAAI,GAAA,EAAK;AACL,MAAA,OAAO,IAAI,qBAAqB,IAAA,CAAK,QAAA,EAAU,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,qBAAA,CAAsB,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,YAAY,CAAA,EAAG,EAAE,QAAA,EAAU,WAAA,CAAY,YAAA,CAAa,QAAQ,GAAG,GAAA,EAAK,GAAA,CAAI,OAAO,KAAA,CAAM,KAAK,GAAG,GAAA,EAAK,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,EAAE,MAAA,EAAQ,WAAA,EAAa,OAAc,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,CAAC,CAAA;AAAA,IAC1U;AACA,IAAA,OAAO,IAAI,oBAAA,CAAqB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC3C,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAO,QAAA,CAAS,UAAA,CAAW,YAAY,CAAA;AAAA,MACvC,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,aAAa,QAAA,EAAU;AACpD,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,oBAAA,EAAsB;AACjE,MAAA,OAAO,IAAI,qBAAA,CAAsB,IAAA,CAAK,UAAU,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,cAAA,EAAgB;AAC3D,MAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAC,CAAA;AAED,IAAM,UAAN,MAAc;AAAA,EACV,WAAA,CAAY,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG;AACtB,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AAAA,EACb;AAAA,EACA,aAAA,GAAgB;AACZ,IAAA,OAAO,CAAC,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA;AAAA,EAC1B;AAAA,EACA,OAAO,SAAS,GAAA,EAAK;AACjB,IAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AACd,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAChD,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAO,MAAA,CAAO,EAAA,EAAI,EAAA,EAAI;AAClB,IAAA,OAAO,GAAG,CAAA,KAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,MAAM,EAAA,CAAG,CAAA;AAAA,EACxC;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO;AAAA,MACH,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,GAAG,IAAA,CAAK;AAAA,KACZ;AAAA,EACJ;AACJ,CAAA;AACA,IAAM,eAAA,GAAkB;AAAA,EACpB,YAAA,EAAc,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,EAAc;AAAA,EACrC,gBAAgB,CAAC,KAAA,KAAU,IAAI,OAAA,CAAQ,GAAG,KAAK;AACnD,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,cAAN,MAAkB;AAAA,EACd,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,SAAA,CAAU,MAAA,CAAO,UAAU,gBAAA,CAAiB,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,EAAW,UAAU,CAAC,CAAC,CAAA;AACtF,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,QAAQ,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,UAAA,CAAW,WAAA,CAAY,oBAAA,CAAqB,GAAA,EAAK,QAAQ,CAAC,CAAA;AAC1D,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,UAAU,CAAA;AACxC,IAAA,QAAA,CAAS,YAAY,UAAU,CAAA;AAC/B,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AACrB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,QAAA,CAAS,YAAY,QAAQ,CAAA;AAC7B,IAAA,IAAA,CAAK,WAAA,GAAc,QAAA;AACnB,IAAA,IAAI,MAAA,CAAO,iBAAiB,QAAA,EAAU;AAClC,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,MAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,MAAA,IAAA,CAAK,aAAA,GAAgB,UAAA;AAAA,IACzB,CAAA,MACK;AACD,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACzB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,MAAM,CAAA;AAC7B,IAAM,oBAAN,MAAwB;AAAA,EACpB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACpD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,IAAI,MAAA,CAAO,WAAW,OAAA,EAAS;AAC3B,MAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,MAAA,EAAW,GAAG,CAAC,CAAA;AAAA,IACnD;AACA,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACvC,IAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAC/B,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,OAAO,CAAA;AACrC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA;AAClB,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AACjD,IAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAC/B,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,OAAO,CAAA;AACnC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAClC,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,GAAG,CAAA;AACxC,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAC3C,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,SAAS,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAClC,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,GAAG,CAAA;AACxC,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,SAAS,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,MAAM,CAAA;AACnD,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAChC,IAAA,QAAA,CAAS,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AACzC,IAAA,QAAA,CAAS,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AACzC,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,QAAQ,CAAA;AAClC,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,UAAU,CAAA;AACtC,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,IAAI,oBAAA,GAAuB;AACvB,IAAA,OAAO,CAAC,KAAK,UAAU,CAAA;AAAA,EAC3B;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,CAAC,CAAA,EAAG,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,aAAA,EAAc;AACjD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,MAAM,EAAA,GAAK,SAAS,CAAA,EAAG,CAAC,KAAK,CAAC,GAAA,EAAK,GAAG,GAAG,CAAA;AACzC,IAAA,MAAM,EAAA,GAAK,SAAS,CAAA,EAAG,CAAC,KAAK,CAAC,GAAA,EAAK,GAAG,GAAG,CAAA;AACzC,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,UAAU,CAAA,GAAI,MAAM,EAAA,GAAK,EAAA;AACrD,IAAA,IAAA,CAAK,UAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,CAAA,EAAG,EAAE,CAAA,CAAA,CAAG,CAAA;AAClD,IAAA,IAAA,CAAK,UAAU,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AACnD,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,EAAE,CAAA,CAAA,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AAAA,EACvC;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,iBAAA,GAAoB;AAChB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,SAAS,aAAA,CAAc,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU;AAC5C,EAAA,OAAO;AAAA,IACH,cAAc,SAAA,CAAU,CAAC,CAAA,EAAG,qBAAA,CAAsB,EAAE,CAAC,CAAA;AAAA,IACrD,aAAA,CAAc,UAAU,CAAC,CAAA,EAAG,oBAAoB,EAAE,CAAC,CAAA,IAAK,QAAA,GAAW,CAAA,GAAI,EAAA;AAAA,GAC3E;AACJ;AACA,IAAM,0BAAN,MAA8B;AAAA,EAC1B,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,iBAAA,CAAkB,GAAA,EAAK;AAAA,MACnC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,UAAU,CAAA;AACzD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,KAAK,YAAY,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,SAAA,EAAW,KAAK,aAAa,CAAA;AACnE,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,KAAK,WAAW,CAAA;AAAA,EACnE;AAAA,EACA,mBAAA,CAAoB,GAAG,IAAA,EAAM;AACzB,IAAA,IAAI,CAAC,EAAE,KAAA,EAAO;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAChC,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAC,GAAA,EAAK,CAAC,GAAG,CAAA;AAC5D,IAAA,MAAM,EAAA,GAAK,SAAS,IAAA,CAAK,KAAA,CAAM,IAAI,UAAU,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,OAAO,MAAA,EAAQ,CAAC,GAAA,EAAK,CAAC,GAAG,CAAA;AACxH,IAAA,IAAA,CAAK,MAAM,WAAA,CAAY,IAAI,QAAQ,EAAA,EAAI,EAAE,GAAG,IAAI,CAAA;AAAA,EACpD;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,eAAe,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,aAAa,EAAA,EAAI;AACb,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAG,IAAA,EAAM;AAAA,MAC9B,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,cAAc,EAAA,EAAI;AACd,IAAA,IAAI,UAAA,CAAW,EAAA,CAAG,GAAG,CAAA,EAAG;AACpB,MAAA,EAAA,CAAG,cAAA,EAAe;AAAA,IACtB;AACA,IAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,WAAW,GAAG,IAAA,CAAK,KAAA,CAAM,IAAI,WAAW,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAC,CAAA;AACzH,IAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;AACtB,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,OAAA,CAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAA,GAAI,EAAE,CAAA,EAAG;AAAA,MACxF,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,YAAY,EAAA,EAAI;AACZ,IAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,WAAW,GAAG,IAAA,CAAK,KAAA,CAAM,IAAI,WAAW,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAC,CAAA;AACzH,IAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;AACtB,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AAAA,MACxC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACpB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AAChD,IAAA,IAAA,CAAK,QACD,MAAA,CAAO,YAAA,KAAiB,OAAA,GAClB,IAAI,gBAAgB,GAAA,EAAK;AAAA,MACvB,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA,GACC,IAAA;AACV,IAAA,MAAM,IAAA,GAAO,IAAI,uBAAA,CAAwB,GAAA,EAAK;AAAA,MAC1C,QAAQ,MAAA,CAAO,YAAA;AAAA,MACf,KAAA,EAAO,IAAI,QAAA,CAAS;AAAA,QAChB,QAAA,EAAU,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,QACrC,GAAA,EAAK,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA;AAAA,QAC3B,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA,CAAU,MAAM,UAAU,CAAA;AAAA,QACpD,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA,CAAU,MAAM,UAAU;AAAA,OACvD,CAAA;AAAA,MACD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,oBAAA,CAAqB,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC7C,MAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,iBAAiB,CAAA;AACpD,MAAA,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,oBAAoB,CAAA;AAAA,IAC9D,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,qBAAA,CAAsB,GAAA,EAAK;AAAA,MACzC,QAAA,EAAU,eAAA;AAAA,MACV,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,WAAA,CAAY,GAAA,EAAK;AAAA,MAC7B,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAAA,MACzC,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,WAAA,CAAY,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAC1D,IAAA,CAAC,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,aAAA,MAAmB,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,gBAAgB,CAAA;AACrH,IAAA,CAAC,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,aAAA,MAAmB,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,iBAAiB,CAAA;AACvH,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,KAAK,OAAO,CAAA;AACrD,MAAA,IAAA,CAAK,MAAM,IAAA,CAAK,OAAA,CAAQ,YAAY,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC9D,MAAA,aAAA,CAAc;AAAA,QACV,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAAA,QACxC,SAAA,EAAW,KAAK,KAAA,CAAM,KAAA;AAAA,QACtB,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA;AAAA,QAChB,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM;AAAA,OACvB,CAAA;AAAA,IACL,CAAA,MAAA,IACS,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe;AAC9B,MAAA,IAAA,CAAK,KAAK,aAAA,CAAc,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC9D,MAAA,YAAA,CAAa,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAAA,IACxD;AAAA,EACJ;AAAA,EACA,IAAI,cAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,iBAAiB,CAAA,EAAG;AAChB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,OAAA;AACvB,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,CAAA,CAAE,aAAa,CAAA;AAC5C,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,GAAW,KAAA;AAAA,IAChC;AAAA,EACJ;AAAA,EACA,iBAAA,GAAoB;AAChB,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,UAAA,EAAY,CAAC,KAAK,SAAA,CAAU,GAAA,CAAI,UAAU,CAAC,CAAA;AAC9D,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,oBAAA,CAAqB,CAAC,EAAE,KAAA,EAAM;AAAA,IACrD;AAAA,EACJ;AAAA,EACA,kBAAkB,EAAA,EAAI;AAClB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA;AAC7B,IAAA,MAAM,UAAA,GAAa,eAAe,EAAE,CAAA;AACpC,IAAA,IAAI,UAAA,IAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AACzC,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,UAAA,IACA,eAAe,IAAA,CAAK,IAAA,CAAK,iBACzB,CAAC,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA,EAAG;AACpC,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,GAAW,KAAA;AAAA,EAChC;AAAA,EACA,qBAAqB,EAAA,EAAI;AACrB,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,IAAI,EAAA,CAAG,QAAQ,QAAA,EAAU;AACrB,QAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,GAAW,KAAA;AAAA,MAChC;AAAA,IACJ,CAAA,MAAA,IACS,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe;AAC9B,MAAA,IAAI,EAAA,CAAG,QAAQ,QAAA,EAAU;AACrB,QAAA,IAAA,CAAK,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AACJ,CAAA;AAEA,SAAS,mBAAmB,KAAA,EAAO;AAC/B,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,GACvB,IAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAC5B,IAAI,OAAA,EAAQ;AACtB;AACA,SAAS,YAAA,CAAa,QAAQ,KAAA,EAAO;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACrC;AAEA,SAAS,kBAAA,CAAmB,QAAQ,YAAA,EAAc;AAC9C,EAAA,OAAO,IAAI,iBAAA,CAAkB;AAAA,IACzB,QAAA,EAAU,eAAA;AAAA,IACV,UAAA,EAAY;AAAA,MACR,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,MAC5F,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC;AAAA;AAChG,GACH,CAAA;AACL;AACA,SAAS,4BAAA,CAA6B,QAAQ,QAAA,EAAU;AACpD,EAAA,IAAI,EAAA,EAAI,EAAA;AACR,EAAA,IAAI,CAAC,QAAQ,MAAA,CAAO,GAAG,KAAK,CAAC,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,EAAG;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAA,CAAK,KAAK,MAAA,CAAO,GAAA,MAAS,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,CAAC,CAAA,EAAG,IAAA,CAAK,GAAA,CAAA,CAAK,EAAA,GAAK,MAAA,CAAO,GAAA,MAAS,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,CAAC,CAAC,CAAA;AAAA,EAClJ;AACA,EAAA,MAAM,IAAA,GAAO,oBAAoB,MAAM,CAAA;AACvC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAE,CAAA;AAChE;AACA,SAAS,cAAA,CAAe,QAAQ,YAAA,EAAc;AAC1C,EAAA,IAAI,EAAA,EAAI,EAAA;AACR,EAAA,MAAM,EAAA,GAAK,4BAAA,CAA6B,SAAA,CAAU,MAAA,EAAA,CAAU,KAAK,MAAA,CAAO,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAG,CAAA,EAAG,aAAa,CAAC,CAAA;AAChI,EAAA,MAAM,EAAA,GAAK,4BAAA,CAA6B,SAAA,CAAU,MAAA,EAAA,CAAU,KAAK,MAAA,CAAO,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAG,CAAA,EAAG,aAAa,CAAC,CAAA;AAChI,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA;AAC1B;AACA,SAAS,cAAc,MAAA,EAAQ;AAC3B,EAAA,IAAI,EAAE,OAAO,MAAA,CAAA,EAAS;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,CAAA;AACvB,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,UAAA,IAAc,OAAA,GAAU,CAAC,CAAC,QAAQ,QAAA,GAAW,KAAA;AACxD;AACA,IAAM,qBAAqB,YAAA,CAAa;AAAA,EACpC,EAAA,EAAI,eAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,KAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,0BAAA,CAA2B,CAAC,CAAC,CAAA,EAAG,EAAE,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,OAAA,EAAS,MAAA,EAAQ,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,iBAAiB,CAAA,EAAG,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,yBAAyB,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,0BAAA,CAA2B,CAAC,CAAC,CAAA,EAAG,EAAE,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,OAAA,EAAS,CAAC,CAAA,EAAG,CAAE,CAAA;AAC3Y,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,QAAQ,MAAM,kBAAA;AAAA,IACd,YAAY,CAAC,IAAA,KAAS,mBAAmB,IAAA,CAAK,MAAA,EAAQ,KAAK,YAAY,CAAA;AAAA,IACvE,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,QAAQ,MAAM;AAAA,GAClB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,IAAA,MAAM,UAAU,CAAC,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,OAAO,CAAC,CAAA;AAC7C,IAAA,OAAO,IAAI,kBAAkB,GAAA,EAAK;AAAA,MAC9B,IAAA,EAAM,MAAM,QAAA,CAAS,aAAA,GAAgB,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAClD,QAAA,IAAIC,GAAAA;AACJ,QAAA,OAAO,eAAA,CAAgB;AAAA,UACnB,UAAA,EAAY,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AAAA,UAC1B,YAAA,EAAc,IAAA;AAAA,UACd,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,MAAA,EAAA,CAAUA,GAAAA,GAAK,OAAA,CAAQ,CAAC,CAAA,MAAO,IAAA,IAAQA,GAAAA,KAAO,MAAA,GAASA,GAAAA,GAAK,EAAG;AAAA,SACzF,CAAA;AAAA,MACL,CAAC,CAAA;AAAA,MACD,QAAA,EAAA,CAAW,KAAK,IAAA,CAAK,MAAA,CAAO,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,MACvE,QAAA,EAAU,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AAAA,MACnC,GAAA,EAAK,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAAA,MAC/C,MAAA,EAAQ,WAAA;AAAA,MACR,YAAA,EAAA,CAAe,KAAK,IAAA,CAAK,MAAA,CAAO,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,OAAA;AAAA,MACzE,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,IAAM,UAAN,MAAc;AAAA,EACV,YAAY,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,EAAG;AAC7B,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AAAA,EACb;AAAA,EACA,aAAA,GAAgB;AACZ,IAAA,OAAO,CAAC,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EAClC;AAAA,EACA,OAAO,SAAS,GAAA,EAAK;AACjB,IAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AACd,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,IAAI,OAAO,MAAM,QAAA,IACb,OAAO,MAAM,QAAA,IACb,OAAO,MAAM,QAAA,EAAU;AACvB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAO,MAAA,CAAO,EAAA,EAAI,EAAA,EAAI;AAClB,IAAA,OAAO,EAAA,CAAG,CAAA,KAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,MAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,CAAA,KAAM,EAAA,CAAG,CAAA;AAAA,EACzD;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO;AAAA,MACH,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,GAAG,IAAA,CAAK;AAAA,KACZ;AAAA,EACJ;AACJ,CAAA;AACA,IAAM,eAAA,GAAkB;AAAA,EACpB,YAAA,EAAc,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,EAAc;AAAA,EACrC,gBAAgB,CAAC,KAAA,KAAU,IAAI,OAAA,CAAQ,GAAG,KAAK;AACnD,CAAA;AAEA,SAAS,mBAAmB,KAAA,EAAO;AAC/B,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,GACvB,IAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GACrC,IAAI,OAAA,EAAQ;AACtB;AACA,SAAS,YAAA,CAAa,QAAQ,KAAA,EAAO;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACrC;AAEA,SAAS,kBAAA,CAAmB,QAAQ,YAAA,EAAc;AAC9C,EAAA,OAAO,IAAI,iBAAA,CAAkB;AAAA,IACzB,QAAA,EAAU,eAAA;AAAA,IACV,UAAA,EAAY;AAAA,MACR,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,MAC5F,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,MAC5F,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC;AAAA;AAChG,GACH,CAAA;AACL;AACA,IAAM,qBAAqB,YAAA,CAAa;AAAA,EACpC,EAAA,EAAI,eAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,SAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,KAAO,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,2BAA2B,CAAC,CAAC,GAAG,EAAE,QAAA,EAAU,EAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,GAAG,CAAA,CAAE,QAAA,CAAS,OAAO,yBAAyB,CAAA,EAAG,GAAG,CAAA,CAAE,QAAA,CAAS,OAAO,yBAAyB,CAAA,EAAG,GAAG,CAAA,CAAE,QAAA,CAAS,OAAO,yBAAyB,CAAA,EAAG,CAAE,CAAA;AACxS,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU,kBAAA;AAAA,IACnB,YAAY,CAAC,IAAA,KAAS,mBAAmB,IAAA,CAAK,MAAA,EAAQ,KAAK,YAAY,CAAA;AAAA,IACvE,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,IAAA,MAAM,OAAA,GAAU,CAAC,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,KAAK,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC5D,IAAA,OAAO,IAAI,qBAAA,CAAsB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC5C,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM,MAAM,QAAA,CAAS,aAAA,GAAgB,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAClD,QAAA,IAAI,EAAA;AACJ,QAAA,OAAO,eAAA,CAAgB;AAAA,UACnB,UAAA,EAAY,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AAAA,UAC1B,YAAA,EAAc,IAAA;AAAA,UACd,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,MAAA,EAAA,CAAU,EAAA,GAAK,OAAA,CAAQ,CAAC,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,EAAG;AAAA,SACzF,CAAA;AAAA,MACL,CAAC,CAAA;AAAA,MACD,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,IAAM,UAAN,MAAc;AAAA,EACV,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,EAAG;AACpC,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AAAA,EACb;AAAA,EACA,aAAA,GAAgB;AACZ,IAAA,OAAO,CAAC,KAAK,CAAA,EAAG,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EAC1C;AAAA,EACA,OAAO,SAAS,GAAA,EAAK;AACjB,IAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AACd,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,MAAM,IAAI,GAAA,CAAI,CAAA;AACd,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IACb,OAAO,CAAA,KAAM,QAAA,IACb,OAAO,CAAA,KAAM,QAAA,IACb,OAAO,CAAA,KAAM,QAAA,EAAU;AACvB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAO,MAAA,CAAO,EAAA,EAAI,EAAA,EAAI;AAClB,IAAA,OAAO,EAAA,CAAG,CAAA,KAAM,EAAA,CAAG,CAAA,IAAK,GAAG,CAAA,KAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,CAAA,KAAM,EAAA,CAAG,CAAA,IAAK,EAAA,CAAG,MAAM,EAAA,CAAG,CAAA;AAAA,EAC1E;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO;AAAA,MACH,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,GAAG,IAAA,CAAK;AAAA,KACZ;AAAA,EACJ;AACJ,CAAA;AACA,IAAM,eAAA,GAAkB;AAAA,EACpB,YAAA,EAAc,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,EAAc;AAAA,EACrC,gBAAgB,CAAC,KAAA,KAAU,IAAI,OAAA,CAAQ,GAAG,KAAK;AACnD,CAAA;AAEA,SAAS,mBAAmB,KAAA,EAAO;AAC/B,EAAA,OAAO,QAAQ,QAAA,CAAS,KAAK,CAAA,GACvB,IAAI,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAC9C,IAAI,OAAA,EAAQ;AACtB;AACA,SAAS,YAAA,CAAa,QAAQ,KAAA,EAAO;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AACrC;AAEA,SAAS,kBAAA,CAAmB,QAAQ,YAAA,EAAc;AAC9C,EAAA,OAAO,IAAI,iBAAA,CAAkB;AAAA,IACzB,QAAA,EAAU,eAAA;AAAA,IACV,UAAA,EAAY;AAAA,MACR,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,MAC5F,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,MAC5F,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,MAC5F,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,aAAa,CAAC;AAAA;AAChG,GACH,CAAA;AACL;AACA,IAAM,qBAAqB,YAAA,CAAa;AAAA,EACpC,EAAA,EAAI,eAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,YAAY,MAAA,EAAQ,CAAC,MAAO,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,IAAI,0BAAA,CAA2B,CAAC,CAAC,CAAA,EAAG,EAAE,UAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,EAAG,EAAE,QAAA,CAAS,MAAA,CAAO,yBAAyB,CAAA,EAAG,CAAA,EAAG,EAAE,QAAA,CAAS,MAAA,CAAO,yBAAyB,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,SAAS,MAAA,CAAO,yBAAyB,GAAG,CAAA,EAAG,CAAA,CAAE,SAAS,MAAA,CAAO,yBAAyB,CAAA,EAAG,CAAE,CAAA;AACzV,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU,kBAAA;AAAA,IACnB,YAAY,CAAC,IAAA,KAAS,mBAAmB,IAAA,CAAK,MAAA,EAAQ,KAAK,YAAY,CAAA;AAAA,IACvE,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,KAAK,MAAA,CAAO,CAAA;AAAA,MACZ,KAAK,MAAA,CAAO,CAAA;AAAA,MACZ,KAAK,MAAA,CAAO,CAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KAChB;AACA,IAAA,OAAO,IAAI,qBAAA,CAAsB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC5C,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM,MAAM,QAAA,CAAS,aAAA,GAAgB,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAClD,QAAA,IAAI,EAAA;AACJ,QAAA,OAAO,eAAA,CAAgB;AAAA,UACnB,UAAA,EAAY,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AAAA,UAC1B,YAAA,EAAc,IAAA;AAAA,UACd,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,MAAA,EAAA,CAAU,EAAA,GAAK,OAAA,CAAQ,CAAC,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,EAAG;AAAA,SACzF,CAAA;AAAA,MACL,CAAC,CAAA;AAAA,MACD,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,SAAS,iBAAiB,MAAA,EAAQ;AAC9B,EAAA,MAAM,cAAc,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAA;AAC9C,EAAA,IAAI,EAAA,EAAI;AACJ,IAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAI,oBAAoB,WAAW,CAAA;AAC9C;AACA,IAAM,oBAAoB,YAAA,CAAa;AAAA,EACnC,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACnC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,gBAAgB;AAAA,KAC/C,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU,iBAAA;AAAA,IACnB,UAAA,EAAY,CAAC,IAAA,KAAS,gBAAA,CAAiB,KAAK,MAAM,CAAA;AAAA,IAClD,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,IAAA,MAAM,EAAA,GAAK,CAAA,IAAK,cAAA,CAAe,CAAA,EAAG,cAAc,CAAA;AAChD,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,OAAO,IAAI,eAAe,GAAA,EAAK;AAAA,QAC3B,KAAA,EAAO,IAAI,QAAA,CAAS;AAAA,UAChB,OAAA,EAAS,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,SAAS;AAAA,SACrC,CAAA;AAAA,QACD,KAAA;AAAA,QACA,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,IACL;AACA,IAAA,OAAO,IAAI,eAAe,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,CAAC,CAAA,KAAM,CAAA;AAAA,MACf,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,QACvB,SAAA,EAAW;AAAA,OACd,CAAA;AAAA,MACD,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,aAAa,QAAA,EAAU;AACpD,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,cAAA,EAAgB;AAC3D,MAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAC,CAAA;AAED,IAAM,SAAA,GAAY;AAAA,EACd,OAAA,EAAS;AAAA,IACL,eAAA,EAAiB,GAAA;AAAA,IACjB,WAAA,EAAa;AAAA;AAErB,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,aAAA,CAAc,UAAU,CAAA;AACjD,IAAA,YAAA,CAAa,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACpC,IAAA,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA,SAAA,EAAY,SAAA,CAAU,mBAAmB,CAAC,CAAA,IAAA,EAAO,OAAO,IAAI,CAAA,CAAA,CAAA;AACxF,IAAA,YAAA,CAAa,QAAA,GAAW,IAAA;AACxB,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,YAAY,CAAA;AAC1C,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,YAAY,CAAA;AACrC,IAAA,IAAA,CAAK,aAAA,GAAgB,YAAA;AACrB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,OAAO,IAAA,CAAK,aAAA;AAClB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,KAAc,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACjE,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAU;AACnC,MAAA,IAAI,UAAU,MAAA,EAAW;AACrB,QAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,MACrC;AAAA,IACJ,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAClC,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,YAAA;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACrB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,GAAA,EAAK;AAAA,MAC9B,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,gBAAN,MAAoB;AAAA,EAChB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACjC,IAAA,SAAA,CAAU,QAAA,GAAW,IAAA;AACrB,IAAA,SAAA,CAAU,IAAA,GAAO,MAAA;AACjB,IAAA,MAAA,CAAO,SAAA,CAAU,aAAa,SAAS,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,SAAS,CAAA;AAClC,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,QAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC1C,IAAA,IAAA,CAAK,aAAa,KAAA,GACd,SAAA,KAAc,SAAY,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,GAAI,EAAA;AAAA,EAC/D;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,sBAAN,MAA0B;AAAA,EACtB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,aAAA,CAAc,GAAA,EAAK;AAAA,MAC/B,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,uBAAuB,YAAA,CAAa;AAAA,EACtC,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC5B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA;AAAA,MAClC,IAAA,EAAM,EAAE,QAAA,CAAS;AAAA,KACrB,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAClC,MAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,QAAA,EAAU;AAAA,QAC1C,SAAA,EAAW,gBAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,IACL;AACA,IAAA,OAAO,IAAI,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU;AAAA,MACzC,SAAA,EAAW,gBAAA;AAAA,MACX,IAAA,EAAA,CAAO,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,IAAA,MAAU,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,WAAA;AAAA,MACjF,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,IAAM,yBAAA,GAAN,cAAwC,UAAA,CAAW;AAAA,EAC/C,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC1D;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACxD;AAAA,EACA,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC1D;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACxD;AACJ,CAAA;AAEA,IAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAA;AACjC,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AACrB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,eAAe,CAAA;AACtD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AACjD,IAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAC/B,IAAA,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,SAAA,EAAY,SAAA,CAAU,mBAAmB,CAAC,CAAA,IAAA,EAAO,OAAO,IAAI,CAAA,CAAA,CAAA;AACnF,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,UAAU,CAAA;AACvD,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,QAAQ,CAAA;AAClC,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,WAAA,CAAY,SAAA,CAAU,IAAI,IAAA,CAAK,GAAG,GAAG,SAAA,CAAU,IAAI,GAAG,CAAA;AACtD,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,WAAW,CAAA;AACpC,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AACpB,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,KAAK,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,IAAI,YAAA,GAAe;AACf,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,EAAE,WAAA,EAAa,CAAA,EAAG,YAAA,EAAc,CAAA,KAAM,IAAA,CAAK,OAAA;AACjD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,MAAM,SAAS,EAAC;AAChB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,GAAG,KAAA,KAAU;AACtC,MAAA,IAAI,MAAM,MAAA,EAAW;AACjB,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,IAAI,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,GAAG,CAAC,CAAA;AAC3C,MAAA,MAAM,IAAI,QAAA,CAAS,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AACpC,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAChC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,UAAU,cAAA,CAAe,IAAA,EAAM,UAAU,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9D,IAAA,MAAM,cAAc,IAAA,CAAK,YAAA;AACzB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,QAAQ,QAAQ,CAAA;AACvD,IAAA,IAAI,UAAU,MAAA,EAAW;AACrB,MAAA,WAAA,CAAY,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAC3C,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,EAAA,GAAK,SAAS,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG,QAAA,EAAU,GAAG,CAAC,CAAA;AAC5D,IAAA,MAAM,KAAK,QAAA,CAAS,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AACzC,IAAA,WAAA,CAAY,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,EAAE,CAAA,EAAA,CAAA;AAC9B,IAAA,WAAA,CAAY,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,EAAE,CAAA,EAAA,CAAA;AAC7B,IAAA,WAAA,CAAY,WAAA,GAAc,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA;AACnD,IAAA,IAAI,CAAC,YAAY,SAAA,CAAU,QAAA,CAAS,KAAK,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG;AACjD,MAAA,WAAA,CAAY,SAAA,CAAU,IAAI,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAA;AACzD,MAAA,WAAA,CAAY,WAAW,CAAA;AACvB,MAAA,WAAA,CAAY,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAA;AAAA,IAChD;AAAA,EACJ;AAAA,EACA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AAAA,EACA,eAAA,GAAkB;AACd,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACjB;AACJ,CAAA;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACrB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,OAAA,GAAU,YAAY,EAAE,CAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,GAAA,EAAK;AAAA,MAC9B,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAI,CAAC,aAAA,CAAc,GAAG,CAAA,EAAG;AACrB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,WAAA,EAAa,KAAK,iBAAiB,CAAA;AACtE,MAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,YAAA,EAAc,KAAK,kBAAkB,CAAA;AAAA,IAC5E,CAAA,MACK;AACD,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,OAAO,CAAA;AAC/C,MAAA,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,IAAA,CAAK,mBAAmB,CAAA;AAC9C,MAAA,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,IAAA,CAAK,mBAAmB,CAAA;AAC9C,MAAA,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,YAAY,KAAA,EAAO;AACf,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,MACzC,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,MAChB,GAAA,EAAK,EAAE,QAAA,CAAS;AAAA,KACpB,CAAA,EAAI,CAAC,MAAA,KAAW;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AAChC,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAAA,EACA,WAAA,GAAc;AACV,IAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,MAC1B,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAAA,MACzB,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK;AAAA,KAC5B,CAAA;AAAA,EACL;AAAA,EACA,kBAAA,GAAqB;AACjB,IAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,EAAA;AAAA,EAC5B;AAAA,EACA,kBAAkB,EAAA,EAAI;AAClB,IAAA,MAAM,EAAE,WAAA,EAAa,CAAA,EAAE,GAAI,KAAK,IAAA,CAAK,OAAA;AACrC,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,SAAS,EAAA,CAAG,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,EAChG;AAAA,EACA,oBAAoB,EAAA,EAAI;AACpB,IAAA,IAAA,CAAK,oBAAoB,EAAE,CAAA;AAAA,EAC/B;AAAA,EACA,oBAAoB,EAAA,EAAI;AACpB,IAAA,IAAI,CAAC,EAAA,CAAG,IAAA,CAAK,KAAA,EAAO;AAChB,MAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,EAAA;AACxB,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,IAAA,CAAK,MAAM,QAAA,CAAS,EAAA,CAAG,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,EAAA,CAAG,IAAA,CAAK,OAAO,KAAA,EAAO,CAAA,EAAG,KAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,EACxH;AAAA,EACA,iBAAA,GAAoB;AAChB,IAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,EAAA;AAAA,EAC5B;AACJ,CAAA;AAEA,SAAS,gBAAgB,MAAA,EAAQ;AAC7B,EAAA,OAAO,CAAC,QAAQ,MAAA,CAAO,MAAM,IAAI,MAAA,CAAO,MAAA,GAAS,sBAAsB,CAAC,CAAA;AAC5E;AACA,SAAS,kBAAkB,IAAA,EAAM;AAC7B,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAClC,IAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC1C,SAAA,EAAW,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,MACtC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACA,EAAA,OAAO,IAAI,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU;AAAA,IACzC,SAAA,EAAW,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,IACtC,IAAA,EAAA,CAAO,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,IAAA,MAAU,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,WAAA;AAAA,IACjF,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GACnB,CAAA;AACL;AACA,SAAS,mBAAmB,IAAA,EAAM;AAC9B,EAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,EAAA,OAAO,IAAI,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU;AAAA,IACzC,SAAA,EAAW,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,IACtC,IAAA,EAAA,CAAO,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,IAAA,MAAU,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,WAAA;AAAA,IACjF,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,MACvB,GAAA,EAAA,CAAM,KAAK,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,GAAA;AAAA,MAC7D,GAAA,EAAA,CAAM,KAAK,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK;AAAA,KAChE,CAAA;AAAA,IACD,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GACnB,CAAA;AACL;AACA,SAAS,gBAAgB,MAAA,EAAQ;AAC7B,EAAA,OAAO,OAAO,IAAA,KAAS,OAAA;AAC3B;AACA,IAAM,sBAAsB,YAAA,CAAa;AAAA,EACrC,EAAA,EAAI,gBAAA;AAAA,EACJ,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,MAAA,EAAQ,EAAE,QAAA,CAAS,QAAA;AAAA,MACnB,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,MAChB,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,MAChB,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA;AAAA,MAClC,IAAA,EAAM,EAAE,QAAA,CAAS,MAAA;AAAA,MACjB,IAAA,EAAM,EAAE,QAAA,CAAS;AAAA,KACrB,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,mBAAmB,CAAC,MAAA,KAAY,eAAA,CAAgB,MAAM,IAAI,EAAA,GAAK,CAAA;AAAA,IAC/D,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA,EAAG;AAC9B,MAAA,OAAO,mBAAmB,IAAI,CAAA;AAAA,IAClC;AACA,IAAA,OAAO,kBAAkB,IAAI,CAAA;AAAA,EACjC,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,IAAA,KAAS;AACX,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,kBAAA,EAAoB;AAC/D,MAAA,OAAO,IAAI,yBAAA,CAA0B,IAAA,CAAK,UAAU,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAC,CAAA;AAED,IAAM,sBAAsB,YAAA,CAAa;AAAA,EACrC,EAAA,EAAI,gBAAA;AAAA,EACJ,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,SAAA,EAAW,EAAE,QAAA,CAAS,OAAA;AAAA,MACtB,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA;AAAA,MAClC,IAAA,EAAM,EAAE,QAAA,CAAS;AAAA,KACrB,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GACD;AAAA,MACE,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACZ,GACE,IAAA;AAAA,EACV,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAQ,CAAC,KAAA,KAAU;AAAA,GACvB;AAAA,EACA,UAAA,EAAY,CAAC,IAAA,KAAS;AAClB,IAAA,IAAI,EAAA;AACJ,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,YAAY,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,KAAK,MAAA,CAAO,SAAA;AAC3D,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,OAAO,IAAI,kBAAA,CAAmB,IAAA,CAAK,QAAA,EAAU;AAAA,QACzC,SAAA,EAAW,YAAA;AAAA,QACX,IAAA,EAAA,CAAO,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,IAAA,MAAU,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,WAAA;AAAA,QACjF,KAAA;AAAA,QACA,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AAAA,IACL;AACA,IAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC1C,SAAA,EAAW,YAAA;AAAA,MACX,KAAA;AAAA,MACA,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL;AACJ,CAAC,CAAA;AAED,IAAM,gBAAN,MAAoB;AAAA,EAChB,WAAA,GAAc;AACV,IAAA,IAAA,CAAK,IAAA,uBAAW,GAAA,EAAI;AAAA,EACxB;AAAA,EACA,IAAI,EAAA,EAAI;AACJ,IAAA,IAAI,EAAA;AACJ,IAAA,OAAA,CAAQ,EAAA,GAAK,KAAK,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,IAAA;AAAA,EACrE;AAAA,EACA,IAAI,EAAA,EAAI;AACJ,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAAA,EAC3B;AAAA,EACA,GAAA,CAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA;AACrB,IAAA,EAAA,CAAG,SAAA,CAAU,cAAc,MAAM;AAC7B,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,IACvB,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACnB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AAAA,EAC1B;AAAA,EACA,IAAA,GAAO;AACH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EAC1C;AAAA,EACA,MAAM,KAAA,EAAO;AACT,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAAA,EACnC;AAAA,EACA,OAAO,KAAA,EAAO;AACV,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAClC;AACJ,CAAA;AAEA,SAAS,4BAAA,CAA6B,QAAQ,IAAA,EAAM;AAChD,EAAA,IAAI,EAAA;AACJ,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,IAAA,EAAK,EAAG,KAAK,MAAM,CAAA;AAC5D,EAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,QAAQ,MAAA,CAAO;AAAA,GACnB;AACA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,IAC5C,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,IACrB,MAAA,EAAQ,EAAE,QAAA,CAAS,OAAA;AAAA,IACnB,KAAA,EAAO,EAAE,QAAA,CAAS,MAAA;AAAA,IAClB,GAAA,EAAK,EAAE,QAAA,CAAS;AAAA,GACpB,CAAE,CAAA;AACF,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,UAAA,GAC5B,OAAO,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,GACnC,MAAA;AACN,EAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,CAAiB;AAAA,IACjC,MAAA;AAAA,IACA,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,SAAS;AAAA,GAC1C,CAAA;AACD,EAAA,MAAM,QAAQ,IAAI,iBAAA,CAAkB,YAAY,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,EAAG;AAAA,IACzE,UAAA;AAAA,IACA,MAAA,EAAQ,OAAO,OAAA,CAAQ;AAAA,GAC1B,GAAG,OAAO,CAAA;AACX,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,CAAW;AAAA,IACjC,UAAA;AAAA,IACA,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAA;AAAA,IACA,SAAA,EAAW,UAAU,MAAA,CAAO;AAAA,MACxB,UAAU,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,QAAA;AAAA,MACjE,QAAQ,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO;AAAA,KAClE;AAAA,GACJ,CAAA;AACD,EAAA,OAAO,IAAI,sBAAA,CAAuB,IAAA,CAAK,QAAA,EAAU;AAAA,IAC7C,OAAO,WAAA,EAAY;AAAA,IACnB,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,MACvB,OAAO,OAAA,IAAW,IAAA,CAAK,UAAU,EAAA,GAAK,MAAA,KAAW,QAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,MAAA,CAAO,WAAW,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA,GAAO,KAAK,MAAA,CAAO;AAAA,KAC3J,CAAA;AAAA,IACD,KAAK,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,GAAA;AAAA,IAC5D,KAAA;AAAA,IACA,eAAA,EAAiB;AAAA,GACpB,CAAA;AACL;AAEA,IAAM,kBAAN,MAAsB;AAAA,EAClB,YAAY,MAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AAAA,EAC1B;AAAA,EACA,IAAA,GAAO;AACH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EAC1C;AACJ,CAAA;AAEA,SAAS,YAAA,CAAaH,WAAU,QAAA,EAAU;AACtC,EAAA,OAAO,QAAA,KAAa,CAAA,GACd,IAAI,YAAA,KACJ,IAAI,cAAA,CAAeA,SAAAA,EAAU,QAAA,KAAa,QAAQ,QAAA,KAAa,MAAA,GAAS,QAAA,GAAW,SAAA,CAAU,QAAQ,eAAe,CAAA;AAC9H;AACA,SAAS,8BAAA,CAA+B,QAAQ,IAAA,EAAM;AAClD,EAAA,IAAI,IAAI,EAAA,EAAI,EAAA;AACZ,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,IAAA,EAAK,EAAG,KAAK,MAAM,CAAA;AAC5D,EAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,WAAA,GAAc;AAAA,IAChB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,QAAQ,MAAA,CAAO;AAAA,GACnB;AACA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,IAC5C,UAAA,EAAY,EAAE,QAAA,CAAS,MAAA;AAAA,IACvB,QAAA,EAAU,EAAE,QAAA,CAAS,OAAA;AAAA,IACrB,MAAA,EAAQ,EAAE,QAAA,CAAS,OAAA;AAAA,IACnB,QAAA,EAAU,EAAE,QAAA,CAAS,MAAA;AAAA,IACrB,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,GACtB,CAAE,CAAA;AACF,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA;AAChD,EAAA,MAAM,UAAA,GAAA,CAAc,EAAA,GAAA,CAAM,EAAA,GAAK,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,MAAA,CAAO,UAAA,MAAgB,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,KAAM,MAAA,CAAO,OAAA,CAAQ,iBAAA,IAC/I,MAAA,CAAO,OAAA,CAAQ,iBAAA,CAAkB,MAAA,CAAO,MAAM,CAAA,MAAQ,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQ,IAAI,mBAAA,CAAoB;AAAA,IAClC,OAAA,EAAS,IAAI,eAAA,CAAgB;AAAA,MACzB,MAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KAChB,CAAA;AAAA,IACD,UAAA;AAAA,IACA,MAAA,EAAQ,YAAA,CAAa,IAAA,CAAK,QAAA,EAAU,MAAA,KAAW,QAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,MAAA,CAAO,QAAQ;AAAA,GACtG,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,CAAW;AAAA,IACjC,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAA;AAAA,IACA,SAAA,EAAW,UAAU,MAAA,CAAO;AAAA,MACxB,UAAU,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,QAAA;AAAA,MACjE,QAAQ,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO;AAAA,KAClE;AAAA,GACJ,CAAA;AACD,EAAA,UAAA,CAAW,SAAA,CAAU,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA;AAC9C,EAAA,UAAA,CAAW,SAAA,CAAU,cAAc,MAAM;AACrC,IAAA,KAAA,CAAM,OAAO,OAAA,EAAQ;AAAA,EACzB,CAAC,CAAA;AACD,EAAA,OAAO,IAAI,wBAAA,CAAyB,IAAA,CAAK,QAAA,EAAU;AAAA,IAC/C,OAAO,WAAA,EAAY;AAAA,IACnB,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,MACvB,OAAO,OAAA,IAAW,IAAA,CAAK,UAAU,EAAA,GAAK,MAAA,KAAW,QAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,MAAA,CAAO,WAAW,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA,GAAO,KAAK,MAAA,CAAO;AAAA,KAC3J,CAAA;AAAA,IACD,KAAA;AAAA,IACA,eAAA,EAAiB;AAAA,GACpB,CAAA;AACL;AAEA,IAAM,aAAN,MAAiB;AAAA,EACb,YAAY,QAAA,EAAU;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc;AAAA,MACf,QAAQ,EAAC;AAAA,MACT,QAAQ,EAAC;AAAA,MACT,UAAU;AAAC,KACf;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EACA,MAAA,GAAS;AACL,IAAA,OAAO;AAAA,MACH,GAAG,KAAK,WAAA,CAAY,MAAA;AAAA,MACpB,GAAG,KAAK,WAAA,CAAY,MAAA;AAAA,MACpB,GAAG,KAAK,WAAA,CAAY;AAAA,KACxB;AAAA,EACJ;AAAA,EACA,QAAA,CAAS,UAAU,CAAA,EAAG;AAClB,IAAA,IAAI,CAAC,YAAA,CAAa,CAAA,CAAE,IAAI,CAAA,EAAG;AACvB,MAAA,MAAM,OAAA,CAAQ,aAAA,CAAc,QAAA,EAAU,CAAA,CAAE,EAAE,CAAA;AAAA,IAC9C;AACA,IAAA,IAAI,CAAA,CAAE,SAAS,OAAA,EAAS;AACpB,MAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA;AAAA,IACrC,CAAA,MAAA,IACS,CAAA,CAAE,IAAA,KAAS,OAAA,EAAS;AACzB,MAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA;AAAA,IACrC,CAAA,MAAA,IACS,CAAA,CAAE,IAAA,KAAS,SAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA;AAAA,IACvC;AAAA,EACJ;AAAA,EACA,YAAA,CAAaA,SAAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ;AACnC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,MAAA,CAAO,CAAC,MAAA,EAAQ,MAAA,KAAW,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,6BAA6B,MAAA,EAAQ;AAAA,MAC3I,QAAA,EAAUA,SAAAA;AAAA,MACV,MAAA;AAAA,MACA;AAAA,KACH,GAAG,IAAI,CAAA;AAAA,EACZ;AAAA,EACA,cAAA,CAAeA,SAAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ;AACrC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,MAAA,CAAO,CAAC,MAAA,EAAQ,MAAA,KAAW,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,+BAA+B,MAAA,EAAQ;AAAA,MAC/I,QAAA,EAAUA,SAAAA;AAAA,MACV,MAAA;AAAA,MACA;AAAA,KACH,GAAG,IAAI,CAAA;AAAA,EACZ;AAAA,EACA,aAAA,CAAc,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ;AAC/B,IAAA,MAAM,YAAA,GAAe,OAAO,IAAA,EAAK;AACjC,IAAA,IAAI,OAAA,CAAQ,YAAY,CAAA,EAAG;AACvB,MAAA,MAAM,IAAI,OAAA,CAAQ;AAAA,QACd,OAAA,EAAS;AAAA,UACL,KAAK,MAAA,CAAO;AAAA,SAChB;AAAA,QACA,IAAA,EAAM;AAAA,OACT,CAAA;AAAA,IACL;AACA,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,QAAQ,MAAM,CAAA;AAChD,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,OAAO,EAAA;AAAA,IACX;AACA,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,QAAQ,MAAM,CAAA;AAClD,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,OAAO,EAAA;AAAA,IACX;AACA,IAAA,MAAM,IAAI,OAAA,CAAQ;AAAA,MACd,OAAA,EAAS;AAAA,QACL,KAAK,MAAA,CAAO;AAAA,OAChB;AAAA,MACA,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AAAA,EACA,WAAA,CAAYA,WAAU,MAAA,EAAQ;AAC1B,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,OAAO,CAAC,MAAA,EAAQ,MAAA,KAAW,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,sBAAsB,MAAA,EAAQ;AAAA,MACxI,QAAA,EAAUA,SAAAA;AAAA,MACV;AAAA,KACH,GAAG,IAAI,CAAA;AACR,IAAA,IAAI,CAAC,EAAA,EAAI;AACL,MAAA,MAAM,IAAI,OAAA,CAAQ;AAAA,QACd,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACL;AAAA;AACJ,OACH,CAAA;AAAA,IACL;AACA,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EACA,uBAAuB,EAAA,EAAI;AACvB,IAAA,MAAM,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,MAAA,CAAO,CAAC,QAAQ,MAAA,KAAW;AAC3D,MAAA,IAAI,EAAA,EAAI,EAAA;AACR,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,OAAA,CAAS,EAAA,GAAA,CAAM,EAAA,GAAK,MAAA,CAAO,GAAA,MAAS,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,IAAA,CAAK,MAAA,EAAQ;AAAA,QACjF,UAAA,EAAY;AAAA,OACf,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA;AAAA,IACzC,GAAG,IAAI,CAAA;AACP,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAA,EAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,GAAS,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AAAA,EAC3F;AAAA,EACA,yBAAyB,EAAA,EAAI;AACzB,IAAA,MAAM,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,MAAA,CAAO,CAAC,QAAQ,MAAA,KAAW;AAC7D,MAAA,IAAI,EAAA,EAAI,EAAA;AACR,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,OAAA,CAAS,EAAA,GAAA,CAAM,EAAA,GAAK,MAAA,CAAO,GAAA,MAAS,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,IAAA,CAAK,MAAA,EAAQ;AAAA,QACjF,UAAA,EAAY;AAAA,OACf,CAAA,MAAO,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,IAAA;AAAA,IACzC,GAAG,IAAI,CAAA;AACP,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAA,EAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,GAAS,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AAAA,EAC3F;AAAA,EACA,iBAAiB,EAAA,EAAI;AACjB,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,wBAAA,CAAyB,EAAE,CAAA,EAAG;AAC9B,MAAA,OAAO,IAAA,CAAK,uBAAuB,EAAE,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,0BAAA,CAA2B,EAAE,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA,CAAK,yBAAyB,EAAE,CAAA;AAAA,IAC3C;AACA,IAAA,MAAM,QAAQ,iBAAA,EAAkB;AAAA,EACpC;AAAA,EACA,UAAU,EAAA,EAAI;AACV,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,mBAAA,CAAoB,EAAE,CAAA,EAAG;AACzB,MAAA,OAAO,IAAA,CAAK,iBAAiB,EAAE,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,OAAO,CAAC,MAAA,EAAQ,MAAA,KAAW,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,OAAO,GAAA,CAAI;AAAA,MACtH,UAAA,EAAY,EAAA;AAAA,MACZ,IAAA,EAAM;AAAA,KACT,GAAG,IAAI,CAAA;AACR,IAAA,IAAI,CAAC,GAAA,EAAK;AACN,MAAA,MAAM,QAAQ,iBAAA,EAAkB;AAAA,IACpC;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA;AAAA,EACrC;AACJ,CAAA;AAEA,IAAM,WAAA,GAAc,IAAI,aAAA,EAAc;AACtC,SAAS,uBAAA,GAA0B;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,WAAW,CAAA;AACvC,EAAA;AAAA,IACI,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,sBAAA;AAAA,IACA,sBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACJ,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACb,IAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,EAC3B,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACX;AAEA,IAAM,YAAA,GAAN,cAA2B,QAAA,CAAS;AAAA;AAAA;AAAA;AAAA,EAIhC,YAAY,UAAA,EAAY;AACpB,IAAA,KAAA,CAAM,UAAU,CAAA;AAChB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC/C,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,QAAA,EAAU,IAAI,cAAc,IAAA,EAAM,EAAA,CAAG,QAAQ,CAAC,CAAA;AAAA,IACrE,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,SAAS,CAAA;AAAA,EAC9D;AAAA,EACA,IAAI,QAAQ,OAAA,EAAS;AACjB,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,WAAW,OAAO,CAAA;AAAA,EAChE;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AAAA,EACjC;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,QAAA,GAAW,KAAA;AAAA,EACrC;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAM,iBAAA,GAAN,cAAgC,QAAA,CAAS;AACzC,CAAA;AAEA,IAAM,cAAA,GAAN,cAA6B,QAAA,CAAS;AAAA;AAAA;AAAA;AAAA,EAIlC,YAAY,UAAA,EAAY;AACpB,IAAA,KAAA,CAAM,UAAU,CAAA;AAChB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC/C,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,QAAA,EAAU,IAAI,cAAc,IAAA,EAAM,EAAA,CAAG,QAAQ,CAAC,CAAA;AAAA,IACrE,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,KAAK,UAAA,CAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC3E;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACzE;AAAA,EACA,IAAI,GAAA,GAAM;AACN,IAAA,OAAO,KAAK,UAAA,CAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC3E;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,CAAgB,gBAAA,CAAiB,KAAA,CAAM,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACzE;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AAAA,EACjC;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,QAAA,GAAW,KAAA;AAAA,EACrC;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAM,YAAA,GAAN,cAA2B,QAAA,CAAS;AAAA;AAAA;AAAA;AAAA,EAIhC,YAAY,UAAA,EAAY;AACpB,IAAA,KAAA,CAAM,UAAU,CAAA;AAChB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAAO;AAC/C,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,QAAA,EAAU,IAAI,cAAc,IAAA,EAAM,EAAA,CAAG,QAAQ,CAAC,CAAA;AAAA,IACrE,CAAC,CAAA;AAAA,EACL;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA,EACA,IAAI,SAAA,GAAY;AACZ,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,WAAW,CAAA;AAAA,EAChE;AAAA,EACA,IAAI,UAAU,SAAA,EAAW;AACrB,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,aAAa,SAAS,CAAA;AAAA,EACpE;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AAAA,EACjC;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,QAAA,GAAW,KAAA;AAAA,EACrC;AAAA,EACA,EAAA,CAAG,WAAW,OAAA,EAAS;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,EAAA,KAAO;AAChC,MAAA,EAAA,CAAG,EAAE,CAAA;AAAA,IACT,CAAA,EAAG;AAAA,MACC,GAAA,EAAK;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,WAAW,OAAA,EAAS;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAM,kCAAmB,WAAY;AACjC,EAAA,OAAO;AAAA,IACH,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,OAAO,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,QACvC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,gBAAgB,CAAA;AAAA,QAC3C,KAAA,EAAO,EAAE,QAAA,CAAS,GAAA;AAAA,QAClB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,QAChC,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,OACtB,CAAE,CAAA;AACF,MAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,IAAA;AAAA,IACzC,CAAA;AAAA,IACA,WAAW,IAAA,EAAM;AACb,MAAA,MAAM,KAAK,IAAI,cAAA,CAAe,qBAAqB,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO;AAAA,QACzC,UAAA,EAAY;AAAA,OACf,CAAA;AACD,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU;AAAA,QACzC,KAAA,EAAO,IAAI,QAAA,CAAS;AAAA,UAChB,OAAA,EAAS,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,SAAS;AAAA,SACrC,CAAA;AAAA,QACD,KAAA;AAAA,QACA,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,IAAI,2BAAA,CAA4B,IAAA,CAAK,QAAA,EAAU;AAAA,QAClD,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,UACvB,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,SACtB,CAAA;AAAA,QACD,KAAA;AAAA,QACA,eAAA,EAAiB;AAAA,OACpB,CAAA;AAAA,IACL,CAAA;AAAA,IACA,IAAI,IAAA,EAAM;AACN,MAAA,IAAI,EAAE,IAAA,CAAK,UAAA,YAAsB,2BAAA,CAAA,EAA8B;AAC3D,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,IAAI,EAAE,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,cAAA,CAAA,EAAiB;AAC9D,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,UAAU,CAAA;AAAA,IAC3C;AAAA,GACJ;AACJ,CAAA,EAAG;AAEH,IAAM,OAAA,GAAN,cAAsB,SAAA,CAAU;AAAA;AAAA;AAAA;AAAA,EAI5B,WAAA,CAAY,YAAY,IAAA,EAAM;AAC1B,IAAA,KAAA,CAAM,YAAY,IAAI,CAAA;AAAA,EAC1B;AAAA,EACA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA;AAAA,EAChC;AACJ,CAAA;AAKA,IAAM,cAAA,GAAN,cAA6B,gBAAA,CAAiB;AAAA,EAC1C,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,GAAA,EAAK;AAAA,MACP,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,IAAA,EAAM,IAAA;AAAA,MACN,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA;AAAA,EACL;AACJ,CAAA;AAEA,IAAM,EAAA,GAAK,UAAU,KAAK,CAAA;AAI1B,IAAM,gBAAN,MAAoB;AAAA,EAChB,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,EAAA,EAAI,CAAA;AAC/B,IAAA,MAAA,CAAO,SAAA,CAAU,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAChD,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,aAAA,CAAc,IAAI,CAAA;AACrC,IAAA,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,EAAA,CAAG,GAAG,CAAC,CAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,MAAM,CAAA;AAAA,EACnC;AACJ,CAAA;AAKA,IAAM,mBAAA,GAAN,cAAkC,eAAA,CAAgB;AAAA;AAAA;AAAA;AAAA,EAI9C,WAAA,CAAY,KAAK,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,IAAI,aAAA,CAAc,GAAA,EAAK;AAAA,MACtE,WAAW,MAAA,CAAO;AAAA,KACrB,CAAA,EAAG,CAAC,CAAA;AAAA,EACb;AACJ,CAAA;AAEA,IAAM,oBAAA,GAAuB;AAAA,EACzB,EAAA,EAAI,WAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,OAAO,MAAA,EAAQ;AACX,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,WAAW;AAAA,KACzC,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,IAAA;AAAA,EACzC,CAAA;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,QAAA,EAAU;AAAA,MAC1C,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,EAAE,IAAA,CAAK,UAAA,YAAsB,mBAAA,CAAA,EAAsB;AACnD,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAI,iBAAA,CAAkB,IAAA,CAAK,UAAU,CAAA;AAAA,EAChD;AACJ,CAAA;AAEA,IAAM,iBAAA,GAAoB;AAAA,EACtB,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,OAAO,MAAA,EAAQ;AACX,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,MACvC,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,MAChB,GAAA,EAAK,EAAE,QAAA,CAAS,MAAA;AAAA,MAChB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAAA,MAClC,MAAA,EAAQ,EAAE,QAAA,CAAS,QAAA;AAAA,MACnB,KAAA,EAAO,EAAE,QAAA,CAAS,MAAA;AAAA,MAClB,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,KACtB,CAAE,CAAA;AACF,IAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,IAAA;AAAA,EACzC,CAAA;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,MAAM,YAAA,GAAA,CAAgB,KAAK,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,CAAA;AAC/E,IAAA,MAAM,GAAA,GAAM,IAAI,uBAAA,CAAwB;AAAA,MACpC,GAAA,EAAK,KAAK,MAAA,CAAO,GAAA;AAAA,MACjB,GAAA,EAAK,KAAK,MAAA,CAAO;AAAA,KACpB,CAAA;AACD,IAAA,MAAM,CAAA,GAAI,YAAY,YAAA,EAAc;AAAA,MAChC,UAAA,EAAY;AAAA,KACf,CAAA;AACD,IAAA,MAAM,EAAA,GAAK,IAAI,oBAAA,CAAqB,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,qBAAA,CAAsB;AAAA,MACrG,SAAA,EAAA,CAAY,KAAK,IAAA,CAAK,MAAA,CAAO,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,cAAA;AAAA,MACtE,QAAA,EAAU,YAAY,CAAC,CAAA;AAAA,MACvB,GAAA,EAAK,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MAC3B,GAAA,EAAK,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MAC3B,YAAA,EAAc,uBAAA,CAAwB,IAAA,CAAK,MAAA,EAAQ,YAAY;AAAA,KAClE,CAAC,CAAA,EAAG,EAAE,MAAA,EAAQ,WAAA,EAAa,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,CAAC,CAAA;AAClE,IAAA,OAAO,IAAI,2BAAA,CAA4B,IAAA,CAAK,QAAA,EAAU;AAAA,MAClD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,QACvB,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,MACD,KAAA,EAAO,CAAA;AAAA,MACP,eAAA,EAAiB;AAAA,KACpB,CAAA;AAAA,EACL,CAAA;AAAA,EACA,IAAI,IAAA,EAAM;AACN,IAAA,IAAI,EAAE,IAAA,CAAK,UAAA,YAAsB,2BAAA,CAAA,EAA8B;AAC3D,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,EAAE,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,oBAAA,CAAA,EAAuB;AACpE,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAI,cAAA,CAAe,IAAA,CAAK,UAAU,CAAA;AAAA,EAC7C;AACJ,CAAA;AAEA,IAAM,kCAAmB,WAAY;AACjC,EAAA,OAAO;AAAA,IACH,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,OAAO,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,MAAO;AAAA,QACvC,KAAA,EAAO,EAAE,QAAA,CAAS,QAAA;AAAA,QAClB,KAAA,EAAO,EAAE,QAAA,CAAS,GAAA;AAAA,QAClB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,QAChC,MAAA,EAAQ,EAAE,QAAA,CAAS,QAAA;AAAA,QACnB,KAAA,EAAO,EAAE,QAAA,CAAS;AAAA,OACtB,CAAE,CAAA;AACF,MAAA,OAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,IAAA;AAAA,IACzC,CAAA;AAAA,IACA,WAAW,IAAA,EAAM;AACb,MAAA,IAAI,EAAA;AACJ,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AACvC,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU;AAAA,QACzC,MAAA,EAAQ,KAAK,MAAA,CAAO,KAAA;AAAA,QACpB,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,UACvB,SAAA,EAAA,CAAY,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,MAAA,MAAY,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAM,CAACI,EAAAA,KAAM,MAAA,CAAOA,EAAC;AAAA,SACzF,CAAA;AAAA,QACD,KAAA,EAAO,CAAA;AAAA,QACP,WAAW,IAAA,CAAK;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,IAAI,2BAAA,CAA4B,IAAA,CAAK,QAAA,EAAU;AAAA,QAClD,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,UACvB,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,SACtB,CAAA;AAAA,QACD,KAAA,EAAO,CAAA;AAAA,QACP,eAAA,EAAiB;AAAA,OACpB,CAAA;AAAA,IACL,CAAA;AAAA,IACA,IAAI,IAAA,EAAM;AACN,MAAA,IAAI,EAAE,IAAA,CAAK,UAAA,YAAsB,2BAAA,CAAA,EAA8B;AAC3D,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,IAAI,EAAE,IAAA,CAAK,UAAA,CAAW,eAAA,YAA2B,cAAA,CAAA,EAAiB;AAC9D,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,UAAU,CAAA;AAAA,IAC3C;AAAA,GACJ;AACJ,CAAA,EAAG;AAEH,SAAS,4BAA4B,GAAA,EAAK;AACtC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACpC,EAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,KAAK,GAAG,CAAA;AACrC,EAAA,IAAI,IAAI,IAAA,EAAM;AACV,IAAA,GAAA,CAAI,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,UAAA,CAAW,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK;AAC9B,EAAA,IAAI,GAAA,CAAI,aAAA,CAAc,CAAA,oBAAA,EAAuB,EAAE,GAAG,CAAA,EAAG;AACjD,IAAA;AAAA,EACJ;AACA,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AAC3C,EAAA,SAAA,CAAU,QAAQ,OAAA,GAAU,EAAA;AAC5B,EAAA,SAAA,CAAU,WAAA,GAAc,GAAA;AACxB,EAAA,GAAA,CAAI,IAAA,CAAK,YAAY,SAAS,CAAA;AAClC;AAIA,IAAM,IAAA,GAAN,cAAmB,OAAA,CAAQ;AAAA,EACvB,YAAY,UAAA,EAAY;AACpB,IAAA,IAAI,EAAA,EAAI,EAAA;AACR,IAAA,MAAM,SAAS,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,GAAS,aAAa,EAAC;AAC5E,IAAA,MAAM,GAAA,GAAA,CAAO,KAAK,MAAA,CAAO,QAAA,MAAc,QAAQ,EAAA,KAAO,MAAA,GAAS,KAAK,iBAAA,EAAkB;AACtF,IAAA,MAAM,OAAO,uBAAA,EAAwB;AACrC,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,EAAK;AAAA,MAC3C,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAO,WAAA,EAAY;AAAA,MACnB,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,QACvB,OAAO,MAAA,CAAO;AAAA,OACjB,CAAA;AAAA,MACD,SAAA,EAAW,UAAU,MAAA;AAAO,KAC/B,CAAA;AACD,IAAA,KAAA,CAAM,gBAAgB,IAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,cAAA,GAAA,CAAkB,KAAK,MAAA,CAAO,SAAA,MAAe,QAAQ,EAAA,KAAO,MAAA,GAAS,EAAA,GAAK,2BAAA,CAA4B,GAAG,CAAA;AAC9G,IAAA,IAAA,CAAK,cAAA,CAAe,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,mBAAA,GAAsB,CAAC,MAAA,CAAO,SAAA;AACnC,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC9B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACZ,MAAA,MAAM,QAAQ,eAAA,EAAgB;AAAA,IAClC;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AAAA,EACA,OAAA,GAAU;AACN,IAAA,MAAM,gBAAgB,IAAA,CAAK,cAAA;AAC3B,IAAA,IAAI,CAAC,aAAA,EAAe;AAChB,MAAA,MAAM,QAAQ,eAAA,EAAgB;AAAA,IAClC;AACA,IAAA,IAAI,KAAK,mBAAA,EAAqB;AAC1B,MAAA,MAAM,aAAa,aAAA,CAAc,aAAA;AACjC,MAAA,IAAI,UAAA,EAAY;AACZ,QAAA,UAAA,CAAW,YAAY,aAAa,CAAA;AAAA,MACxC;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,KAAA,CAAM,OAAA,EAAQ;AAAA,EAClB;AAAA,EACA,eAAe,MAAA,EAAQ;AACnB,IAAA,IAAI,OAAO,GAAA,EAAK;AACZ,MAAA,UAAA,CAAW,KAAK,QAAA,EAAU,CAAA,OAAA,EAAU,OAAO,EAAE,CAAA,CAAA,EAAI,OAAO,GAAG,CAAA;AAAA,IAC/D;AACA,IAAA,MAAM,OAAA,GAAU,QAAA,IAAY,MAAA,GACtB,CAAC,MAAA,CAAO,MAAM,CAAA,GACd,SAAA,IAAa,MAAA,GACT,MAAA,CAAO,OAAA,GACP,EAAC;AACX,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM;AACnB,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,EAAA,EAAI,CAAC,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACL;AAAA,EACA,oBAAA,GAAuB;AACnB,IAAA,IAAA,CAAK,cAAA,CAAe;AAAA,MAChB,EAAA,EAAI,SAAA;AAAA;AAAA,MAEJ,GAAA,EAAK,64vBAAA;AAAA,MACL,OAAA,EAAS;AAAA,QACL,eAAA;AAAA,QACA,oBAAA;AAAA,QACA,iBAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AACJ,KACH,CAAA;AAAA,EACL;AACJ,CAAA;AAEgB,IAAI,MAAA,CAAO,OAAO;;;ACvpP3B,IAAM,eAAN,MAAmB;AAAA;AAAA;AAAA,EAGhB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA,GAAqB,IAAA;AAAA,EACrB,YAAA,GAAoB,IAAA;AAAA,EACpB,cAAA,GAAwD,IAAA;AAAA,EACxD,cAAA,GAAyB,CAAA;AAAA,EAEzB,MAAA,GAAS;AAAA,IACf,YAAA,EAAc,CAAA;AAAA,IACd,SAAA,EAAW,EAAA;AAAA,IACX,aAAA,EAAe;AAAA,GACjB;AAAA,EAEQ,aAAA,GAA0E;AAAA,IAChF,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAK,OAAO,KAAA,EAAM;AAAA,IACnC,GAAA,EAAK,EAAE,MAAA,EAAQ,CAAA,EAAK,OAAO,KAAA,EAAM;AAAA,IACjC,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAK,OAAO,KAAA,EAAM;AAAA,IACnC,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA,EAAK,OAAO,KAAA;AAAM,GAClC;AAAA,EAEA,YAAY,WAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,MAAA,GAAS,WAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,IAAA,CAAK,EAAE,OAAO,mBAAA,EAAqB,QAAA,EAAU,MAAM,CAAA;AAGnE,IAAA,MAAM,WAAA,GAAc,KAAK,IAAA,CAAK,OAAA;AAC9B,IAAA,WAAA,CAAY,MAAM,KAAA,GAAQ,OAAA;AAC1B,IAAA,WAAA,CAAY,MAAM,QAAA,GAAW,OAAA;AAC7B,IAAA,WAAA,CAAY,MAAM,GAAA,GAAM,MAAA;AACxB,IAAA,WAAA,CAAY,MAAM,KAAA,GAAQ,KAAA;AAG1B,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAGvB,IAAC,OAAe,WAAA,GAAc,WAAA;AAC9B,IAAC,OAAe,YAAA,GAAe,IAAA;AAE/B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAGvB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,EACxB;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,IAAA,KAAA,CAAM,WAAA,GAAc;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,IAAA,CAAA;AA+BpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EACjC;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,UAAU,EAAE,KAAA,EAAO,mBAAmB,CAAA;AAG/D,IAAA,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,YAAA;AACvC,IAAA,MAAA,CAAO,WAAW,IAAA,CAAK,MAAA,EAAQ,cAAA,EAAgB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,MAAM,CAAA,CAC1E,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAA0B;AACvC,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,EAAA,CAAG,KAAA;AAAA,IAChC,CAAC,CAAA;AAGH,IAAA,MAAA,CAAO,SAAA,CAAU,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACxD,MAAA,IAAA,CAAK,OAAO,OAAA,EAAQ;AAAA,IACtB,CAAC,CAAA;AAGD,IAAA,MAAA,CAAO,SAAA,CAAU,EAAE,KAAA,EAAO,oBAAA,EAAsB,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AAClE,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,IACzB,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,UAAU,EAAE,KAAA,EAAO,YAAY,CAAA;AAExD,IAAA,MAAM,QAAA,GAA2B;AAAA,MAAC,OAAA;AAAA,MAAS;AAAA;AAAA,KAAwB;AACnE,IAAA,MAAM,YAAA,GAA6C;AAAA,MACjD,KAAA,EAAO,WAAA;AAAA,MACP,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,EAAA,EAAI;AAAA,KACN;AAEA,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,gBAAgB,MAAA,CAAO,SAAA,CAAU,EAAE,KAAA,EAAO,OAAO,CAAA;AACvD,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,aAAA,CAAc,YAAY,CAAA;AAChE,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,YAAY,CAAA,oBAAA,EAAuB,YAAA,CAAa,OAAO,CAAC,WAAW,OAAO,CAAA,CAAA;AAAA,MACpF;AAGA,MAAA,IAAA,CAAK,cAAc,OAAO,CAAA,CAAE,SAAS,IAAA,CAAK,MAAA,CAAO,iBAAiB,OAAO,CAAA;AACzE,MAAA,IAAA,CAAK,cAAc,OAAO,CAAA,CAAE,QAAQ,IAAA,CAAK,MAAA,CAAO,eAAe,OAAO,CAAA;AAGtE,MAAA,aAAA,CAAc,WAAW,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,EAAG,QAAA,EAAU,EAAE,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,MAAM,IAAA,EAAM,EAC3F,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAA0B;AACvC,QAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,EAAA,CAAG,KAAK,CAAA;AAAA,MAChD,CAAC,CAAA;AAGH,MAAA,aAAA,CAAc,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,EAAG,OAAO,CAAA,CAC1D,EAAA,CAAG,QAAA,EAAU,CAAC,EAAA,KAA2B;AACxC,QAAA,IAAI,GAAG,KAAA,EAAO;AACZ,UAAA,IAAA,CAAK,MAAA,CAAO,YAAY,OAAO,CAAA;AAAA,QACjC,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,MAAA,CAAO,cAAc,OAAO,CAAA;AAAA,QACnC;AAAA,MACF,CAAC,CAAA;AAGH,MAAA,aAAA,CAAc,SAAA,CAAU,EAAE,KAAA,EAAO,cAAA,EAAgB,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACnE,QAAA,IAAA,CAAK,MAAA,CAAO,YAAY,OAAO,CAAA;AAAA,MACjC,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IAAA,CAAK,YAAA,GAAe,KAAK,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,eAAA,EAAiB,QAAA,EAAU,KAAA,EAAO,CAAA;AACnF,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEQ,iBAAA,GAA0B;AAhLpC,IAAA,IAAA,EAAA;AAiLI,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AAGxB,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAA,CAAK,aAAa,QAAQ,CAAA;AAC/C,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAA;AAG3C,IAAA,MAAM,eAAA,GAAmB,KAAK,MAAA,CAAe,eAAA;AAC7C,IAAA,MAAM,cAAA,GAAkB,KAAK,MAAA,CAAe,cAAA;AAG5C,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,IAAA,eAAA,CAAgB,QAAQ,CAAC,CAAA,EAAG,UAAU,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3D,IAAA,cAAA,CAAe,QAAQ,CAAC,CAAA,EAAG,UAAU,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,CAAA;AAG1D,IAAA,MAAM,YAAA,GAAuC;AAAA,MAC3C,KAAA,EAAO,WAAA;AAAA,MACP,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,EAAA,EAAI;AAAA,KACN;AAGA,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,UAAU,EAAE,IAAA,EAAK;AAElD,IAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,KAAA,CAAK,oBAAe,GAAA,CAAI,KAAK,CAAA,KAAxB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,OAAA,CAAA,IAAW,SAAA;AACpF,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAiB,CAAA,IAAK,QAAA;AACvD,MAAA,MAAM,WAAA,GAAc,KAAK,YAAA,CAAa,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,CAAA;AACjF,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,aAAA,CAAc,YAAY,CAAA;AAC9D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,SAAA,GAAY,CAAA,oBAAA,EAAuB,WAAW,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA;AAAA,MACxE;AAGA,MAAA,WAAA,CAAY,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACzD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MACxB,CAAC,CAAA;AAGD,MAAA,WAAA,CAAY,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACzD,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA,EAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,MACxC,CAAC,CAAA;AAGD,MAAA,WAAA,CAAY,SAAA,CAAU,EAAE,KAAA,EAAO,iBAAA,EAAmB,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACpE,QAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAA,EAAO,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,CAAA;AAAA,MACjE,CAAC,CAAA;AAGD,MAAA,WAAA,CAAY,SAAA,CAAU,EAAE,KAAA,EAAO,eAAA,EAAiB,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AAClE,QAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAA,EAAO,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,CAAA;AAAA,MAClE,CAAC,CAAA;AAGD,MAAA,WAAA,CAAY,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACzD,QAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,MAAA,MAAM,UAAA,GAAa,EAAE,IAAA,EAAM,sBAAA,EAAuB;AAClD,MAAA,IAAA,CAAK,aAAa,UAAA,CAAW,UAAA,EAAY,QAAQ,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,IACrE;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,mBAAA,EAAqB,QAAA,EAAU,IAAA,EAAM,CAAA;AACvF,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEQ,eAAA,uBAAmC,GAAA,EAAI;AAAA,EAEvC,iBAAA,GAA0B;AAChC,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AAGzB,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAA,CAAK,cAAc,QAAQ,CAAA;AAChD,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAe;AAE/B,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,MAAA,IAAI,KAAA,IAAS,MAAM,QAAA,EAAU;AAC3B,QAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAAA,MAChC,CAAA,MAAA,IAAW,KAAA,IAAS,CAAC,KAAA,CAAM,QAAA,EAAU;AACnC,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,KAAK,CAAA;AAAA,MACnC;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAA;AAG3C,IAAA,MAAM,gBAAA,GAAoB,KAAK,MAAA,CAAe,gBAAA;AAC9C,IAAA,MAAM,eAAA,GAAmB,KAAK,MAAA,CAAe,eAAA;AAC7C,IAAA,MAAM,cAAA,GAAkB,KAAK,MAAA,CAAe,cAAA;AAC5C,IAAA,MAAM,cAAA,GAAkB,KAAK,MAAA,CAAe,cAAA;AAC5C,IAAA,MAAM,mBAAA,GAAuB,KAAK,MAAA,CAAe,mBAAA;AACjD,IAAA,MAAM,cAAA,GAAkB,KAAK,MAAA,CAAe,cAAA;AAG5C,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAsB;AAChD,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,SAAA,EAAW,SAAA,KAAc;AAC/C,MAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,cAAA,EAAgB,KAAA,KAAU;AAClD,QAAA,MAAM,YAAY,cAAA,CAAe,IAAA,CAAK,UAAQ,SAAA,CAAU,QAAA,CAAS,IAAI,CAAC,CAAA;AACtE,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AAC7B,YAAA,aAAA,CAAc,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,UAC7B;AACA,UAAA,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,CAAG,IAAA,CAAK,SAAS,CAAA;AAAA,QAC1C;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAGD,IAAA,MAAM,YAAA,GAAuC;AAAA,MAC3C,KAAA,EAAO,WAAA;AAAA,MACP,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,EAAA,EAAI;AAAA,KACN;AAGA,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAC7C,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,QAAA,gBAAA,CAAiB,IAAI,KAAK,CAAA;AAAA,MAC5B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;AACnC,MAAA,gBAAA,CAAiB,IAAI,KAAK,CAAA;AAAA,IAC5B,CAAC,CAAA;AAED,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,KAAA,KAAU;AAzTxC,MAAA,IAAA,EAAA;AA0TM,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,GAAA,CAAI,KAAK,KAAK,EAAC;AAGlD,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,KAAA,CAAK,oBAAe,GAAA,CAAI,KAAK,CAAA,KAAxB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,OAAA,CAAA,IAAW,GAAA;AACpF,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAiB,CAAA,IAAK,QAAA;AAEvD,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,KAAK,KAAK,EAAC;AAC5C,MAAA,MAAM,QAAA,GAAW,OAAO,MAAA,GAAS,CAAA,GAAI,aAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AAGhE,MAAA,MAAM,aAAA,GAAgB,UAAU,CAAC,CAAA;AACjC,MAAA,MAAM,GAAA,GAAA,CAAM,+CAAe,MAAA,KAAU,CAAA;AACrC,MAAA,MAAM,SAAS,SAAA,CAAU,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AACvD,MAAA,MAAM,MAAA,GAAA,CAAS,+CAAe,IAAA,KAAQ,KAAA;AACtC,MAAA,MAAM,QAAA,GAAW,SAAS,WAAA,GAAO,EAAA;AAGjC,MAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA;AACpD,MAAA,MAAM,YAAY,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA,IAAK,UAAU,MAAA,KAAW,CAAA;AACpE,MAAA,MAAM,YAAA,GAAe,iBAAiB,cAAA,GAAO,EAAA;AAE7C,MAAA,MAAM,WAAA,GAAc,YAAY,QAAA,GAAM,EAAA;AAEtC,MAAA,MAAM,QAAA,GAAW,SAAA,GAAY,SAAA,GAAY,CAAA,EAAG,UAAU,MAAM,CAAA,CAAA;AAG5D,MAAA,MAAM,KAAA,GAAQ,CAAC,WAAA,EAAa,QAAA,EAAU,cAAc,WAAW,CAAA,CAAE,OAAO,OAAO,CAAA;AAC/E,MAAA,MAAM,SAAA,GAAY,MAAM,GAAA,CAAI,CAAA,CAAA,KAAK,uBAAuB,CAAC,CAAA,OAAA,CAAS,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAC3E,MAAA,MAAM,YAAY,QAAA,GAAW,CAAA,oCAAA,EAAgC,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AAGlF,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAClD,MAAA,MAAM,UAAA,GAAa,KAAK,aAAA,CAAe,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,CAAA;AACxF,MAAC,WAAmB,MAAA,GAAS,KAAA;AAE7B,MAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,aAAA,CAAc,YAAY,CAAA;AAC7D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,SAAA,GAAY,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,KAAK,KAAK,QAAQ,CAAA,IAAA,EAAO,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,MACjF;AAGA,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,UAAA,CAAW,SAAA,CAAU,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AAC3D,UAAA,IAAA,CAAK,MAAA,CAAO,oBAAoB,KAAK,CAAA;AAAA,QACvC,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,UAAA,CAAW,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AACxD,QAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,YAAA,GAAe,EAAE,MAAA,EAAQ,iBAAA,EAAkB;AACjD,MAAA,IAAA,CAAK,cAAc,UAAA,CAAW,YAAA,EAAc,UAAU,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,IAC1E;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,UAAU,EAAE,KAAA,EAAO,kBAAkB,CAAA;AAG9D,IAAA,MAAA,CAAO,WAAW,IAAA,CAAK,MAAA,EAAQ,aAAa,EAAE,KAAA,EAAO,cAAc,CAAA;AAGnE,IAAA,MAAA,CAAO,SAAA,CAAU,EAAE,KAAA,EAAO,YAAA,EAAc,CAAA,CAAE,EAAA,CAAG,SAAS,MAAM;AAC1D,MAAA,IAAI,IAAA,CAAK,OAAO,SAAA,EAAW;AACzB,QAAA,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,MAC7C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,gBAAA,GAAyB;AAE/B,IAAA,IAAA,CAAK,cAAA,GAAiB,YAAY,MAAM;AACtC,MAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAGvB,MAAA,MAAM,eAAA,GAAmB,KAAK,MAAA,CAAe,eAAA;AAC7C,MAAA,MAAM,eAAe,eAAA,CAAgB,IAAA;AACrC,MAAA,IAAI,YAAA,GAAe,CAAA,IAAK,IAAA,CAAK,cAAA,KAAmB,CAAA,EAAG;AACjD,QAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,MACzB;AACA,MAAA,IAAA,CAAK,cAAA,GAAiB,YAAA;AAAA,IACxB,GAAG,GAAG,CAAA;AAAA,EACR;AAAA,EAEQ,iBAAA,GAA0B;AAEhC,IAAA,MAAM,QAAA,GAA2B,CAAC,OAAA,EAAS,KAAA,EAAO,SAAS,IAAI,CAAA;AAC/D,IAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAO,CAAA;AACzD,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,OAAO,CAAA;AAEtD,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,CAAE,WAAW,YAAA,EAAc;AACvD,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,CAAE,MAAA,GAAS,YAAA;AACrC,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AACA,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,CAAE,UAAU,WAAA,EAAa;AACrD,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,CAAE,KAAA,GAAQ,WAAA;AACpC,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,IAAA,CAAK,OAAO,YAAA,EAAc;AACzD,MAAA,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,YAAA;AACvC,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,KAAK,OAAA,EAAQ;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,aAAA,CAAc,KAAK,cAAc,CAAA;AACjC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AACA,IAAA,IAAA,CAAK,KAAK,OAAA,EAAQ;AAClB,IAAA,OAAQ,MAAA,CAAe,WAAA;AACvB,IAAA,OAAQ,MAAA,CAAe,YAAA;AAAA,EACzB;AACF","file":"index.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Log levels for filtering log output.\n *\n * Lower numeric values have higher priority.\n * Setting a log level will show that level and all higher priority levels.\n *\n * @example\n * ```typescript\n * // Set to INFO level\n * logger.setLevel(LogLevel.INFO);\n * // Will show: ERROR, WARN, INFO\n * // Will hide: DEBUG, TRACE\n * ```\n *\n * @public\n */\nexport enum LogLevel {\n /** Critical errors (always shown) */\n ERROR = 0,\n /** Warnings (shown at WARN level and above) */\n WARN = 1,\n /** Informational messages (shown at INFO level and above) */\n INFO = 2,\n /** Debug messages (shown at DEBUG level and above) */\n DEBUG = 3,\n /** Trace messages (most verbose, shown only at TRACE level) */\n TRACE = 4,\n}\n\nexport type LoggerFilterMatcher = string | RegExp;\n\nexport interface LoggerFilterConfig {\n contexts?: LoggerFilterMatcher[];\n messages?: LoggerFilterMatcher[];\n mode?: 'include' | 'exclude';\n}\n\n/**\n * Configuration options for the Logger.\n *\n * @public\n */\nexport interface LoggerConfig {\n /** Minimum log level to display */\n level: LogLevel;\n /** Whether logging is enabled */\n enabled: boolean;\n /** Whether to show timestamps in logs */\n showTimestamp: boolean;\n /** Whether to show colors in logs */\n showColors: boolean;\n filter?: LoggerFilterConfig;\n}\n\n/**\n * Singleton logger for centralized logging.\n *\n * Logger provides a unified logging system with:\n * - Multiple log levels (ERROR, WARN, INFO, DEBUG, TRACE)\n * - Colored output (browser and terminal)\n * - Timestamps\n * - Context-based sub-loggers\n * - Environment detection (browser vs Node.js)\n *\n * ## Features\n *\n * - **Singleton Pattern**: Single instance across the application\n * - **Log Levels**: Filter logs by severity\n * - **Colored Output**: CSS colors in browser, ANSI colors in terminal\n * - **Context Loggers**: Create sub-loggers with context prefixes\n * - **Timestamps**: Optional ISO timestamp display\n * - **Environment Aware**: Automatically detects browser vs Node.js\n *\n * ## Log Levels\n *\n * - **ERROR** (0): Critical errors\n * - **WARN** (1): Warnings\n * - **INFO** (2): Informational messages (default)\n * - **DEBUG** (3): Debug information\n * - **TRACE** (4): Detailed trace information\n *\n * @example\n * Basic usage:\n * ```typescript\n * import { logger, LogLevel } from '@rb-games/core/utils';\n *\n * // Configure logger\n * logger.configure({\n * level: LogLevel.DEBUG,\n * showTimestamp: true,\n * showColors: true\n * });\n *\n * // Log messages\n * logger.error('Critical error occurred');\n * logger.warn('This is a warning');\n * logger.info('Application started');\n * logger.debug('Debug information', { data: 'value' });\n * logger.trace('Detailed trace');\n * ```\n *\n * @example\n * Context loggers (used in plugins):\n * ```typescript\n * class MyPlugin {\n * private logger = logger.createContextLogger('MyPlugin');\n *\n * initialize() {\n * this.logger.info('Plugin initialized');\n * // Output: [2024-01-01T12:00:00.000Z] [INFO] [MyPlugin] Plugin initialized\n * }\n *\n * doSomething() {\n * this.logger.debug('Doing something', { value: 42 });\n * // Output: [2024-01-01T12:00:00.000Z] [DEBUG] [MyPlugin] Doing something { value: 42 }\n * }\n * }\n * ```\n *\n * @example\n * Production configuration:\n * ```typescript\n * // In production, only show errors and warnings\n * if (process.env.NODE_ENV === 'production') {\n * logger.setLevel(LogLevel.WARN);\n * } else {\n * logger.setLevel(LogLevel.DEBUG);\n * }\n * ```\n *\n * @example\n * Disable logging:\n * ```typescript\n * logger.setEnabled(false);\n * ```\n *\n * @category Utils\n * @public\n */\nexport class Logger {\n private static instance: Logger;\n private config: LoggerConfig;\n\n // Terminal colors (for Node.js environment)\n private readonly terminalColors = {\n reset: '\\x1b[0m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n green: '\\x1b[32m',\n gray: '\\x1b[90m',\n cyan: '\\x1b[36m',\n magenta: '\\x1b[35m',\n white: '\\x1b[37m',\n };\n\n // Browser console colors (using CSS)\n private readonly browserColors = {\n timestamp: 'color: gray',\n context: 'color: cyan; font-weight: bold',\n message: 'color: white',\n error: 'color: red; font-weight: bold',\n warn: 'color: orange; font-weight: bold',\n info: 'color: dodgerblue; font-weight: bold',\n debug: 'color: green',\n trace: 'color: gray',\n };\n\n private readonly levelLabels = {\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.TRACE]: 'TRACE',\n };\n\n private readonly levelColors = {\n [LogLevel.ERROR]: this.terminalColors.red,\n [LogLevel.WARN]: this.terminalColors.yellow,\n [LogLevel.INFO]: this.terminalColors.blue,\n [LogLevel.DEBUG]: this.terminalColors.green,\n [LogLevel.TRACE]: this.terminalColors.gray,\n };\n\n private readonly levelBrowserColors = {\n [LogLevel.ERROR]: this.browserColors.error,\n [LogLevel.WARN]: this.browserColors.warn,\n [LogLevel.INFO]: this.browserColors.info,\n [LogLevel.DEBUG]: this.browserColors.debug,\n [LogLevel.TRACE]: this.browserColors.trace,\n };\n\n /**\n * Private constructor for singleton pattern\n */\n private constructor() {\n // Default configuration\n this.config = {\n level: LogLevel.DEBUG, // Default log level\n enabled: true, // Logging enabled by default\n showTimestamp: false, // Show timestamps by default\n showColors: true, // Show colors by default\n };\n\n if ((import.meta as { env?: { DEV?: boolean } }).env?.DEV) {\n console.warn(\n '[Logger] For better debugging experience, add Logger.ts to DevTools ignore list:\\n' +\n 'DevTools → Settings (F1) → Ignore List → Add pattern: /Logger\\\\.ts$',\n );\n }\n }\n\n /**\n * Get the singleton instance of the Logger\n */\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n /**\n * Configure the logger\n * @param config Configuration options\n */\n public configure(config: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Enable or disable logging\n * @param enabled Whether logging is enabled\n */\n public setEnabled(enabled: boolean): void {\n this.config.enabled = enabled;\n }\n\n /**\n * Set the log level\n * @param level The log level to set\n */\n public setLevel(level: LogLevel): void {\n this.config.level = level;\n }\n\n /**\n * Get the current log level\n */\n public getLevel(): LogLevel {\n return this.config.level;\n }\n\n /**\n * Log an error message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public error(message: string, ...args: any[]): void {\n this.log(LogLevel.ERROR, message, ...args);\n }\n\n /**\n * Log a warning message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public warn(message: string, ...args: any[]): void {\n this.log(LogLevel.WARN, message, ...args);\n }\n\n /**\n * Log an info message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public info(message: string, ...args: any[]): void {\n this.log(LogLevel.INFO, message, ...args);\n }\n\n /**\n * Log a debug message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public debug(message: string, ...args: any[]): void {\n this.log(LogLevel.DEBUG, message, ...args);\n }\n\n /**\n * Log a trace message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public trace(message: string, ...args: any[]): void {\n this.log(LogLevel.TRACE, message, ...args);\n }\n\n /**\n * Log a message with a specific log level\n * @param level The log level\n * @param message The message to log\n * @param args Additional arguments to log\n */\n private log(level: LogLevel, message: string, ...args: any[]): void {\n // Only log if enabled and the log level is sufficient\n if (!this.config.enabled || level > this.config.level) {\n return;\n }\n\n if (!this.shouldLogMessage(message)) {\n return;\n }\n\n // Check if we're in a browser environment\n const isBrowser = typeof window !== 'undefined';\n\n if (isBrowser && this.config.showColors) {\n this.logBrowser(level, message, ...args);\n } else {\n this.logTerminal(level, message, ...args);\n }\n }\n\n private extractContext(message: string): { context: string; messageContent: string } {\n const contextMatch = message.match(/^\\[([^\\]]+)\\]\\s(.*)$/);\n\n if (!contextMatch) {\n return {\n context: '',\n messageContent: message,\n };\n }\n\n return {\n context: contextMatch[1],\n messageContent: contextMatch[2],\n };\n }\n\n private matchesFilter(value: string, matchers?: LoggerFilterMatcher[]): boolean {\n if (!matchers?.length) {\n return false;\n }\n\n return matchers.some((matcher) => {\n if (typeof matcher === 'string') {\n return value.includes(matcher);\n }\n\n matcher.lastIndex = 0;\n return matcher.test(value);\n });\n }\n\n private shouldLogMessage(message: string): boolean {\n const filter = this.config.filter;\n\n if (!filter) {\n return true;\n }\n\n const hasFilters = Boolean(filter.contexts?.length || filter.messages?.length);\n\n if (!hasFilters) {\n return true;\n }\n\n const { context, messageContent } = this.extractContext(message);\n const contextMatches = this.matchesFilter(context, filter.contexts);\n const messageMatches = this.matchesFilter(messageContent, filter.messages);\n const matches = contextMatches || messageMatches;\n\n return filter.mode === 'exclude' ? !matches : matches;\n }\n\n /**\n * Log a message in terminal/node environment\n */\n private logTerminal(level: LogLevel, message: string, ...args: any[]): void {\n // Prepare log prefix\n let timestamp = '';\n let levelStr = '';\n let contextPart = '';\n\n // Extract context if present\n const contextMatch = message.match(/^\\[([^\\]]+)\\]\\s(.*)$/);\n let messageContent = message;\n\n if (contextMatch) {\n contextPart = `[${contextMatch[1]}] `;\n messageContent = contextMatch[2];\n }\n\n // Add timestamp if enabled\n if (this.config.showTimestamp) {\n const now = new Date().toISOString();\n timestamp = `[${now}] `;\n }\n\n // Add log level\n levelStr = `[${this.levelLabels[level]}] `;\n\n // Format with colors if enabled\n if (this.config.showColors) {\n const levelColor = this.levelColors[level];\n const contextColor = this.terminalColors.cyan;\n const timestampColor = this.terminalColors.gray;\n const messageColor = this.terminalColors.white;\n\n timestamp = `${timestampColor}${timestamp}${this.terminalColors.reset}`;\n levelStr = `${levelColor}${levelStr}${this.terminalColors.reset}`;\n\n if (contextPart) {\n contextPart = `${contextColor}${contextPart}${this.terminalColors.reset}`;\n }\n\n messageContent = `${messageColor}${messageContent}${this.terminalColors.reset}`;\n }\n\n const formattedMessage = timestamp + levelStr + contextPart + messageContent;\n\n // Log with console methods based on level\n switch (level) {\n case LogLevel.ERROR:\n console.error(formattedMessage, ...args);\n break;\n case LogLevel.WARN:\n console.warn(formattedMessage, ...args);\n break;\n case LogLevel.INFO:\n console.info(formattedMessage, ...args);\n break;\n case LogLevel.DEBUG:\n case LogLevel.TRACE:\n default:\n console.log(formattedMessage, ...args);\n break;\n }\n }\n\n /**\n * Log a message in browser environment with CSS styling\n */\n private logBrowser(level: LogLevel, message: string, ...args: any[]): void {\n // Extract context if present\n const contextMatch = message.match(/^\\[([^\\]]+)\\]\\s(.*)$/);\n let context = '';\n let messageContent = message;\n\n if (contextMatch) {\n context = contextMatch[1];\n messageContent = contextMatch[2];\n }\n\n // Create CSS styled format string\n let format = '';\n const formatArgs: string[] = [];\n\n // Add timestamp if enabled\n if (this.config.showTimestamp) {\n const now = new Date().toISOString();\n format += '%c[' + now + '] ';\n formatArgs.push(this.browserColors.timestamp);\n }\n\n // Add log level with style\n format += '%c[' + this.levelLabels[level] + '] ';\n formatArgs.push(this.levelBrowserColors[level]);\n\n // Add context if present\n if (context) {\n format += '%c[' + context + '] ';\n formatArgs.push(this.browserColors.context);\n }\n\n // Add the actual message\n format += '%c' + messageContent;\n formatArgs.push(this.browserColors.message);\n\n // Log with console methods based on level\n switch (level) {\n case LogLevel.ERROR:\n console.error(format, ...formatArgs, ...args);\n break;\n case LogLevel.WARN:\n console.warn(format, ...formatArgs, ...args);\n break;\n case LogLevel.INFO:\n console.info(format, ...formatArgs, ...args);\n break;\n case LogLevel.DEBUG:\n case LogLevel.TRACE:\n default:\n console.log(format, ...formatArgs, ...args);\n break;\n }\n }\n\n /**\n * Creates a context-specific logger.\n *\n * Context loggers automatically prefix all log messages with a context tag.\n * Commonly used in plugins and classes to identify log sources.\n *\n * @param context - Context name (e.g., 'MyPlugin', 'SceneManager')\n * @returns ContextLogger instance\n *\n * @example\n * ```typescript\n * class DisplayPlugin {\n * private logger = logger.createContextLogger('DisplayPlugin');\n *\n * initialize() {\n * this.logger.info('Initializing display');\n * // Output: [INFO] [DisplayPlugin] Initializing display\n * }\n * }\n * ```\n */\n public createContextLogger(context: string): ContextLogger {\n return new ContextLogger(this, context);\n }\n}\n\n/**\n * Context-specific logger that prefixes all messages.\n *\n * ContextLogger wraps the main Logger and automatically adds a context prefix\n * to all log messages. This makes it easy to identify which component or plugin\n * generated a log message.\n *\n * ## Usage\n *\n * Create context loggers using `logger.createContextLogger(context)`.\n * All log methods (error, warn, info, debug, trace) are available.\n *\n * @example\n * ```typescript\n * class ResourcePlugin {\n * private logger = logger.createContextLogger('ResourcePlugin');\n *\n * async loadAssets() {\n * this.logger.info('Loading assets...');\n * // Output: [INFO] [ResourcePlugin] Loading assets...\n *\n * try {\n * await this.load();\n * this.logger.info('Assets loaded successfully');\n * } catch (error) {\n * this.logger.error('Failed to load assets', error);\n * }\n * }\n * }\n * ```\n *\n * @category Utils\n * @public\n */\nexport class ContextLogger {\n private logger: Logger;\n private context: string;\n\n constructor(logger: Logger, context: string) {\n this.logger = logger;\n this.context = context;\n }\n\n /**\n * Log an error message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public error(message: string, ...args: any[]): void {\n this.logger.error(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log a warning message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public warn(message: string, ...args: any[]): void {\n this.logger.warn(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log an info message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public info(message: string, ...args: any[]): void {\n this.logger.info(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log a debug message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public debug(message: string, ...args: any[]): void {\n this.logger.debug(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log a trace message\n * @param message The message to log\n * @param args Additional arguments to log\n */\n public trace(message: string, ...args: any[]): void {\n this.logger.trace(`[${this.context}] ${message}`, ...args);\n }\n}\n\n// Export a default instance for convenience\nexport const logger = Logger.getInstance();\n\n// Cached context loggers for inline usage\nconst contextLoggers = new Map<string, ContextLogger>();\n\n/**\n * Get or create a cached context logger.\n * Same context string always returns the same instance.\n *\n * Preferred over class property pattern for easier tree-shaking\n * and production stripping.\n *\n * @param context - Context name (e.g., 'MyPlugin', 'SceneManager')\n * @returns Cached ContextLogger instance\n *\n * @example\n * ```typescript\n * import { getLogger } from '@rb-games/core/utils';\n *\n * // No class property needed - use inline\n * getLogger('MyClass').info('message');\n * getLogger('MyClass').debug('data', { x: 1 });\n * ```\n */\nexport function getLogger(context: string): ContextLogger {\n let cached = contextLoggers.get(context);\n if (!cached) {\n cached = new ContextLogger(logger, context);\n contextLoggers.set(context, cached);\n }\n return cached;\n}\n","import { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport { isMobile, detectWebp } from 'pixi.js';\nimport type {\n DeviceInfo,\n PerformanceMetrics,\n OptimizationSettings,\n DeviceOptimizerConfig,\n} from './DeviceOptimizerPlugin.types';\n\n/**\n * Device detection and optimization plugin for PixiJS games.\n *\n * DeviceOptimizerPlugin automatically detects device capabilities and generates\n * optimal performance settings. It analyzes platform, memory, network, battery,\n * and GPU to calculate a performance tier (low/medium/high) and provides\n * appropriate optimization settings.\n *\n * ## Features\n *\n * - **Device Detection**: Platform, browser, OS, screen properties\n * - **Performance Metrics**: Memory, network, battery, GPU capabilities\n * - **Automatic Tier Calculation**: Low, medium, or high performance tier\n * - **Optimization Settings**: Asset resolution, particle limits, memory management\n * - **ResourcePlugin Integration**: Provides settings for asset loading\n *\n * ## Performance Tiers\n *\n * - **Low Tier**: Mobile devices, low memory, slow network\n * - Asset resolution: 0.25x\n * - Max particles: 25\n * - Target FPS: 30\n * - Aggressive memory cleanup\n *\n * - **Medium Tier**: Tablets, mid-range devices\n * - Asset resolution: 0.5x\n * - Max particles: 100\n * - Target FPS: 60\n * - Moderate memory management\n *\n * - **High Tier**: Desktop, high-end devices\n * - Asset resolution: 1.0x - 2.0x\n * - Max particles: 500\n * - Target FPS: 60\n * - Advanced effects enabled\n *\n * ## Integration with ResourcePlugin\n *\n * DeviceOptimizerPlugin must initialize before ResourcePlugin. ResourcePlugin\n * reads optimization settings to determine which asset resolutions to load.\n *\n * @example\n * ```typescript\n * const deviceOptimizer = new DeviceOptimizerPlugin({\n * enableAdvancedMetrics: true,\n * enableNetworkDetection: true,\n * enableBatteryDetection: true,\n * debug: true\n * });\n *\n * engine.registerPlugin(deviceOptimizer);\n * await engine.initialize();\n *\n * // Get optimization settings\n * const settings = deviceOptimizer.getSettings();\n * console.log('Asset resolution:', settings.assetResolution);\n * console.log('Performance tier:', deviceOptimizer.getPerformanceTier());\n * ```\n *\n * @example\n * ```typescript\n * // Force specific tier for testing\n * const deviceOptimizer = new DeviceOptimizerPlugin({\n * forceTier: 'low',\n * forceResolution: 0.5\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class DeviceOptimizerPlugin implements EnginePlugin {\n public name: string = 'deviceOptimizerPlugin';\n public priority: number = 10; // Very early - before asset loading\n public dependencies: string[] = []; // No dependencies\n\n private config: DeviceOptimizerConfig;\n private deviceInfo: DeviceInfo | null = null;\n private metrics: PerformanceMetrics | null = null;\n private settings: OptimizationSettings | null = null;\n private performanceTier: 'low' | 'medium' | 'high' = 'medium';\n private isInitialized = false;\n\n /**\n * Detect WebP support using PIXI's native method\n */\n private async detectWebP(): Promise<boolean> {\n try {\n return await detectWebp.test();\n } catch (error) {\n return false;\n }\n }\n\n // Default tier settings - will be initialized in constructor\n private defaultTierSettings: Record<'low' | 'medium' | 'high', OptimizationSettings>;\n\n constructor(config: DeviceOptimizerConfig = {}) {\n this.config = {\n enableAdvancedMetrics: false, // Safe default\n enableNetworkDetection: true,\n enableBatteryDetection: true,\n enableGPUDetection: true,\n ...config,\n };\n\n // Initialize default tier settings\n this.defaultTierSettings = {\n low: {\n assetResolution: 0.25,\n assetSuffix: '@0.25x',\n assetQuality: 'low' as const,\n preloadStrategy: 'minimal' as const,\n enableWebP: false,\n particleSettings: {\n maxParticles: 25,\n quality: 'low' as const,\n enableAdvancedEffects: false,\n enableBlur: false,\n enableGlow: false,\n },\n targetFPS: 30 as const,\n enableAntialiasing: false,\n enableMipmaps: false,\n textureMaxSize: 1024,\n memoryLimits: {\n maxAssetMemoryMB: 32,\n maxTextureMemoryMB: 16,\n enableAggressiveCleanup: true,\n gcInterval: 5000,\n },\n packagePreferences: {\n mobile: 2,\n desktop: -1,\n particles: -1,\n highres: -1,\n effects: -1,\n },\n },\n medium: {\n assetResolution: 0.5,\n assetSuffix: '@0.5x',\n assetQuality: 'medium' as const,\n preloadStrategy: 'moderate' as const,\n enableWebP: false, // Will be updated in initialize()\n particleSettings: {\n maxParticles: 100,\n quality: 'medium' as const,\n enableAdvancedEffects: true,\n enableBlur: true,\n enableGlow: false,\n },\n targetFPS: 60 as const,\n enableAntialiasing: true,\n enableMipmaps: true,\n textureMaxSize: 2048,\n memoryLimits: {\n maxAssetMemoryMB: 128,\n maxTextureMemoryMB: 64,\n enableAggressiveCleanup: false,\n gcInterval: 10000,\n },\n packagePreferences: {\n mobile: 1,\n desktop: 0,\n particles: 0,\n highres: 0,\n effects: 0,\n },\n },\n high: {\n assetResolution: 1.0,\n assetSuffix: '@1x',\n assetQuality: 'high' as const,\n preloadStrategy: 'aggressive' as const,\n enableWebP: false, // Will be updated in initialize()\n particleSettings: {\n maxParticles: 500,\n quality: 'high' as const,\n enableAdvancedEffects: true,\n enableBlur: true,\n enableGlow: true,\n },\n targetFPS: 60 as const,\n enableAntialiasing: true,\n enableMipmaps: true,\n textureMaxSize: 4096,\n memoryLimits: {\n maxAssetMemoryMB: 256,\n maxTextureMemoryMB: 128,\n enableAggressiveCleanup: false,\n gcInterval: 15000,\n },\n packagePreferences: {\n mobile: -1,\n desktop: 2,\n particles: 1,\n highres: 1,\n effects: 1,\n },\n },\n };\n\n // Apply tier setting overrides\n if (config.tierSettings) {\n Object.entries(config.tierSettings).forEach(([tier, overrides]) => {\n if (overrides) {\n this.defaultTierSettings[tier as 'low' | 'medium' | 'high'] = {\n ...this.defaultTierSettings[tier as 'low' | 'medium' | 'high'],\n ...overrides,\n };\n }\n });\n }\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n try {\n // Detect device safely\n this.deviceInfo = this.detectDevice();\n\n // Gather performance metrics\n this.metrics = await this.gatherMetrics();\n\n // Calculate performance tier\n this.performanceTier = this.config.forceTier || this.calculatePerformanceTier();\n\n // Generate optimization settings\n this.settings = this.generateOptimizationSettings();\n\n // Detect WebP support and update settings\n const webpSupported = await this.detectWebP();\n if (this.settings) {\n this.settings.enableWebP = webpSupported;\n }\n\n // Apply force overrides\n this.applyForceOverrides();\n\n this.isInitialized = true;\n\n this.logDeviceInfo();\n\n\n getLogger('DeviceOptimizerPlugin').info('Device optimization initialized', {\n platform: this.deviceInfo.platform,\n tier: this.performanceTier,\n resolution: this.settings.assetResolution,\n webpSupported,\n });\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').error('Device optimization failed, using fallbacks', error);\n this.useFallbackSettings();\n }\n }\n\n public onReady(engine: PixiEngine): void {\n // Plugin is ready - no need to store in engine data\n getLogger('DeviceOptimizerPlugin').debug('DeviceOptimizerPlugin is ready');\n }\n\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public cleanup(): void {\n this.isInitialized = false;\n getLogger('DeviceOptimizerPlugin').debug('DeviceOptimizerPlugin cleaned up');\n }\n\n /**\n * Safe device detection\n */\n private detectDevice(): DeviceInfo {\n const userAgent = navigator.userAgent.toLowerCase();\n const screen = window.screen || { width: 1920, height: 1080 };\n const pixelRatio = window.devicePixelRatio || 1;\n\n return {\n platform: this.detectPlatform(userAgent),\n browser: this.detectBrowser(userAgent),\n os: this.detectOS(userAgent),\n screen: {\n width: screen.width,\n height: screen.height,\n pixelRatio,\n diagonal: this.calculateDiagonal(screen.width, screen.height),\n orientation: screen.width > screen.height ? 'landscape' : 'portrait',\n },\n };\n }\n\n private detectPlatform(userAgent: string): 'mobile' | 'tablet' | 'desktop' {\n if (this.config.forcePlatform) {\n return this.config.forcePlatform;\n }\n\n if (isMobile.phone || /mobile|android.*mobile|iphone|ipod/i.test(userAgent)) {\n return 'mobile';\n }\n\n if (isMobile.tablet || /tablet|ipad/i.test(userAgent)) {\n return 'tablet';\n }\n\n // Fallback to screen size\n const width = window.screen?.width || window.innerWidth || 1920;\n if (width < 768) return 'mobile';\n if (width < 1024) return 'tablet';\n\n return 'desktop';\n }\n\n private detectBrowser(userAgent: string): DeviceInfo['browser'] {\n let name: DeviceInfo['browser']['name'] = 'unknown';\n let version = 'unknown';\n\n try {\n if (/edg\\//i.test(userAgent)) {\n name = 'edge';\n version = userAgent.match(/edg\\/([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/chrome/i.test(userAgent) && !/edg/i.test(userAgent)) {\n name = 'chrome';\n version = userAgent.match(/chrome\\/([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/firefox/i.test(userAgent)) {\n name = 'firefox';\n version = userAgent.match(/firefox\\/([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/safari/i.test(userAgent) && !/chrome/i.test(userAgent)) {\n name = 'safari';\n version = userAgent.match(/version\\/([0-9.]+)/i)?.[1] || 'unknown';\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Browser detection failed', error);\n }\n\n return { name, version };\n }\n\n private detectOS(userAgent: string): DeviceInfo['os'] {\n let name: DeviceInfo['os']['name'] = 'unknown';\n let version = 'unknown';\n\n try {\n if (/iphone|ipad|ipod/i.test(userAgent)) {\n name = 'ios';\n version = userAgent.match(/os ([0-9_]+)/i)?.[1]?.replace(/_/g, '.') || 'unknown';\n } else if (/android/i.test(userAgent)) {\n name = 'android';\n version = userAgent.match(/android ([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/mac os x/i.test(userAgent)) {\n name = 'macos';\n version = userAgent.match(/mac os x ([0-9_]+)/i)?.[1]?.replace(/_/g, '.') || 'unknown';\n } else if (/windows/i.test(userAgent)) {\n name = 'windows';\n if (/windows nt 10/i.test(userAgent)) version = '10';\n else if (/windows nt 6.3/i.test(userAgent)) version = '8.1';\n else if (/windows nt 6.2/i.test(userAgent)) version = '8';\n else if (/windows nt 6.1/i.test(userAgent)) version = '7';\n } else if (/linux/i.test(userAgent)) {\n name = 'linux';\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('OS detection failed', error);\n }\n\n return { name, version };\n }\n\n private calculateDiagonal(width: number, height: number): number {\n return Math.sqrt(width * width + height * height);\n }\n\n /**\n * Gather performance metrics safely\n */\n private async gatherMetrics(): Promise<PerformanceMetrics> {\n const metrics: PerformanceMetrics = {\n memory: await this.getMemoryInfo(),\n network: await this.getNetworkInfo(),\n battery: await this.getBatteryInfo(),\n gpu: await this.getGPUInfo(),\n };\n\n return metrics;\n }\n\n private async getMemoryInfo(): Promise<PerformanceMetrics['memory']> {\n let totalMB = 4096; // Default 4GB\n let usedMB = 512; // Default 512MB\n\n try {\n if (this.config.enableAdvancedMetrics) {\n // @ts-ignore - Chrome specific\n const memoryInfo = (performance as any).memory;\n if (memoryInfo) {\n totalMB = memoryInfo.jsHeapSizeLimit / (1024 * 1024);\n usedMB = memoryInfo.usedJSHeapSize / (1024 * 1024);\n }\n\n // @ts-ignore - Chrome specific\n const deviceMemory = (navigator as any).deviceMemory;\n if (deviceMemory) {\n totalMB = deviceMemory * 1024; // Convert GB to MB\n }\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Memory detection failed', error);\n }\n\n let tier: 'low' | 'medium' | 'high' = 'medium';\n if (totalMB < 2048)\n tier = 'low'; // < 2GB\n else if (totalMB >= 8192) tier = 'high'; // >= 8GB\n\n return { totalMB, usedMB, tier };\n }\n\n private async getNetworkInfo(): Promise<PerformanceMetrics['network']> {\n const defaultNetwork: PerformanceMetrics['network'] = {\n type: 'unknown',\n effectiveType: '4g',\n downlink: 10,\n rtt: 50,\n isSlow: false,\n };\n\n if (!this.config.enableNetworkDetection) {\n return defaultNetwork;\n }\n\n try {\n // @ts-ignore - Chrome specific\n const connection =\n (navigator as any).connection ||\n (navigator as any).mozConnection ||\n (navigator as any).webkitConnection;\n\n if (connection) {\n const isSlow =\n connection.effectiveType === 'slow-2g' ||\n connection.effectiveType === '2g' ||\n connection.saveData;\n\n return {\n type: connection.type || 'unknown',\n effectiveType: connection.effectiveType || '4g',\n downlink: connection.downlink || 10,\n rtt: connection.rtt || 50,\n isSlow,\n };\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Network detection failed', error);\n }\n\n return defaultNetwork;\n }\n\n private async getBatteryInfo(): Promise<PerformanceMetrics['battery']> {\n const defaultBattery: PerformanceMetrics['battery'] = {\n level: 100,\n charging: true,\n isLow: false,\n savePower: false,\n };\n\n if (!this.config.enableBatteryDetection) {\n return defaultBattery;\n }\n\n try {\n // @ts-ignore - Battery API\n const battery = await (navigator as any).getBattery?.();\n\n if (battery) {\n const level = Math.floor(battery.level * 100);\n const isLow = level < 20;\n const savePower = isLow && !battery.charging;\n\n return {\n level,\n charging: battery.charging,\n isLow,\n savePower,\n };\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Battery detection failed', error);\n }\n\n return defaultBattery;\n }\n\n private async getGPUInfo(): Promise<PerformanceMetrics['gpu']> {\n const defaultGPU: PerformanceMetrics['gpu'] = {\n renderer: 'unknown',\n vendor: 'unknown',\n tier: 'medium',\n maxTextureSize: 2048,\n supportsWebGL2: false,\n };\n\n if (!this.config.enableGPUDetection) {\n return defaultGPU;\n }\n\n try {\n const canvas = document.createElement('canvas');\n const gl2 = canvas.getContext('webgl2');\n const gl = gl2 || canvas.getContext('webgl');\n\n if (!gl) {\n return { ...defaultGPU, tier: 'low' };\n }\n\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n const renderer = debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : 'unknown';\n const vendor = debugInfo ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : 'unknown';\n const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\n const tier = this.assessGPUTier(renderer, maxTextureSize);\n\n return {\n renderer,\n vendor,\n tier,\n maxTextureSize,\n supportsWebGL2: !!gl2,\n };\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('GPU detection failed', error);\n return defaultGPU;\n }\n }\n\n private assessGPUTier(renderer: string, maxTextureSize: number): 'low' | 'medium' | 'high' {\n const rendererLower = renderer.toLowerCase();\n\n // High-end indicators\n if (\n rendererLower.includes('rtx') ||\n rendererLower.includes('gtx 1060') ||\n rendererLower.includes('rx 580') ||\n maxTextureSize >= 16384\n ) {\n return 'high';\n }\n\n // Low-end indicators\n if (\n (rendererLower.includes('intel') && rendererLower.includes('hd')) ||\n rendererLower.includes('mali-400') ||\n (rendererLower.includes('adreno') && !rendererLower.includes('6')) ||\n maxTextureSize < 4096\n ) {\n return 'low';\n }\n\n return 'medium';\n }\n\n /**\n * Calculate overall performance tier\n */\n private calculatePerformanceTier(): 'low' | 'medium' | 'high' {\n if (!this.deviceInfo || !this.metrics) return 'medium';\n\n let score = 0;\n\n // Platform weight (25%)\n if (this.deviceInfo.platform === 'desktop') score += 25;\n else if (this.deviceInfo.platform === 'tablet') score += 15;\n else score += 5;\n\n // Memory weight (25%)\n if (this.metrics.memory.tier === 'high') score += 25;\n else if (this.metrics.memory.tier === 'medium') score += 15;\n else score += 5;\n\n // GPU weight (25%)\n if (this.metrics.gpu.tier === 'high') score += 25;\n else if (this.metrics.gpu.tier === 'medium') score += 15;\n else score += 5;\n\n // Network weight (15%)\n if (this.metrics.network.effectiveType === '4g' && !this.metrics.network.isSlow) score += 15;\n else if (this.metrics.network.effectiveType === '3g') score += 10;\n else score += 3;\n\n // Battery weight (10%)\n if (!this.metrics.battery.isLow && !this.metrics.battery.savePower) score += 10;\n else if (!this.metrics.battery.isLow) score += 6;\n else score += 2;\n\n // Determine tier\n if (score >= 70) return 'high';\n if (score >= 40) return 'medium';\n return 'low';\n }\n\n private generateOptimizationSettings(): OptimizationSettings {\n const baseSettings = { ...this.defaultTierSettings[this.performanceTier] };\n\n // Calculate actual physical resolution\n const actualWidth = this.deviceInfo?.screen.width\n ? this.deviceInfo.screen.width * this.deviceInfo.screen.pixelRatio\n : 1920;\n const actualHeight = this.deviceInfo?.screen.height\n ? this.deviceInfo.screen.height * this.deviceInfo.screen.pixelRatio\n : 1080;\n\n getLogger('DeviceOptimizerPlugin').info('Screen Resolution Analysis', {\n cssViewport: `${this.deviceInfo?.screen.width}x${this.deviceInfo?.screen.height}`,\n pixelRatio: this.deviceInfo?.screen.pixelRatio,\n physicalResolution: `${actualWidth}x${actualHeight}`,\n diagonal: this.deviceInfo?.screen.diagonal,\n });\n\n\n // Platform-specific adjustments\n if (this.deviceInfo?.platform === 'mobile') {\n baseSettings.assetResolution = Math.min(baseSettings.assetResolution, 0.75);\n baseSettings.particleSettings.maxParticles = Math.floor(\n baseSettings.particleSettings.maxParticles * 0.6,\n );\n baseSettings.memoryLimits.maxAssetMemoryMB = Math.floor(\n baseSettings.memoryLimits.maxAssetMemoryMB * 0.7,\n );\n }\n\n // Resolution-based asset selection\n if (this.deviceInfo?.screen.pixelRatio && this.deviceInfo.screen.pixelRatio > 2) {\n if (this.performanceTier === 'high') {\n // High resolution displays need higher quality assets\n const physicalPixelCount = actualWidth * actualHeight;\n\n if (physicalPixelCount >= 3000000) {\n // ~1920x1560+ equivalent\n // Very high resolution - use 2x assets\n baseSettings.assetResolution = 2.0;\n baseSettings.assetSuffix = '@2x';\n } else if (physicalPixelCount >= 2000000) {\n // ~1414x1414+ equivalent\n // High resolution - use 1.5x or 2x assets\n baseSettings.assetResolution = this.deviceInfo.screen.pixelRatio >= 3.0 ? 2.0 : 1.5;\n baseSettings.assetSuffix = baseSettings.assetResolution >= 2.0 ? '@2x' : '@1.5x';\n } else {\n // Medium-high resolution - use 1x or 1.5x\n baseSettings.assetResolution = 1.0;\n baseSettings.assetSuffix = '@1x';\n }\n\n getLogger('DeviceOptimizerPlugin').info('Resolution-based asset selection', {\n physicalPixelCount,\n selectedResolution: baseSettings.assetResolution,\n selectedSuffix: baseSettings.assetSuffix,\n reasoning: `Physical resolution: ${actualWidth}x${actualHeight}`,\n });\n } else if (this.performanceTier === 'medium') {\n // Medium tier: More conservative, prioritize performance\n const physicalPixelCount = actualWidth * actualHeight;\n\n if (physicalPixelCount >= 2500000 && this.deviceInfo.screen.pixelRatio >= 3.0) {\n // Only use higher res for very high DPI medium devices\n baseSettings.assetResolution = 1.0;\n baseSettings.assetSuffix = '@1x';\n } else {\n // Stay at lower resolution for performance\n baseSettings.assetResolution = 0.5;\n baseSettings.assetSuffix = '@0.5x';\n }\n }\n }\n\n // Battery-based adjustments (override high resolution if needed)\n if (this.metrics?.battery.savePower) {\n // Power saving mode: reduce asset quality\n baseSettings.assetResolution = Math.min(baseSettings.assetResolution, 1.0);\n if (baseSettings.assetResolution <= 0.5) {\n baseSettings.assetSuffix = '@0.5x';\n } else {\n baseSettings.assetSuffix = '@1x';\n }\n\n baseSettings.targetFPS = 30;\n baseSettings.particleSettings.maxParticles = Math.floor(\n baseSettings.particleSettings.maxParticles * 0.5,\n );\n baseSettings.particleSettings.enableAdvancedEffects = false;\n }\n\n return baseSettings;\n }\n\n private applyForceOverrides(): void {\n if (!this.settings) return;\n\n if (this.config.forceResolution) {\n this.settings.assetResolution = this.config.forceResolution;\n this.settings.assetSuffix = `@${this.config.forceResolution}x`;\n }\n }\n\n private useFallbackSettings(): void {\n this.deviceInfo = {\n platform: isMobile.any ? 'mobile' : 'desktop',\n browser: { name: 'unknown', version: 'unknown' },\n os: { name: 'unknown', version: 'unknown' },\n screen: {\n width: window.screen?.width || 1920,\n height: window.screen?.height || 1080,\n pixelRatio: window.devicePixelRatio || 1,\n diagonal: 0,\n orientation: 'landscape',\n },\n };\n\n this.metrics = {\n memory: { totalMB: 4096, usedMB: 512, tier: 'medium' },\n network: { type: 'unknown', effectiveType: '4g', downlink: 10, rtt: 50, isSlow: false },\n battery: { level: 100, charging: true, isLow: false, savePower: false },\n gpu: {\n renderer: 'unknown',\n vendor: 'unknown',\n tier: 'medium',\n maxTextureSize: 2048,\n supportsWebGL2: false,\n },\n };\n\n this.performanceTier = 'medium';\n this.settings = { ...this.defaultTierSettings.medium };\n this.isInitialized = true;\n }\n\n private logDeviceInfo(): void {\n if (!this.deviceInfo || !this.metrics || !this.settings) return;\n\n console.group('🔍 Device Detection Results');\n console.log('Platform:', this.deviceInfo.platform);\n console.log('Browser:', `${this.deviceInfo.browser.name} ${this.deviceInfo.browser.version}`);\n console.log('OS:', `${this.deviceInfo.os.name} ${this.deviceInfo.os.version}`);\n console.log(\n 'Screen:',\n `${this.deviceInfo.screen.width}x${this.deviceInfo.screen.height} (${this.deviceInfo.screen.pixelRatio}x)`,\n );\n console.log('Performance Tier:', this.performanceTier);\n console.log('Asset Resolution:', this.settings.assetResolution);\n console.log('Max Particles:', this.settings.particleSettings.maxParticles);\n console.log('Memory Tier:', this.metrics.memory.tier);\n console.log('GPU Tier:', this.metrics.gpu.tier);\n console.groupEnd();\n }\n\n // Public API\n /**\n * Gets detected device information.\n *\n * @returns Device info or null if not yet initialized\n */\n public getDeviceInfo(): DeviceInfo | null {\n return this.deviceInfo;\n }\n\n /**\n * Gets gathered performance metrics.\n *\n * @returns Performance metrics or null if not yet initialized\n */\n public getMetrics(): PerformanceMetrics | null {\n return this.metrics;\n }\n\n /**\n * Gets calculated optimization settings.\n *\n * These settings are used by ResourcePlugin to determine asset loading strategy.\n *\n * @returns Optimization settings or null if not yet initialized\n */\n public getSettings(): OptimizationSettings | null {\n return this.settings;\n }\n\n /**\n * Gets the calculated performance tier.\n *\n * @returns Performance tier: 'low', 'medium', or 'high'\n */\n public getPerformanceTier(): 'low' | 'medium' | 'high' {\n return this.performanceTier;\n }\n\n /**\n * Gets the recommended asset resolution multiplier.\n *\n * @returns Resolution multiplier (e.g., 0.25, 0.5, 1.0, 2.0)\n */\n public getAssetResolution(): number {\n return this.settings?.assetResolution ?? 1.0;\n }\n\n public getAssetSuffix(): string {\n return this.settings?.assetSuffix ?? '@1x';\n }\n\n /**\n * Gets the optimal particle count for the current device.\n *\n * @param baseCount Base particle count\n * @returns Adjusted particle count\n */\n public getOptimalParticleCount(baseCount: number): number {\n const maxParticles = this.settings?.particleSettings.maxParticles ?? 200;\n const ratio = maxParticles / 200; // Normalize to base 200\n return Math.floor(baseCount * ratio);\n }\n\n /**\n * Checks if advanced particle effects are supported.\n *\n * @returns True if advanced effects are supported, false otherwise\n */\n public supportsAdvancedEffects(): boolean {\n return this.settings?.particleSettings.enableAdvancedEffects ?? true;\n }\n\n /**\n * Gets package loading preferences for ResourcePlugin.\n *\n * Returns a map of package names to preference values:\n * - -1: Disable package\n * - 0: Normal priority\n * - 1: Prefer package\n * - 2: High priority\n *\n * @returns Package preferences map\n */\n public getPackagePreferences(): Record<string, number> {\n return this.settings?.packagePreferences ?? {};\n }\n\n /**\n * Overrides optimization settings with custom values.\n *\n * @param overrides Custom optimization settings\n */\n public overrideSettings(overrides: Partial<OptimizationSettings>): void {\n if (this.settings) {\n this.settings = { ...this.settings, ...overrides };\n getLogger('DeviceOptimizerPlugin').debug('Settings overridden', overrides);\n }\n }\n\n public forceTier(tier: 'low' | 'medium' | 'high'): void {\n this.performanceTier = tier;\n this.settings = { ...this.defaultTierSettings[tier] };\n getLogger('DeviceOptimizerPlugin').debug(`Forced performance tier: ${tier}`);\n }\n\n [key: symbol]: any;\n}\n","/**\n * Resolves a runtime public asset path against Vite's deploy base URL.\n * Use for assets loaded after build (Pixi, i18n, fonts, SVGs, etc.).\n */\nexport function resolvePublicPath(path: string): string {\n if (path.startsWith('http://') || path.startsWith('https://')) {\n return path;\n }\n\n const base =\n typeof import.meta !== 'undefined' && import.meta.env?.BASE_URL\n ? import.meta.env.BASE_URL\n : '/';\n\n const normalizedBase = base.endsWith('/') ? base : `${base}/`;\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n\n return `${normalizedBase}${normalizedPath}`;\n}\n","import { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport { resolvePublicPath } from '../../helpers/resolvePublicPath';\nimport { Assets, detectWebp } from 'pixi.js';\nimport '@esotericsoftware/spine-pixi-v8';\nimport type {\n ResourcePluginConfig,\n AssetItem,\n AssetBundleState,\n LoadingProgress,\n LoadPriority,\n TextureFormat,\n SpinePackageConfig,\n SoundPackageConfig,\n} from './ResourcePlugin.types';\n\n/**\n * Asset loading and management plugin for PixiJS games.\n *\n * ResourcePlugin manages game assets with automatic resolution selection,\n * platform-specific loading, and priority-based strategies. It uses PixiJS\n * native features (isMobile, detectWebp) for device detection.\n *\n * ## Features\n *\n * - **Automatic Resolution Selection**: Based on devicePixelRatio\n * - **Platform-Specific Assets**: Desktop vs mobile asset variants\n * - **Priority-Based Loading**: Critical, high, medium, low priority bundles\n * - **Lazy Loading**: Load assets on-demand\n * - **WebP Support**: Automatic WebP format detection\n * - **Font Loading**: Integrated font asset management\n * - **Progress Tracking**: Per-bundle loading progress callbacks\n *\n * ## Asset Resolution Strategy\n *\n * Assets are organized in directories with resolution variants:\n * ```\n * /assets/graphics/\n * package-name/\n * package-name-0@0.25x.webp.json // Low quality\n * package-name-0@0.5x.webp.json // Medium quality\n * package-name-0@1x.webp.json // High quality\n * package-name-0@2x.webp.json // Ultra quality\n * ```\n *\n * @example\n * ```typescript\n * const resourcePlugin = new ResourcePlugin({\n * basePath: '/assets/graphics/',\n * devicePixelRatio: window.devicePixelRatio,\n * bundles: [\n * {\n * name: 'ui',\n * packages: ['buttons', 'icons'],\n * priority: 0 // Critical\n * },\n * {\n * name: 'game',\n * packages: ['symbols', 'backgrounds'],\n * priority: 1, // High\n * isLazy: false\n * }\n * ]\n * });\n *\n * engine.registerPlugin(resourcePlugin);\n * await engine.initialize();\n *\n * // Load critical assets\n * await resourcePlugin.loadCriticalAssets();\n *\n * // Load all non-lazy bundles\n * await resourcePlugin.preloadAssets();\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class ResourcePlugin implements EnginePlugin {\n public name: string = 'resourcePlugin';\n public priority: number = 50;\n public dependencies: string[] = [];\n\n private config: ResourcePluginConfig;\n private engine!: PixiEngine;\n private isInitialized = false;\n\n // Asset management state\n private bundleStates: Map<string, AssetBundleState> = new Map();\n private manifest: Record<string, AssetItem[]> = {};\n private resolution: number = 1.0;\n private resolutionSuffix!: string;\n private textureFormat: TextureFormat = 'png';\n\n /** Sound alias -> channel mapping collected from bundle configs */\n private _soundChannelMappings: Map<string, string> = new Map();\n\n constructor(config: ResourcePluginConfig) {\n this.config = {\n basePath: resolvePublicPath('assets/graphics/'),\n spineBasePath: resolvePublicPath('assets/spine/'),\n audioBasePath: resolvePublicPath('assets/sounds/'),\n availableResolutions: [0.25, 0.5, 1.0, 2.0],\n availableTextureFormats: ['png', 'webp'],\n ...config,\n };\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n this.engine = engine;\n\n // 2. Texture format detection\n const deviceSupportsWebP = await detectWebp.test();\n const gameHasWebP = this.config.availableTextureFormats?.includes('webp') ?? true;\n this.textureFormat = (deviceSupportsWebP && gameHasWebP) ? 'webp' : 'png';\n\n // 3. Resolution calculation\n this.resolution = this.calculateOptimalResolution(this.engine.devicePixelRatio, this.engine.platform, this.config.forceResolution);\n this.resolutionSuffix = `@${this.resolution}x`;\n\n // 4. Generate manifest\n this.generateManifest();\n\n // 5. Initialize PixiJS Assets\n this.initializePixiAssets();\n\n this.isInitialized = true;\n\n getLogger('ResourcePlugin').info('ResourcePlugin initialized', {\n platform: this.engine.platform,\n resolution: this.resolution,\n textureFormat: this.textureFormat,\n bundles: this.config.bundles.length,\n });\n }\n\n public onReady(engine: PixiEngine): void {\n getLogger('ResourcePlugin').debug('ResourcePlugin is ready');\n }\n\n /**\n * Calculates optimal asset resolution based on device screen size and DPR.\n * Uses diagonal ratio between device physical resolution and design resolution (1920x1080).\n *\n * Formula: requiredScale = deviceDiagonal / designDiagonal\n *\n * Strategy:\n * - Mobile: Round DOWN to nearest available resolution (performance priority)\n * - Desktop: Round UP to nearest available resolution (quality priority)\n *\n * @param dpr - Device pixel ratio\n * @param platform - 'mobile' or 'desktop'\n * @param forceResolution - Optional forced scale value (bypasses diagonal calculation)\n */\n private calculateOptimalResolution(dpr: number, platform: string, forceResolution?: number): number {\n const available = this.config.availableResolutions!;\n const sortedAvailable = [...available].sort((a, b) => a - b);\n\n // Design resolution (asset'lerin hazırlandığı çözünürlük)\n const designWidth = 1920;\n const designHeight = 1080;\n const designDiagonal = Math.sqrt(designWidth ** 2 + designHeight ** 2); // ~2202.9\n\n // Device physical resolution (logical × DPR)\n const screenWidth = window.screen.width * dpr;\n const screenHeight = window.screen.height * dpr;\n const deviceDiagonal = Math.sqrt(screenWidth ** 2 + screenHeight ** 2);\n\n let requiredScale: number;\n if (forceResolution !== undefined) {\n // Force resolution: bypass diagonal calculation\n requiredScale = forceResolution;\n } else {\n // Calculate required scale based on diagonal ratio\n requiredScale = deviceDiagonal / designDiagonal;\n }\n\n let optimalResolution: number;\n if (platform === 'mobile') {\n // Mobile: Round DOWN - smaller asset, better performance\n // Find largest resolution that is <= requiredScale\n optimalResolution = sortedAvailable.reduce((prev, curr) =>\n curr <= requiredScale ? curr : prev\n , sortedAvailable[0]);\n } else {\n // Desktop: Round UP - larger asset, better quality\n // Find smallest resolution that is >= requiredScale\n optimalResolution = sortedAvailable.reduce((prev, curr) =>\n curr >= requiredScale && curr < prev ? curr : prev\n , sortedAvailable[sortedAvailable.length - 1]);\n }\n\n getLogger('ResourcePlugin').debug('Resolution calculation', {\n screenSize: `${window.screen.width}x${window.screen.height}`,\n physicalSize: `${screenWidth}x${screenHeight}`,\n dpr,\n deviceDiagonal: deviceDiagonal.toFixed(1),\n designDiagonal: designDiagonal.toFixed(1),\n requiredScale: requiredScale.toFixed(3),\n forceResolution: forceResolution ?? 'none',\n platform,\n selectedResolution: optimalResolution,\n });\n\n return optimalResolution;\n }\n\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public cleanup(): void {\n Assets.reset();\n this.bundleStates.clear();\n this.isInitialized = false;\n getLogger('ResourcePlugin').info('ResourcePlugin cleaned up');\n }\n\n\n /**\n * Check if a package config is a Spine package\n */\n private isSpinePackage(pkg: unknown): pkg is SpinePackageConfig {\n return typeof pkg === 'object' && pkg !== null && 'type' in pkg && (pkg as SpinePackageConfig).type === 'spine';\n }\n\n /**\n * Check if a package config is a Sound package\n */\n private isSoundPackage(pkg: unknown): pkg is SoundPackageConfig {\n return typeof pkg === 'object' && pkg !== null && 'type' in pkg && (pkg as SoundPackageConfig).type === 'sound';\n }\n\n private generateManifest(): void {\n const manifest: Record<string, AssetItem[]> = {};\n\n this.config.bundles.forEach((bundle) => {\n const assets: AssetItem[] = [];\n\n bundle.packages.forEach((pkg) => {\n // Handle Spine packages separately\n if (this.isSpinePackage(pkg)) {\n const spineAssets = this.generateSpineAssets(pkg);\n if (spineAssets) {\n assets.push(...spineAssets);\n }\n return;\n }\n\n // Handle Sound packages separately\n if (this.isSoundPackage(pkg)) {\n const soundAsset = this.generateSoundAsset(pkg);\n if (soundAsset) {\n assets.push(soundAsset);\n }\n return;\n }\n\n const packageName = typeof pkg === 'string' ? pkg : pkg.name;\n const alias = typeof pkg === 'string' ? pkg : pkg.alias || pkg.name;\n const hasResolutions = typeof pkg === 'string' ? true : (pkg.hasResolutions ?? true);\n const platform = typeof pkg === 'string' ? 'both' : (pkg.platform ?? 'both');\n\n // Check if package should be loaded on current platform\n if (!this.shouldLoadPackage(platform)) {\n getLogger('ResourcePlugin').debug(`Skipping package: ${packageName} (platform: ${platform}, current: ${this.engine.platform})`);\n return;\n }\n\n // Generate asset URL based on resolution support\n const src = this.generateAssetURL(packageName, hasResolutions);\n assets.push({ alias, src });\n\n getLogger('ResourcePlugin').debug(`Package: ${packageName}, URL: ${src}`);\n });\n\n if (assets.length > 0) {\n manifest[bundle.name] = assets;\n this.bundleStates.set(bundle.name, {\n name: bundle.name,\n status: 'pending',\n priority: (bundle.priority ?? 2) as LoadPriority,\n assets,\n });\n }\n });\n\n // Add fonts if configured\n if (this.config.fonts && this.config.fonts.length > 0) {\n const fontAssets: AssetItem[] = this.config.fonts.map((font) => ({\n alias: font.alias,\n src: font.src,\n data: font.data,\n }));\n\n manifest['fonts'] = fontAssets;\n this.bundleStates.set('fonts', {\n name: 'fonts',\n status: 'pending',\n priority: 0,\n assets: fontAssets,\n });\n\n getLogger('ResourcePlugin').debug('Fonts added to manifest', fontAssets);\n }\n\n this.manifest = manifest;\n getLogger('ResourcePlugin').debug('Asset manifest generated', { bundles: Object.keys(manifest) });\n }\n\n /**\n * Check if a package should be loaded on current platform\n */\n private shouldLoadPackage(packagePlatform: 'desktop' | 'mobile' | 'both'): boolean {\n if (packagePlatform === 'both') {\n return true;\n }\n return packagePlatform === this.engine.platform;\n }\n\n /**\n * Generate asset URL based on resolution support and texture format.\n */\n private generateAssetURL(packageName: string, hasResolutions: boolean): string {\n const basePath = this.config.basePath;\n const formatExtension = `.${this.textureFormat}`;\n\n if (hasResolutions) {\n // Standard resolution-aware assets: packageName-0@1x.webp.json\n return `${basePath}${packageName}/${packageName}-0${this.resolutionSuffix}${formatExtension}.json`;\n } else {\n // Static assets without resolution variants: packageName-0.webp.json\n return `${basePath}${packageName}/${packageName}-0${formatExtension}.json`;\n }\n }\n\n /**\n * Generate Spine asset URLs (skeleton + atlas) with resolution support.\n *\n * @param pkg - Spine package configuration\n * @returns Array of AssetItems for skeleton and atlas, or null if platform doesn't match\n */\n private generateSpineAssets(pkg: SpinePackageConfig): AssetItem[] | null {\n const platform = pkg.platform ?? 'both';\n\n // Check if package should be loaded on current platform\n if (!this.shouldLoadPackage(platform)) {\n getLogger('ResourcePlugin').debug(`Skipping Spine package: ${pkg.name} (platform: ${platform}, current: ${this.engine.platform})`);\n return null;\n }\n\n const spineBasePath = this.config.spineBasePath ?? resolvePublicPath('assets/spine/');\n const alias = pkg.alias ?? pkg.name;\n const hasResolutions = pkg.hasResolutions ?? true;\n const skeletonFormat = pkg.skeletonFormat ?? 'skel';\n\n // Skeleton URL (no resolution variants - skeleton is resolution-independent)\n const skeletonSrc = `${spineBasePath}${pkg.name}.${skeletonFormat}`;\n\n // Atlas URL (with resolution variants if enabled)\n const atlasSrc = hasResolutions\n ? `${spineBasePath}${pkg.name}${this.resolutionSuffix}.atlas`\n : `${spineBasePath}${pkg.name}.atlas`;\n\n const assets: AssetItem[] = [\n { alias: alias, src: skeletonSrc },\n { alias: `${alias}-atlas`, src: atlasSrc },\n ];\n\n getLogger('ResourcePlugin').debug(`Spine package: ${pkg.name}`, {\n skeleton: skeletonSrc,\n atlas: atlasSrc,\n aliases: [alias, `${alias}-atlas`],\n });\n\n return assets;\n }\n\n /**\n * Generate Sound asset URL with format fallback support.\n *\n * @param pkg - Sound package configuration\n * @returns AssetItem for the sound, or null if platform doesn't match\n */\n private generateSoundAsset(pkg: SoundPackageConfig): AssetItem | null {\n const platform = pkg.platform ?? 'both';\n\n // Check if package should be loaded on current platform\n if (!this.shouldLoadPackage(platform)) {\n getLogger('ResourcePlugin').debug(`Skipping Sound package: ${pkg.name} (platform: ${platform}, current: ${this.engine.platform})`);\n return null;\n }\n\n const audioBasePath = this.config.audioBasePath ?? resolvePublicPath('assets/sounds/');\n const alias = pkg.alias ?? pkg.name;\n\n // Use direct src if provided, otherwise auto-generate from audioBasePath + name\n const src = pkg.src\n ? `${audioBasePath}${pkg.src}`\n : `${audioBasePath}${pkg.name}.{ogg,mp3}`;\n\n getLogger('ResourcePlugin').debug(`Sound package: ${pkg.name}`, {\n src,\n alias,\n channel: pkg.channel,\n });\n\n // Store channel mapping for SoundPlugin to consume\n if (pkg.channel) {\n this._soundChannelMappings.set(alias, pkg.channel);\n }\n\n return { alias, src };\n }\n\n /**\n * Returns sound alias -> channel mappings collected from bundle configs.\n */\n public get soundChannelMappings(): ReadonlyMap<string, string> {\n return this._soundChannelMappings;\n }\n\n private initializePixiAssets(): void {\n Object.entries(this.manifest).forEach(([bundleName, assets]) => {\n const bundleAssets = assets.reduce(\n (acc, asset) => {\n if (bundleName === 'fonts') {\n acc[asset.alias] = { src: asset.src, data: asset.data };\n } else {\n acc[asset.alias] = asset.src;\n }\n return acc;\n },\n {} as Record<string, any>,\n );\n\n Assets.addBundle(bundleName, bundleAssets);\n });\n\n getLogger('ResourcePlugin').debug('PixiJS Assets initialized', { bundles: Object.keys(this.manifest) });\n }\n\n /**\n * Loads a specific asset bundle.\n *\n * @param bundleName - Name of the bundle to load\n * @param onProgress - Optional progress callback\n * @throws Error if bundle not found\n *\n * @example\n * ```typescript\n * await resourcePlugin.loadBundle('ui', (progress) => {\n * console.log(`Loading: ${progress.percentage}%`);\n * });\n * ```\n */\n public async loadBundle(\n bundleName: string,\n onProgress?: (progress: LoadingProgress) => void,\n globalContext?: { bundleIndex: number; totalBundles: number },\n ): Promise<void> {\n const bundleState = this.bundleStates.get(bundleName);\n\n if (!bundleState) {\n throw new Error(`Bundle not found: ${bundleName}`);\n }\n\n if (bundleState.status === 'loaded') {\n return;\n }\n\n const bundleIndex = globalContext?.bundleIndex ?? 0;\n const totalBundles = globalContext?.totalBundles ?? 1;\n\n try {\n bundleState.status = 'loading';\n this.bundleStates.set(bundleName, bundleState);\n\n await Assets.loadBundle(bundleName, (progress) => {\n if (onProgress) {\n const globalPercentage = (bundleIndex + progress) / totalBundles;\n onProgress({\n bundleName,\n loaded: Math.floor(progress * bundleState.assets.length),\n total: bundleState.assets.length,\n percentage: progress,\n globalPercentage,\n bundleIndex,\n totalBundles,\n });\n }\n });\n\n bundleState.status = 'loaded';\n this.bundleStates.set(bundleName, bundleState);\n\n getLogger('ResourcePlugin').debug(`Bundle loaded: ${bundleName}`);\n } catch (error) {\n bundleState.status = 'error';\n bundleState.error = error as Error;\n this.bundleStates.set(bundleName, bundleState);\n\n getLogger('ResourcePlugin').error(`Failed to load bundle: ${bundleName}`, error);\n throw error;\n }\n }\n\n /**\n * Loads all critical priority assets (priority 0).\n *\n * Should be called during initial loading screen before game starts.\n *\n * @param onProgress - Optional progress callback\n */\n public async loadCriticalAssets(onProgress?: (progress: LoadingProgress) => void): Promise<void> {\n const criticalBundles = Array.from(this.bundleStates.values())\n .filter((bundle) => bundle.priority === 0)\n .map((bundle) => bundle.name);\n\n const totalBundles = criticalBundles.length;\n for (let i = 0; i < criticalBundles.length; i++) {\n await this.loadBundle(criticalBundles[i], onProgress, { bundleIndex: i, totalBundles });\n }\n }\n\n /**\n * Preloads all non-lazy bundles.\n *\n * Loads all bundles that are not marked as lazy, typically called\n * after critical assets are loaded.\n *\n * @param onProgress - Optional progress callback\n */\n public async preloadAssets(onProgress?: (progress: LoadingProgress) => void): Promise<void> {\n const nonLazyBundles = this.config.bundles\n .filter((bundle) => !bundle.isLazy)\n .map((bundle) => bundle.name);\n\n const totalBundles = nonLazyBundles.length;\n for (let i = 0; i < nonLazyBundles.length; i++) {\n await this.loadBundle(nonLazyBundles[i], onProgress, { bundleIndex: i, totalBundles });\n }\n }\n\n /**\n * Checks if a bundle has been loaded.\n *\n * @param bundleName - Name of the bundle\n * @returns True if loaded, false otherwise\n */\n public isBundleLoaded(bundleName: string): boolean {\n const state = this.bundleStates.get(bundleName);\n return state?.status === 'loaded' || false;\n }\n\n /**\n * Returns the count of critical bundles (priority 0).\n */\n public getCriticalBundleCount(): number {\n return Array.from(this.bundleStates.values())\n .filter((bundle) => bundle.priority === 0).length;\n }\n\n /**\n * Returns the count of non-lazy bundles to preload.\n */\n public getPreloadBundleCount(): number {\n return this.config.bundles\n .filter((bundle) => !bundle.isLazy).length;\n }\n\n [key: symbol]: any;\n}\n","import type { PixiEngine } from '../engine/PixiEngine';\n\n/**\n * Internal symbols for engine-only hook access\n * These symbols prevent external code from calling lifecycle hooks\n */\nexport const ENGINE_HOOKS = {\n onEngineReady: Symbol('onEngineReady'),\n onPause: Symbol('onPause'),\n onResume: Symbol('onResume'),\n onResize: Symbol('onResize'),\n} as const;\n\n/**\n * Plugin lifecycle states\n */\nexport enum PluginState {\n REGISTERED = 'registered',\n INITIALIZING = 'initializing',\n INITIALIZED = 'initialized',\n READY = 'ready',\n ERROR = 'error',\n}\n\n/**\n * Plugin interface\n */\nexport interface EnginePlugin {\n /**\n * Plugin name. Must be unique.\n */\n name: string;\n\n /**\n * Plugin priority. Lower values represent higher priority.\n */\n priority: number;\n\n /**\n * Current plugin state\n */\n state?: PluginState;\n\n /**\n * Plugin dependencies - other plugins that must be ready before this one\n */\n dependencies?: string[];\n\n /**\n * Method that will be executed when the plugin is first loaded.\n * @param engine PixiEngine instance\n * @returns Promise that resolves when plugin is fully initialized\n */\n initialize(engine: PixiEngine): Promise<void> | void;\n\n /**\n * Called after initialization to mark plugin as ready\n * This is where you can access other plugins safely\n * @param engine PixiEngine instance\n * @returns Promise that resolves when plugin is ready\n */\n onReady?(engine: PixiEngine): Promise<void> | void;\n\n /**\n * Method that will be executed when the plugin is cleaned up.\n */\n cleanup?(): void;\n\n /**\n * Called on every frame update.\n * @param delta Frame duration (ms)\n * @returns Boolean value\n */\n onUpdate?(delta: number): boolean;\n\n /**\n * Index signature to allow symbol-based properties for internal engine hooks\n * @internal - These are accessed via ENGINE_HOOKS symbols by PixiEngine only\n */\n [key: symbol]: any;\n}\n\n/**\n * Common configuration parameters for all plugins\n */\nexport interface PluginConfig {\n priority?: number;\n enabled?: boolean;\n name?: string;\n dependencies?: string[];\n}\n","import { getLogger } from '../../utils/Logger';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport type { DisplayPluginConfig, OrientationConfig, DisplayEvents, DisplayResizeData } from './DisplayPlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\nimport { EventEmitter } from 'pixi.js';\n\n/**\n * Display management plugin for PixiJS games.\n *\n * DisplayPlugin handles responsive canvas scaling and positioning, maintaining a fixed\n * design resolution while adapting to different window sizes and aspect ratios.\n *\n * ## Features\n *\n * - **Fixed Design Resolution**: Work with consistent logical coordinates\n * - **Responsive Scaling**: Automatically scales to fit any window size\n * - **Aspect Ratio Preservation**: Maintains design proportions\n * - **Flexible Alignment**: Position game canvas anywhere in the window\n * - **Scale Modes**: Contain (letterbox) or cover (fill) options\n * - **Automatic Resize Handling**: Responds to window size changes\n *\n * ## Scaling Behavior\n *\n * ### Contain Mode (default)\n * Fits the entire game within the window, adding letterboxing or pillarboxing if needed.\n * Ensures all content is visible but may leave empty space.\n *\n * ### Cover Mode\n * Fills the entire window, potentially cropping content at the edges.\n * No empty space but some content may be off-screen.\n *\n * ## Design Resolution\n *\n * The plugin uses a fixed design resolution (e.g., 1920x1080) that your game is built for.\n * All game objects use these logical coordinates. The plugin handles scaling to physical pixels.\n *\n * @example\n * ```typescript\n * // Standard 1080p design resolution\n * const displayPlugin = new DisplayPlugin({\n * width: 1920,\n * height: 1080,\n * scaleMode: 'contain',\n * alignment: 'center'\n * });\n *\n * engine.registerPlugin(displayPlugin);\n * await engine.initialize();\n *\n * // Your game objects use logical coordinates\n * sprite.position.set(960, 540); // Center of 1920x1080\n * ```\n *\n * @example\n * ```typescript\n * // Mobile-optimized vertical layout\n * const displayPlugin = new DisplayPlugin({\n * width: 720,\n * height: 1280,\n * scaleMode: 'contain',\n * alignment: 'center'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Cover mode for full-screen games\n * const displayPlugin = new DisplayPlugin({\n * width: 1920,\n * height: 1080,\n * scaleMode: 'cover', // Fill entire window\n * alignment: 'center'\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class DisplayPlugin extends EventEmitter<DisplayEvents> implements EnginePlugin {\n public name: string = 'displayPlugin';\n public priority: number = 900; // Plugin that will be processed last\n\n /**\n * No dependencies - this is a core display plugin\n */\n public dependencies: string[] = [];\n\n private _designWidth: number;\n private _designHeight: number;\n private _engine: PixiEngine | null = null;\n private config: DisplayPluginConfig;\n private isInitialized = false;\n private _currentOrientation: 'landscape' | 'portrait' = 'landscape';\n private _activeConfig: OrientationConfig;\n private _lastResizeData: DisplayResizeData | null = null;\n\n /**\n * Creates a new DisplayPlugin instance.\n *\n * @param config - Display configuration options\n *\n * @example\n * ```typescript\n * const displayPlugin = new DisplayPlugin({\n * width: 1920,\n * height: 1080,\n * scaleMode: 'contain',\n * alignment: 'center',\n * debug: true\n * });\n * ```\n */\n constructor(config: DisplayPluginConfig) {\n super();\n\n this.config = config;\n\n // Use customized priority value if provided\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use customized name value if provided\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n\n // Initialize with landscape config as default\n this._activeConfig = this.config.landscape;\n this._designWidth = this._activeConfig.width;\n this._designHeight = this._activeConfig.height;\n }\n\n /**\n * Detects orientation based on width/height ratio.\n * @param width - Window width\n * @param height - Window height\n * @returns 'landscape' if width >= height, 'portrait' otherwise\n */\n private detectOrientation(width: number, height: number): 'landscape' | 'portrait' {\n return width >= height ? 'landscape' : 'portrait';\n }\n\n /**\n * Gets the active configuration based on current orientation.\n * Falls back to landscape config if portrait is not defined.\n */\n private getActiveConfig(orientation: 'landscape' | 'portrait'): OrientationConfig {\n if (orientation === 'portrait') {\n if (this.config.portrait) {\n return this.config.portrait;\n }\n getLogger('DisplayPlugin').warn('Portrait config not defined, falling back to landscape config');\n return this.config.landscape;\n }\n return this.config.landscape;\n }\n\n /**\n * Gets the current orientation.\n */\n public get orientation(): 'landscape' | 'portrait' {\n return this._currentOrientation;\n }\n\n /**\n * Initializes the DisplayPlugin.\n *\n * Sets up canvas styles and prepares for resize handling.\n * Called automatically by PixiEngine during plugin initialization.\n *\n * @param engine - PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n this._engine = engine;\n\n // Configure document and body styles\n\n // Configure basic canvas styles - operations that should be done only once\n const canvas = this._engine.pixiApp.canvas;\n if (canvas) {\n canvas.style.display = 'block';\n canvas.style.margin = '0';\n canvas.style.padding = '0';\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n getLogger('DisplayPlugin').debug('Canvas styles applied', canvas);\n\n }\n\n this.isInitialized = true;\n\n // onResize will be triggered by PixiEngine\n getLogger('DisplayPlugin').info('DisplayPlugin initialized with app:', this._engine.pixiApp);\n\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n getLogger('DisplayPlugin').debug('DisplayPlugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized && this._engine !== null;\n }\n\n /**\n * Handles window resize events.\n *\n * Calculates optimal scale and position for the game canvas based on the new window size,\n * design resolution, scale mode, and alignment settings.\n *\n * @param width - New window width in pixels\n * @param height - New window height in pixels\n * @returns True if resize was handled (prevents other plugins from handling)\n *\n * @remarks\n * This method is called automatically by PixiEngine when the window resizes.\n * It calculates the scale factor, applies it to the stage, and positions the canvas\n * according to the alignment setting.\n */\n [ENGINE_HOOKS.onResize](width: number, height: number, resolution: number): boolean {\n if (!this._engine || !this.isInitialized) {\n getLogger('DisplayPlugin').warn('Resize called but engine is not initialized yet');\n return false;\n }\n\n // Detect orientation and get active config\n const newOrientation = this.detectOrientation(width, height);\n if (newOrientation !== this._currentOrientation) {\n const oldOrientation = this._currentOrientation;\n this._currentOrientation = newOrientation;\n this._activeConfig = this.getActiveConfig(newOrientation);\n this._designWidth = this._activeConfig.width;\n this._designHeight = this._activeConfig.height;\n\n // Emit orientation change event\n this.emit('display:orientationChange', {\n oldOrientation,\n newOrientation,\n });\n\n getLogger('DisplayPlugin').debug('Orientation changed', {\n orientation: newOrientation,\n designWidth: this._designWidth,\n designHeight: this._designHeight,\n });\n }\n\n // ============================================\n // STEP 1: Clamp window dimensions to supported aspect ratio range\n // Creates a \"clamped area\" that is always centered on screen\n // ============================================\n const aspectRatioRange = this._activeConfig.aspectRatioRange;\n const currentRatio = width / height;\n let clampedWidth = width;\n let clampedHeight = height;\n\n if (aspectRatioRange) {\n const clampedRatio = Math.max(aspectRatioRange.min, Math.min(aspectRatioRange.max, currentRatio));\n\n if (currentRatio !== clampedRatio) {\n if (currentRatio < clampedRatio) {\n // Too narrow - reduce height to match min ratio\n clampedHeight = width / clampedRatio;\n } else {\n // Too wide - reduce width to match max ratio\n clampedWidth = height * clampedRatio;\n }\n\n getLogger('DisplayPlugin').debug('Aspect ratio clamped', {\n currentRatio,\n clampedRatio,\n originalWidth: width,\n originalHeight: height,\n clampedWidth,\n clampedHeight,\n });\n\n }\n }\n\n // Calculate offset to center the clamped area on screen\n const offsetX = Math.floor((width - clampedWidth) / 2);\n const offsetY = Math.floor((height - clampedHeight) / 2);\n\n // ============================================\n // STEP 2: Calculate scale based on clamped dimensions\n // ============================================\n let scaleX = clampedWidth / this._designWidth;\n let scaleY = clampedHeight / this._designHeight;\n const scaleMode = this._activeConfig.scaleMode || 'contain';\n\n // Apply safe area constraints for safe mode (using clamped dimensions)\n if (scaleMode === 'safe' && this._activeConfig.safeArea) {\n const safeArea = this._activeConfig.safeArea;\n const safeTop = safeArea.top || 0;\n const safeRight = safeArea.right || 0;\n const safeBottom = safeArea.bottom || 0;\n const safeLeft = safeArea.left || 0;\n\n // Calculate the safe area dimensions\n const safeWidth = this._designWidth - safeLeft - safeRight;\n const safeHeight = this._designHeight - safeTop - safeBottom;\n\n // Calculate scale that ensures safe area fits within clamped viewport\n const safeScaleX = clampedWidth / safeWidth;\n const safeScaleY = clampedHeight / safeHeight;\n\n // Use the minimum scale to ensure safe area is never cropped\n const safeScale = Math.min(safeScaleX, safeScaleY);\n\n // Use the safe scale as maximum allowed scale in cover mode\n scaleX = Math.min(scaleX, safeScale);\n scaleY = Math.min(scaleY, safeScale);\n\n getLogger('DisplayPlugin').debug('Safe area constraints applied', {\n safeArea,\n safeWidth,\n safeHeight,\n safeScale,\n adjustedScaleX: scaleX,\n adjustedScaleY: scaleY,\n });\n\n }\n\n const scale = scaleMode === 'contain' ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\n\n // ============================================\n // STEP 3: Calculate stage position within clamped area\n // Stage is positioned according to alignment WITHIN the clamped area\n // Then offset is added to center the clamped area on screen\n // ============================================\n const scaledWidth = Math.floor(this._designWidth * scale);\n const scaledHeight = Math.floor(this._designHeight * scale);\n\n // Apply scale\n this._engine.pixiApp.stage.scale.set(scale);\n\n // Calculate position within clamped area based on alignment\n let left = 0;\n let top = 0;\n const alignment = this._activeConfig.alignment || 'center';\n\n switch (alignment) {\n case 'center':\n left = Math.floor((clampedWidth - scaledWidth) / 2);\n top = Math.floor((clampedHeight - scaledHeight) / 2);\n break;\n case 'top':\n left = Math.floor((clampedWidth - scaledWidth) / 2);\n top = 0;\n break;\n case 'bottom':\n left = Math.floor((clampedWidth - scaledWidth) / 2);\n top = clampedHeight - scaledHeight;\n break;\n case 'left':\n left = 0;\n top = Math.floor((clampedHeight - scaledHeight) / 2);\n break;\n case 'right':\n left = clampedWidth - scaledWidth;\n top = Math.floor((clampedHeight - scaledHeight) / 2);\n break;\n case 'top-left':\n left = 0;\n top = 0;\n break;\n case 'top-right':\n left = clampedWidth - scaledWidth;\n top = 0;\n break;\n case 'bottom-left':\n left = 0;\n top = clampedHeight - scaledHeight;\n break;\n case 'bottom-right':\n left = clampedWidth - scaledWidth;\n top = clampedHeight - scaledHeight;\n break;\n }\n\n // Resize renderer with actual window size\n this._engine.pixiApp.renderer.resize(width, height, resolution);\n\n // Position stage: offset (to center clamped area) + alignment position\n this._engine.pixiApp.stage.position.set(offsetX + left, offsetY + top);\n\n const uiViewportLeftX = -left / scale;\n const uiViewportTopY = -top / scale;\n const uiViewportRightX = (clampedWidth - left) / scale;\n const uiViewportBottomY = (clampedHeight - top) / scale;\n\n // Cache and emit resize event\n this._lastResizeData = {\n designWidth: this._designWidth,\n designHeight: this._designHeight,\n windowWidth: width,\n windowHeight: height,\n width: clampedWidth,\n height: clampedHeight,\n scale,\n left,\n top,\n offsetX,\n offsetY,\n resolution,\n orientation: this._currentOrientation,\n uiViewportLeftX,\n uiViewportTopY,\n uiViewportRightX,\n uiViewportBottomY,\n };\n this.emit('display:resize', this._lastResizeData);\n\n\n getLogger('DisplayPlugin').debug('DisplayPlugin resized', {\n orientation: this._currentOrientation,\n windowWidth: width,\n windowHeight: height,\n clampedWidth,\n clampedHeight,\n scaledWidth,\n scaledHeight,\n scale,\n offsetX,\n offsetY,\n alignmentLeft: left,\n alignmentTop: top,\n });\n\n\n // This plugin handled the resize; prevent other plugins or the engine from resizing\n return true;\n }\n\n /**\n * Gets the design width.\n *\n * @returns Design width in logical pixels\n *\n * @example\n * ```typescript\n * const centerX = displayPlugin.width / 2; // 960 for 1920x1080\n * ```\n */\n public get width(): number {\n return this._designWidth;\n }\n\n /**\n * Gets the design height.\n *\n * @returns Design height in logical pixels\n *\n * @example\n * ```typescript\n * const centerY = displayPlugin.height / 2; // 540 for 1920x1080\n * ```\n */\n public get height(): number {\n return this._designHeight;\n }\n\n /**\n * Gets the last resize data.\n * Useful for getting current display state without waiting for resize event.\n *\n * @returns Last resize data or null if not yet resized\n */\n public getLastResizeData() {\n return this._lastResizeData;\n }\n\n /**\n * Gets the current fullscreen state.\n *\n * @returns True if the document is in fullscreen mode\n */\n public get isFullscreen(): boolean {\n return document.fullscreenElement !== null;\n }\n\n /**\n * Toggles fullscreen mode using the Browser Fullscreen API.\n *\n * @param state - Optional. If true, enters fullscreen. If false, exits fullscreen.\n * If not provided, toggles the current state.\n * @returns Promise that resolves when the fullscreen state change is complete\n *\n * @example\n * ```typescript\n * // Toggle fullscreen\n * await displayPlugin.toggleFullscreen();\n *\n * // Enter fullscreen\n * await displayPlugin.toggleFullscreen(true);\n *\n * // Exit fullscreen\n * await displayPlugin.toggleFullscreen(false);\n * ```\n */\n public async toggleFullscreen(state?: boolean): Promise<void> {\n const shouldBeFullscreen = state ?? !this.isFullscreen;\n\n try {\n if (shouldBeFullscreen && !this.isFullscreen) {\n await document.documentElement.requestFullscreen();\n this.emit('display:fullscreenChange', { isFullscreen: true });\n getLogger('DisplayPlugin').debug('Entered fullscreen mode');\n } else if (!shouldBeFullscreen && this.isFullscreen) {\n await document.exitFullscreen();\n this.emit('display:fullscreenChange', { isFullscreen: false });\n getLogger('DisplayPlugin').debug('Exited fullscreen mode');\n }\n } catch (error) {\n getLogger('DisplayPlugin').error('Fullscreen toggle failed', error);\n throw error;\n }\n }\n\n /**\n * Cleanup the plugin\n */\n public cleanup(): void {\n this._engine = null;\n this.isInitialized = false;\n getLogger('DisplayPlugin').info('DisplayPlugin cleaned up');\n }\n\n /**\n * Plugin update process\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // Nothing to update\n return false;\n }\n\n [key: symbol]: any;\n}\n\n// Re-export types for documentation\nexport type { DisplayPluginConfig, DisplayEvents, DisplayResizeData } from './DisplayPlugin.types';\n","import type { DisplayResizeData } from './DisplayPlugin.types';\n\nexport interface DesignViewportRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** Maps DisplayPlugin clamp geometry to a rectangle in design coordinates. */\nexport function computeDesignViewportRect(data: DisplayResizeData): DesignViewportRect {\n const viewportLeft = data.uiViewportLeftX ?? -data.left / data.scale;\n const viewportTop = data.uiViewportTopY ?? -data.top / data.scale;\n\n return {\n x: viewportLeft,\n y: viewportTop,\n width: data.width / data.scale,\n height: data.height / data.scale,\n };\n}\n","import { EventEmitter } from 'pixi.js';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\nimport type { PixiEngine } from '../../engine/PixiEngine';\nimport type { EventResult, EngineEvents } from './EventBusPlugin.types';\nimport { getLogger } from '../../utils/Logger';\n\nexport class EventBusPlugin<TEvents extends EngineEvents = EngineEvents>\n extends EventEmitter<TEvents>\n implements EnginePlugin {\n public readonly name = 'eventBusPlugin';\n public readonly priority = 5;\n\n\n constructor() {\n super();\n }\n\n async initialize(_engine: PixiEngine): Promise<void> {\n getLogger('EventBusPlugin').debug('Initialized');\n }\n\n [ENGINE_HOOKS.onEngineReady](_engine: PixiEngine): void {\n (this.emit as any)('engine:ready' as any);\n getLogger('EventBusPlugin').debug('Engine ready event emitted');\n }\n\n [ENGINE_HOOKS.onPause](_engine: PixiEngine): void {\n (this.emit as any)('engine:pause' as any);\n getLogger('EventBusPlugin').debug('Engine pause event emitted');\n }\n\n [ENGINE_HOOKS.onResume](_engine: PixiEngine): void {\n (this.emit as any)('engine:resume' as any);\n getLogger('EventBusPlugin').debug('Engine resume event emitted');\n }\n\n [ENGINE_HOOKS.onResize](width: number, height: number): boolean {\n (this.emit as any)('engine:resize' as any, width, height);\n getLogger('EventBusPlugin').debug(`Engine resize event emitted: ${width}x${height}`);\n return true;\n }\n\n cleanup(): void {\n this.removeAllListeners();\n getLogger('EventBusPlugin').debug('Cleaned up');\n }\n\n // emit<T extends keyof TEvents>(\n // event: T,\n // ...args: TEvents[T] extends (...args: any[]) => any ? Parameters<TEvents[T]> : never\n // ): boolean;\n // emit(event: string | symbol, ...args: any[]): boolean;\n // emit(event: string | symbol, ...args: any[]): boolean {\n // getLogger('EventBusPlugin').debug(`emit: ${event as string}`, args);\n // return super.emit(event as any, ...(args as any));\n // }\n emit<T extends EventEmitter.EventNames<TEvents>>(event: T, ...args: Parameters<EventEmitter.EventListener<TEvents, T>>): boolean {\n getLogger('EventBusPlugin').debug(`emit: ${event as string}`, args);\n return super.emit(event as any, ...(args as any));\n }\n\n\n // async emitAsync<T extends keyof TEvents>(\n // event: T,\n // ...args: TEvents[T] extends (...args: any[]) => any ? Parameters<TEvents[T]> : never\n // ): Promise<void>\n async emitAsync<T extends EventEmitter.EventNames<TEvents>>(event: T, ...args: Parameters<EventEmitter.EventListener<TEvents, T>>): Promise<any> {\n getLogger('EventBusPlugin').debug(`emitAsync: ${event as string}`, args);\n const listeners = this.listeners(event as any) as Array<(...args: any[]) => any>;\n const results = await Promise.all(listeners.map((listener) => Promise.resolve(listener(...args))));\n return results;\n }\n\n emitCancellable<T extends keyof TEvents>(event: T, ...args: any[]): EventResult {\n const result: EventResult = {\n cancelled: false,\n data: undefined,\n priority: 0,\n cancel(priority: number = 0) {\n if (priority >= this.priority) {\n this.cancelled = true;\n this.priority = priority;\n }\n },\n setData(data: any) {\n this.data = data;\n },\n };\n\n getLogger('EventBusPlugin').debug(`emitCancellable: ${event as string}`, args);\n\n // @ts-expect-error - EventEmitter doesn't support EventResult parameter in type signature\n super.emit(event as any, ...args, result);\n\n if (result.cancelled) {\n getLogger('EventBusPlugin').debug(`Event cancelled: ${event as string}`, result.data);\n }\n\n return result;\n }\n\n async emitCancellableAsync<T extends keyof TEvents>(\n event: T,\n ...args: any[]\n ): Promise<EventResult> {\n const result: EventResult = {\n cancelled: false,\n data: undefined,\n priority: 0,\n cancel(priority: number = 0) {\n if (priority >= this.priority) {\n this.cancelled = true;\n this.priority = priority;\n }\n },\n setData(data: any) {\n this.data = data;\n },\n };\n\n getLogger('EventBusPlugin').debug(`emitCancellableAsync: ${event as string}`, args);\n\n const listeners = this.listeners(event as any) as Array<(...args: any[]) => void>;\n\n for (const listener of listeners) {\n if (result.cancelled) break;\n await Promise.resolve(listener(...args, result));\n }\n\n if (result.cancelled) {\n getLogger('EventBusPlugin').debug(`Async event cancelled: ${event as string}`, result.data);\n }\n\n return result;\n }\n}\n","import { gsap } from 'gsap';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { Container } from 'pixi.js';\nimport { getLogger } from '../../utils/Logger';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\n\n/**\n * GSAP animation integration plugin for PixiJS games.\n *\n * GsapPlugin integrates the powerful GSAP (GreenSock Animation Platform) library\n * with PixiJS, providing a unified animation loop and convenient animation helpers.\n *\n * ## Features\n *\n * - **Unified Ticker**: Single animation loop driven by GSAP\n * - **Animation Helpers**: Pre-built fade, scale, move animations\n * - **Timeline Support**: Create complex animation sequences\n * - **PixiJS Integration**: Direct access to stage management\n * - **Type-Safe**: Full TypeScript support\n *\n * ## How It Works\n *\n * GsapPlugin replaces PixiJS's default ticker with GSAP's ticker, ensuring all\n * animations (both GSAP and PixiJS) run on the same timeline. This prevents\n * timing conflicts and improves performance.\n *\n * ### Ticker Integration\n *\n * 1. GSAP ticker runs at 60 FPS (or requestAnimationFrame)\n * 2. On each tick, GSAP updates all its tweens\n * 3. Plugin forwards tick to PixiJS ticker\n * 4. Engine's onUpdate is called for game logic\n *\n * ## Animation Helpers\n *\n * The plugin provides convenient methods for common animations:\n * - `fadeIn()` / `fadeOut()` - Opacity animations\n * - `scaleIn()` / `scaleOut()` - Scale animations with easing\n * - `moveTo()` - Position animations\n * - `animate()` - Generic property animations\n * - `sequence()` - Staggered animation sequences\n * - `createTimeline()` - Complex animation timelines\n *\n * @example\n * ```typescript\n * const gsapPlugin = new GsapPlugin();\n * engine.registerPlugin(gsapPlugin);\n * await engine.initialize();\n *\n * // Fade in a sprite\n * const sprite = new Sprite(texture);\n * gsapPlugin.addToStage(sprite);\n * gsapPlugin.fadeIn(sprite, 1.0);\n * ```\n *\n * @example\n * ```typescript\n * // Create a complex animation sequence\n * const timeline = gsapPlugin.createTimeline();\n *\n * timeline\n * .add(gsapPlugin.fadeIn(logo, 0.5))\n * .add(gsapPlugin.scaleIn(button, 0.3), '-=0.2')\n * .add(gsapPlugin.moveTo(panel, 100, 200, 0.5));\n * ```\n *\n * @example\n * ```typescript\n * // Staggered animations\n * const buttons = [button1, button2, button3];\n *\n * gsapPlugin.sequence(\n * buttons.map(btn => () => gsapPlugin.fadeIn(btn, 0.3)),\n * 0.1 // 0.1s delay between each\n * );\n * ```\n *\n * @example\n * ```typescript\n * // Custom animation with callbacks\n * gsapPlugin.animate(sprite, { rotation: Math.PI * 2 }, 2.0, {\n * ease: 'elastic.out',\n * onComplete: () => console.log('Rotation complete!')\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class GsapPlugin implements EnginePlugin {\n /**\n * Plugin name\n */\n public name: string = 'gsapPlugin';\n\n /**\n * High priority to ensure it runs before other plugins\n */\n public priority: number = 100;\n\n /**\n * No dependencies - this is a core plugin\n */\n public dependencies: string[] = [];\n\n private engine!: PixiEngine;\n private gsapTickerCallback!: (\n time: number,\n deltaTime: number,\n frame: number,\n elapsed: number,\n ) => void;\n private isInitialized = false;\n\n /**\n * Initializes the GSAP plugin.\n *\n * Sets up the unified ticker system by connecting GSAP's ticker to PixiJS.\n * Called automatically by PixiEngine during plugin initialization.\n *\n * @param engine - PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n this.engine = engine;\n\n // Create ticker callback that will update Pixi's ticker\n this.gsapTickerCallback = (time: number, deltaTime: number, frame: number, elapsed: number) => {\n // Update Pixi's ticker with the time from GSAP\n engine.pixiApp.ticker.update(time * 1000);\n\n this.engine.onUpdate(deltaTime);\n };\n\n // Add our callback to GSAP's ticker\n gsap.ticker.add(this.gsapTickerCallback);\n\n this.isInitialized = true;\n getLogger('GsapPlugin').info('GSAP Plugin initialized - Pixi ticker now driven by GSAP');\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n getLogger('GsapPlugin').debug('GSAP Plugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Called when engine is paused\n * Pauses GSAP's ticker to stop all animations\n */\n [ENGINE_HOOKS.onPause](_engine: PixiEngine): void {\n gsap.ticker.sleep();\n getLogger('GsapPlugin').info('GSAP ticker paused');\n }\n\n /**\n * Called when engine is resumed\n * Resumes GSAP's ticker to continue animations\n */\n [ENGINE_HOOKS.onResume](_engine: PixiEngine): void {\n gsap.ticker.wake();\n getLogger('GsapPlugin').info('GSAP ticker resumed');\n }\n\n [key: symbol]: any;\n\n /**\n * Clean up when plugin is removed\n */\n public cleanup(): void {\n if (this.gsapTickerCallback) {\n gsap.ticker.remove(this.gsapTickerCallback);\n getLogger('GsapPlugin').debug('GSAP ticker callback removed');\n }\n\n this.isInitialized = false;\n getLogger('GsapPlugin').info('GSAP Plugin cleaned up');\n }\n\n /**\n * Plugin hook that runs every tick\n * @param deltaTime The time elapsed since the last update\n * @returns Returns false because GsapPlugin allows other plugins to continue updating.\n * GSAP ticker and plugin onUpdate loops are different mechanisms.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // No need to do anything here because GsapPlugin manages its own update loop\n // The engine's onUpdate method is already called inside the GSAP ticker callback\n return false;\n }\n\n /**\n * Creates a GSAP timeline for complex animation sequences.\n *\n * Timelines allow you to choreograph multiple animations with precise timing control.\n *\n * @param vars - Timeline configuration options\n * @returns GSAP Timeline instance\n *\n * @example\n * ```typescript\n * const timeline = gsapPlugin.createTimeline({ repeat: -1, yoyo: true });\n * timeline\n * .to(sprite, { x: 100, duration: 1 })\n * .to(sprite, { y: 100, duration: 1 })\n * .to(sprite, { rotation: Math.PI, duration: 1 });\n * ```\n */\n public createTimeline(vars?: gsap.TimelineVars): gsap.core.Timeline {\n getLogger('GsapPlugin').debug('Created GSAP timeline', vars);\n return gsap.timeline(vars);\n }\n\n /**\n * Fades in a container from transparent to opaque.\n *\n * Sets alpha to 0 and animates to 1.\n *\n * @param target - Container to animate\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.fadeIn(sprite, 1.0, {\n * ease: 'power2.out',\n * onComplete: () => console.log('Fade complete!')\n * });\n * ```\n */\n public fadeIn(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Fading in container over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n alpha: 1,\n duration,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Fade out a Container\n * @param target Container to animate\n * @param duration Animation duration in seconds\n * @param vars Additional animation variables\n * @returns Promise that resolves to GSAP Tween instance\n */\n public fadeOut(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Fading out container over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n alpha: 0,\n duration,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Scales in a container with a bounce effect.\n *\n * Starts from 0.5 scale and animates to original scale with back.out easing.\n *\n * @param target - Container to animate\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.scaleIn(button, 0.3, {\n * delay: 0.5,\n * onComplete: () => button.interactive = true\n * });\n * ```\n */\n public scaleIn(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n // Store original scale or use 1 as default\n const targetScale = {\n x: target.scale.x || 1,\n y: target.scale.y || 1,\n };\n\n // Start from a smaller scale\n target.scale.set(0.5, 0.5);\n\n getLogger('GsapPlugin').debug(\n `Scaling in container to (${targetScale.x}, ${targetScale.y}) over ${duration}s`,\n );\n\n // Animate to the target scale with a bounce effect\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target.scale, {\n x: targetScale.x,\n y: targetScale.y,\n duration,\n ease: 'back.out(1.7)',\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Scale out a Container\n * @param target Container to animate\n * @param duration Animation duration in seconds\n * @param vars Additional animation variables\n * @returns Promise that resolves to GSAP Tween instance\n */\n public scaleOut(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Scaling out container over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target.scale, {\n x: 0,\n y: 0,\n duration,\n ease: 'back.in(1.7)',\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Moves a container to a new position.\n *\n * Animates x and y properties with power2.out easing.\n *\n * @param target - Container to animate\n * @param x - Target x position\n * @param y - Target y position\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.moveTo(sprite, 400, 300, 1.0, {\n * ease: 'elastic.out',\n * onUpdate: () => console.log('Moving...')\n * });\n * ```\n */\n public moveTo(\n target: Container,\n x: number,\n y: number,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Moving container to (${x}, ${y}) over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n x,\n y,\n duration,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Animates any properties of an object.\n *\n * Generic animation method for custom property animations.\n *\n * @param target - Object to animate (Container, Sprite, or any object)\n * @param props - Properties to animate with target values\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.animate(sprite, {\n * rotation: Math.PI * 2,\n * alpha: 0.5,\n * scale: { x: 2, y: 2 }\n * }, 2.0, {\n * ease: 'bounce.out'\n * });\n * ```\n */\n public animate(\n target: gsap.TweenTarget,\n props: object,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Animating properties over ${vars?.duration || 0.5}s`, props);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n ...props,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Creates a staggered sequence of animations.\n *\n * Executes multiple animations with a time delay between each.\n *\n * @param animations - Array of functions that return GSAP Tweens\n * @param stagger - Time delay between each animation in seconds (default: 0.1)\n * @returns Promise that resolves to GSAP Timeline instance\n *\n * @example\n * ```typescript\n * const items = [item1, item2, item3, item4];\n *\n * gsapPlugin.timeline(\n * items.map(item => () => gsapPlugin.fadeIn(item, 0.3)),\n * 0.15 // 0.15s delay between each\n * );\n * ```\n */\n public timeline(\n animations: Array<() => gsap.core.Tween>,\n stagger: number = 0.1,\n ): Promise<gsap.core.Timeline> {\n return new Promise((resolve) => {\n const timeline = this.createTimeline({ onComplete: () => resolve(timeline) });\n\n animations.forEach((animFn, index) => {\n timeline.add(animFn(), index * stagger);\n });\n });\n }\n\n /**\n * Creates a delayed function call.\n *\n * Executes a callback after a specified delay.\n *\n * @param delay - Delay in seconds before executing the callback\n * @param callback - Function to execute after the delay\n * @param params - Optional parameters to pass to the callback\n * @returns GSAP Tween instance (can be used to kill the delayed call)\n *\n * @example\n * ```typescript\n * // Simple delayed call\n * gsapPlugin.delayedCall(2, () => console.log('2 seconds passed'));\n *\n * // With parameters\n * gsapPlugin.delayedCall(1.5, (msg) => console.log(msg), ['Hello!']);\n *\n * // Store reference to cancel later\n * const call = gsapPlugin.delayedCall(5, doSomething);\n * call.kill(); // Cancel the delayed call\n * ```\n */\n public delayedCall(\n delay: number,\n callback: gsap.Callback,\n params?: any[],\n ): gsap.core.Tween {\n getLogger('GsapPlugin').debug(`Creating delayed call for ${delay}s`);\n return gsap.delayedCall(delay, callback, params);\n }\n\n /**\n * Waits for a duration using GSAP delayedCall.\n * Respects engine pause/resume via GSAP ticker sleep/wake.\n *\n * @param duration - Delay in seconds\n * @returns Promise that resolves after the delay\n *\n * @example\n * ```typescript\n * await gsapPlugin.delay(0.5);\n * showPopup();\n * ```\n */\n public delay(duration: number): Promise<void> {\n return new Promise((resolve) => {\n this.delayedCall(duration, resolve);\n });\n }\n}\n","/**\n * Keyboard event constants.\n *\n * @public\n */\nexport const KEY_EVENTS = {\n /** Fired when a key is pressed down */\n KEY_DOWN: 'keyDown',\n /** Fired when a key is released */\n KEY_UP: 'keyUp',\n};\n\n/**\n * Mouse event constants (reserved for future implementation).\n *\n * @public\n */\nexport const MOUSE_EVENTS = {\n /** Fired when a mouse button is pressed */\n MOUSE_DOWN: 'mouseDown',\n /** Fired when a mouse button is released */\n MOUSE_UP: 'mouseUp',\n /** Fired while the mouse is moving */\n MOUSE_MOVE: 'mouseMove',\n};\n\n/**\n * Touch event constants (reserved for future implementation).\n *\n * @public\n */\nexport const TOUCH_EVENTS = {\n /** Fired when a touch begins */\n TOUCH_START: 'touchStart',\n /** Fired when a touch ends */\n TOUCH_END: 'touchEnd',\n /** Fired while a touch is moving */\n TOUCH_MOVE: 'touchMove',\n};\n\n/**\n * Combined input event constants.\n *\n * Includes all keyboard, mouse, and touch events.\n *\n * @public\n */\nexport const INPUT_EVENTS = {\n ...KEY_EVENTS,\n ...MOUSE_EVENTS,\n ...TOUCH_EVENTS,\n};\n\n/**\n * Keyboard key states.\n *\n * Represents the current state of a keyboard key.\n *\n * @public\n */\nexport enum KeyState {\n /** Key is not pressed */\n UP = 'up',\n /** Key is currently pressed */\n DOWN = 'down',\n /** Key was pressed in the current frame */\n PRESSED = 'pressed',\n /** Key was released in the current frame */\n RELEASED = 'released',\n}\n","import { getLogger } from '../../utils/Logger';\nimport { EventEmitter } from 'pixi.js';\nimport { InputPluginConfig } from './InputPlugin.types';\nimport { KEY_EVENTS, KeyState } from './InputPlugin.const';\nimport type { KeyEvent } from './KeyboardManager.types';\n\n/**\n * Keyboard input manager.\n *\n * KeyboardManager handles keyboard input with frame-perfect state tracking.\n * It distinguishes between keys that are held down and keys that were just\n * pressed or released in the current frame.\n *\n * ## Key State Tracking\n *\n * - **isDown()**: Check if key is currently pressed\n * - **isUp()**: Check if key is not pressed\n * - **isJustPressed()**: Check if key was pressed this frame\n * - **isJustReleased()**: Check if key was released this frame\n *\n * ## Event System\n *\n * Emits events for key presses and releases:\n * - `KEY_DOWN`: When a key is pressed\n * - `KEY_UP`: When a key is released\n *\n * @example\n * ```typescript\n * const keyboard = new KeyboardManager({\n * preventDefaultKeys: ['space', 'arrowup']\n * });\n *\n * // Event-based\n * keyboard.on(KEY_EVENTS.KEY_DOWN, (event) => {\n * console.log('Key pressed:', event.key);\n * });\n *\n * // Polling-based\n * if (keyboard.isDown('w')) {\n * player.moveUp();\n * }\n *\n * if (keyboard.isJustPressed('space')) {\n * player.jump();\n * }\n * ```\n *\n * @public\n */\nexport class KeyboardManager extends EventEmitter {\n private keys: Map<string, KeyState> = new Map();\n private justPressed: Set<string> = new Set();\n private justReleased: Set<string> = new Set();\n private config: InputPluginConfig;\n\n constructor(config: InputPluginConfig = {}) {\n super();\n this.config = config;\n getLogger('KeyboardManager').info('KeyboardManager initialized');\n this.setupListeners();\n }\n\n /**\n * Set up keyboard listeners\n */\n private setupListeners(): void {\n // When a key is pressed\n window.addEventListener('keydown', (event) => {\n const key = event.key.toLowerCase();\n\n // Prevent browser default behavior (e.g. switching to fullscreen when F11 is pressed)\n if (this.config.preventDefaultKeys && this.config.preventDefaultKeys.includes(key)) {\n event.preventDefault();\n }\n\n // Update key state\n const wasDown = this.keys.get(key) === KeyState.DOWN;\n\n // If the key is already down and this is not a repeat, do nothing\n if (wasDown && !event.repeat) return;\n\n // If the key is not down or it is the first repeat\n if (!wasDown) {\n this.justPressed.add(key);\n this.keys.set(key, KeyState.DOWN);\n\n getLogger('KeyboardManager').debug(`Key pressed: ${key}`);\n\n\n // Emit event (both normal keyDown and justPressed)\n const keyEvent: KeyEvent = {\n key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n repeat: event.repeat,\n original: event,\n };\n\n this.emit(KEY_EVENTS.KEY_DOWN, keyEvent);\n }\n });\n\n // When a key is released\n window.addEventListener('keyup', (event) => {\n const key = event.key.toLowerCase();\n\n // Prevent browser default behavior (as a precaution)\n if (this.config.preventDefaultKeys && this.config.preventDefaultKeys.includes(key)) {\n event.preventDefault();\n }\n\n // Mark that the key is released\n this.justReleased.add(key);\n this.keys.set(key, KeyState.UP);\n\n\n getLogger('KeyboardManager').debug(`Key released: ${key}`);\n\n\n // Emit event\n const keyEvent: KeyEvent = {\n key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n repeat: false, // There is no repeat in keyUp events\n original: event,\n };\n\n this.emit(KEY_EVENTS.KEY_UP, keyEvent);\n });\n }\n\n /**\n * Updates keyboard state.\n *\n * Called at the end of each frame to clear single-frame states\n * (justPressed and justReleased). This ensures these states only\n * last for one frame.\n *\n * @remarks\n * This method is called automatically by InputPlugin.onUpdate().\n */\n public update(): void {\n // Clear temporary (single-frame) states\n this.justPressed.clear();\n this.justReleased.clear();\n }\n\n /**\n * Checks if a key is currently pressed.\n *\n * Returns true as long as the key is held down.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key is pressed, false otherwise\n *\n * @example\n * ```typescript\n * if (keyboard.isDown('w')) {\n * player.moveForward();\n * }\n * ```\n */\n public isDown(key: string): boolean {\n return this.keys.get(key.toLowerCase()) === KeyState.DOWN;\n }\n\n /**\n * Checks if a key is not pressed.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key is not pressed, false if it is pressed\n *\n * @example\n * ```typescript\n * if (keyboard.isUp('space')) {\n * // Space is not being pressed\n * }\n * ```\n */\n public isUp(key: string): boolean {\n const state = this.keys.get(key.toLowerCase());\n return !state || state === KeyState.UP;\n }\n\n /**\n * Checks if a key was pressed in the current frame.\n *\n * Returns true only on the frame when the key was first pressed.\n * Useful for actions that should trigger once per press.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key was pressed this frame, false otherwise\n *\n * @example\n * ```typescript\n * if (keyboard.isJustPressed('space')) {\n * player.jump(); // Jump only once per press\n * }\n * ```\n */\n public isJustPressed(key: string): boolean {\n return this.justPressed.has(key.toLowerCase());\n }\n\n /**\n * Checks if a key was released in the current frame.\n *\n * Returns true only on the frame when the key was released.\n * Useful for detecting when a key is let go.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key was released this frame, false otherwise\n *\n * @example\n * ```typescript\n * if (keyboard.isJustReleased('space')) {\n * player.stopCharging(); // Stop charging when space is released\n * }\n * ```\n */\n public isJustReleased(key: string): boolean {\n return this.justReleased.has(key.toLowerCase());\n }\n\n /**\n * Cleans up the keyboard manager.\n *\n * Clears all key states and removes event listeners.\n * Called automatically when the plugin is destroyed.\n */\n public cleanup(): void {\n this.keys.clear();\n this.justPressed.clear();\n this.justReleased.clear();\n this.removeAllListeners();\n getLogger('KeyboardManager').info('KeyboardManager cleaned up');\n }\n}\n","import { EventEmitter } from 'pixi.js';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { KeyboardManager } from './KeyboardManager';\nimport { INPUT_EVENTS, KEY_EVENTS, MOUSE_EVENTS, TOUCH_EVENTS } from './InputPlugin.const';\nimport { getLogger } from '../../utils/Logger';\nimport type { InputPluginConfig } from './InputPlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport type { KeyEvent } from './KeyboardManager.types';\n\nexport { INPUT_EVENTS, KEY_EVENTS, MOUSE_EVENTS, TOUCH_EVENTS };\n\n/**\n * Input management plugin for PixiJS games.\n *\n * InputPlugin provides a unified interface for handling keyboard, mouse, and touch input.\n * It uses a modular architecture with separate managers for each input type.\n *\n * ## Features\n *\n * - **Keyboard Input**: Full keyboard support with key state tracking\n * - **Event System**: EventEmitter-based for easy event handling\n * - **Frame-Perfect Input**: Distinguishes between held and just-pressed keys\n * - **Browser Default Prevention**: Prevent unwanted browser actions\n * - **Modular Design**: Extensible for mouse, touch, and gamepad support\n *\n * ## Current Implementation\n *\n * Currently supports:\n * - ✅ Keyboard input via KeyboardManager\n *\n * Planned for future:\n * - 🔜 Mouse input\n * - 🔜 Touch input\n * - 🔜 Gamepad input\n *\n * ## Usage Patterns\n *\n * ### Event-Based Input\n * Listen to input events using the EventEmitter API:\n *\n * ```typescript\n * inputPlugin.on(INPUT_EVENTS.KEY_DOWN, (event: KeyEvent) => {\n * console.log('Key pressed:', event.key);\n * });\n * ```\n *\n * ### Polling-Based Input\n * Check key states directly in your game loop:\n *\n * ```typescript\n * if (inputPlugin.keyboard.isDown('space')) {\n * player.jump();\n * }\n * ```\n *\n * @example\n * ```typescript\n * const inputPlugin = new InputPlugin({\n * preventDefaultKeys: ['space', 'arrowup', 'arrowdown'],\n * debug: true\n * });\n *\n * engine.registerPlugin(inputPlugin);\n * await engine.initialize();\n *\n * // Event-based input\n * inputPlugin.on(INPUT_EVENTS.KEY_DOWN, (event) => {\n * if (event.key === 'enter') {\n * console.log('Enter pressed!');\n * }\n * });\n *\n * // Polling in game loop\n * function update() {\n * if (inputPlugin.keyboard.isDown('w')) {\n * player.moveUp();\n * }\n * if (inputPlugin.keyboard.isJustPressed('space')) {\n * player.shoot();\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Combo detection\n * inputPlugin.on(INPUT_EVENTS.KEY_DOWN, (event) => {\n * if (event.ctrlKey && event.key === 's') {\n * event.original.preventDefault();\n * saveGame();\n * }\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class InputPlugin extends EventEmitter implements EnginePlugin {\n public name: string = 'inputPlugin';\n public priority: number = 150; // Should run after GSAP and before other plugins\n\n /**\n * No dependencies - this is a core input plugin\n */\n public dependencies: string[] = [];\n\n // Input managers\n public keyboard: KeyboardManager;\n\n // Managers to be added in the future:\n // public mouse: MouseManager;\n // public touch: TouchManager;\n // public gamepad: GamepadManager;\n\n private _engine!: PixiEngine;\n private config: InputPluginConfig;\n private isInitialized = false;\n\n // Default configuration values\n private readonly defaultConfig: InputPluginConfig = {\n priority: 150,\n enabled: true,\n repeatRate: 0.2, // 5 repeats per second (200ms)\n preventDefaultKeys: ['f11', 'space', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright'],\n };\n\n constructor(config: InputPluginConfig = {}) {\n super();\n\n // Merge configuration with default values\n this.config = { ...this.defaultConfig, ...config };\n\n // Use the customized priority value\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use the customized name value\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n\n // Show more detailed logs if debug mode is active\n getLogger('InputPlugin').info('InputPlugin created with config:', this.config);\n\n\n // Create the keyboard manager\n this.keyboard = new KeyboardManager(this.config);\n\n // Listen to and forward events coming from KeyboardManager\n this.setupKeyboardEvents();\n }\n\n /**\n * Listen to and forward keyboard events\n */\n private setupKeyboardEvents(): void {\n // Listen to all keyboard events and forward them through this InputPlugin\n this.keyboard.on(KEY_EVENTS.KEY_DOWN, (event: KeyEvent) => {\n this.emit(INPUT_EVENTS.KEY_DOWN, event);\n });\n\n this.keyboard.on(KEY_EVENTS.KEY_UP, (event: KeyEvent) => {\n this.emit(INPUT_EVENTS.KEY_UP, event);\n });\n }\n\n /**\n * Initialize the plugin\n * @param engine PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n // Store the engine reference (may be needed later for mouse operations, etc.)\n this._engine = engine;\n\n this.isInitialized = true;\n\n getLogger('InputPlugin').info('InputPlugin initialized with engine instance and config:', this.config);\n\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n getLogger('InputPlugin').debug('InputPlugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Provides access to the engine instance\n */\n public get engine(): PixiEngine {\n return this._engine;\n }\n\n /**\n * Called on every frame update\n * @param _deltaTime Frame duration in ms (currently not used)\n * @returns Should propagation stop? (false = continue)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // Do not update if the plugin is disabled\n if (this.config.enabled === false) {\n return false;\n }\n\n // Update the keyboard manager\n this.keyboard.update();\n\n // The Input plugin only updates input states,\n // and returns false to allow other plugins to continue processing\n return false;\n }\n\n /**\n * Called when the plugin is cleaned up\n */\n public cleanup(): void {\n // Clean up the keyboard manager\n this.keyboard.cleanup();\n\n // Clean up Input plugin event listeners\n this.removeAllListeners();\n\n this.isInitialized = false;\n\n getLogger('InputPlugin').info('InputPlugin cleaned up');\n }\n\n [key: symbol]: any;\n}\n\n// Re-export types for documentation\nexport type { InputPluginConfig } from './InputPlugin.types';\n","import i18next from 'i18next';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { resolvePublicPath } from '../helpers/resolvePublicPath';\nimport { getLogger } from '../utils/Logger';\n\nconst DEFAULT_LANGUAGE = 'en';\n\nlet initPromise: Promise<void> | null = null;\nconst languageChangedListeners = new Set<(lng: string) => void>();\n\nfunction normalizeLanguageCode(lng: string | null | undefined): string {\n if (!lng) return DEFAULT_LANGUAGE;\n return lng.trim().toLowerCase().split('-')[0] || DEFAULT_LANGUAGE;\n}\n\n/** Reads `?lng=TR` (case-insensitive) and returns ISO code e.g. `tr`. */\nexport function resolveLanguageFromUrl(search = window.location.search): string {\n const raw = new URLSearchParams(search).get('lng');\n return normalizeLanguageCode(raw);\n}\n\nfunction createInterpolationFormat() {\n return (value: unknown, format: string | undefined): unknown => {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n if (format === 'optional' && (value === null || value === undefined || value === '')) {\n return '';\n }\n\n switch (format) {\n case 'percentage':\n if (typeof value === 'number' && Number.isNaN(value)) return value;\n return `${Number(value)}%`;\n case 'uppercase':\n return (value || '').toString().toLocaleUpperCase();\n case 'lowercase':\n return (value || '').toString().toLocaleLowerCase();\n case 'firstchar':\n return (value || '')\n .toString()\n .split(/([.?!]+\\s*|\\n+)/g)\n .map((part: string) => {\n if (/^[.?!]+/.test(part) || /^\\s*$/.test(part)) {\n return part;\n }\n return part\n .toLocaleLowerCase()\n .replace(\n /^(\\s*)(\\S)/,\n (_, spaces, firstChar) => spaces + firstChar.toLocaleUpperCase(),\n );\n })\n .join('');\n case 'camel':\n return (value || '')\n .toString()\n .split(' ')\n .map((word: string) => {\n return word.charAt(0).toLocaleUpperCase() + (word || '').slice(1).toLocaleLowerCase();\n })\n .join(' ');\n default:\n return value;\n }\n };\n}\n\n/** One-time i18next init shared by Svelte shell and I18NextPlugin. */\nexport async function initSlotI18n(): Promise<void> {\n if (i18next.isInitialized) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n const requestedLng = resolveLanguageFromUrl();\n\n await i18next\n .use(Backend)\n .use(LanguageDetector)\n .use({\n type: 'postProcessor',\n name: 'trimProcessor',\n process(value: unknown) {\n if (typeof value === 'string') {\n return value.trim();\n }\n return value;\n },\n })\n .init({\n lng: requestedLng,\n preload: [DEFAULT_LANGUAGE],\n fallbackLng: [DEFAULT_LANGUAGE],\n load: 'currentOnly',\n debug: false,\n detection: {\n order: ['querystring', 'localStorage', 'cookie', 'navigator'],\n lookupQuerystring: 'lng',\n caches: ['localStorage', 'cookie'],\n },\n backend: {\n loadPath: resolvePublicPath('locales/{{lng}}.json'),\n queryStringParams: { v: '1.0.0' },\n },\n interpolation: {\n escapeValue: false,\n format: createInterpolationFormat(),\n },\n postProcess: ['trimProcessor'],\n });\n\n i18next.on('languageChanged', (lng) => {\n const normalized = normalizeLanguageCode(lng);\n for (const listener of languageChangedListeners) {\n listener(normalized);\n }\n });\n\n getLogger('SharedI18n').info('i18n initialized', { language: getCurrentLanguage() });\n })();\n\n try {\n await initPromise;\n } catch (error) {\n initPromise = null;\n getLogger('SharedI18n').error('Failed to initialize i18n', error);\n throw error;\n }\n}\n\nexport function t(key: string, options?: Record<string, unknown>): string {\n return i18next.t(key, options) as string;\n}\n\nexport async function changeLanguage(lng: string): Promise<void> {\n const normalized = normalizeLanguageCode(lng);\n await i18next.changeLanguage(normalized);\n}\n\nexport function getCurrentLanguage(): string {\n return normalizeLanguageCode(i18next.language);\n}\n\nexport function isI18nReady(): boolean {\n return i18next.isInitialized;\n}\n\nexport function onLanguageChanged(listener: (lng: string) => void): () => void {\n languageChangedListeners.add(listener);\n return () => {\n languageChangedListeners.delete(listener);\n };\n}\n\nexport function getI18nInstance() {\n return i18next;\n}\n","import {\n changeLanguage,\n getCurrentLanguage,\n getI18nInstance,\n initSlotI18n,\n isI18nReady,\n t,\n} from '../../i18n/sharedI18n';\nimport { getLogger } from '../../utils/Logger';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { I18NextPluginConfig } from './I18NextPlugin.types';\n\n/**\n * Internationalization (i18n) plugin using i18next.\n *\n * Uses the shared singleton from `@rb-games/core/i18n` so Svelte shell and\n * Pixi engine share the same translations and language state.\n *\n * @category Plugins\n * @public\n */\nexport class I18NextPlugin implements EnginePlugin {\n public name: string = 'i18nextPlugin';\n public priority: number = 900;\n public dependencies: string[] = [];\n private _engine: PixiEngine | null = null;\n private config: I18NextPluginConfig;\n\n constructor(config: I18NextPluginConfig = {}) {\n this.config = {\n priority: 900,\n enabled: true,\n };\n\n Object.assign(this.config, config);\n\n this.dependencies = config.dependencies || [];\n\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n this._engine = engine;\n\n getLogger('I18NextPlugin').info('I18NextPlugin initializing - loading language files...');\n console.log(this);\n\n try {\n await initSlotI18n();\n getLogger('I18NextPlugin').info('I18NextPlugin initialized successfully - language files loaded');\n } catch (error) {\n getLogger('I18NextPlugin').error('Failed to initialize I18NextPlugin:', error);\n throw error;\n }\n }\n\n public t(key: string, options?: Record<string, unknown>): string {\n return t(key, options);\n }\n\n public async changeLanguage(lng: string): Promise<void> {\n try {\n await changeLanguage(lng);\n getLogger('I18NextPlugin').info(`Language changed to: ${lng}`);\n } catch (error) {\n getLogger('I18NextPlugin').error(`Failed to change language to ${lng}:`, error);\n throw error;\n }\n }\n\n public getCurrentLanguage(): string {\n return getCurrentLanguage();\n }\n\n public isReady(): boolean {\n return isI18nReady();\n }\n\n public get i18n() {\n return getI18nInstance();\n }\n\n public cleanup(): void {\n getLogger('I18NextPlugin').info('I18NextPlugin cleaned up');\n }\n\n [key: symbol]: any;\n}\n\nexport type { I18NextPluginConfig } from './I18NextPlugin.types';\n","import { Container } from 'pixi.js';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { getLogger } from '../../utils/Logger';\nimport type { ScenePluginConfig } from './ScenePlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\nimport { Scene } from './Scene';\n\n/**\n * Scene management plugin for PixiJS games.\n *\n * ScenePlugin provides a structured way to manage different game screens\n * (menus, gameplay, loading screens, etc.) with smooth transitions and\n * lifecycle management.\n *\n * ## Features\n *\n * - **Scene Registration**: Register multiple scenes\n * - **Smooth Transitions**: Async scene switching with animations\n * - **Lifecycle Management**: Automatic enter/exit/update calls\n * - **Transition Safety**: Prevents overlapping transitions\n * - **Default Scene**: Auto-load initial scene\n * - **Custom Root**: Use custom container for scenes\n *\n * ## Usage Pattern\n *\n * 1. Create scenes extending Scene base class\n * 2. Register scenes with ScenePlugin\n * 3. Switch between scenes using switchScene()\n * 4. Plugin handles lifecycle automatically\n *\n * ## Scene Lifecycle\n *\n * When switching from SceneA to SceneB:\n * 1. SceneA.onExit() - Exit animation\n * 2. SceneA.cleanup() - Resource cleanup\n * 3. SceneA removed from stage\n * 4. SceneB added to stage\n * 5. SceneB.onInitialize() - First time only\n * 6. SceneB.onEnter() - Entry animation\n * 7. SceneB.update() - Called every frame\n *\n * @example\n * ```typescript\n * // Create scenes\n * const mainMenu = new MainMenuScene();\n * const gameplay = new GameplayScene();\n *\n * // Create and configure plugin\n * const scenePlugin = new ScenePlugin({\n * defaultScene: 'MainMenu'\n * });\n *\n * // Register scenes\n * scenePlugin.registerScene('MainMenu', mainMenu);\n * scenePlugin.registerScene('Gameplay', gameplay);\n *\n * // Register plugin\n * engine.registerPlugin(scenePlugin);\n * await engine.initialize();\n *\n * // Switch scenes\n * await scenePlugin.switchScene('Gameplay');\n * ```\n *\n * @example\n * ```typescript\n * // Scene with transitions\n * class MenuScene extends Scene {\n * protected async onEnter(): Promise<void> {\n * this.alpha = 0;\n * await gsap.to(this, { alpha: 1, duration: 0.5 });\n * }\n *\n * protected async onExit(): Promise<void> {\n * await gsap.to(this, { alpha: 0, duration: 0.3 });\n * }\n * }\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class ScenePlugin implements EnginePlugin {\n public name: string = 'scenePlugin';\n public priority: number = 90;\n public dependencies: string[] = []; // No hard dependencies for now\n\n private engine: PixiEngine | null = null;\n private currentScene: Scene | null = null;\n private scenes: Map<string, Scene>;\n private isTransitioning = false;\n private config: ScenePluginConfig;\n private root: Container | null = null; // Initially defined as null\n\n constructor(config: ScenePluginConfig = {}) {\n this.scenes = new Map();\n\n // Default configuration values\n this.config = {\n priority: 90,\n enabled: true,\n };\n\n Object.assign(this.config, config);\n\n this.dependencies = config.dependencies || [];\n\n // Use customized priority value if provided\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use customized name value if provided\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n\n // If debug mode is active, log more detailed information\n getLogger('ScenePlugin').info('ScenePlugin created with config:', this.config);\n\n }\n\n /**\n * Initialize the scene plugin\n */\n public async initialize(engine: PixiEngine): Promise<void> {\n // Store engine reference\n this.engine = engine;\n\n // Get root container from config or use engine.pixiApp.stage\n this.root = this.config.root || engine.pixiApp.stage;\n\n // Assign engine reference to all registered scenes\n this.scenes.forEach((scene, name) => {\n scene.setEngine(engine);\n getLogger('ScenePlugin').debug(`Updated engine reference for scene: ${name}`);\n\n });\n\n getLogger('ScenePlugin').info('ScenePlugin initialized');\n\n }\n\n /**\n * Called when plugin is ready and can safely use other plugins\n */\n public async onReady(engine: PixiEngine): Promise<void> {\n // If defaultScene is specified in the config, switch to that scene\n // At this point, all dependencies are guaranteed to be ready\n if (this.config.defaultScene && this.scenes.has(this.config.defaultScene)) {\n await this.switchScene(this.config.defaultScene);\n }\n\n getLogger('ScenePlugin').info('ScenePlugin is ready');\n }\n\n /**\n * Registers a scene with the plugin.\n *\n * Scenes must be registered before they can be switched to.\n * If the engine is already initialized, the scene will receive\n * the engine reference immediately.\n *\n * @param name - Unique name for the scene\n * @param scene - Scene instance to register\n *\n * @example\n * ```typescript\n * const mainMenu = new MainMenuScene();\n * scenePlugin.registerScene('MainMenu', mainMenu);\n * ```\n */\n public registerScene(name: string, scene: Scene): void {\n if (this.scenes.has(name)) {\n getLogger('ScenePlugin').warn(`Scene with name ${name} already registered`);\n return;\n }\n\n // If engine reference is already set, assign it to the scene immediately\n // Otherwise, it will be assigned when initialize() is called\n if (this.engine) {\n scene.setEngine(this.engine);\n getLogger('ScenePlugin').debug(`Engine reference set for scene: ${name}`);\n\n }\n\n // Register the scene\n this.scenes.set(name, scene);\n getLogger('ScenePlugin').info(`Registered scene: ${name}`);\n }\n\n /**\n * Switches to a different scene.\n *\n * Handles the complete transition:\n * - Exits current scene (with animation)\n * - Removes current scene from stage\n * - Adds new scene to stage\n * - Enters new scene (with animation)\n *\n * Prevents overlapping transitions.\n *\n * @param name - Name of the scene to switch to\n * @param params - Optional parameters to pass to the scene's onEnter() method\n * @throws Error if scene is not registered\n *\n * @example\n * ```typescript\n * await scenePlugin.switchScene('Gameplay');\n * // With parameters\n * await scenePlugin.switchScene('Gameplay', { level: 5, mode: 'bonus' });\n * ```\n */\n public async switchScene(name: string, params?: unknown): Promise<void> {\n // If the plugin is disabled, do nothing\n if (this.config.enabled === false) {\n getLogger('ScenePlugin').warn('ScenePlugin is disabled, ignoring scene switch request');\n return;\n }\n\n if (this.isTransitioning) {\n getLogger('ScenePlugin').warn('Scene transition already in progress, ignoring request');\n return;\n }\n\n if (!this.scenes.has(name)) {\n const error = `Scene ${name} not found`;\n getLogger('ScenePlugin').error(error);\n throw new Error(error);\n }\n\n const nextScene = this.scenes.get(name)!;\n\n // If we're already on this scene, do nothing\n if (this.currentScene === nextScene) {\n return;\n }\n\n this.isTransitioning = true;\n getLogger('ScenePlugin').info(`Switching to scene: ${name}`);\n\n try {\n // Exit the current scene if it exists\n if (this.currentScene) {\n await this.currentScene.exit();\n this.root?.removeChild(this.currentScene);\n }\n\n // Set and enter the new scene\n this.currentScene = nextScene;\n this.root?.addChild(this.currentScene);\n await this.currentScene.enter(params);\n\n\n getLogger('ScenePlugin').debug(`Scene switch to ${name} completed successfully`);\n\n } catch (error) {\n getLogger('ScenePlugin').error('Error during scene transition:', error);\n } finally {\n this.isTransitioning = false;\n }\n }\n\n /**\n * Gets the currently active scene.\n *\n * @returns Current scene instance or null if no scene is active\n *\n * @example\n * ```typescript\n * const current = scenePlugin.getCurrentScene();\n * if (current?.sceneName === 'Gameplay') {\n * // Do something\n * }\n * ```\n */\n public getCurrentScene(): Scene | null {\n return this.currentScene;\n }\n\n /**\n * Updates the current scene\n * @param deltaTime The time elapsed since the last update\n */\n public onUpdate(deltaTime: number): boolean {\n // If the plugin is disabled, do nothing\n if (this.config.enabled === false) {\n return false;\n }\n\n if (this.currentScene && !this.isTransitioning) {\n this.currentScene.update(deltaTime);\n }\n return false;\n }\n\n [ENGINE_HOOKS.onResize](width: number, height: number): boolean {\n if (this.currentScene) {\n this.currentScene.onResize(width, height);\n }\n\n return false;\n }\n\n [key: symbol]: any;\n\n public cleanup(): void {\n // Ensure current scene is exited properly\n if (this.currentScene) {\n this.currentScene.exit();\n this.root?.removeChild(this.currentScene);\n this.currentScene = null;\n }\n\n // Clear scenes map\n this.scenes.clear();\n getLogger('ScenePlugin').info('Scene plugin cleaned up');\n }\n}\n\n// Re-export types for documentation\nexport type { ScenePluginConfig } from './ScenePlugin.types';\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Container } from 'pixi.js';\nimport { PixiEngine } from '../../engine';\n\n/**\n * Abstract base class for all game scenes.\n *\n * Scene provides a structured lifecycle for game screens (menus, gameplay, etc.).\n * Extends PixiJS Container, so all display objects can be added as children.\n *\n * ## Lifecycle Methods\n *\n * 1. **onInitialize()** - Called once when scene is first entered\n * 2. **onEnter()** - Called every time scene becomes active (async, for animations)\n * 3. **update()** - Called every frame while scene is active\n * 4. **onResize()** - Called when window is resized\n * 5. **onExit()** - Called when leaving scene (async, for exit animations)\n * 6. **cleanup()** - Called after exit for resource cleanup\n *\n * ## Usage Pattern\n *\n * 1. Create a class extending Scene\n * 2. Override lifecycle methods as needed\n * 3. Register scene with ScenePlugin\n * 4. Switch to scene using ScenePlugin.switchScene()\n *\n * @example\n * ```typescript\n * class MainMenuScene extends Scene {\n * private logo: Sprite;\n *\n * constructor() {\n * super('MainMenu');\n * }\n *\n * protected onInitialize(): void {\n * // Create UI elements\n * this.logo = new Sprite(texture);\n * this.addChild(this.logo);\n * }\n *\n * protected async onEnter(): Promise<void> {\n * // Fade in animation\n * await gsap.to(this, { alpha: 1, duration: 0.5 });\n * }\n *\n * public update(deltaTime: number): void {\n * // Update logic\n * this.logo.rotation += deltaTime * 0.001;\n * }\n *\n * protected async onExit(): Promise<void> {\n * // Fade out animation\n * await gsap.to(this, { alpha: 0, duration: 0.3 });\n * }\n *\n * protected cleanup(): void {\n * // Clean up resources\n * this.logo.destroy();\n * }\n * }\n * ```\n *\n * @public\n */\nexport abstract class Scene extends Container {\n protected engine!: PixiEngine;\n\n constructor(public sceneName: string) {\n super();\n this.label = sceneName;\n this.sortableChildren = true;\n }\n\n /**\n * Sets the engine reference.\n *\n * Called automatically by ScenePlugin when scene is registered.\n *\n * @param engine - PixiEngine instance\n * @internal\n */\n public setEngine(engine: PixiEngine): void {\n this.engine = engine;\n }\n\n /**\n * Enters the scene.\n *\n * Calls onInitialize() and onEnter() in sequence.\n * Called automatically by ScenePlugin when switching to this scene.\n *\n * @param params - Optional parameters passed from switchScene()\n * @internal\n */\n public async enter(params?: unknown): Promise<void> {\n await this.onInitialize();\n await this.onEnter(params);\n }\n\n /**\n * Exits the scene.\n *\n * Calls onExit() and cleanup() in sequence.\n * Called automatically by ScenePlugin when switching away from this scene.\n *\n * @internal\n */\n public async exit(): Promise<void> {\n await this.onExit();\n this.cleanup();\n }\n\n /**\n * Initializes the scene.\n *\n * Called once when the scene is first entered.\n * Override to create UI elements and set up initial state.\n *\n * @example\n * ```typescript\n * protected onInitialize(): void {\n * this.background = new Sprite(bgTexture);\n * this.addChild(this.background);\n * }\n * ```\n */\n protected async onInitialize(): Promise<void> {\n // Default empty implementation, override if needed\n }\n\n /**\n * Called when the scene becomes active.\n *\n * Override to implement entry animations.\n * This method is async, so you can await animations.\n *\n * @param _params - Optional parameters passed from switchScene()\n *\n * @example\n * ```typescript\n * protected async onEnter(params?: { level: number }): Promise<void> {\n * this.alpha = 0;\n * if (params) {\n * this.level = params.level;\n * }\n * await gsap.to(this, { alpha: 1, duration: 0.5 });\n * }\n * ```\n */\n protected async onEnter(_params?: unknown): Promise<void> {\n // Default implementation - can be overridden for entry animations\n return Promise.resolve();\n }\n\n /**\n * Called when leaving the scene.\n *\n * Override to implement exit animations.\n * This method is async, so you can await animations.\n *\n * @example\n * ```typescript\n * protected async onExit(): Promise<void> {\n * await gsap.to(this, { alpha: 0, duration: 0.3 });\n * }\n * ```\n */\n protected async onExit(): Promise<void> {\n // Default implementation - can be overridden for exit animations\n return Promise.resolve();\n }\n\n /**\n * Cleans up scene resources.\n *\n * Called after onExit() when the scene is removed.\n * Override to destroy textures, remove event listeners, etc.\n *\n * @example\n * ```typescript\n * protected cleanup(): void {\n * this.background.destroy();\n * this.removeAllListeners();\n * }\n * ```\n */\n protected cleanup(): void {\n // Default empty implementation, override if needed\n }\n\n /**\n * Updates the scene every frame.\n *\n * Override to implement per-frame logic like animations,\n * physics, or input handling.\n *\n * @param _deltaTime - Time elapsed since last frame in milliseconds\n *\n * @example\n * ```typescript\n * public update(deltaTime: number): void {\n * this.player.x += this.velocity * deltaTime;\n * this.checkCollisions();\n * }\n * ```\n */\n public update(_deltaTime: number): void {\n // This is intentionally empty as default implementation\n // Child classes should override this to implement frame updates\n // using the deltaTime parameter for smooth animations\n }\n\n /**\n * Called when the window is resized.\n *\n * Override to reposition or scale UI elements.\n *\n * @param _width - New window width\n * @param _height - New window height\n *\n * @example\n * ```typescript\n * public onResize(width: number, height: number): void {\n * this.background.width = width;\n * this.background.height = height;\n * this.centerLogo(width, height);\n * }\n * ```\n */\n public onResize(_width: number, _height: number): void {\n // This is intentionally empty as default implementation\n // Child classes should override this to handle resize events\n }\n\n /**\n * Get the stage (root container) by traversing up the parent chain.\n * Useful for attaching global event listeners.\n * \n * @returns The stage container or null if not attached to stage\n */\n public getStage(): Container | null {\n let current: Container | null = this as Container;\n\n while (current && current.parent) {\n current = current.parent;\n }\n\n return current;\n }\n}\n","import { PixiEngine } from '../../engine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport * as Sentry from '@sentry/browser';\nimport { SentryPluginConfig } from './SentryPlugin.types';\nimport { VERSION } from 'pixi.js'; // Import PixiJS VERSION constant\n\n/**\n * Error tracking and monitoring plugin using Sentry.\n *\n * @category Plugins\n * @public\n */\nexport class SentryPlugin implements EnginePlugin {\n public name: string = 'sentryPlugin';\n public priority: number = -1; // Highest priority - this plugin will run first\n\n /**\n * No dependencies - this should be the first plugin to initialize\n */\n public dependencies: string[] = [];\n\n private _engine: PixiEngine | null = null;\n private config: SentryPluginConfig;\n private isInitialized = false;\n\n constructor(config: SentryPluginConfig) {\n // Default configuration\n this.config = {\n priority: -1,\n enabled: true,\n dsn: '',\n };\n\n // Merge incoming configuration\n Object.assign(this.config, config);\n\n // Use customized priority value if provided\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use customized name value if provided\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n }\n\n /**\n * Initialize Sentry plugin\n * @param engine PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n this._engine = engine;\n\n try {\n Sentry.init({\n dsn: this.config.dsn,\n // Setting this option to true will send default PII data to Sentry.\n // For example, automatic IP address collection on events\n sendDefaultPii: true,\n integrations: [\n // send console.log, console.error, and console.warn calls as logs to Sentry\n Sentry.consoleLoggingIntegration({ levels: ['log', 'error', 'warn'] }),\n Sentry.browserTracingIntegration(),\n Sentry.replayIntegration(),\n Sentry.replayCanvasIntegration(),\n ],\n _experiments: {\n enableLogs: true,\n },\n environment: process.env.NODE_ENV || 'development',\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: ['localhost'],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n beforeSend(event) {\n // Filter out events if needed\n return event;\n },\n });\n\n this.isInitialized = true;\n getLogger('SentryPlugin').info('SentryPlugin initialized with engine:', this._engine.pixiApp);\n\n } catch (error) {\n getLogger('SentryPlugin').error('Failed to initialize SentryPlugin:', error);\n throw error;\n }\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n // Set user context if available\n Sentry.setUser({\n id: 'anonymous',\n // Add more user data if available\n });\n\n // Set game context\n Sentry.setTag('game', 'slot-game');\n Sentry.setContext('engine', {\n pixiVersion: VERSION, // Use PixiJS VERSION constant\n canvasSize: {\n width: engine.pixiApp.canvas.width,\n height: engine.pixiApp.canvas.height,\n },\n renderer: {\n type: engine.pixiApp.renderer.type,\n resolution: engine.pixiApp.renderer.resolution,\n },\n });\n\n getLogger('SentryPlugin').debug('SentryPlugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Report an error to Sentry\n * @param error Error to report\n * @param extra Additional context\n */\n public captureError(error: Error, extra?: Record<string, any>): void {\n if (!this.isInitialized) {\n getLogger('SentryPlugin').warn('Sentry not initialized, cannot capture error:', error);\n return;\n }\n\n Sentry.withScope((scope) => {\n if (extra) {\n scope.setContext('additional', extra);\n }\n Sentry.captureException(error);\n });\n }\n\n /**\n * Report a message to Sentry\n * @param message Message to report\n * @param level Message level\n * @param extra Additional context\n */\n public captureMessage(\n message: string,\n level: Sentry.SeverityLevel = 'info',\n extra?: Record<string, any>,\n ): void {\n if (!this.isInitialized) {\n getLogger('SentryPlugin').warn('Sentry not initialized, cannot capture message:', message);\n return;\n }\n\n Sentry.withScope((scope) => {\n if (extra) {\n scope.setContext('additional', extra);\n }\n Sentry.captureMessage(message, level);\n });\n }\n\n /**\n * Add breadcrumb to Sentry\n * @param message Breadcrumb message\n * @param category Category\n * @param level Level\n */\n public addBreadcrumb(\n message: string,\n category: string = 'custom',\n level: Sentry.SeverityLevel = 'info',\n ): void {\n if (!this.isInitialized) {\n return;\n }\n\n Sentry.addBreadcrumb({\n message,\n category,\n level,\n timestamp: Date.now() / 1000,\n });\n }\n\n /**\n * Plugin update process\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // Nothing to update\n return false;\n }\n\n /**\n * Cleanup the plugin\n */\n public cleanup(): void {\n // No need to explicitly shut down Sentry; just clear references\n this._engine = null;\n this.isInitialized = false;\n getLogger('SentryPlugin').info('SentryPlugin cleaned up');\n }\n\n [key: symbol]: any;\n}\n\n// Re-export types for documentation\nexport type { SentryPluginConfig } from './SentryPlugin.types';\n","/**\n * Backend API Type Definitions\n * Based on Swagger API at /api-json\n * @module ServicePlugin/Types\n */\n\n// ============================================================================\n// Session Types\n// ============================================================================\n\n/**\n * Session state enum\n */\nexport type SessionState = 'ready' | 'processing' | 'finished';\n\n/**\n * Symbol type enum\n */\nexport type SymbolType = 'regular' | 'wild' | 'scatter' | 'bonus' | 'cluster';\n\n/**\n * Win model type\n */\nexport type WinModel = 'cluster' | 'line' | 'ways';\n\n/**\n * Game state type\n */\nexport type GameStateType = 'basic' | 'bonus';\n\n// ============================================================================\n// Game Configuration (from GET /session)\n// ============================================================================\n\n/**\n * Symbol definition\n */\nexport interface SymbolDefinition {\n id: number;\n name: string;\n type: SymbolType;\n}\n\n/**\n * Board configuration\n */\nexport interface BoardConfig {\n reels: number;\n rows: number;\n}\n\n/**\n * Payout entry for a specific count\n */\nexport interface PayoutEntry {\n count: number;\n value: number;\n andMore?: boolean;\n}\n\n/**\n * Symbol payout configuration\n */\nexport interface SymbolPayout {\n symbolId: number;\n payouts: PayoutEntry[];\n}\n\n/**\n * Cluster paytable configuration\n */\nexport interface ClusterPaytable {\n minCount: number;\n decimalBase: number;\n payouts: SymbolPayout[];\n}\n\n/**\n * Paytable configuration\n */\nexport interface PaytableConfig {\n cluster?: ClusterPaytable;\n}\n\n/**\n * Free spins award entry\n */\nexport interface FreeSpinsAward {\n count: number;\n spins: number;\n andMore?: boolean;\n}\n\n/**\n * Free spins configuration\n */\nexport interface FreeSpinsConfig {\n awards: FreeSpinsAward[];\n}\n\n/**\n * buy bonus configuration\n */\nexport interface GameActions {\n type: string;\n totalBetMultiplier: number;\n count?: number;\n}\n\n/**\n * Complete game configuration from backend\n */\nexport interface GameConfig {\n winModel: WinModel;\n spinCost: number;\n betMultipliers: BetMultiplierDefinition[];\n board: BoardConfig;\n symbols: SymbolDefinition[];\n reels: number[][];\n paytable: PaytableConfig;\n freeSpins: FreeSpinsConfig;\n actions: GameActions[];\n}\n\n// ============================================================================\n// Session Response (GET /session)\n// ============================================================================\n\n/**\n * Basic game state\n */\nexport interface BasicGameState {\n state: 'basic';\n totalWin?: number;\n}\n\n/**\n * Bonus game state (active freespin round)\n */\nexport interface BonusGameState {\n state: 'bonus';\n bonusOrigin: 'spin' | 'buy-bonus' | 'buy-super-bonus';\n remainingFreespins: number;\n usedFreespins: number;\n totalFreespins: number;\n bet: number;\n totalWin: number;\n}\n\n/**\n * Bonus ended game state (carries summary until next spin)\n */\nexport interface BonusEndedGameState {\n state: 'bonus_ended';\n bonusOrigin: 'spin' | 'buy-bonus' | 'buy-super-bonus';\n usedFreespins: number;\n totalFreespins: number;\n bet: number;\n totalWin: number;\n}\n\n/**\n * Game state union type\n */\nexport type GameState = BasicGameState | BonusGameState | BonusEndedGameState;\n\n/**\n * Session response from GET /session\n */\nexport interface SessionResponse {\n sessionId: string;\n state: SessionState;\n nonce: number;\n serverSeedCommit: string;\n gameState: GameState;\n currentRoundId?: string | null;\n gameConfig: GameConfig;\n platform: PlatformResponse;\n}\n\n// ============================================================================\n// Gameplay Types (POST /gameplay)\n// ============================================================================\n\n/**\n * Spin action request\n */\nexport interface SpinAction {\n type: string;\n totalBet: number;\n}\n\n/**\n * Gameplay request body\n */\nexport interface GameplayRequest {\n action: SpinAction;\n clientSeed?: string;\n}\n\n/**\n * Platform response (balance info)\n */\nexport interface PlatformResponse {\n balanceMinor: number;\n currency: string;\n}\n\n/**\n * Bet multiplier response\n */\nexport type BetMultiplierDefinition = number;\n\n/**\n * Cluster win information\n */\nexport interface ClusterWin {\n id: number;\n symbol: number;\n size: number;\n multiplier: number;\n payout: number;\n cells: number[];\n}\n\n/**\n * Scatter win information (temporary frontend implementation)\n */\nexport interface ScatterWin {\n symbol: number;\n count: number;\n cells: number[];\n}\n\n/**\n * Cluster mutation (one cascade step)\n */\nexport interface ClusterMutation {\n generationId: number;\n board: number[];\n cellMultipliers: number[];\n hitCounts?: number[];\n win: number;\n clusters: ClusterWin[];\n scatters?: ScatterWin;\n}\n\n/**\n * Gameplay action result payload\n */\nexport interface GameplayPayload {\n type?: 'spin-result';\n mutations: ClusterMutation[];\n}\n\n/**\n * Game state info for basic/bonus transitions\n */\nexport interface GameStateInfo {\n state: 'basic' | 'bonus' | 'bonus_ended';\n bonusOrigin?: string;\n remainingFreespins?: number;\n usedFreespins?: number;\n totalFreespins?: number;\n bet?: number;\n totalWin?: number;\n}\n\n/**\n * Gameplay response from POST /gameplay\n */\nexport interface GameplayResponse {\n type: 'finished';\n action: string;\n sessionId: string;\n roundId: string;\n roundStartNonce?: number;\n totalBet: number;\n winAmount: number;\n actionCost: number;\n actionResult: GameplayPayload;\n /** @deprecated Prefer `state` / `previousState` — not always present on play responses */\n gameState?: GameState;\n previousState?: GameStateInfo;\n state?: GameStateInfo;\n usedNonce: number;\n nextNonce: number;\n platform: PlatformResponse;\n}\n\n// ============================================================================\n// History Types (GET /history)\n// ============================================================================\n\n/**\n * History entry nonce — single action uses a number; multi-action range uses start/end.\n */\nexport type HistoryNonce = number | { start: number; end: number };\n\n/**\n * History entry\n */\nexport interface HistoryEntry {\n roundId: string;\n nonce: HistoryNonce;\n action: string;\n totalBet: number;\n winAmount: number;\n timestamp?: number;\n nonces?: number[];\n kind?: 'single' | 'range';\n}\n\n/**\n * History response from GET /history\n */\nexport interface HistoryResponse {\n entries: HistoryEntry[];\n nextPointer?: number | null;\n}\n\n// ============================================================================\n// Service Events\n// ============================================================================\n\n/**\n * Service action event types\n */\nexport enum ServiceActions {\n SESSION = 'service:session',\n GAMEPLAY = 'service:gameplay',\n HISTORY = 'service:history',\n ERROR = 'service:error',\n TIMEOUT = 'service:timeout',\n BALANCE_UPDATE = 'service:balance',\n}\n\n/**\n * Service event structure\n */\nexport interface ServiceEvent<T = unknown> {\n target: unknown;\n data: T;\n error?: unknown;\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/**\n * Service error response\n */\nexport interface ServiceError {\n code?: number;\n message?: string;\n error?: string;\n}\n","/**\n * Service plugin for backend API communication\n * @module ServicePlugin\n */\n\nimport { EventEmitter } from 'pixi.js';\nimport type { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport type { ServicePluginConfig } from './ServicePlugin.types';\nimport type { ServiceAdapter } from './ServiceAdapter';\nimport {\n ServiceActions,\n type SessionResponse,\n type GameplayResponse,\n type HistoryEntry,\n type HistoryResponse,\n type PlatformResponse,\n type ServiceEvent,\n type GameConfig,\n} from './types';\n\n/**\n * Service plugin for managing backend API communication\n *\n * This plugin provides a unified interface for all game-server communication including:\n * - Session management and game configuration\n * - Spin requests\n * - Game history\n *\n * The plugin uses an adapter pattern to support different environments\n * (RGSAdapter for production, OfflineAdapter for development).\n *\n * @example\n * ```typescript\n * // Create adapter\n * const adapter = new RGSAdapter({\n * baseUrl: 'http://localhost:3000',\n * sessionId: 'test-session-123',\n * });\n *\n * // Create plugin\n * const servicePlugin = new ServicePlugin({\n * adapter,\n * debug: true,\n * });\n *\n * // Register with engine\n * engine.registerPlugin(servicePlugin);\n * await engine.initialize();\n *\n * // Use in GameLogic\n * const servicePlugin = engine.getPluginThrow<ServicePlugin>('servicePlugin');\n * const session = await servicePlugin.getSession();\n * const response = await servicePlugin.spin(2000);\n * ```\n */\nexport class ServicePlugin extends EventEmitter implements EnginePlugin {\n public name = 'servicePlugin';\n public priority = 15;\n public dependencies = ['eventBusPlugin'];\n\n // Required for EnginePlugin interface\n [key: symbol]: unknown;\n\n private engine!: PixiEngine;\n private adapter: ServiceAdapter;\n private config: ServicePluginConfig;\n\n /** Cached session response */\n private _session: SessionResponse | null = null;\n\n /** Cached game config */\n private _gameConfig: GameConfig | null = null;\n\n constructor(config: ServicePluginConfig) {\n super();\n\n this.config = {\n priority: 15,\n enabled: true,\n ...config,\n };\n\n this.adapter = config.adapter;\n\n // Forward adapter events to plugin\n this.adapter.on(ServiceActions.SESSION, this.onAdapterEvent.bind(this, ServiceActions.SESSION));\n this.adapter.on(\n ServiceActions.GAMEPLAY,\n this.onAdapterEvent.bind(this, ServiceActions.GAMEPLAY),\n );\n this.adapter.on(ServiceActions.HISTORY, this.onAdapterEvent.bind(this, ServiceActions.HISTORY));\n this.adapter.on(ServiceActions.ERROR, this.onAdapterEvent.bind(this, ServiceActions.ERROR));\n this.adapter.on(ServiceActions.TIMEOUT, this.onAdapterEvent.bind(this, ServiceActions.TIMEOUT));\n\n getLogger('ServicePlugin').info('ServicePlugin created');\n\n }\n\n /**\n * Initialize the plugin\n */\n public async initialize(engine: PixiEngine): Promise<void> {\n this.engine = engine;\n\n\n getLogger('ServicePlugin').info('ServicePlugin initialized');\n\n }\n\n /**\n * Called when plugin is ready\n */\n public async onReady(_engine: PixiEngine): Promise<void> {\n getLogger('ServicePlugin').info('ServicePlugin ready');\n }\n\n /**\n * Cleanup plugin resources\n */\n public cleanup(): void {\n this.removeAllListeners();\n this.adapter.removeAllListeners();\n this._session = null;\n this._gameConfig = null;\n\n getLogger('ServicePlugin').info('ServicePlugin cleaned up');\n }\n\n /**\n * Handle adapter events\n */\n private onAdapterEvent(action: ServiceActions, data: unknown): void {\n const serviceEvent: ServiceEvent = {\n target: this,\n data,\n };\n\n this.emit(action, serviceEvent);\n\n getLogger('ServicePlugin').debug(`Event: ${action}`, data);\n\n }\n\n // ============================================================================\n // Public API Methods\n // ============================================================================\n\n /**\n * Get session info and game configuration\n * Fetches from backend and caches the result\n *\n * @returns Promise resolving to session response with gameConfig\n */\n public async getSession(): Promise<SessionResponse> {\n\n getLogger('ServicePlugin').info('Fetching session...');\n\n const response = await this.adapter.getSession();\n\n // Cache session and config\n this._session = response;\n this._gameConfig = response.gameConfig;\n\n getLogger('ServicePlugin').info('Session fetched', {\n sessionId: response.sessionId,\n state: response.state,\n gameState: response.gameState,\n });\n\n return response;\n }\n\n /**\n * Execute a spin action\n *\n * @param totalBet - Total bet amount\n * @param clientSeed - Optional client seed for provably fair\n * @returns Promise resolving to gameplay response\n */\n public async spin(action: string, totalBet: number, clientSeed?: string): Promise<GameplayResponse> {\n getLogger('ServicePlugin').info('Requesting spin...', { totalBet, clientSeed });\n\n const response = await this.adapter.spin({\n action: { type: action, totalBet },\n clientSeed,\n });\n\n getLogger('ServicePlugin').info('Spin response received', response);\n\n return response;\n }\n\n /**\n * Get game history\n *\n * @param limit - Maximum number of entries to return\n * @param pointer - Pagination pointer for next page\n * @returns Promise resolving to history response\n */\n public async getHistory(limit?: number, pointer?: number): Promise<HistoryResponse> {\n\n getLogger('ServicePlugin').info('Fetching history...', { limit, pointer });\n\n const response = await this.adapter.getHistory(limit, pointer);\n\n getLogger('ServicePlugin').info('History fetched', {\n entries: response.entries.length,\n nextPointer: response.nextPointer,\n });\n\n return response;\n }\n\n /**\n * Get a single round summary by round ID\n *\n * @param roundId - Round identifier\n * @returns Promise resolving to history entry (single or range)\n */\n public async getRound(roundId: string): Promise<HistoryEntry> {\n getLogger('ServicePlugin').info('Fetching round...', { roundId });\n\n const response = await this.adapter.getRound(roundId);\n\n getLogger('ServicePlugin').info('Round fetched', {\n roundId: response.roundId,\n kind: response.kind,\n });\n\n return response;\n }\n\n /**\n * Get player balance\n *\n * @returns Promise resolving to platform response with balance\n */\n public async getBalance(): Promise<PlatformResponse> {\n\n getLogger('ServicePlugin').info('Fetching balance...');\n\n const response = await this.adapter.getBalance();\n\n getLogger('ServicePlugin').info('Balance fetched', {\n balanceMinor: response.balanceMinor,\n currency: response.currency,\n });\n\n return response;\n }\n\n /**\n * Replay a completed spin by nonce\n *\n * @param nonce - The nonce of the spin to replay\n * @returns Promise resolving to gameplay response\n */\n public async replay(nonce: number): Promise<GameplayResponse> {\n\n getLogger('ServicePlugin').info('Replaying spin...', { nonce });\n\n const response = await this.adapter.replay(nonce);\n\n getLogger('ServicePlugin').info('Replay response', {\n type: response.type,\n winAmount: response.winAmount,\n });\n\n return response;\n }\n\n // ============================================================================\n // Getters\n // ============================================================================\n\n /**\n * Get session ID from adapter\n */\n public get sessionId(): string {\n return this.adapter.sessionId;\n }\n\n /**\n * Get cached session response\n */\n public get session(): SessionResponse | null {\n return this._session;\n }\n\n /**\n * Get cached game config\n */\n public get gameConfig(): GameConfig | null {\n return this._gameConfig;\n }\n\n /**\n * Get the adapter instance\n */\n public get serviceAdapter(): ServiceAdapter {\n return this.adapter;\n }\n}\n","/**\n * Abstract service adapter for backend API communication\n * @module ServicePlugin\n */\n\nimport { EventEmitter } from 'pixi.js';\nimport type {\n SessionResponse,\n GameplayRequest,\n GameplayResponse,\n HistoryEntry,\n HistoryResponse,\n PlatformResponse,\n ServiceActions,\n} from './types';\n\n/**\n * Abstract base class for service adapters\n *\n * Service adapters handle the low-level communication with the backend API.\n * Different adapters can be implemented for different environments\n * (RGSAdapter for production, OfflineAdapter for development).\n *\n * @example\n * ```typescript\n * class CustomAdapter extends ServiceAdapter {\n * async getSession(): Promise<SessionResponse> {\n * // Fetch session and game config\n * }\n *\n * async spin(request: GameplayRequest): Promise<GameplayResponse> {\n * // Execute spin action\n * }\n * }\n * ```\n */\nexport abstract class ServiceAdapter extends EventEmitter {\n /**\n * Session ID for the current game session\n */\n abstract get sessionId(): string;\n\n /**\n * Get session info and game configuration\n * GET /session\n *\n * @returns Promise resolving to session response with gameConfig\n */\n abstract getSession(): Promise<SessionResponse>;\n\n /**\n * Execute a gameplay action (spin)\n * POST /gameplay\n *\n * @param request - Gameplay request with action and optional clientSeed\n * @returns Promise resolving to gameplay response\n */\n abstract spin(request: GameplayRequest): Promise<GameplayResponse>;\n\n /**\n * Get game history\n * GET /session/{sessionId}/history\n *\n * @param limit - Maximum number of entries to return\n * @param pointer - Pagination pointer for next page\n * @returns Promise resolving to history response\n */\n abstract getHistory(limit?: number, pointer?: number): Promise<HistoryResponse>;\n\n /**\n * Get a single round summary by round ID\n * GET /session/{sessionId}/round/{roundId}\n *\n * @param roundId - Round identifier\n * @returns Promise resolving to history entry (single or range)\n */\n abstract getRound(roundId: string): Promise<HistoryEntry>;\n\n /**\n * Get player balance\n * GET /session/{sessionId}/balance\n *\n * @returns Promise resolving to platform response with balance\n */\n abstract getBalance(): Promise<PlatformResponse>;\n\n /**\n * Replay a completed spin by nonce\n * GET /session/{sessionId}/replay/{nonce}\n *\n * @param nonce - The nonce of the spin to replay\n * @returns Promise resolving to gameplay response\n */\n abstract replay(nonce: number): Promise<GameplayResponse>;\n\n /**\n * Emit a service action event\n *\n * @param action - Service action type\n * @param data - Event data\n * @protected\n */\n protected emitAction(action: ServiceActions, data: unknown): void {\n this.emit(action, data);\n }\n}\n","/**\n * RGS Adapter for production use with backend API\n * @module ServicePlugin/Adapters\n */\n\nimport { ServiceAdapter } from '../ServiceAdapter';\nimport {\n ServiceActions,\n type SessionResponse,\n type GameplayRequest,\n type GameplayResponse,\n type HistoryEntry,\n type HistoryResponse,\n type PlatformResponse,\n type ServiceError,\n} from '../types';\nimport { getLogger } from '../../../utils/Logger';\n\n/**\n * RGS Adapter configuration\n */\nexport interface RGSAdapterConfig {\n /** Base URL for the backend API (e.g., 'http://localhost:3000') */\n baseUrl: string;\n /** Session ID for authentication */\n sessionId: string;\n /** Request timeout in milliseconds */\n requestTimeout?: number;\n}\n\n/**\n * Production RGS adapter for backend API communication\n *\n * This adapter handles HTTP communication with the backend API:\n * - GET /session/{sessionId} - Fetch session and game config\n * - POST /session/{sessionId}/play - Execute spin action\n * - GET /session/{sessionId}/history - Fetch game history\n *\n * @example\n * ```typescript\n * const adapter = new RGSAdapter({\n * baseUrl: 'http://localhost:3000',\n * sessionId: 'test-session-123',\n * debug: true,\n * });\n *\n * const session = await adapter.getSession();\n * const spin = await adapter.spin({ action: { type: 'spin', totalBet: 2000 } });\n * ```\n */\nexport class RGSAdapter extends ServiceAdapter {\n private _sessionId: string;\n private baseUrl: string;\n private requestTimeout: number;\n\n constructor(config: RGSAdapterConfig) {\n super();\n this._sessionId = config.sessionId;\n this.baseUrl = config.baseUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.requestTimeout = config.requestTimeout || 30000;\n\n\n getLogger('RGSAdapter').info('RGSAdapter initialized', {\n baseUrl: this.baseUrl,\n sessionId: this._sessionId,\n });\n\n }\n\n /**\n * Get the current session ID\n */\n public get sessionId(): string {\n return this._sessionId;\n }\n\n /**\n * Get session info and game configuration\n * GET /session/{sessionId}\n */\n public async getSession(): Promise<SessionResponse> {\n\n getLogger('RGSAdapter').info('Fetching session...');\n\n const response = await this.request<SessionResponse>('GET', `/session/${this._sessionId}`);\n\n getLogger('RGSAdapter').info('Session fetched', response);\n\n\n this.emitAction(ServiceActions.SESSION, response);\n return response;\n }\n\n /**\n * Execute a gameplay action (spin)\n * POST /session/{sessionId}/play\n */\n public async spin(request: GameplayRequest): Promise<GameplayResponse> {\n getLogger('RGSAdapter').info('Executing spin...', request);\n\n const response = await this.request<GameplayResponse>('POST', `/session/${this._sessionId}/play`, request);\n\n getLogger('RGSAdapter').info('Spin response', response);\n\n\n this.emitAction(ServiceActions.GAMEPLAY, response);\n return response;\n }\n\n /**\n * Get game history\n * GET /session/{sessionId}/history\n */\n public async getHistory(limit?: number, pointer?: number): Promise<HistoryResponse> {\n getLogger('RGSAdapter').info('Fetching history...', { limit, pointer });\n\n\n const params = new URLSearchParams();\n if (limit !== undefined) params.set('pageSize', limit.toString());\n if (pointer !== undefined) params.set('pointer', pointer.toString());\n\n const queryString = params.toString();\n const url = queryString ? `/session/${this._sessionId}/history?${queryString}` : `/session/${this._sessionId}/history`;\n\n const response = await this.request<HistoryResponse>('GET', url);\n\n getLogger('RGSAdapter').info('History fetched', response);\n\n this.emitAction(ServiceActions.HISTORY, response);\n return response;\n }\n\n /**\n * Get a single round summary by round ID\n * GET /session/{sessionId}/round/{roundId}\n */\n public async getRound(roundId: string): Promise<HistoryEntry> {\n getLogger('RGSAdapter').info('Fetching round...', { roundId });\n\n const response = await this.request<HistoryEntry>(\n 'GET',\n `/session/${this._sessionId}/round/${encodeURIComponent(roundId)}`,\n );\n\n getLogger('RGSAdapter').info('Round fetched', response);\n\n this.emitAction(ServiceActions.HISTORY, response);\n return response;\n }\n\n /**\n * Get player balance\n * GET /session/{sessionId}/balance\n */\n public async getBalance(): Promise<PlatformResponse> {\n getLogger('RGSAdapter').info('Fetching balance...');\n\n\n const response = await this.request<PlatformResponse>('GET', `/session/${this._sessionId}/balance`);\n\n getLogger('RGSAdapter').info('Balance fetched', response);\n\n this.emitAction(ServiceActions.BALANCE_UPDATE, response);\n return response;\n }\n\n /**\n * Replay a completed spin by nonce\n * GET /session/{sessionId}/replay/{nonce}\n */\n public async replay(nonce: number): Promise<GameplayResponse> {\n\n getLogger('RGSAdapter').info('Replaying spin...', { nonce });\n\n const response = await this.request<GameplayResponse>('GET', `/session/${this._sessionId}/replay/${nonce}`);\n\n getLogger('RGSAdapter').info('Replay response', response);\n\n this.emitAction(ServiceActions.GAMEPLAY, response);\n return response;\n }\n\n /**\n * Make an HTTP request to the backend API\n */\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const url = `${this.baseUrl}${path}`;\n const xhr = new XMLHttpRequest();\n\n xhr.open(method, url);\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.timeout = this.requestTimeout;\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 400) {\n try {\n const response: T = JSON.parse(xhr.responseText);\n\n getLogger('RGSAdapter').debug('Response received', { url, response });\n\n resolve(response);\n } catch (error) {\n const serviceError: ServiceError = {\n code: 500,\n message: 'Failed to parse response',\n error: xhr.responseText,\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error('Failed to parse response'));\n }\n } else {\n let serviceError: ServiceError;\n try {\n serviceError = JSON.parse(xhr.responseText);\n } catch {\n serviceError = {\n code: xhr.status,\n message: xhr.statusText,\n error: xhr.responseText,\n };\n }\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error(`HTTP ${xhr.status}: ${serviceError.message || xhr.statusText}`));\n }\n };\n\n xhr.onerror = () => {\n const reason = xhr.status === 0 ? 'CORS' : 'Network error';\n const serviceError: ServiceError = {\n code: 0,\n message: reason,\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error(reason));\n };\n\n xhr.onabort = () => {\n const serviceError: ServiceError = {\n code: -1,\n message: 'Request aborted',\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error('Request aborted'));\n };\n\n xhr.ontimeout = () => {\n const serviceError: ServiceError = {\n code: 408,\n message: 'Request timeout',\n };\n this.emitAction(ServiceActions.TIMEOUT, serviceError);\n reject(new Error('Request timeout'));\n };\n\n try {\n const bodyString = body ? JSON.stringify(body) : undefined;\n\n getLogger('RGSAdapter').debug('Sending request', { url, method, body: bodyString });\n\n xhr.send(bodyString);\n } catch (error) {\n const serviceError: ServiceError = {\n code: 500,\n message: 'Failed to send request',\n error: String(error),\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(error);\n }\n });\n }\n}\n","const IPIFY_URL = 'https://api.ipify.org?format=json';\nconst LOOKUP_TIMEOUT_MS = 5000;\n\nlet cachedIp: string | null = null;\n\nexport interface ResolvePublicIpOptions {\n configIp?: string;\n queryParams?: URLSearchParams;\n}\n\n/**\n * Resolves the client's public IP for dev session creation.\n * Priority: ?clientIP= / ?ip= query param → config override → ipify.org lookup.\n */\nexport async function resolvePublicIp(options: ResolvePublicIpOptions = {}): Promise<string> {\n if (cachedIp) {\n return cachedIp;\n }\n\n const params = options.queryParams ?? new URLSearchParams(window.location.search);\n const fromQuery = params.get('clientIP') || params.get('ip');\n if (fromQuery) {\n cachedIp = fromQuery;\n return fromQuery;\n }\n\n if (options.configIp) {\n cachedIp = options.configIp;\n return options.configIp;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), LOOKUP_TIMEOUT_MS);\n\n try {\n const response = await fetch(IPIFY_URL, { signal: controller.signal });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n const data = (await response.json()) as { ip?: string };\n if (!data.ip) {\n throw new Error('Invalid ipify response');\n }\n\n cachedIp = data.ip;\n return data.ip;\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error('Public IP lookup timeout');\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n","/**\n * Development adapter that creates session via POST /session\n * Use this in development to auto-create sessions\n * @module ServicePlugin/Adapters\n */\n\nimport { RGSAdapter, type RGSAdapterConfig } from './RGSAdapter';\nimport { resolvePublicIp } from './resolvePublicIp';\nimport type { SessionResponse } from '../types';\nimport { getLogger } from '../../../utils/Logger';\n\n/**\n * Create session request body\n */\ninterface CreateSessionRequest {\n operatorId: string;\n playerId: string;\n gameId: string;\n ip: string;\n userAgent: string;\n currency: string;\n}\n\n/**\n * Development adapter configuration\n */\nexport interface DevAdapterConfig extends Omit<RGSAdapterConfig, 'sessionId'> {\n /** Operator ID (UUID) */\n operatorId?: string;\n /** Player ID */\n playerId?: string;\n /** Game ID (UUID) */\n gameId?: string;\n /** Currency code */\n currency?: string;\n /** Optional public IP override (also overridable via ?clientIP= or ?ip=) */\n ip?: string;\n}\n\n/**\n * Development adapter that auto-creates sessions\n *\n * This adapter calls POST /session to create a new session,\n * then uses the returned sessionId for subsequent requests.\n *\n * @example\n * ```typescript\n * const adapter = new DevAdapter({\n * baseUrl: 'http://localhost:3000',\n * debug: true,\n * });\n *\n * // Creates session and returns session info\n * const session = await adapter.getSession();\n * console.log('Session ID:', adapter.sessionId);\n * ```\n */\nexport class DevAdapter extends RGSAdapter {\n private createSessionData: Omit<CreateSessionRequest, 'ip'>;\n private configIp?: string;\n private queryParams: URLSearchParams;\n private _sessionCreated = false;\n\n constructor(config: DevAdapterConfig) {\n // Initialize parent with empty session ID (will be set after creation)\n super({\n ...config,\n sessionId: '',\n });\n\n this.configIp = config.ip;\n this.queryParams = new URLSearchParams(window.location.search);\n\n // Query string overrides config; config overrides defaults\n this.createSessionData = {\n operatorId:\n this.queryParams.get('operatorId') ||\n config.operatorId ||\n '00000000-0000-0000-0000-000000000001',\n playerId: this.queryParams.get('playerId') || config.playerId || 'web-client-2',\n gameId:\n this.queryParams.get('gameId') ||\n config.gameId ||\n 'b0a60930-82b4-4097-99c8-78299cef6e80',\n userAgent: window.navigator.userAgent,\n currency: this.queryParams.get('currency') || config.currency || 'USD',\n };\n getLogger('DevAdapter').info('DevAdapter initialized', this.createSessionData);\n }\n\n /**\n * Get session - creates session if not exists, then fetches session info\n */\n public override async getSession(): Promise<SessionResponse> {\n // Create session if not already created\n if (!this._sessionCreated) {\n await this.createSession();\n }\n\n // Now call parent getSession\n return super.getSession();\n }\n\n /**\n * Create a new session via POST /session\n */\n private async createSession(): Promise<SessionResponse> {\n const ip = await resolvePublicIp({\n configIp: this.configIp,\n queryParams: this.queryParams,\n });\n\n const sessionPayload: CreateSessionRequest = {\n ...this.createSessionData,\n ip,\n };\n\n const url = `${this['baseUrl']}/session`;\n\n getLogger('DevAdapter').info('Creating session...', { url, data: sessionPayload });\n\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open('POST', url);\n request.setRequestHeader('Content-Type', 'application/json');\n request.timeout = this['requestTimeout'];\n\n request.onload = () => {\n if (request.status >= 200 && request.status < 300) {\n try {\n const response: SessionResponse = JSON.parse(request.responseText);\n\n // Store the session ID\n this['_sessionId'] = response.sessionId;\n this._sessionCreated = true;\n\n getLogger('DevAdapter').info('Session created', {\n sessionId: response.sessionId,\n state: response.state,\n });\n\n resolve(response);\n } catch (error) {\n getLogger('DevAdapter').error('Failed to parse session response', error);\n reject(error);\n }\n } else {\n const errorMsg = `HTTP ${request.status}: ${request.responseText}`;\n getLogger('DevAdapter').error('Failed to create session', errorMsg);\n reject(new Error(errorMsg));\n }\n };\n\n request.onerror = () => {\n const reason = request.status === 0 ? 'CORS' : 'Network error';\n getLogger('DevAdapter').error(`Network error creating session (${reason})`);\n reject(new Error(reason));\n };\n\n request.ontimeout = () => {\n getLogger('DevAdapter').error('Timeout creating session');\n reject(new Error('Request timeout'));\n };\n\n try {\n request.send(JSON.stringify(sessionPayload));\n } catch (error) {\n getLogger('DevAdapter').error('Failed to send create session request', error);\n reject(error);\n }\n });\n }\n}\n","// @ts-ignore - lodash types may not be available\nimport { merge } from 'lodash';\nimport { EventEmitter } from 'pixi.js';\nimport type { ThemeData, SkinOptions } from './SkinPlugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport type { ISkin, SkinEvents } from './ISkin';\n\n/**\n * Skin implementation for theme-based configuration.\n *\n * Skin manages theme data and provides property access with automatic merging\n * of default and current theme properties. Supports global data injection.\n *\n * ## Features\n *\n * - **Multi-Theme Support**: Switch between different themes at runtime\n * - **Property Merging**: Current theme inherits from default theme\n * - **Data Injection**: Global data can be injected using template strings\n * - **Event Emission**: Fires events on theme changes and data injection\n * - **Fallback Handling**: Falls back to default theme if theme not found\n *\n * ## Data Injection\n *\n * Skin supports template string injection using `${path}` syntax:\n *\n * ```typescript\n * // Skin data with template strings\n * const skinData = {\n * default: {\n * color: '${ui.default.themeColor.default}',\n * fontSize: '${ui.default.fontSize.normal}'\n * }\n * };\n *\n * // Set global data\n * skinPlugin.setGlobalData('ui.default.themeColor.default', 0xFFD100);\n * skinPlugin.setGlobalData('ui.default.fontSize.normal', 24);\n *\n * // Properties are automatically injected\n * const props = skin.getProperties();\n * // { color: 0xFFD100, fontSize: 24 }\n * ```\n *\n * @typeParam T - The type of properties this skin manages\n *\n * @example\n * ```typescript\n * // Create skin with multiple themes\n * const { skin } = skinPlugin.createSkin({\n * data: {\n * default: {\n * background: { color: 0xFF0000 },\n * text: { fontSize: 24 }\n * },\n * dark: {\n * background: { color: 0x000000 }\n * // text inherits from default\n * },\n * mobile: {\n * text: { fontSize: 18 }\n * // background inherits from default\n * }\n * },\n * defaultTheme: 'default'\n * });\n *\n * // Get properties (merges default + current theme)\n * const props = skin.getProperties();\n *\n * // Switch theme\n * skin.setTheme('dark');\n *\n * // Listen to theme changes\n * skin.on('themeChanged', (event) => {\n * console.log(`Theme changed from ${event.oldTheme} to ${event.newTheme}`);\n * updateUI(skin.getProperties());\n * });\n * ```\n *\n * @public\n */\nexport class Skin<T = any> extends EventEmitter<SkinEvents<T>> implements ISkin<T> {\n private data: ThemeData<T>;\n private currentTheme: string;\n private defaultTheme: string;\n private id: string;\n private plugin: any; // SkinPlugin instance\n\n constructor(options: SkinOptions<T>, plugin: any) {\n super();\n this.data = options.data;\n this.defaultTheme = options.defaultTheme ?? Object.keys(this.data)[0];\n this.currentTheme = this.defaultTheme;\n this.id = Math.random().toString(36).substr(2, 9);\n this.plugin = plugin;\n }\n\n /**\n * Sets the current theme.\n *\n * If the theme doesn't exist, falls back to default theme.\n * Emits 'themeChanged' event if theme actually changes.\n *\n * @param themeName - Name of the theme to activate\n *\n * @example\n * ```typescript\n * skin.setTheme('dark');\n * skin.setTheme('mobile');\n * ```\n */\n setTheme(themeName: string): void {\n const oldTheme = this.currentTheme;\n let newTheme = themeName;\n\n // If theme doesn't exist, fallback to default\n if (!this.data[themeName]) {\n newTheme = this.defaultTheme;\n\n // Optional warning for non-existent themes (for debugging)\n if (this.plugin?.config?.debugMode) {\n getLogger('Skin').warn(\n `Theme \"${themeName}\" not found in skin data, falling back to default theme \"${this.defaultTheme}\"`,\n );\n }\n }\n\n // Only change and emit if actually different\n if (oldTheme !== newTheme) {\n this.currentTheme = newTheme;\n\n this.emit('themeChanged', {\n skin: this,\n oldTheme,\n newTheme,\n });\n }\n }\n\n /**\n * Gets the current theme name.\n *\n * @returns Current theme name\n */\n getCurrentTheme(): string {\n return this.currentTheme;\n }\n\n /**\n * Gets all properties for the current theme.\n *\n * Merges default theme properties with current theme properties.\n * Current theme properties override default theme properties.\n * Applies global data injection if configured.\n *\n * @returns Readonly properties object\n *\n * @example\n * ```typescript\n * const props = skin.getProperties();\n * button.applyStyle(props);\n * ```\n */\n getProperties(): Readonly<T> {\n const currentData = this.data[this.currentTheme] as any;\n const defaultData = this.data[this.defaultTheme] as any;\n\n // Deep merge default properties with current theme properties using lodash\n // Current theme overrides default theme properties\n let mergedData: T;\n if (!defaultData) {\n mergedData = currentData;\n } else if (!currentData) {\n mergedData = defaultData;\n } else {\n mergedData = merge({}, defaultData, currentData);\n }\n\n // Apply property injection if global data exists\n const injectedData = this.plugin?.injectGlobalData\n ? this.plugin.injectGlobalData(mergedData)\n : mergedData;\n\n // Return readonly to prevent mutation\n return Object.freeze(injectedData) as Readonly<T>;\n }\n\n /**\n * Gets a specific property by key.\n *\n * @param key - Property key\n * @returns Property value or undefined\n *\n * @example\n * ```typescript\n * const color = skin.getProperty('color');\n * ```\n */\n getProperty<K extends keyof T>(key: K): T[K] | undefined {\n const mergedProperties = this.getProperties();\n return mergedProperties ? mergedProperties[key] : undefined;\n }\n\n /**\n * Gets the unique skin ID.\n *\n * @returns Skin ID\n */\n getId(): string {\n return this.id;\n }\n\n getDefaultTheme(): string {\n return this.defaultTheme;\n }\n\n /**\n * Checks if a theme exists.\n *\n * @param themeName - Theme name to check\n * @returns True if theme exists\n */\n hasTheme(themeName: string): boolean {\n return !!this.data[themeName];\n }\n\n /**\n * Destroys the skin.\n *\n * Emits 'destroyed' event, removes all listeners, and unregisters from plugin.\n */\n destroy(): void {\n // Emit destroyed event before cleanup\n this.emit('destroyed');\n\n // Clear all event listeners to prevent memory leaks\n this.removeAllListeners();\n\n // Unregister from plugin\n this.plugin?.unregisterSkin(this);\n }\n}\n","import { Skin } from './Skin';\nimport type { SkinPluginConfig, SkinOptions } from './SkinPlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { getLogger } from '../../utils/Logger';\n\n/**\n * Event data for global data changes.\n *\n * @public\n */\nexport interface GlobalDataChangeEvent {\n /** Property path that changed */\n path: string;\n /** Previous value */\n oldValue: any;\n /** New value */\n newValue: any;\n /** Skins affected by this change */\n affectedSkins: Skin<any>[];\n}\n\n/**\n * Skin management plugin for theme-based UI configuration.\n *\n * SkinPlugin provides a centralized system for managing UI themes and data injection.\n * It allows components to have multiple themes and dynamically inject global data.\n *\n * ## Features\n *\n * - **Multi-Theme Support**: Create skins with multiple theme variants\n * - **Global Theme Switching**: Change themes across all skins at once\n * - **Data Injection**: Inject global data into skin properties using template strings\n * - **Automatic Updates**: Components automatically update when data changes\n * - **Type-Safe**: Full TypeScript support with generics\n *\n * ## Core Concepts\n *\n * ### 1. Skins\n * Skins are theme-based configuration objects. Each skin can have multiple themes\n * (default, dark, mobile, etc.) and properties are merged from default + current theme.\n *\n * ### 2. Global Data Injection\n * Use template strings `${path}` in skin data to reference global values:\n * ```typescript\n * const skinData = {\n * default: {\n * color: '${ui.default.themeColor.default}', // Will be injected\n * fontSize: '${ui.default.fontSize.normal}' // Will be injected\n * }\n * };\n * ```\n *\n * ### 3. Theme Inheritance\n * Themes inherit from the default theme. Only specify differences:\n * ```typescript\n * {\n * default: { color: 0xFF0000, size: 100 },\n * dark: { color: 0x000000 } // size inherited from default\n * }\n * ```\n *\n * @example\n * Basic usage:\n * ```typescript\n * const skinPlugin = new SkinPlugin({ debugMode: true });\n * engine.registerPlugin(skinPlugin);\n *\n * // Create a button skin\n * const { skin: buttonSkin } = skinPlugin.createSkin({\n * data: {\n * default: {\n * up: { background: { texture: 'btn_spin_up' } },\n * over: { background: { texture: 'btn_spin_over' } }\n * },\n * dark: {\n * up: { background: { texture: 'btn_spin_dark_up' } }\n * }\n * }\n * });\n *\n * // Use skin properties\n * const button = new ButtonComp({\n * skinData: buttonSkin.getProperties()\n * });\n *\n * // Switch theme\n * skinPlugin.setTheme('dark');\n * ```\n *\n * @example\n * Global data injection from EmptyScene:\n * ```typescript\n * const skinPlugin = engine.getPlugin<SkinPlugin>('skinPlugin');\n *\n * // Set global UI values\n * skinPlugin.setGlobalData('ui.default.fontSize.header', 36);\n * skinPlugin.setGlobalData('ui.default.fontSize.normal', 24);\n * skinPlugin.setGlobalData('ui.default.fontFamily', 'NotoSansBlack');\n * skinPlugin.setGlobalData('ui.default.textColor', 0xFFFFFF);\n * skinPlugin.setGlobalData('ui.default.themeColor.default', 0xFFD100);\n *\n * // Create skin with template strings\n * const { skin } = skinPlugin.createSkin({\n * data: {\n * default: {\n * title: {\n * fontSize: '${ui.default.fontSize.header}',\n * fontFamily: '${ui.default.fontFamily}',\n * fill: '${ui.default.textColor}'\n * },\n * button: {\n * color: '${ui.default.themeColor.default}'\n * }\n * }\n * }\n * });\n *\n * // Properties are automatically injected\n * const props = skin.getProperties();\n * // { title: { fontSize: 36, fontFamily: 'NotoSansBlack', fill: 0xFFFFFF },\n * // button: { color: 0xFFD100 } }\n * ```\n *\n * @example\n * Using with DataInjector from EmptyScene:\n * ```typescript\n * import { DataInjector } from '@rb-games/core/utils';\n *\n * // Start with default skin\n * let autoplaySkin = defaultAutoplayMenuSkin;\n *\n * // Inject specific textures\n * autoplaySkin = DataInjector(autoplaySkin, 'options.buttonSkin', {\n * up: { background: { texture: 'btn_checkbox_up' } },\n * over: { background: { texture: 'btn_checkbox_over' } },\n * down: { background: { texture: 'btn_checkbox_down' } }\n * });\n *\n * autoplaySkin = DataInjector(autoplaySkin, 'count.sliderSkin', {\n * up: { knob: { texture: 'icon_autoplay_slider_up' } },\n * over: { knob: { texture: 'icon_autoplay_slider_over' } }\n * });\n *\n * // Create skin with injected data\n * const { skin } = skinPlugin.createSkin({\n * data: { default: autoplaySkin }\n * });\n * ```\n *\n * @example\n * Listening to data changes:\n * ```typescript\n * const { skin } = skinPlugin.createSkin({ data: skinData });\n *\n * // Listen for data injection\n * skin.on('dataInjected', (event) => {\n * console.log(`Data changed: ${event.path}`);\n * console.log(`Old: ${event.oldValue}, New: ${event.newValue}`);\n * updateComponent(skin.getProperties());\n * });\n *\n * // Listen for theme changes\n * skin.on('themeChanged', (event) => {\n * console.log(`Theme: ${event.oldTheme} -> ${event.newTheme}`);\n * updateComponent(skin.getProperties());\n * });\n *\n * // Change global data (triggers dataInjected event)\n * skinPlugin.setGlobalData('ui.button.color', 0xFF0000);\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class SkinPlugin implements EnginePlugin {\n public name: string = 'skinPlugin';\n public priority: number = 50;\n public dependencies: string[] = [];\n\n private skins: Map<string, Skin<any>> = new Map();\n private skinCache: Map<string, { skinId: string; refCount: number }> = new Map();\n private globalTheme: string = '';\n private config: SkinPluginConfig;\n private isInitialized = false;\n private globalData: Record<string, any> = {};\n\n constructor(config: SkinPluginConfig = {}) {\n this.config = {\n autoCleanup: true,\n enableCache: true,\n ...config,\n };\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n this.isInitialized = true;\n getLogger('SkinPlugin').info('SkinPlugin initialized with config', this.config);\n\n }\n\n public onReady(engine: PixiEngine): void {\n getLogger('SkinPlugin').debug('SkinPlugin is ready');\n }\n\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public cleanup(): void {\n this.clearAllSkins();\n this.isInitialized = false;\n getLogger('SkinPlugin').info('SkinPlugin cleaned up');\n }\n\n /**\n * Creates a new skin instance.\n *\n * Factory method that creates and registers a skin.\n *\n * @typeParam T - The type of skin properties\n * @param options - Skin configuration options\n * @returns Object containing the skin instance and its ID\n *\n * @example\n * ```typescript\n * const { skin, skinId } = skinPlugin.createSkin({\n * data: {\n * default: { color: 0xFF0000 },\n * dark: { color: 0x000000 }\n * },\n * defaultTheme: 'default'\n * });\n * ```\n */\n public createSkin<T extends Record<string, any>>(\n options: SkinOptions<T>,\n ): { skin: Skin<T>; skinId: string; cached?: boolean } {\n const useCache = options.useCache ?? true;\n\n if (useCache && this.config.enableCache) {\n const cacheKey = options.cacheKey || this.generateCacheKey(options);\n const cached = this.skinCache.get(cacheKey);\n\n if (cached) {\n cached.refCount++;\n getLogger('SkinPlugin').debug(`Reusing cached skin: ${cacheKey} (refCount: ${cached.refCount})`);\n\n const skin = this.skins.get(cached.skinId);\n return { skin: skin as Skin<T>, skinId: cached.skinId, cached: true };\n }\n\n const { skin, skinId } = this.createAndRegisterSkin<T>(options);\n this.skinCache.set(cacheKey, { skinId, refCount: 1 });\n\n getLogger('SkinPlugin').debug(`Created and cached new skin: ${cacheKey}`);\n\n return { skin, skinId, cached: false };\n }\n\n return this.createAndRegisterSkin<T>(options);\n }\n\n private createAndRegisterSkin<T>(options: SkinOptions<T>): { skin: Skin<T>; skinId: string } {\n const skin = new Skin<T>(options, this);\n skin.setTheme(this.globalTheme);\n const skinId = this.registerSkin(skin);\n return { skin, skinId };\n }\n\n public registerSkin(skin: Skin<any>): string {\n const skinId = skin.getId();\n this.skins.set(skinId, skin);\n getLogger('SkinPlugin').debug(`Registered skin: ${skinId}`);\n\n return skinId;\n }\n\n public unregisterSkin(skin: Skin<any> | string): void {\n const skinId = typeof skin === 'string' ? skin : skin.getId();\n const removed = this.skins.delete(skinId);\n if (removed) getLogger('SkinPlugin').debug(`Unregistered skin: ${skinId}`);\n }\n\n /**\n * Sets the global theme for all registered skins.\n *\n * Applies the theme to all skins that have it defined.\n *\n * @param themeName - Theme name to activate\n *\n * @example\n * ```typescript\n * skinPlugin.setTheme('dark');\n * skinPlugin.setTheme('mobile');\n * ```\n */\n public setTheme(themeName: string): void {\n this.globalTheme = themeName;\n\n // Apply theme to all registered skins\n this.skins.forEach((skin) => {\n if (skin.hasTheme(themeName)) {\n skin.setTheme(themeName);\n }\n });\n\n getLogger('SkinPlugin').info(`Applied theme \"${themeName}\" to ${this.skins.size} skins`);\n\n }\n\n public getTheme(): string {\n return this.globalTheme;\n }\n\n public getSkinCount(): number {\n return this.skins.size;\n }\n\n public getAllSkins(): Skin<any>[] {\n return Array.from(this.skins.values());\n }\n\n public clearAllSkins(): void {\n this.skins.forEach((skin) => skin.destroy());\n this.skins.clear();\n getLogger('SkinPlugin').debug('Cleared all skins');\n }\n\n public getSkinById(id: string): Skin<any> | undefined {\n return this.skins.get(id);\n }\n\n /**\n * Sets global data for property injection.\n *\n * Updates global data and triggers 'dataInjected' event on affected skins.\n * Skins using template strings like `${path}` will be automatically updated.\n *\n * @param path - Dot-notation path (e.g., 'ui.button.color')\n * @param value - Value to set\n * @example\n * ```typescript\n * skinPlugin.setGlobalData('ui.default.themeColor.default', 0xFFD100);\n * skinPlugin.setGlobalData('ui.default.fontSize.header', 36);\n * // Or set multiple values at once:\n * skinPlugin.setGlobalData({\n * 'ui.default.themeColor.default': 0xFFD100,\n * 'ui.default.fontSize.header': 36\n * });\n * ```\n */\n public setGlobalData(path: string, value: any): void;\n public setGlobalData(data: Record<string, any>): void;\n public setGlobalData(pathOrData: string | Record<string, any>, value?: any): void {\n if (typeof pathOrData === 'object') {\n Object.entries(pathOrData).forEach(([path, val]) => {\n this.setGlobalData(path, val);\n });\n return;\n }\n\n const path = pathOrData;\n const oldValue = this.getNestedProperty(this.globalData, path);\n\n // Only proceed if value actually changed\n if (oldValue === value) return;\n\n this.setNestedProperty(this.globalData, path, value);\n\n getLogger('SkinPlugin').debug(`Set global data: ${path} = ${JSON.stringify(value)}`);\n\n // Find affected skins\n const affectedSkins = this.findSkinsUsingProperty(path);\n\n // Trigger dataInjected event on affected skins\n affectedSkins.forEach((skin) => {\n skin.emit('dataInjected', {\n path,\n oldValue,\n newValue: value,\n });\n });\n }\n\n /**\n * Gets global data.\n *\n * @param path - Optional dot-notation path. If omitted, returns all global data.\n * @returns Global data value or entire global data object\n */\n public getGlobalData(path?: string): any {\n if (!path) return this.globalData;\n return this.getNestedProperty(this.globalData, path);\n }\n\n public clearGlobalData(): void {\n this.globalData = {};\n getLogger('SkinPlugin').debug('Cleared all global data');\n }\n\n public clearCache(): void {\n this.skinCache.clear();\n getLogger('SkinPlugin').debug('Cleared skin cache');\n }\n\n public getCacheStats(): { size: number; entries: Array<{ key: string; skinId: string; refCount: number }> } {\n const entries = Array.from(this.skinCache.entries()).map(([key, value]) => ({\n key,\n skinId: value.skinId,\n refCount: value.refCount,\n }));\n return { size: this.skinCache.size, entries };\n }\n\n private generateCacheKey(options: SkinOptions<any>): string {\n const normalized = this.stringifyDeterministic(options.data, 0);\n return this.simpleHash(normalized);\n }\n\n private stringifyDeterministic(obj: any, depth: number = 0): string {\n // Depth limit to prevent excessive recursion\n if (depth > 10) return '[deep]';\n\n if (obj === null) return 'null';\n if (obj === undefined) return 'undefined';\n if (typeof obj !== 'object') return JSON.stringify(obj);\n\n // Check if this is a class instance (not a plain object)\n const isClassInstance = obj.constructor && obj.constructor !== Object && !Array.isArray(obj);\n if (isClassInstance) {\n // Use constructor name + toString for better uniqueness\n return `[${obj.constructor.name}:${obj.toString()}]`;\n }\n\n if (Array.isArray(obj)) {\n const parts: string[] = [];\n for (let i = 0; i < obj.length; i++) {\n parts.push(this.stringifyDeterministic(obj[i], depth + 1));\n }\n return '[' + parts.join(',') + ']';\n }\n\n const keys = Object.keys(obj).sort();\n const parts: string[] = [];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n parts.push(JSON.stringify(key) + ':' + this.stringifyDeterministic(obj[key], depth + 1));\n }\n return '{' + parts.join(',') + '}';\n }\n\n private simpleHash(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return `skin_${Math.abs(hash).toString(36)}`;\n }\n\n // Property injection for skins\n public injectGlobalData<T>(skinData: T): T {\n return this.injectProperties(skinData, this.globalData);\n }\n\n // Helper method to set nested properties\n private setNestedProperty(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n let current = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n }\n\n // Helper method to get nested properties\n private getNestedProperty(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n\n // Property injection logic\n private injectProperties<T>(obj: T, globalData: Record<string, any>): T {\n if (!obj || typeof obj !== 'object') return obj;\n\n // Preserve class instances (not plain objects or arrays)\n // This prevents class instances like FillGradient, Texture, etc. from being converted to plain objects\n if (obj.constructor !== Object && obj.constructor !== Array) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => this.injectProperties(item, globalData)) as T;\n }\n\n const result: any = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'string' && value.startsWith('${') && value.endsWith('}')) {\n // Property injection: ${ui.labels.button} -> globalData.ui.labels.button\n const propertyPath = value.slice(2, -1); // Remove ${ and }\n const injectedValue = this.getNestedProperty(globalData, propertyPath);\n result[key] = injectedValue !== undefined ? injectedValue : value;\n } else if (typeof value === 'object') {\n // Recursively inject properties in nested objects\n result[key] = this.injectProperties(value, globalData);\n } else {\n result[key] = value;\n }\n }\n\n return result as T;\n }\n\n // Find skins that use a specific property path\n private findSkinsUsingProperty(propertyPath: string): Skin<any>[] {\n const affectedSkins: Skin<any>[] = [];\n const templateString = `\\${${propertyPath}}`;\n\n this.skins.forEach((skin) => {\n if (this.skinUsesProperty(skin, templateString)) {\n affectedSkins.push(skin);\n }\n });\n\n return affectedSkins;\n }\n\n // Check if a skin uses a specific property in its data\n private skinUsesProperty(skin: Skin<any>, templateString: string): boolean {\n const skinData = (skin as any).data; // Access private data via type assertion\n return this.objectContainsTemplate(skinData, templateString);\n }\n\n // Recursively check if an object contains a specific template string\n private objectContainsTemplate(obj: any, templateString: string): boolean {\n if (!obj || typeof obj !== 'object') return false;\n\n if (Array.isArray(obj)) {\n return obj.some((item) => this.objectContainsTemplate(item, templateString));\n }\n\n for (const value of Object.values(obj)) {\n if (typeof value === 'string' && value === templateString) {\n return true;\n } else if (typeof value === 'object') {\n if (this.objectContainsTemplate(value, templateString)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n [key: symbol]: any;\n}\n","import { Assets } from 'pixi.js';\nimport { sound, Sound, IMediaInstance } from '@pixi/sound';\nimport gsap from 'gsap';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport type {\n SoundPluginConfig,\n SoundSpriteData,\n SpriteRegistryEntry,\n PlayOptions,\n QueueInOptions,\n ChannelConfig,\n SoundChannel,\n} from './SoundPlugin.types';\n\n/**\n * Sound playback and channel management plugin for PixiJS games.\n *\n * SoundPlugin provides a unified API for playing sounds, managing audio channels,\n * and handling sound sprites. It works with ResourcePlugin for asset loading.\n *\n * ## Features\n *\n * - **Channel System**: Separate volume/mute control for music, voice, sfx, ui\n * - **Sound Sprites**: Play segments of longer audio files\n * - **Unified Play API**: Same `play(alias)` for both sprites and regular sounds\n * - **Fade Effects**: FadeIn, fadeOut, crossfade with GSAP\n * - **Mobile Unlock**: Auto-unlock AudioContext on user interaction\n *\n * @example\n * ```typescript\n * const soundPlugin = new SoundPlugin({\n * channels: {\n * music: { volume: 0.7, maxInstances: 1 },\n * sfx: { volume: 0.8, maxInstances: 10 },\n * },\n * masterVolume: 1.0,\n * autoUnlock: true,\n * });\n *\n * engine.registerPlugin(soundPlugin);\n * await engine.initialize();\n *\n * // Add sprites\n * soundPlugin.addSprites('sfx-sprite', {\n * 'win-big': { start: 0, end: 3 },\n * 'spin': { start: 4, end: 5 },\n * });\n *\n * // Play sounds (sprites or regular)\n * await soundPlugin.play('win-big');\n * await soundPlugin.play('bgm-main', { loop: true });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class SoundPlugin implements EnginePlugin {\n public name: string = 'SoundPlugin';\n public priority: number = 60;\n public dependencies: string[] = ['resourcePlugin'];\n\n private config: SoundPluginConfig;\n\n /** Sprite alias -> sound alias + sprite key mapping */\n private spriteRegistry: Map<string, SpriteRegistryEntry> = new Map();\n\n /** Channel configurations */\n private channels: Map<SoundChannel, ChannelConfig> = new Map();\n\n /** Currently playing instances by alias */\n private playingInstances: Map<string, IMediaInstance[]> = new Map();\n\n /** Sound alias -> channel mapping */\n private soundChannelMap: Map<string, SoundChannel> = new Map();\n\n /** Master volume */\n private _masterVolume: number = 1.0;\n\n /** Audio context unlocked flag */\n private _unlocked: boolean = false;\n\n /** Active interval loop timers by alias */\n private intervalTimers: Map<string, ReturnType<typeof setTimeout>> = new Map();\n\n /** Active interval loop instance per alias — only this instance may schedule the next play */\n private activeLoopInstances: Map<string, IMediaInstance> = new Map();\n\n /** Store original PlayOptions for interval loops to restore on trigger/replay */\n private intervalLoopOptions: Map<string, PlayOptions> = new Map();\n\n /** Store original volume for all playing sounds (for mute/unmute restore) */\n private soundVolumeMap: Map<string, number> = new Map();\n\n /** Group -> tracked instances for stopGroup support */\n private groupInstances: Map<string, IMediaInstance[]> = new Map();\n\n constructor(config: SoundPluginConfig = {}) {\n this.config = {\n masterVolume: 1.0,\n autoUnlock: true,\n disableAutoPause: false,\n channels: {\n music: { volume: 1.0, maxInstances: 1 },\n voice: { volume: 1.0, maxInstances: 1 },\n sfx: { volume: 1.0, maxInstances: 10 },\n ui: { volume: 1.0, maxInstances: 5 },\n },\n ...config,\n };\n\n this._masterVolume = this.config.masterVolume ?? 1.0;\n }\n\n public async initialize(_engine: PixiEngine): Promise<void> {\n // Initialize channels\n this.initializeChannels();\n\n // Import channel mappings from ResourcePlugin\n const resourcePlugin = _engine.getPlugin<any>('resourcePlugin');\n if (resourcePlugin?.soundChannelMappings) {\n for (const [alias, channel] of resourcePlugin.soundChannelMappings) {\n this.soundChannelMap.set(alias, channel as SoundChannel);\n }\n getLogger('SoundPlugin').debug('Imported sound channel mappings from ResourcePlugin', {\n count: this.soundChannelMap.size,\n mappings: Object.fromEntries(this.soundChannelMap),\n });\n }\n\n // Setup auto-pause\n if (!this.config.disableAutoPause) {\n sound.disableAutoPause = false;\n } else {\n sound.disableAutoPause = true;\n }\n\n // Set initial master volume globally\n sound.volumeAll = this._masterVolume;\n\n // Setup auto-unlock\n if (this.config.autoUnlock) {\n this.setupAutoUnlock();\n }\n\n getLogger('SoundPlugin').info('SoundPlugin initialized', {\n channels: Array.from(this.channels.keys()),\n masterVolume: this._masterVolume,\n autoUnlock: this.config.autoUnlock,\n });\n }\n\n public onReady(_engine: PixiEngine): void {\n getLogger('SoundPlugin').debug('SoundPlugin is ready');\n }\n\n public cleanup(): void {\n this.stopAll();\n this.spriteRegistry.clear();\n this.playingInstances.clear();\n this.groupInstances.clear();\n this.soundChannelMap.clear();\n this.activeLoopInstances.clear();\n this.intervalTimers.forEach((timer) => clearTimeout(timer));\n this.intervalTimers.clear();\n getLogger('SoundPlugin').info('SoundPlugin cleaned up');\n }\n\n /**\n * Initialize channel configurations\n */\n private initializeChannels(): void {\n const defaultChannels: Record<SoundChannel, ChannelConfig> = {\n music: { volume: 0.7, maxInstances: 1 },\n voice: { volume: 1.0, maxInstances: 1 },\n sfx: { volume: 0.8, maxInstances: 10 },\n ui: { volume: 0.6, maxInstances: 5 },\n };\n\n const configChannels = this.config.channels ?? {};\n\n for (const channel of ['music', 'voice', 'sfx', 'ui'] as SoundChannel[]) {\n const config = {\n ...defaultChannels[channel],\n ...configChannels[channel],\n };\n this.channels.set(channel, config);\n }\n }\n\n /**\n * Setup auto-unlock for mobile browsers\n */\n private setupAutoUnlock(): void {\n const unlock = () => {\n if (this._unlocked) return;\n\n // Try to unlock audio context\n if (sound.context && sound.context.audioContext) {\n const ctx = sound.context.audioContext;\n if (ctx.state === 'suspended') {\n ctx.resume().then(() => {\n this._unlocked = true;\n getLogger('SoundPlugin').info('AudioContext unlocked');\n });\n } else {\n this._unlocked = true;\n }\n }\n\n // Remove listeners after unlock\n document.removeEventListener('touchstart', unlock, true);\n document.removeEventListener('touchend', unlock, true);\n document.removeEventListener('click', unlock, true);\n document.removeEventListener('keydown', unlock, true);\n };\n\n document.addEventListener('touchstart', unlock, true);\n document.addEventListener('touchend', unlock, true);\n document.addEventListener('click', unlock, true);\n document.addEventListener('keydown', unlock, true);\n }\n\n /**\n * Add sound sprites to a sound file.\n * Each sprite key becomes a playable alias.\n *\n * @param soundAlias - The alias of the loaded sound file\n * @param sprites - Map of sprite names to their start/end times\n * @param channel - Optional channel assignment for all sprites\n *\n * @example\n * ```typescript\n * soundPlugin.addSprites('sfx-sprite', {\n * 'win-big': { start: 0, end: 3 },\n * 'spin': { start: 4, end: 5.5 },\n * 'click': { start: 6, end: 6.2 },\n * }, 'sfx');\n * ```\n */\n public addSprites(\n soundAlias: string,\n sprites: Record<string, SoundSpriteData>,\n channel?: SoundChannel\n ): void {\n const soundInstance = Assets.get<Sound>(soundAlias);\n\n if (!soundInstance) {\n getLogger('SoundPlugin').warn(`Sound not found: ${soundAlias}. Make sure it's loaded first.`);\n return;\n }\n\n // Add sprites to the sound instance\n soundInstance.addSprites(sprites);\n\n // Register each sprite as a playable alias\n for (const spriteKey of Object.keys(sprites)) {\n this.spriteRegistry.set(spriteKey, {\n soundAlias,\n spriteKey,\n channel,\n });\n\n if (channel) {\n this.soundChannelMap.set(spriteKey, channel);\n }\n }\n\n getLogger('SoundPlugin').debug(`Added ${Object.keys(sprites).length} sprites to ${soundAlias}`, {\n sprites: Object.keys(sprites),\n channel,\n });\n }\n\n /**\n * Add sprites from a JSON file.\n *\n * @param soundAlias - The alias of the loaded sound file\n * @param jsonPath - Path to the JSON file containing sprite definitions\n * @param channel - Optional channel assignment for all sprites\n */\n public async addSpritesFromJson(\n soundAlias: string,\n jsonPath: string,\n channel?: SoundChannel\n ): Promise<void> {\n try {\n const response = await fetch(jsonPath);\n const sprites = await response.json() as Record<string, SoundSpriteData>;\n this.addSprites(soundAlias, sprites, channel);\n } catch (error) {\n getLogger('SoundPlugin').error(`Failed to load sprites from ${jsonPath}`, error);\n }\n }\n\n /**\n * Register a sound alias to a channel.\n *\n * @param alias - Sound alias\n * @param channel - Channel to assign\n */\n public setChannel(alias: string, channel: SoundChannel): void {\n this.soundChannelMap.set(alias, channel);\n }\n\n /**\n * Play a sound by alias. Works for both regular sounds and sprites.\n *\n * @param alias - Sound alias or sprite name\n * @param options - Play options\n * @returns Promise resolving to the media instance\n *\n * @example\n * ```typescript\n * // Play regular sound\n * await soundPlugin.play('bgm-main', { loop: true });\n *\n * // Play sprite (same API)\n * await soundPlugin.play('win-big');\n * ```\n */\n public async play(alias: string, options: PlayOptions = {}): Promise<IMediaInstance | null> {\n // Auto-stop previous sounds under the same alias if requested\n if (options.group && options.stopPreviousGroup) {\n this.stopGroup(options.group);\n }\n\n // Check if this is a sprite\n const spriteInfo = this.spriteRegistry.get(alias);\n\n let soundInstance: Sound | undefined;\n let playAlias: string | undefined;\n\n const resolveAlias = spriteInfo ? spriteInfo.soundAlias : alias;\n\n if (spriteInfo) {\n playAlias = spriteInfo.spriteKey;\n }\n\n // Try cache first, lazy load if not found\n soundInstance = Assets.get<Sound>(resolveAlias);\n if (!soundInstance) {\n try {\n getLogger('SoundPlugin').debug(`Lazy loading sound: ${resolveAlias}`);\n soundInstance = await Assets.load<Sound>(resolveAlias);\n } catch (error) {\n getLogger('SoundPlugin').warn(`Sound not found: ${alias}`, error);\n return null;\n }\n }\n\n // Get channel for volume calculation\n const channel = spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n const channelConfig = channel ? this.channels.get(channel) : undefined;\n const channelVolume = channelConfig?.volume ?? 1.0;\n const maxInstances = channelConfig?.maxInstances ?? 10;\n\n // Calculate final volume (master volume handled globally via sound.volumeAll)\n const baseVolume = options.volume ?? 1.0;\n const isMuted = channelConfig?.muted ?? false;\n const finalVolume = isMuted ? 0 : baseVolume * channelVolume;\n\n // Store original volume for mute/unmute restore\n this.soundVolumeMap.set(alias, baseVolume);\n\n // Check max instances\n const currentInstances = this.playingInstances.get(alias) ?? [];\n if (currentInstances.length >= maxInstances) {\n // Stop oldest instance\n const oldest = currentInstances.shift();\n oldest?.stop();\n }\n\n // If loopInterval is set, use interval loop instead of native loop\n const useIntervalLoop = options.loopInterval !== undefined;\n\n // Clear any existing interval timer\n if (useIntervalLoop) {\n this.clearIntervalTimer(alias);\n }\n\n // Play the sound\n try {\n const playOptions: any = {\n volume: finalVolume,\n loop: useIntervalLoop ? false : (options.loop ?? false),\n speed: options.speed ?? 1,\n complete: options.complete,\n };\n\n if (options.start !== undefined) {\n playOptions.start = options.start;\n }\n if (options.end !== undefined) {\n playOptions.end = options.end;\n }\n\n let instance: IMediaInstance;\n\n if (playAlias) {\n // Play sprite with options\n playOptions.sprite = playAlias;\n }\n\n const playResult = soundInstance.play(playOptions);\n\n // DEBUG: Check if Sound.play() returns Promise or IMediaInstance\n const isPromise = playResult instanceof Promise;\n const audioCtxState = sound.context?.audioContext?.state;\n getLogger('SoundPlugin').debug(`Sound.play() result for: ${alias}`, {\n isPromise,\n audioContextState: audioCtxState,\n resultType: isPromise ? 'Promise' : typeof playResult,\n audioCtxState: audioCtxState,\n hasVolume: !isPromise && typeof (playResult as any)?.volume !== 'undefined',\n });\n\n instance = playResult as IMediaInstance;\n\n // Track instance\n if (!this.playingInstances.has(alias)) {\n this.playingInstances.set(alias, []);\n }\n this.playingInstances.get(alias)!.push(instance);\n\n // Track under group if provided\n const playGroup = options.group;\n if (playGroup) {\n if (!this.groupInstances.has(playGroup)) {\n this.groupInstances.set(playGroup, []);\n }\n this.groupInstances.get(playGroup)!.push(instance);\n }\n\n // Register as the active loop instance (replaces any previous)\n if (useIntervalLoop) {\n this.activeLoopInstances.set(alias, instance);\n // Store original options for trigger/replay\n this.intervalLoopOptions.set(alias, options);\n }\n\n // Cleanup function for removing instance from tracking\n const cleanupInstance = () => {\n const instances = this.playingInstances.get(alias);\n if (instances) {\n const idx = instances.indexOf(instance);\n if (idx !== -1) {\n instances.splice(idx, 1);\n }\n }\n\n // Clean up group tracking\n if (playGroup) {\n const groupInsts = this.groupInstances.get(playGroup);\n if (groupInsts) {\n const aIdx = groupInsts.indexOf(instance);\n if (aIdx !== -1) {\n groupInsts.splice(aIdx, 1);\n }\n }\n }\n };\n\n // Remove from tracking when done (end = natural finish, stop = manual stop)\n instance.once('end', () => {\n cleanupInstance();\n\n // Schedule next play ONLY if THIS instance is the active loop instance\n if (useIntervalLoop && this.activeLoopInstances.get(alias) === instance && options.loopInterval !== undefined) {\n const delay = this.getIntervalDelay(options.loopInterval);\n const timer = setTimeout(() => {\n this.intervalTimers.delete(alias);\n if (this.activeLoopInstances.has(alias)) {\n this.play(alias, options);\n }\n }, delay);\n this.intervalTimers.set(alias, timer);\n }\n });\n\n // Also cleanup on manual stop\n instance.once('stop', cleanupInstance);\n\n return instance;\n } catch (error) {\n getLogger('SoundPlugin').error(`Failed to play sound: ${alias}`, error);\n return null;\n }\n }\n\n /**\n * Stop all sounds registered under a logical group.\n *\n * @param group - The logical group set via PlayOptions.group\n */\n public stopGroup(group: string): void {\n const instances = this.groupInstances.get(group);\n if (instances) {\n instances.forEach((inst) => inst.stop());\n this.groupInstances.delete(group);\n }\n }\n\n /**\n * Stop a sound by alias.\n *\n * @param alias - Sound alias or sprite name\n */\n public stopAlias(alias: string): void {\n // Remove from active loops and clear interval timer BEFORE stopping instances\n this.activeLoopInstances.delete(alias);\n this.intervalLoopOptions.delete(alias);\n this.soundVolumeMap.delete(alias);\n this.clearIntervalTimer(alias);\n\n const instances = this.playingInstances.get(alias);\n if (instances) {\n instances.forEach((instance) => instance.stop());\n this.playingInstances.delete(alias);\n }\n\n // Also try to stop the sound directly\n const spriteInfo = this.spriteRegistry.get(alias);\n const soundAlias = spriteInfo?.soundAlias ?? alias;\n const soundInstance = Assets.get<Sound>(soundAlias);\n soundInstance?.stop();\n }\n\n /**\n * Stop all sounds in a specific channel.\n *\n * @param channel - Channel name (music, sfx, voice, ui)\n */\n public stopChannel(channel: SoundChannel): void {\n const aliasesToRemove: string[] = [];\n\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n const spriteInfo = this.spriteRegistry.get(alias);\n const effectiveChannel = spriteInfo?.channel ?? soundChannel;\n\n if (effectiveChannel === channel) {\n instances.forEach((instance) => instance.stop());\n this.activeLoopInstances.delete(alias);\n this.intervalLoopOptions.delete(alias);\n this.clearIntervalTimer(alias);\n aliasesToRemove.push(alias);\n }\n });\n\n // Clean up playingInstances\n aliasesToRemove.forEach((alias) => this.playingInstances.delete(alias));\n }\n\n /**\n * Stop all playing sounds.\n */\n public stopAll(): void {\n // Clear all active loops and interval timers\n this.activeLoopInstances.clear();\n this.intervalLoopOptions.clear();\n this.soundVolumeMap.clear();\n this.intervalTimers.forEach((timer) => clearTimeout(timer));\n this.intervalTimers.clear();\n\n sound.stopAll();\n this.playingInstances.clear();\n this.groupInstances.clear();\n }\n\n /**\n * Pause a sound by alias.\n *\n * @param alias - Sound alias\n */\n public pause(alias: string): void {\n const spriteInfo = this.spriteRegistry.get(alias);\n const soundAlias = spriteInfo?.soundAlias ?? alias;\n const soundInstance = Assets.get<Sound>(soundAlias);\n soundInstance?.pause();\n }\n\n /**\n * Resume a paused sound.\n *\n * @param alias - Sound alias\n */\n public resume(alias: string): void {\n const spriteInfo = this.spriteRegistry.get(alias);\n const soundAlias = spriteInfo?.soundAlias ?? alias;\n const soundInstance = Assets.get<Sound>(soundAlias);\n soundInstance?.resume();\n }\n\n /**\n * Fade in a sound.\n *\n * @param alias - Sound alias\n * @param duration - Fade duration in seconds\n * @param options - Play options\n */\n public async fadeIn(alias: string, duration: number, options: PlayOptions = {}): Promise<void> {\n const instance = await this.play(alias, { ...options });\n if (!instance) return;\n instance.volume = 0;\n\n const spriteInfo = this.spriteRegistry.get(alias);\n const channel = spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n const targetVolume = options.volume ?? 1.0;\n\n // Use proxy object for tweening - allows dynamic volume calculation on each frame\n const proxy = { value: 0 };\n\n gsap.to(proxy, {\n value: targetVolume,\n duration,\n ease: 'power2.out',\n onUpdate: () => {\n // Recalculate final volume on each frame based on current channel state\n const channelConfig = channel ? this.channels.get(channel) : undefined;\n const isMuted = channelConfig?.muted ?? false;\n const channelVolume = channelConfig?.volume ?? 1.0;\n\n instance.volume = isMuted ? 0 : proxy.value * channelVolume;\n },\n });\n }\n\n /**\n * Fade out a sound.\n *\n * @param alias - Sound alias\n * @param duration - Fade duration in seconds\n * @param stopAfter - Whether to stop the sound after fading out\n */\n public async fadeOut(alias: string, duration: number, stopAfter: boolean = true): Promise<void> {\n const instances = this.playingInstances.get(alias);\n if (!instances || instances.length === 0) return;\n\n const spriteInfo = this.spriteRegistry.get(alias);\n const channel = spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n\n const promises = instances.map((instance) => {\n // Get current volume as starting point\n const startVolume = instance.volume;\n\n return new Promise<void>((resolve) => {\n // Use proxy object for tweening - allows dynamic volume calculation on each frame\n const proxy = { value: 1 }; // 1 = full volume, 0 = silent\n\n gsap.to(proxy, {\n value: 0,\n duration,\n ease: 'power2.in',\n onUpdate: () => {\n // Recalculate final volume on each frame based on current channel state\n const channelConfig = channel ? this.channels.get(channel) : undefined;\n const isMuted = channelConfig?.muted ?? false;\n const channelVolume = channelConfig?.volume ?? 1.0;\n\n instance.volume = isMuted ? 0 : startVolume * proxy.value * channelVolume;\n },\n onComplete: () => {\n if (stopAfter) {\n instance.stop();\n }\n resolve();\n },\n });\n });\n });\n\n await Promise.all(promises);\n\n if (stopAfter) {\n this.playingInstances.delete(alias);\n }\n }\n\n /**\n * Crossfade between two sounds.\n *\n * @param fromAlias - Sound to fade out\n * @param toAlias - Sound to fade in\n * @param duration - Crossfade duration in seconds\n * @param options - Play options for the new sound\n */\n public async crossfade(\n fromAlias: string,\n toAlias: string,\n duration: number,\n options: PlayOptions = {}\n ): Promise<void> {\n await Promise.all([\n this.fadeOut(fromAlias, duration),\n this.fadeIn(toAlias, duration, options),\n ]);\n }\n\n /**\n * Fade out all sounds in a channel.\n *\n * @param channel - Channel name\n * @param duration - Fade duration in seconds\n */\n public async fadeOutChannel(channel: SoundChannel, duration: number): Promise<void> {\n const aliasesToFadeOut: string[] = [];\n\n this.playingInstances.forEach((instances, alias) => {\n if (instances.length === 0) return;\n\n const soundChannel = this.soundChannelMap.get(alias);\n const spriteInfo = this.spriteRegistry.get(alias);\n const effectiveChannel = spriteInfo?.channel ?? soundChannel;\n\n if (effectiveChannel === channel) {\n aliasesToFadeOut.push(alias);\n }\n });\n\n if (aliasesToFadeOut.length === 0) return;\n\n await Promise.all(aliasesToFadeOut.map((alias) => this.fadeOut(alias, duration, true)));\n }\n\n /**\n * Queue in a new sound by fading out all sounds in its channel and fading in the new one.\n * Supports both crossfade (simultaneous) and sequential (fade out first, then fade in) transitions.\n *\n * @param alias - Sound alias to play\n * @param duration - Fade in duration in seconds\n * @param options - Queue in options (includes fadeOutDuration, type, channel, and PlayOptions)\n * @returns The new sound instance, or null if failed\n *\n * @example\n * ```typescript\n * // Crossfade (default) - fade out existing and fade in new simultaneously\n * soundPlugin.queueIn('freespin', 1, { loop: true });\n *\n * // Sequential - fade out first, then fade in\n * soundPlugin.queueIn('freespin', 1, { loop: true, type: 'sequential' });\n *\n * // Different fade durations\n * soundPlugin.queueIn('freespin', 1, { loop: true, fadeOutDuration: 0.5 });\n * ```\n */\n public async queueIn(\n alias: string,\n duration: number,\n options: QueueInOptions = {}\n ): Promise<IMediaInstance | null> {\n const { fadeOutDuration, type = 'crossfade', channel: overrideChannel, ...playOptions } = options;\n\n // Determine channel from override, sprite registry, or sound channel map\n const spriteInfo = this.spriteRegistry.get(alias);\n const channel = overrideChannel ?? spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n\n if (!channel) {\n getLogger('SoundPlugin').warn(`queueIn: No channel found for alias \"${alias}\"`);\n return this.fadeIn(alias, duration, playOptions).then(() => {\n const instances = this.playingInstances.get(alias);\n return instances?.[instances.length - 1] ?? null;\n });\n }\n\n const fadeOutTime = fadeOutDuration ?? duration;\n\n if (type === 'sequential') {\n // Sequential: fade out first, then fade in\n await this.fadeOutChannel(channel, fadeOutTime);\n await this.fadeIn(alias, duration, playOptions);\n } else {\n // Crossfade: fade out and fade in simultaneously\n await Promise.all([\n this.fadeOutChannel(channel, fadeOutTime),\n this.fadeIn(alias, duration, playOptions),\n ]);\n }\n\n // Return the new instance\n const instances = this.playingInstances.get(alias);\n return instances?.[instances.length - 1] ?? null;\n }\n\n /**\n * Set channel volume.\n *\n * @param channel - Channel name\n * @param volume - Volume (0-1)\n */\n public setChannelVolume(channel: SoundChannel, volume: number): void {\n const config = this.channels.get(channel);\n if (config) {\n const newVolume = Math.max(0, Math.min(1, volume));\n config.volume = newVolume;\n this.channels.set(channel, config);\n\n // Update volume of all currently playing instances in this channel (if not muted)\n if (!config.muted) {\n this.setChannelInstancesVolume(channel, newVolume);\n }\n\n getLogger('SoundPlugin').debug(`Channel ${channel} volume set to ${volume}`);\n }\n }\n\n /**\n * Get channel volume.\n *\n * @param channel - Channel name\n * @returns Volume (0-1)\n */\n public getChannelVolume(channel: SoundChannel): number {\n return this.channels.get(channel)?.volume ?? 1.0;\n }\n\n /**\n * Mute a channel.\n *\n * @param channel - Channel name\n */\n public muteChannel(channel: SoundChannel): void {\n const config = this.channels.get(channel);\n if (config) {\n config.muted = true;\n this.channels.set(channel, config);\n // Mute all currently playing instances in this channel\n this.setChannelInstancesVolume(channel, 0);\n getLogger('SoundPlugin').debug(`Channel ${channel} muted`);\n }\n }\n\n /**\n * Unmute a channel.\n *\n * @param channel - Channel name\n */\n public unmuteChannel(channel: SoundChannel): void {\n const config = this.channels.get(channel);\n if (config) {\n config.muted = false;\n this.channels.set(channel, config);\n // Restore volume on all currently playing instances in this channel\n this.setChannelInstancesVolume(channel, config.volume);\n getLogger('SoundPlugin').debug(`Channel ${channel} unmuted`);\n }\n }\n\n /**\n * Set volume on all currently playing instances in a channel.\n * Takes into account the original sound volume from soundVolumeMap.\n */\n private setChannelInstancesVolume(channel: SoundChannel, channelVolume: number): void {\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n const spriteInfo = this.spriteRegistry.get(alias);\n const effectiveChannel = spriteInfo?.channel ?? soundChannel;\n if (effectiveChannel === channel) {\n // Get original sound volume\n const soundVolume = this.soundVolumeMap.get(alias) ?? 1.0;\n const finalVolume = soundVolume * channelVolume;\n\n instances.forEach((instance: IMediaInstance) => {\n instance.volume = finalVolume;\n });\n }\n });\n }\n\n /**\n * Check if a channel is muted.\n *\n * @param channel - Channel name\n * @returns True if muted\n */\n public isChannelMuted(channel: SoundChannel): boolean {\n return this.channels.get(channel)?.muted ?? false;\n }\n\n /**\n * Pause all sounds in a channel.\n *\n * @param channel - Channel name\n */\n public pauseChannel(channel: SoundChannel): void {\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n if (soundChannel === channel) {\n instances.forEach((instance: IMediaInstance) => instance.paused = true);\n }\n });\n }\n\n /**\n * Resume all sounds in a channel.\n *\n * @param channel - Channel name\n */\n public resumeChannel(channel: SoundChannel): void {\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n if (soundChannel === channel) {\n instances.forEach((instance: IMediaInstance) => instance.paused = false);\n }\n });\n }\n\n /**\n * Set master volume.\n *\n * @param volume - Volume (0-1)\n */\n public set masterVolume(volume: number) {\n this._masterVolume = Math.max(0, Math.min(1, volume));\n sound.volumeAll = this._masterVolume;\n getLogger('SoundPlugin').debug(`Master volume set to ${this._masterVolume}`);\n }\n\n /**\n * Get master volume.\n */\n public get masterVolume(): number {\n return this._masterVolume;\n }\n\n /**\n * Check if audio context is unlocked.\n */\n public get isUnlocked(): boolean {\n return this._unlocked;\n }\n\n /**\n * Calculate interval delay from a fixed number or random range.\n */\n private getIntervalDelay(loopInterval: number | [number, number]): number {\n if (Array.isArray(loopInterval)) {\n const [min, max] = loopInterval;\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n return loopInterval;\n }\n\n /**\n * Clear an active interval timer for an alias.\n */\n private clearIntervalTimer(alias: string): void {\n const timer = this.intervalTimers.get(alias);\n if (timer) {\n clearTimeout(timer);\n this.intervalTimers.delete(alias);\n }\n }\n\n /**\n * Trigger an interval loop sound immediately, skipping the wait timer.\n * Only works for sounds that are in interval loop mode (loopInterval).\n *\n * @param alias - Sound alias to trigger\n */\n public triggerIntervalLoop(alias: string): void {\n if (!this.activeLoopInstances.has(alias)) {\n getLogger('SoundPlugin').warn(`triggerIntervalLoop: \"${alias}\" is not an active interval loop`);\n return;\n }\n\n // Clear the existing timer\n this.clearIntervalTimer(alias);\n\n // Get original options (includes volume, loopInterval, etc.)\n const originalOptions = this.intervalLoopOptions.get(alias);\n\n // Play immediately with original options\n this.play(alias, originalOptions);\n }\n\n /**\n * Check if an alias is currently in interval loop mode.\n *\n * @param alias - Sound alias to check\n * @returns True if the alias is an active interval loop\n */\n public isIntervalLoop(alias: string): boolean {\n return this.activeLoopInstances.has(alias);\n }\n\n /**\n * Check if an alias is waiting for its next interval play.\n *\n * @param alias - Sound alias to check\n * @returns True if the alias has a pending interval timer\n */\n public isWaitingForInterval(alias: string): boolean {\n return this.intervalTimers.has(alias);\n }\n\n [key: symbol]: any;\n}\n","/*! Tweakpane 4.0.5 (c) 2016 cocopon, licensed under the MIT license. */\nfunction forceCast(v) {\n return v;\n}\nfunction isEmpty(value) {\n return value === null || value === undefined;\n}\nfunction isObject$1(value) {\n return value !== null && typeof value === 'object';\n}\nfunction isRecord(value) {\n return value !== null && typeof value === 'object';\n}\nfunction deepEqualsArray(a1, a2) {\n if (a1.length !== a2.length) {\n return false;\n }\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction deepMerge(r1, r2) {\n const keys = Array.from(new Set([...Object.keys(r1), ...Object.keys(r2)]));\n return keys.reduce((result, key) => {\n const v1 = r1[key];\n const v2 = r2[key];\n return isRecord(v1) && isRecord(v2)\n ? Object.assign(Object.assign({}, result), { [key]: deepMerge(v1, v2) }) : Object.assign(Object.assign({}, result), { [key]: key in r2 ? v2 : v1 });\n }, {});\n}\n\nfunction isBinding(value) {\n if (!isObject$1(value)) {\n return false;\n }\n return 'target' in value;\n}\n\nconst CREATE_MESSAGE_MAP = {\n alreadydisposed: () => 'View has been already disposed',\n invalidparams: (context) => `Invalid parameters for '${context.name}'`,\n nomatchingcontroller: (context) => `No matching controller for '${context.key}'`,\n nomatchingview: (context) => `No matching view for '${JSON.stringify(context.params)}'`,\n notbindable: () => `Value is not bindable`,\n notcompatible: (context) => `Not compatible with plugin '${context.id}'`,\n propertynotfound: (context) => `Property '${context.name}' not found`,\n shouldneverhappen: () => 'This error should never happen',\n};\nclass TpError {\n static alreadyDisposed() {\n return new TpError({ type: 'alreadydisposed' });\n }\n static notBindable() {\n return new TpError({\n type: 'notbindable',\n });\n }\n static notCompatible(bundleId, id) {\n return new TpError({\n type: 'notcompatible',\n context: {\n id: `${bundleId}.${id}`,\n },\n });\n }\n static propertyNotFound(name) {\n return new TpError({\n type: 'propertynotfound',\n context: {\n name: name,\n },\n });\n }\n static shouldNeverHappen() {\n return new TpError({ type: 'shouldneverhappen' });\n }\n constructor(config) {\n var _a;\n this.message =\n (_a = CREATE_MESSAGE_MAP[config.type](forceCast(config.context))) !== null && _a !== void 0 ? _a : 'Unexpected error';\n this.name = this.constructor.name;\n this.stack = new Error(this.message).stack;\n this.type = config.type;\n }\n toString() {\n return this.message;\n }\n}\n\nclass BindingTarget {\n constructor(obj, key) {\n this.obj_ = obj;\n this.key = key;\n }\n static isBindable(obj) {\n if (obj === null) {\n return false;\n }\n if (typeof obj !== 'object' && typeof obj !== 'function') {\n return false;\n }\n return true;\n }\n read() {\n return this.obj_[this.key];\n }\n write(value) {\n this.obj_[this.key] = value;\n }\n writeProperty(name, value) {\n const valueObj = this.read();\n if (!BindingTarget.isBindable(valueObj)) {\n throw TpError.notBindable();\n }\n if (!(name in valueObj)) {\n throw TpError.propertyNotFound(name);\n }\n valueObj[name] = value;\n }\n}\n\nclass Emitter {\n constructor() {\n this.observers_ = {};\n }\n on(eventName, handler, opt_options) {\n var _a;\n let observers = this.observers_[eventName];\n if (!observers) {\n observers = this.observers_[eventName] = [];\n }\n observers.push({\n handler: handler,\n key: (_a = opt_options === null || opt_options === void 0 ? void 0 : opt_options.key) !== null && _a !== void 0 ? _a : handler,\n });\n return this;\n }\n off(eventName, key) {\n const observers = this.observers_[eventName];\n if (observers) {\n this.observers_[eventName] = observers.filter((observer) => {\n return observer.key !== key;\n });\n }\n return this;\n }\n emit(eventName, event) {\n const observers = this.observers_[eventName];\n if (!observers) {\n return;\n }\n observers.forEach((observer) => {\n observer.handler(event);\n });\n }\n}\n\nclass ComplexValue {\n constructor(initialValue, config) {\n var _a;\n this.constraint_ = config === null || config === void 0 ? void 0 : config.constraint;\n this.equals_ = (_a = config === null || config === void 0 ? void 0 : config.equals) !== null && _a !== void 0 ? _a : ((v1, v2) => v1 === v2);\n this.emitter = new Emitter();\n this.rawValue_ = initialValue;\n }\n get constraint() {\n return this.constraint_;\n }\n get rawValue() {\n return this.rawValue_;\n }\n set rawValue(rawValue) {\n this.setRawValue(rawValue, {\n forceEmit: false,\n last: true,\n });\n }\n setRawValue(rawValue, options) {\n const opts = options !== null && options !== void 0 ? options : {\n forceEmit: false,\n last: true,\n };\n const constrainedValue = this.constraint_\n ? this.constraint_.constrain(rawValue)\n : rawValue;\n const prevValue = this.rawValue_;\n const changed = !this.equals_(prevValue, constrainedValue);\n if (!changed && !opts.forceEmit) {\n return;\n }\n this.emitter.emit('beforechange', {\n sender: this,\n });\n this.rawValue_ = constrainedValue;\n this.emitter.emit('change', {\n options: opts,\n previousRawValue: prevValue,\n rawValue: constrainedValue,\n sender: this,\n });\n }\n}\n\nclass PrimitiveValue {\n constructor(initialValue) {\n this.emitter = new Emitter();\n this.value_ = initialValue;\n }\n get rawValue() {\n return this.value_;\n }\n set rawValue(value) {\n this.setRawValue(value, {\n forceEmit: false,\n last: true,\n });\n }\n setRawValue(value, options) {\n const opts = options !== null && options !== void 0 ? options : {\n forceEmit: false,\n last: true,\n };\n const prevValue = this.value_;\n if (prevValue === value && !opts.forceEmit) {\n return;\n }\n this.emitter.emit('beforechange', {\n sender: this,\n });\n this.value_ = value;\n this.emitter.emit('change', {\n options: opts,\n previousRawValue: prevValue,\n rawValue: this.value_,\n sender: this,\n });\n }\n}\n\nclass ReadonlyPrimitiveValue {\n constructor(value) {\n this.emitter = new Emitter();\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value_ = value;\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n }\n get rawValue() {\n return this.value_.rawValue;\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\n\nfunction createValue(initialValue, config) {\n const constraint = config === null || config === void 0 ? void 0 : config.constraint;\n const equals = config === null || config === void 0 ? void 0 : config.equals;\n if (!constraint && !equals) {\n return new PrimitiveValue(initialValue);\n }\n return new ComplexValue(initialValue, config);\n}\nfunction createReadonlyValue(value) {\n return [\n new ReadonlyPrimitiveValue(value),\n (rawValue, options) => {\n value.setRawValue(rawValue, options);\n },\n ];\n}\n\nclass ValueMap {\n constructor(valueMap) {\n this.emitter = new Emitter();\n this.valMap_ = valueMap;\n for (const key in this.valMap_) {\n const v = this.valMap_[key];\n v.emitter.on('change', () => {\n this.emitter.emit('change', {\n key: key,\n sender: this,\n });\n });\n }\n }\n static createCore(initialValue) {\n const keys = Object.keys(initialValue);\n return keys.reduce((o, key) => {\n return Object.assign(o, {\n [key]: createValue(initialValue[key]),\n });\n }, {});\n }\n static fromObject(initialValue) {\n const core = this.createCore(initialValue);\n return new ValueMap(core);\n }\n get(key) {\n return this.valMap_[key].rawValue;\n }\n set(key, value) {\n this.valMap_[key].rawValue = value;\n }\n value(key) {\n return this.valMap_[key];\n }\n}\n\nclass DefiniteRangeConstraint {\n constructor(config) {\n this.values = ValueMap.fromObject({\n max: config.max,\n min: config.min,\n });\n }\n constrain(value) {\n const max = this.values.get('max');\n const min = this.values.get('min');\n return Math.min(Math.max(value, min), max);\n }\n}\n\nclass RangeConstraint {\n constructor(config) {\n this.values = ValueMap.fromObject({\n max: config.max,\n min: config.min,\n });\n }\n constrain(value) {\n const max = this.values.get('max');\n const min = this.values.get('min');\n let result = value;\n if (!isEmpty(min)) {\n result = Math.max(result, min);\n }\n if (!isEmpty(max)) {\n result = Math.min(result, max);\n }\n return result;\n }\n}\n\nclass StepConstraint {\n constructor(step, origin = 0) {\n this.step = step;\n this.origin = origin;\n }\n constrain(value) {\n const o = this.origin % this.step;\n const r = Math.round((value - o) / this.step);\n return o + r * this.step;\n }\n}\n\nclass NumberLiteralNode {\n constructor(text) {\n this.text = text;\n }\n evaluate() {\n return Number(this.text);\n }\n toString() {\n return this.text;\n }\n}\nconst BINARY_OPERATION_MAP = {\n '**': (v1, v2) => Math.pow(v1, v2),\n '*': (v1, v2) => v1 * v2,\n '/': (v1, v2) => v1 / v2,\n '%': (v1, v2) => v1 % v2,\n '+': (v1, v2) => v1 + v2,\n '-': (v1, v2) => v1 - v2,\n '<<': (v1, v2) => v1 << v2,\n '>>': (v1, v2) => v1 >> v2,\n '>>>': (v1, v2) => v1 >>> v2,\n '&': (v1, v2) => v1 & v2,\n '^': (v1, v2) => v1 ^ v2,\n '|': (v1, v2) => v1 | v2,\n};\nclass BinaryOperationNode {\n constructor(operator, left, right) {\n this.left = left;\n this.operator = operator;\n this.right = right;\n }\n evaluate() {\n const op = BINARY_OPERATION_MAP[this.operator];\n if (!op) {\n throw new Error(`unexpected binary operator: '${this.operator}`);\n }\n return op(this.left.evaluate(), this.right.evaluate());\n }\n toString() {\n return [\n 'b(',\n this.left.toString(),\n this.operator,\n this.right.toString(),\n ')',\n ].join(' ');\n }\n}\nconst UNARY_OPERATION_MAP = {\n '+': (v) => v,\n '-': (v) => -v,\n '~': (v) => ~v,\n};\nclass UnaryOperationNode {\n constructor(operator, expr) {\n this.operator = operator;\n this.expression = expr;\n }\n evaluate() {\n const op = UNARY_OPERATION_MAP[this.operator];\n if (!op) {\n throw new Error(`unexpected unary operator: '${this.operator}`);\n }\n return op(this.expression.evaluate());\n }\n toString() {\n return ['u(', this.operator, this.expression.toString(), ')'].join(' ');\n }\n}\n\nfunction combineReader(parsers) {\n return (text, cursor) => {\n for (let i = 0; i < parsers.length; i++) {\n const result = parsers[i](text, cursor);\n if (result !== '') {\n return result;\n }\n }\n return '';\n };\n}\nfunction readWhitespace(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^\\s+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readNonZeroDigit(text, cursor) {\n const ch = text.substr(cursor, 1);\n return ch.match(/^[1-9]$/) ? ch : '';\n}\nfunction readDecimalDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-9]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readSignedInteger(text, cursor) {\n const ds = readDecimalDigits(text, cursor);\n if (ds !== '') {\n return ds;\n }\n const sign = text.substr(cursor, 1);\n cursor += 1;\n if (sign !== '-' && sign !== '+') {\n return '';\n }\n const sds = readDecimalDigits(text, cursor);\n if (sds === '') {\n return '';\n }\n return sign + sds;\n}\nfunction readExponentPart(text, cursor) {\n const e = text.substr(cursor, 1);\n cursor += 1;\n if (e.toLowerCase() !== 'e') {\n return '';\n }\n const si = readSignedInteger(text, cursor);\n if (si === '') {\n return '';\n }\n return e + si;\n}\nfunction readDecimalIntegerLiteral(text, cursor) {\n const ch = text.substr(cursor, 1);\n if (ch === '0') {\n return ch;\n }\n const nzd = readNonZeroDigit(text, cursor);\n cursor += nzd.length;\n if (nzd === '') {\n return '';\n }\n return nzd + readDecimalDigits(text, cursor);\n}\nfunction readDecimalLiteral1(text, cursor) {\n const dil = readDecimalIntegerLiteral(text, cursor);\n cursor += dil.length;\n if (dil === '') {\n return '';\n }\n const dot = text.substr(cursor, 1);\n cursor += dot.length;\n if (dot !== '.') {\n return '';\n }\n const dds = readDecimalDigits(text, cursor);\n cursor += dds.length;\n return dil + dot + dds + readExponentPart(text, cursor);\n}\nfunction readDecimalLiteral2(text, cursor) {\n const dot = text.substr(cursor, 1);\n cursor += dot.length;\n if (dot !== '.') {\n return '';\n }\n const dds = readDecimalDigits(text, cursor);\n cursor += dds.length;\n if (dds === '') {\n return '';\n }\n return dot + dds + readExponentPart(text, cursor);\n}\nfunction readDecimalLiteral3(text, cursor) {\n const dil = readDecimalIntegerLiteral(text, cursor);\n cursor += dil.length;\n if (dil === '') {\n return '';\n }\n return dil + readExponentPart(text, cursor);\n}\nconst readDecimalLiteral = combineReader([\n readDecimalLiteral1,\n readDecimalLiteral2,\n readDecimalLiteral3,\n]);\nfunction parseBinaryDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[01]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readBinaryIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0b') {\n return '';\n }\n const bds = parseBinaryDigits(text, cursor);\n if (bds === '') {\n return '';\n }\n return prefix + bds;\n}\nfunction readOctalDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-7]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readOctalIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0o') {\n return '';\n }\n const ods = readOctalDigits(text, cursor);\n if (ods === '') {\n return '';\n }\n return prefix + ods;\n}\nfunction readHexDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-9a-f]+/i);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readHexIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0x') {\n return '';\n }\n const hds = readHexDigits(text, cursor);\n if (hds === '') {\n return '';\n }\n return prefix + hds;\n}\nconst readNonDecimalIntegerLiteral = combineReader([\n readBinaryIntegerLiteral,\n readOctalIntegerLiteral,\n readHexIntegerLiteral,\n]);\nconst readNumericLiteral = combineReader([\n readNonDecimalIntegerLiteral,\n readDecimalLiteral,\n]);\n\nfunction parseLiteral(text, cursor) {\n const num = readNumericLiteral(text, cursor);\n cursor += num.length;\n if (num === '') {\n return null;\n }\n return {\n evaluable: new NumberLiteralNode(num),\n cursor: cursor,\n };\n}\nfunction parseParenthesizedExpression(text, cursor) {\n const op = text.substr(cursor, 1);\n cursor += op.length;\n if (op !== '(') {\n return null;\n }\n const expr = parseExpression(text, cursor);\n if (!expr) {\n return null;\n }\n cursor = expr.cursor;\n cursor += readWhitespace(text, cursor).length;\n const cl = text.substr(cursor, 1);\n cursor += cl.length;\n if (cl !== ')') {\n return null;\n }\n return {\n evaluable: expr.evaluable,\n cursor: cursor,\n };\n}\nfunction parsePrimaryExpression(text, cursor) {\n var _a;\n return ((_a = parseLiteral(text, cursor)) !== null && _a !== void 0 ? _a : parseParenthesizedExpression(text, cursor));\n}\nfunction parseUnaryExpression(text, cursor) {\n const expr = parsePrimaryExpression(text, cursor);\n if (expr) {\n return expr;\n }\n const op = text.substr(cursor, 1);\n cursor += op.length;\n if (op !== '+' && op !== '-' && op !== '~') {\n return null;\n }\n const num = parseUnaryExpression(text, cursor);\n if (!num) {\n return null;\n }\n cursor = num.cursor;\n return {\n cursor: cursor,\n evaluable: new UnaryOperationNode(op, num.evaluable),\n };\n}\nfunction readBinaryOperator(ops, text, cursor) {\n cursor += readWhitespace(text, cursor).length;\n const op = ops.filter((op) => text.startsWith(op, cursor))[0];\n if (!op) {\n return null;\n }\n cursor += op.length;\n cursor += readWhitespace(text, cursor).length;\n return {\n cursor: cursor,\n operator: op,\n };\n}\nfunction createBinaryOperationExpressionParser(exprParser, ops) {\n return (text, cursor) => {\n const firstExpr = exprParser(text, cursor);\n if (!firstExpr) {\n return null;\n }\n cursor = firstExpr.cursor;\n let expr = firstExpr.evaluable;\n for (;;) {\n const op = readBinaryOperator(ops, text, cursor);\n if (!op) {\n break;\n }\n cursor = op.cursor;\n const nextExpr = exprParser(text, cursor);\n if (!nextExpr) {\n return null;\n }\n cursor = nextExpr.cursor;\n expr = new BinaryOperationNode(op.operator, expr, nextExpr.evaluable);\n }\n return expr\n ? {\n cursor: cursor,\n evaluable: expr,\n }\n : null;\n };\n}\nconst parseBinaryOperationExpression = [\n ['**'],\n ['*', '/', '%'],\n ['+', '-'],\n ['<<', '>>>', '>>'],\n ['&'],\n ['^'],\n ['|'],\n].reduce((parser, ops) => {\n return createBinaryOperationExpressionParser(parser, ops);\n}, parseUnaryExpression);\nfunction parseExpression(text, cursor) {\n cursor += readWhitespace(text, cursor).length;\n return parseBinaryOperationExpression(text, cursor);\n}\nfunction parseEcmaNumberExpression(text) {\n const expr = parseExpression(text, 0);\n if (!expr) {\n return null;\n }\n const cursor = expr.cursor + readWhitespace(text, expr.cursor).length;\n if (cursor !== text.length) {\n return null;\n }\n return expr.evaluable;\n}\n\nfunction parseNumber(text) {\n var _a;\n const r = parseEcmaNumberExpression(text);\n return (_a = r === null || r === void 0 ? void 0 : r.evaluate()) !== null && _a !== void 0 ? _a : null;\n}\nfunction numberFromUnknown(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const pv = parseNumber(value);\n if (!isEmpty(pv)) {\n return pv;\n }\n }\n return 0;\n}\nfunction numberToString(value) {\n return String(value);\n}\nfunction createNumberFormatter(digits) {\n return (value) => {\n return value.toFixed(Math.max(Math.min(digits, 20), 0));\n };\n}\n\nfunction mapRange(value, start1, end1, start2, end2) {\n const p = (value - start1) / (end1 - start1);\n return start2 + p * (end2 - start2);\n}\nfunction getDecimalDigits(value) {\n const text = String(value.toFixed(10));\n const frac = text.split('.')[1];\n return frac.replace(/0+$/, '').length;\n}\nfunction constrainRange(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nfunction loopRange(value, max) {\n return ((value % max) + max) % max;\n}\nfunction getSuitableDecimalDigits(params, rawValue) {\n return !isEmpty(params.step)\n ? getDecimalDigits(params.step)\n : Math.max(getDecimalDigits(rawValue), 2);\n}\nfunction getSuitableKeyScale(params) {\n var _a;\n return (_a = params.step) !== null && _a !== void 0 ? _a : 1;\n}\nfunction getSuitablePointerScale(params, rawValue) {\n var _a;\n const base = Math.abs((_a = params.step) !== null && _a !== void 0 ? _a : rawValue);\n return base === 0 ? 0.1 : Math.pow(10, Math.floor(Math.log10(base)) - 1);\n}\nfunction createStepConstraint(params, initialValue) {\n if (!isEmpty(params.step)) {\n return new StepConstraint(params.step, initialValue);\n }\n return null;\n}\nfunction createRangeConstraint(params) {\n if (!isEmpty(params.max) && !isEmpty(params.min)) {\n return new DefiniteRangeConstraint({\n max: params.max,\n min: params.min,\n });\n }\n if (!isEmpty(params.max) || !isEmpty(params.min)) {\n return new RangeConstraint({\n max: params.max,\n min: params.min,\n });\n }\n return null;\n}\nfunction createNumberTextPropsObject(params, initialValue) {\n var _a, _b, _c;\n return {\n formatter: (_a = params.format) !== null && _a !== void 0 ? _a : createNumberFormatter(getSuitableDecimalDigits(params, initialValue)),\n keyScale: (_b = params.keyScale) !== null && _b !== void 0 ? _b : getSuitableKeyScale(params),\n pointerScale: (_c = params.pointerScale) !== null && _c !== void 0 ? _c : getSuitablePointerScale(params, initialValue),\n };\n}\nfunction createNumberTextInputParamsParser(p) {\n return {\n format: p.optional.function,\n keyScale: p.optional.number,\n max: p.optional.number,\n min: p.optional.number,\n pointerScale: p.optional.number,\n step: p.optional.number,\n };\n}\n\nfunction createPointAxis(config) {\n return {\n constraint: config.constraint,\n textProps: ValueMap.fromObject(createNumberTextPropsObject(config.params, config.initialValue)),\n };\n}\n\nclass BladeApi {\n constructor(controller) {\n this.controller = controller;\n }\n get element() {\n return this.controller.view.element;\n }\n get disabled() {\n return this.controller.viewProps.get('disabled');\n }\n set disabled(disabled) {\n this.controller.viewProps.set('disabled', disabled);\n }\n get hidden() {\n return this.controller.viewProps.get('hidden');\n }\n set hidden(hidden) {\n this.controller.viewProps.set('hidden', hidden);\n }\n dispose() {\n this.controller.viewProps.set('disposed', true);\n }\n importState(state) {\n return this.controller.importState(state);\n }\n exportState() {\n return this.controller.exportState();\n }\n}\n\nclass TpEvent {\n constructor(target) {\n this.target = target;\n }\n}\nclass TpChangeEvent extends TpEvent {\n constructor(target, value, last) {\n super(target);\n this.value = value;\n this.last = last !== null && last !== void 0 ? last : true;\n }\n}\nclass TpFoldEvent extends TpEvent {\n constructor(target, expanded) {\n super(target);\n this.expanded = expanded;\n }\n}\nclass TpTabSelectEvent extends TpEvent {\n constructor(target, index) {\n super(target);\n this.index = index;\n }\n}\nclass TpMouseEvent extends TpEvent {\n constructor(target, nativeEvent) {\n super(target);\n this.native = nativeEvent;\n }\n}\n\nclass BindingApi extends BladeApi {\n constructor(controller) {\n super(controller);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', this.onValueChange_);\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get key() {\n return this.controller.value.binding.target.key;\n }\n get tag() {\n return this.controller.tag;\n }\n set tag(tag) {\n this.controller.tag = tag;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n refresh() {\n this.controller.value.fetch();\n }\n onValueChange_(ev) {\n const value = this.controller.value;\n this.emitter_.emit('change', new TpChangeEvent(this, forceCast(value.binding.target.read()), ev.options.last));\n }\n}\n\nclass InputBindingValue {\n constructor(value, binding) {\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.binding = binding;\n this.value_ = value;\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n this.emitter = new Emitter();\n }\n get rawValue() {\n return this.value_.rawValue;\n }\n set rawValue(rawValue) {\n this.value_.rawValue = rawValue;\n }\n setRawValue(rawValue, options) {\n this.value_.setRawValue(rawValue, options);\n }\n fetch() {\n this.value_.rawValue = this.binding.read();\n }\n push() {\n this.binding.write(this.value_.rawValue);\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.push();\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\nfunction isInputBindingValue(v) {\n if (!('binding' in v)) {\n return false;\n }\n const b = v['binding'];\n return isBinding(b) && 'read' in b && 'write' in b;\n}\n\nfunction parseObject(value, keyToParserMap) {\n const keys = Object.keys(keyToParserMap);\n const result = keys.reduce((tmp, key) => {\n if (tmp === undefined) {\n return undefined;\n }\n const parser = keyToParserMap[key];\n const result = parser(value[key]);\n return result.succeeded\n ? Object.assign(Object.assign({}, tmp), { [key]: result.value }) : undefined;\n }, {});\n return forceCast(result);\n}\nfunction parseArray(value, parseItem) {\n return value.reduce((tmp, item) => {\n if (tmp === undefined) {\n return undefined;\n }\n const result = parseItem(item);\n if (!result.succeeded || result.value === undefined) {\n return undefined;\n }\n return [...tmp, result.value];\n }, []);\n}\nfunction isObject(value) {\n if (value === null) {\n return false;\n }\n return typeof value === 'object';\n}\nfunction createMicroParserBuilder(parse) {\n return (optional) => (v) => {\n if (!optional && v === undefined) {\n return {\n succeeded: false,\n value: undefined,\n };\n }\n if (optional && v === undefined) {\n return {\n succeeded: true,\n value: undefined,\n };\n }\n const result = parse(v);\n return result !== undefined\n ? {\n succeeded: true,\n value: result,\n }\n : {\n succeeded: false,\n value: undefined,\n };\n };\n}\nfunction createMicroParserBuilders(optional) {\n return {\n custom: (parse) => createMicroParserBuilder(parse)(optional),\n boolean: createMicroParserBuilder((v) => typeof v === 'boolean' ? v : undefined)(optional),\n number: createMicroParserBuilder((v) => typeof v === 'number' ? v : undefined)(optional),\n string: createMicroParserBuilder((v) => typeof v === 'string' ? v : undefined)(optional),\n function: createMicroParserBuilder((v) =>\n typeof v === 'function' ? v : undefined)(optional),\n constant: (value) => createMicroParserBuilder((v) => (v === value ? value : undefined))(optional),\n raw: createMicroParserBuilder((v) => v)(optional),\n object: (keyToParserMap) => createMicroParserBuilder((v) => {\n if (!isObject(v)) {\n return undefined;\n }\n return parseObject(v, keyToParserMap);\n })(optional),\n array: (itemParser) => createMicroParserBuilder((v) => {\n if (!Array.isArray(v)) {\n return undefined;\n }\n return parseArray(v, itemParser);\n })(optional),\n };\n}\nconst MicroParsers = {\n optional: createMicroParserBuilders(true),\n required: createMicroParserBuilders(false),\n};\nfunction parseRecord(value, keyToParserMap) {\n const map = keyToParserMap(MicroParsers);\n const result = MicroParsers.required.object(map)(value);\n return result.succeeded ? result.value : undefined;\n}\n\nfunction importBladeState(state, superImport, parser, callback) {\n if (superImport && !superImport(state)) {\n return false;\n }\n const result = parseRecord(state, parser);\n return result ? callback(result) : false;\n}\nfunction exportBladeState(superExport, thisState) {\n var _a;\n return deepMerge((_a = superExport === null || superExport === void 0 ? void 0 : superExport()) !== null && _a !== void 0 ? _a : {}, thisState);\n}\n\nfunction isValueBladeController(bc) {\n return 'value' in bc;\n}\n\nfunction isBindingValue(v) {\n if (!isObject$1(v) || !('binding' in v)) {\n return false;\n }\n const b = v.binding;\n return isBinding(b);\n}\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nfunction forceReflow(element) {\n element.offsetHeight;\n}\nfunction disableTransitionTemporarily(element, callback) {\n const t = element.style.transition;\n element.style.transition = 'none';\n callback();\n element.style.transition = t;\n}\nfunction supportsTouch(doc) {\n return doc.ontouchstart !== undefined;\n}\nfunction getGlobalObject() {\n return globalThis;\n}\nfunction getWindowDocument() {\n const globalObj = forceCast(getGlobalObject());\n return globalObj.document;\n}\nfunction getCanvasContext(canvasElement) {\n const win = canvasElement.ownerDocument.defaultView;\n if (!win) {\n return null;\n }\n const isBrowser = 'document' in win;\n return isBrowser\n ? canvasElement.getContext('2d', {\n willReadFrequently: true,\n })\n : null;\n}\nconst ICON_ID_TO_INNER_HTML_MAP = {\n check: '<path d=\"M2 8l4 4l8 -8\"/>',\n dropdown: '<path d=\"M5 7h6l-3 3 z\"/>',\n p2dpad: '<path d=\"M8 4v8\"/><path d=\"M4 8h8\"/><circle cx=\"12\" cy=\"12\" r=\"1.2\"/>',\n};\nfunction createSvgIconElement(document, iconId) {\n const elem = document.createElementNS(SVG_NS, 'svg');\n elem.innerHTML = ICON_ID_TO_INNER_HTML_MAP[iconId];\n return elem;\n}\nfunction insertElementAt(parentElement, element, index) {\n parentElement.insertBefore(element, parentElement.children[index]);\n}\nfunction removeElement(element) {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n}\nfunction removeChildElements(element) {\n while (element.children.length > 0) {\n element.removeChild(element.children[0]);\n }\n}\nfunction removeChildNodes(element) {\n while (element.childNodes.length > 0) {\n element.removeChild(element.childNodes[0]);\n }\n}\nfunction findNextTarget(ev) {\n if (ev.relatedTarget) {\n return forceCast(ev.relatedTarget);\n }\n if ('explicitOriginalTarget' in ev) {\n return ev.explicitOriginalTarget;\n }\n return null;\n}\n\nfunction bindValue(value, applyValue) {\n value.emitter.on('change', (ev) => {\n applyValue(ev.rawValue);\n });\n applyValue(value.rawValue);\n}\nfunction bindValueMap(valueMap, key, applyValue) {\n bindValue(valueMap.value(key), applyValue);\n}\n\nconst PREFIX = 'tp';\nfunction ClassName(viewName) {\n const fn = (opt_elementName, opt_modifier) => {\n return [\n PREFIX,\n '-',\n viewName,\n 'v',\n opt_elementName ? `_${opt_elementName}` : '',\n opt_modifier ? `-${opt_modifier}` : '',\n ].join('');\n };\n return fn;\n}\n\nconst cn$r = ClassName('lbl');\nfunction createLabelNode(doc, label) {\n const frag = doc.createDocumentFragment();\n const lineNodes = label.split('\\n').map((line) => {\n return doc.createTextNode(line);\n });\n lineNodes.forEach((lineNode, index) => {\n if (index > 0) {\n frag.appendChild(doc.createElement('br'));\n }\n frag.appendChild(lineNode);\n });\n return frag;\n}\nclass LabelView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$r());\n config.viewProps.bindClassModifiers(this.element);\n const labelElem = doc.createElement('div');\n labelElem.classList.add(cn$r('l'));\n bindValueMap(config.props, 'label', (value) => {\n if (isEmpty(value)) {\n this.element.classList.add(cn$r(undefined, 'nol'));\n }\n else {\n this.element.classList.remove(cn$r(undefined, 'nol'));\n removeChildNodes(labelElem);\n labelElem.appendChild(createLabelNode(doc, value));\n }\n });\n this.element.appendChild(labelElem);\n this.labelElement = labelElem;\n const valueElem = doc.createElement('div');\n valueElem.classList.add(cn$r('v'));\n this.element.appendChild(valueElem);\n this.valueElement = valueElem;\n }\n}\n\nclass LabelController {\n constructor(doc, config) {\n this.props = config.props;\n this.valueController = config.valueController;\n this.viewProps = config.valueController.viewProps;\n this.view = new LabelView(doc, {\n props: config.props,\n viewProps: this.viewProps,\n });\n this.view.valueElement.appendChild(this.valueController.view.element);\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n label: p.optional.string,\n }), (result) => {\n this.props.set('label', result.label);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n label: this.props.get('label'),\n });\n }\n}\n\nfunction getAllBladePositions() {\n return ['veryfirst', 'first', 'last', 'verylast'];\n}\n\nconst cn$q = ClassName('');\nconst POS_TO_CLASS_NAME_MAP = {\n veryfirst: 'vfst',\n first: 'fst',\n last: 'lst',\n verylast: 'vlst',\n};\nclass BladeController {\n constructor(config) {\n this.parent_ = null;\n this.blade = config.blade;\n this.view = config.view;\n this.viewProps = config.viewProps;\n const elem = this.view.element;\n this.blade.value('positions').emitter.on('change', () => {\n getAllBladePositions().forEach((pos) => {\n elem.classList.remove(cn$q(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n });\n this.blade.get('positions').forEach((pos) => {\n elem.classList.add(cn$q(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n });\n });\n this.viewProps.handleDispose(() => {\n removeElement(elem);\n });\n }\n get parent() {\n return this.parent_;\n }\n set parent(parent) {\n this.parent_ = parent;\n this.viewProps.set('parent', this.parent_ ? this.parent_.viewProps : null);\n }\n importState(state) {\n return importBladeState(state, null, (p) => ({\n disabled: p.required.boolean,\n hidden: p.required.boolean,\n }), (result) => {\n this.viewProps.importState(result);\n return true;\n });\n }\n exportState() {\n return exportBladeState(null, Object.assign({}, this.viewProps.exportState()));\n }\n}\n\nclass LabeledValueBladeController extends BladeController {\n constructor(doc, config) {\n if (config.value !== config.valueController.value) {\n throw TpError.shouldNeverHappen();\n }\n const viewProps = config.valueController.viewProps;\n const lc = new LabelController(doc, {\n blade: config.blade,\n props: config.props,\n valueController: config.valueController,\n });\n super(Object.assign(Object.assign({}, config), { view: new LabelView(doc, {\n props: config.props,\n viewProps: viewProps,\n }), viewProps: viewProps }));\n this.labelController = lc;\n this.value = config.value;\n this.valueController = config.valueController;\n this.view.valueElement.appendChild(this.valueController.view.element);\n }\n importState(state) {\n return importBladeState(state, (s) => {\n var _a, _b, _c;\n return super.importState(s) &&\n this.labelController.importProps(s) &&\n ((_c = (_b = (_a = this.valueController).importProps) === null || _b === void 0 ? void 0 : _b.call(_a, state)) !== null && _c !== void 0 ? _c : true);\n }, (p) => ({\n value: p.optional.raw,\n }), (result) => {\n if (result.value) {\n this.value.rawValue = result.value;\n }\n return true;\n });\n }\n exportState() {\n var _a, _b, _c;\n return exportBladeState(() => super.exportState(), Object.assign(Object.assign({ value: this.value.rawValue }, this.labelController.exportProps()), ((_c = (_b = (_a = this.valueController).exportProps) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : {})));\n }\n}\n\nfunction excludeValue(state) {\n const result = Object.assign({}, state);\n delete result.value;\n return result;\n}\nclass BindingController extends LabeledValueBladeController {\n constructor(doc, config) {\n super(doc, config);\n this.tag = config.tag;\n }\n importState(state) {\n return importBladeState(state,\n (_s) => super.importState(excludeValue(state)), (p) => ({\n tag: p.optional.string,\n }), (result) => {\n this.tag = result.tag;\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => excludeValue(super.exportState()), {\n binding: {\n key: this.value.binding.target.key,\n value: this.value.binding.target.read(),\n },\n tag: this.tag,\n });\n }\n}\nfunction isBindingController(bc) {\n return isValueBladeController(bc) && isBindingValue(bc.value);\n}\n\nclass InputBindingController extends BindingController {\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n binding: p.required.object({\n value: p.required.raw,\n }),\n }), (result) => {\n this.value.binding.inject(result.binding.value);\n this.value.fetch();\n return true;\n });\n }\n}\nfunction isInputBindingController(bc) {\n return isValueBladeController(bc) && isInputBindingValue(bc.value);\n}\n\nfunction fillBuffer(buffer, bufferSize) {\n while (buffer.length < bufferSize) {\n buffer.push(undefined);\n }\n}\nfunction initializeBuffer(bufferSize) {\n const buffer = [];\n fillBuffer(buffer, bufferSize);\n return buffer;\n}\nfunction createTrimmedBuffer(buffer) {\n const index = buffer.indexOf(undefined);\n return forceCast(index < 0 ? buffer : buffer.slice(0, index));\n}\nfunction createPushedBuffer(buffer, newValue) {\n const newBuffer = [...createTrimmedBuffer(buffer), newValue];\n if (newBuffer.length > buffer.length) {\n newBuffer.splice(0, newBuffer.length - buffer.length);\n }\n else {\n fillBuffer(newBuffer, buffer.length);\n }\n return newBuffer;\n}\n\nclass MonitorBindingValue {\n constructor(config) {\n this.emitter = new Emitter();\n this.onTick_ = this.onTick_.bind(this);\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.binding = config.binding;\n this.value_ = createValue(initializeBuffer(config.bufferSize));\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n this.ticker = config.ticker;\n this.ticker.emitter.on('tick', this.onTick_);\n this.fetch();\n }\n get rawValue() {\n return this.value_.rawValue;\n }\n set rawValue(rawValue) {\n this.value_.rawValue = rawValue;\n }\n setRawValue(rawValue, options) {\n this.value_.setRawValue(rawValue, options);\n }\n fetch() {\n this.value_.rawValue = createPushedBuffer(this.value_.rawValue, this.binding.read());\n }\n onTick_() {\n this.fetch();\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\nfunction isMonitorBindingValue(v) {\n if (!('binding' in v)) {\n return false;\n }\n const b = v['binding'];\n return isBinding(b) && 'read' in b && !('write' in b);\n}\n\nclass MonitorBindingController extends BindingController {\n exportState() {\n return exportBladeState(() => super.exportState(), {\n binding: {\n readonly: true,\n },\n });\n }\n}\nfunction isMonitorBindingController(bc) {\n return (isValueBladeController(bc) &&\n isMonitorBindingValue(bc.value));\n}\n\nclass ButtonApi extends BladeApi {\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get title() {\n var _a;\n return (_a = this.controller.buttonController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n }\n set title(title) {\n this.controller.buttonController.props.set('title', title);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n const emitter = this.controller.buttonController.emitter;\n emitter.on(eventName, (ev) => {\n bh(new TpMouseEvent(this, ev.nativeEvent));\n });\n return this;\n }\n off(eventName, handler) {\n const emitter = this.controller.buttonController.emitter;\n emitter.off(eventName, handler);\n return this;\n }\n}\n\nfunction applyClass(elem, className, active) {\n if (active) {\n elem.classList.add(className);\n }\n else {\n elem.classList.remove(className);\n }\n}\nfunction valueToClassName(elem, className) {\n return (value) => {\n applyClass(elem, className, value);\n };\n}\nfunction bindValueToTextContent(value, elem) {\n bindValue(value, (text) => {\n elem.textContent = text !== null && text !== void 0 ? text : '';\n });\n}\n\nconst cn$p = ClassName('btn');\nclass ButtonView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$p());\n config.viewProps.bindClassModifiers(this.element);\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$p('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn$p('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n }\n}\n\nclass ButtonController {\n constructor(doc, config) {\n this.emitter = new Emitter();\n this.onClick_ = this.onClick_.bind(this);\n this.props = config.props;\n this.viewProps = config.viewProps;\n this.view = new ButtonView(doc, {\n props: this.props,\n viewProps: this.viewProps,\n });\n this.view.buttonElement.addEventListener('click', this.onClick_);\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n title: p.optional.string,\n }), (result) => {\n this.props.set('title', result.title);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n title: this.props.get('title'),\n });\n }\n onClick_(ev) {\n this.emitter.emit('click', {\n nativeEvent: ev,\n sender: this,\n });\n }\n}\n\nclass ButtonBladeController extends BladeController {\n constructor(doc, config) {\n const bc = new ButtonController(doc, {\n props: config.buttonProps,\n viewProps: config.viewProps,\n });\n const lc = new LabelController(doc, {\n blade: config.blade,\n props: config.labelProps,\n valueController: bc,\n });\n super({\n blade: config.blade,\n view: lc.view,\n viewProps: config.viewProps,\n });\n this.buttonController = bc;\n this.labelController = lc;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s) &&\n this.buttonController.importProps(s) &&\n this.labelController.importProps(s), () => ({}), () => true);\n }\n exportState() {\n return exportBladeState(() => super.exportState(), Object.assign(Object.assign({}, this.buttonController.exportProps()), this.labelController.exportProps()));\n }\n}\n\nclass Semver {\n constructor(text) {\n const [core, prerelease] = text.split('-');\n const coreComps = core.split('.');\n this.major = parseInt(coreComps[0], 10);\n this.minor = parseInt(coreComps[1], 10);\n this.patch = parseInt(coreComps[2], 10);\n this.prerelease = prerelease !== null && prerelease !== void 0 ? prerelease : null;\n }\n toString() {\n const core = [this.major, this.minor, this.patch].join('.');\n return this.prerelease !== null ? [core, this.prerelease].join('-') : core;\n }\n}\n\nconst VERSION$1 = new Semver('2.0.5');\n\nfunction createPlugin(plugin) {\n return Object.assign({ core: VERSION$1 }, plugin);\n}\n\nconst ButtonBladePlugin = createPlugin({\n id: 'button',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n title: p.required.string,\n view: p.required.constant('button'),\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new ButtonBladeController(args.document, {\n blade: args.blade,\n buttonProps: ValueMap.fromObject({\n title: args.params.title,\n }),\n labelProps: ValueMap.fromObject({\n label: args.params.label,\n }),\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (args.controller instanceof ButtonBladeController) {\n return new ButtonApi(args.controller);\n }\n return null;\n },\n});\n\nfunction addButtonAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'button' }));\n}\nfunction addFolderAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'folder' }));\n}\nfunction addTabAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'tab' }));\n}\n\nfunction isRefreshable(value) {\n if (!isObject$1(value)) {\n return false;\n }\n return 'refresh' in value && typeof value.refresh === 'function';\n}\n\nfunction createBindingTarget(obj, key) {\n if (!BindingTarget.isBindable(obj)) {\n throw TpError.notBindable();\n }\n return new BindingTarget(obj, key);\n}\nclass RackApi {\n constructor(controller, pool) {\n this.onRackValueChange_ = this.onRackValueChange_.bind(this);\n this.controller_ = controller;\n this.emitter_ = new Emitter();\n this.pool_ = pool;\n const rack = this.controller_.rack;\n rack.emitter.on('valuechange', this.onRackValueChange_);\n }\n get children() {\n return this.controller_.rack.children.map((bc) => this.pool_.createApi(bc));\n }\n addBinding(object, key, opt_params) {\n const params = opt_params !== null && opt_params !== void 0 ? opt_params : {};\n const doc = this.controller_.element.ownerDocument;\n const bc = this.pool_.createBinding(doc, createBindingTarget(object, key), params);\n const api = this.pool_.createBindingApi(bc);\n return this.add(api, params.index);\n }\n addFolder(params) {\n return addFolderAsBlade(this, params);\n }\n addButton(params) {\n return addButtonAsBlade(this, params);\n }\n addTab(params) {\n return addTabAsBlade(this, params);\n }\n add(api, opt_index) {\n const bc = api.controller;\n this.controller_.rack.add(bc, opt_index);\n return api;\n }\n remove(api) {\n this.controller_.rack.remove(api.controller);\n }\n addBlade(params) {\n const doc = this.controller_.element.ownerDocument;\n const bc = this.pool_.createBlade(doc, params);\n const api = this.pool_.createApi(bc);\n return this.add(api, params.index);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n refresh() {\n this.children.forEach((c) => {\n if (isRefreshable(c)) {\n c.refresh();\n }\n });\n }\n onRackValueChange_(ev) {\n const bc = ev.bladeController;\n const api = this.pool_.createApi(bc);\n const binding = isBindingValue(bc.value) ? bc.value.binding : null;\n this.emitter_.emit('change', new TpChangeEvent(api, binding ? binding.target.read() : bc.value.rawValue, ev.options.last));\n }\n}\n\nclass ContainerBladeApi extends BladeApi {\n constructor(controller, pool) {\n super(controller);\n this.rackApi_ = new RackApi(controller.rackController, pool);\n }\n refresh() {\n this.rackApi_.refresh();\n }\n}\n\nclass ContainerBladeController extends BladeController {\n constructor(config) {\n super({\n blade: config.blade,\n view: config.view,\n viewProps: config.rackController.viewProps,\n });\n this.rackController = config.rackController;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n children: p.required.array(p.required.raw),\n }), (result) => {\n return this.rackController.rack.children.every((c, index) => {\n return c.importState(result.children[index]);\n });\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n children: this.rackController.rack.children.map((c) => c.exportState()),\n });\n }\n}\nfunction isContainerBladeController(bc) {\n return 'rackController' in bc;\n}\n\nclass NestedOrderedSet {\n constructor(extract) {\n this.emitter = new Emitter();\n this.items_ = [];\n this.cache_ = new Set();\n this.onSubListAdd_ = this.onSubListAdd_.bind(this);\n this.onSubListRemove_ = this.onSubListRemove_.bind(this);\n this.extract_ = extract;\n }\n get items() {\n return this.items_;\n }\n allItems() {\n return Array.from(this.cache_);\n }\n find(callback) {\n for (const item of this.allItems()) {\n if (callback(item)) {\n return item;\n }\n }\n return null;\n }\n includes(item) {\n return this.cache_.has(item);\n }\n add(item, opt_index) {\n if (this.includes(item)) {\n throw TpError.shouldNeverHappen();\n }\n const index = opt_index !== undefined ? opt_index : this.items_.length;\n this.items_.splice(index, 0, item);\n this.cache_.add(item);\n const subList = this.extract_(item);\n if (subList) {\n subList.emitter.on('add', this.onSubListAdd_);\n subList.emitter.on('remove', this.onSubListRemove_);\n subList.allItems().forEach((i) => {\n this.cache_.add(i);\n });\n }\n this.emitter.emit('add', {\n index: index,\n item: item,\n root: this,\n target: this,\n });\n }\n remove(item) {\n const index = this.items_.indexOf(item);\n if (index < 0) {\n return;\n }\n this.items_.splice(index, 1);\n this.cache_.delete(item);\n const subList = this.extract_(item);\n if (subList) {\n subList.allItems().forEach((i) => {\n this.cache_.delete(i);\n });\n subList.emitter.off('add', this.onSubListAdd_);\n subList.emitter.off('remove', this.onSubListRemove_);\n }\n this.emitter.emit('remove', {\n index: index,\n item: item,\n root: this,\n target: this,\n });\n }\n onSubListAdd_(ev) {\n this.cache_.add(ev.item);\n this.emitter.emit('add', {\n index: ev.index,\n item: ev.item,\n root: this,\n target: ev.target,\n });\n }\n onSubListRemove_(ev) {\n this.cache_.delete(ev.item);\n this.emitter.emit('remove', {\n index: ev.index,\n item: ev.item,\n root: this,\n target: ev.target,\n });\n }\n}\n\nfunction findValueBladeController(bcs, v) {\n for (let i = 0; i < bcs.length; i++) {\n const bc = bcs[i];\n if (isValueBladeController(bc) && bc.value === v) {\n return bc;\n }\n }\n return null;\n}\nfunction findSubBladeControllerSet(bc) {\n return isContainerBladeController(bc)\n ? bc.rackController.rack['bcSet_']\n : null;\n}\nclass Rack {\n constructor(config) {\n var _a, _b;\n this.emitter = new Emitter();\n this.onBladePositionsChange_ = this.onBladePositionsChange_.bind(this);\n this.onSetAdd_ = this.onSetAdd_.bind(this);\n this.onSetRemove_ = this.onSetRemove_.bind(this);\n this.onChildDispose_ = this.onChildDispose_.bind(this);\n this.onChildPositionsChange_ = this.onChildPositionsChange_.bind(this);\n this.onChildValueChange_ = this.onChildValueChange_.bind(this);\n this.onChildViewPropsChange_ = this.onChildViewPropsChange_.bind(this);\n this.onRackLayout_ = this.onRackLayout_.bind(this);\n this.onRackValueChange_ = this.onRackValueChange_.bind(this);\n this.blade_ = (_a = config.blade) !== null && _a !== void 0 ? _a : null;\n (_b = this.blade_) === null || _b === void 0 ? void 0 : _b.value('positions').emitter.on('change', this.onBladePositionsChange_);\n this.viewProps = config.viewProps;\n this.bcSet_ = new NestedOrderedSet(findSubBladeControllerSet);\n this.bcSet_.emitter.on('add', this.onSetAdd_);\n this.bcSet_.emitter.on('remove', this.onSetRemove_);\n }\n get children() {\n return this.bcSet_.items;\n }\n add(bc, opt_index) {\n var _a;\n (_a = bc.parent) === null || _a === void 0 ? void 0 : _a.remove(bc);\n bc.parent = this;\n this.bcSet_.add(bc, opt_index);\n }\n remove(bc) {\n bc.parent = null;\n this.bcSet_.remove(bc);\n }\n find(finder) {\n return this.bcSet_.allItems().filter(finder);\n }\n onSetAdd_(ev) {\n this.updatePositions_();\n const root = ev.target === ev.root;\n this.emitter.emit('add', {\n bladeController: ev.item,\n index: ev.index,\n root: root,\n sender: this,\n });\n if (!root) {\n return;\n }\n const bc = ev.item;\n bc.viewProps.emitter.on('change', this.onChildViewPropsChange_);\n bc.blade\n .value('positions')\n .emitter.on('change', this.onChildPositionsChange_);\n bc.viewProps.handleDispose(this.onChildDispose_);\n if (isValueBladeController(bc)) {\n bc.value.emitter.on('change', this.onChildValueChange_);\n }\n else if (isContainerBladeController(bc)) {\n const rack = bc.rackController.rack;\n if (rack) {\n const emitter = rack.emitter;\n emitter.on('layout', this.onRackLayout_);\n emitter.on('valuechange', this.onRackValueChange_);\n }\n }\n }\n onSetRemove_(ev) {\n this.updatePositions_();\n const root = ev.target === ev.root;\n this.emitter.emit('remove', {\n bladeController: ev.item,\n root: root,\n sender: this,\n });\n if (!root) {\n return;\n }\n const bc = ev.item;\n if (isValueBladeController(bc)) {\n bc.value.emitter.off('change', this.onChildValueChange_);\n }\n else if (isContainerBladeController(bc)) {\n const rack = bc.rackController.rack;\n if (rack) {\n const emitter = rack.emitter;\n emitter.off('layout', this.onRackLayout_);\n emitter.off('valuechange', this.onRackValueChange_);\n }\n }\n }\n updatePositions_() {\n const visibleItems = this.bcSet_.items.filter((bc) => !bc.viewProps.get('hidden'));\n const firstVisibleItem = visibleItems[0];\n const lastVisibleItem = visibleItems[visibleItems.length - 1];\n this.bcSet_.items.forEach((bc) => {\n const ps = [];\n if (bc === firstVisibleItem) {\n ps.push('first');\n if (!this.blade_ ||\n this.blade_.get('positions').includes('veryfirst')) {\n ps.push('veryfirst');\n }\n }\n if (bc === lastVisibleItem) {\n ps.push('last');\n if (!this.blade_ || this.blade_.get('positions').includes('verylast')) {\n ps.push('verylast');\n }\n }\n bc.blade.set('positions', ps);\n });\n }\n onChildPositionsChange_() {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onChildViewPropsChange_(_ev) {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onChildDispose_() {\n const disposedUcs = this.bcSet_.items.filter((bc) => {\n return bc.viewProps.get('disposed');\n });\n disposedUcs.forEach((bc) => {\n this.bcSet_.remove(bc);\n });\n }\n onChildValueChange_(ev) {\n const bc = findValueBladeController(this.find(isValueBladeController), ev.sender);\n if (!bc) {\n throw TpError.alreadyDisposed();\n }\n this.emitter.emit('valuechange', {\n bladeController: bc,\n options: ev.options,\n sender: this,\n });\n }\n onRackLayout_(_) {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onRackValueChange_(ev) {\n this.emitter.emit('valuechange', {\n bladeController: ev.bladeController,\n options: ev.options,\n sender: this,\n });\n }\n onBladePositionsChange_() {\n this.updatePositions_();\n }\n}\n\nclass RackController {\n constructor(config) {\n this.onRackAdd_ = this.onRackAdd_.bind(this);\n this.onRackRemove_ = this.onRackRemove_.bind(this);\n this.element = config.element;\n this.viewProps = config.viewProps;\n const rack = new Rack({\n blade: config.root ? undefined : config.blade,\n viewProps: config.viewProps,\n });\n rack.emitter.on('add', this.onRackAdd_);\n rack.emitter.on('remove', this.onRackRemove_);\n this.rack = rack;\n this.viewProps.handleDispose(() => {\n for (let i = this.rack.children.length - 1; i >= 0; i--) {\n const bc = this.rack.children[i];\n bc.viewProps.set('disposed', true);\n }\n });\n }\n onRackAdd_(ev) {\n if (!ev.root) {\n return;\n }\n insertElementAt(this.element, ev.bladeController.view.element, ev.index);\n }\n onRackRemove_(ev) {\n if (!ev.root) {\n return;\n }\n removeElement(ev.bladeController.view.element);\n }\n}\n\nfunction createBlade() {\n return new ValueMap({\n positions: createValue([], {\n equals: deepEqualsArray,\n }),\n });\n}\n\nclass Foldable extends ValueMap {\n constructor(valueMap) {\n super(valueMap);\n }\n static create(expanded) {\n const coreObj = {\n completed: true,\n expanded: expanded,\n expandedHeight: null,\n shouldFixHeight: false,\n temporaryExpanded: null,\n };\n const core = ValueMap.createCore(coreObj);\n return new Foldable(core);\n }\n get styleExpanded() {\n var _a;\n return (_a = this.get('temporaryExpanded')) !== null && _a !== void 0 ? _a : this.get('expanded');\n }\n get styleHeight() {\n if (!this.styleExpanded) {\n return '0';\n }\n const exHeight = this.get('expandedHeight');\n if (this.get('shouldFixHeight') && !isEmpty(exHeight)) {\n return `${exHeight}px`;\n }\n return 'auto';\n }\n bindExpandedClass(elem, expandedClassName) {\n const onExpand = () => {\n const expanded = this.styleExpanded;\n if (expanded) {\n elem.classList.add(expandedClassName);\n }\n else {\n elem.classList.remove(expandedClassName);\n }\n };\n bindValueMap(this, 'expanded', onExpand);\n bindValueMap(this, 'temporaryExpanded', onExpand);\n }\n cleanUpTransition() {\n this.set('shouldFixHeight', false);\n this.set('expandedHeight', null);\n this.set('completed', true);\n }\n}\nfunction computeExpandedFolderHeight(folder, containerElement) {\n let height = 0;\n disableTransitionTemporarily(containerElement, () => {\n folder.set('expandedHeight', null);\n folder.set('temporaryExpanded', true);\n forceReflow(containerElement);\n height = containerElement.clientHeight;\n folder.set('temporaryExpanded', null);\n forceReflow(containerElement);\n });\n return height;\n}\nfunction applyHeight(foldable, elem) {\n elem.style.height = foldable.styleHeight;\n}\nfunction bindFoldable(foldable, elem) {\n foldable.value('expanded').emitter.on('beforechange', () => {\n foldable.set('completed', false);\n if (isEmpty(foldable.get('expandedHeight'))) {\n const h = computeExpandedFolderHeight(foldable, elem);\n if (h > 0) {\n foldable.set('expandedHeight', h);\n }\n }\n foldable.set('shouldFixHeight', true);\n forceReflow(elem);\n });\n foldable.emitter.on('change', () => {\n applyHeight(foldable, elem);\n });\n applyHeight(foldable, elem);\n elem.addEventListener('transitionend', (ev) => {\n if (ev.propertyName !== 'height') {\n return;\n }\n foldable.cleanUpTransition();\n });\n}\n\nclass FolderApi extends ContainerBladeApi {\n constructor(controller, pool) {\n super(controller, pool);\n this.emitter_ = new Emitter();\n this.controller.foldable\n .value('expanded')\n .emitter.on('change', (ev) => {\n this.emitter_.emit('fold', new TpFoldEvent(this, ev.sender.rawValue));\n });\n this.rackApi_.on('change', (ev) => {\n this.emitter_.emit('change', ev);\n });\n }\n get expanded() {\n return this.controller.foldable.get('expanded');\n }\n set expanded(expanded) {\n this.controller.foldable.set('expanded', expanded);\n }\n get title() {\n return this.controller.props.get('title');\n }\n set title(title) {\n this.controller.props.set('title', title);\n }\n get children() {\n return this.rackApi_.children;\n }\n addBinding(object, key, opt_params) {\n return this.rackApi_.addBinding(object, key, opt_params);\n }\n addFolder(params) {\n return this.rackApi_.addFolder(params);\n }\n addButton(params) {\n return this.rackApi_.addButton(params);\n }\n addTab(params) {\n return this.rackApi_.addTab(params);\n }\n add(api, opt_index) {\n return this.rackApi_.add(api, opt_index);\n }\n remove(api) {\n this.rackApi_.remove(api);\n }\n addBlade(params) {\n return this.rackApi_.addBlade(params);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nconst bladeContainerClassName = ClassName('cnt');\n\nclass FolderView {\n constructor(doc, config) {\n var _a;\n this.className_ = ClassName((_a = config.viewName) !== null && _a !== void 0 ? _a : 'fld');\n this.element = doc.createElement('div');\n this.element.classList.add(this.className_(), bladeContainerClassName());\n config.viewProps.bindClassModifiers(this.element);\n this.foldable_ = config.foldable;\n this.foldable_.bindExpandedClass(this.element, this.className_(undefined, 'expanded'));\n bindValueMap(this.foldable_, 'completed', valueToClassName(this.element, this.className_(undefined, 'cpl')));\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(this.className_('b'));\n bindValueMap(config.props, 'title', (title) => {\n if (isEmpty(title)) {\n this.element.classList.add(this.className_(undefined, 'not'));\n }\n else {\n this.element.classList.remove(this.className_(undefined, 'not'));\n }\n });\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const indentElem = doc.createElement('div');\n indentElem.classList.add(this.className_('i'));\n this.element.appendChild(indentElem);\n const titleElem = doc.createElement('div');\n titleElem.classList.add(this.className_('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n this.titleElement = titleElem;\n const markElem = doc.createElement('div');\n markElem.classList.add(this.className_('m'));\n this.buttonElement.appendChild(markElem);\n const containerElem = doc.createElement('div');\n containerElem.classList.add(this.className_('c'));\n this.element.appendChild(containerElem);\n this.containerElement = containerElem;\n }\n}\n\nclass FolderController extends ContainerBladeController {\n constructor(doc, config) {\n var _a;\n const foldable = Foldable.create((_a = config.expanded) !== null && _a !== void 0 ? _a : true);\n const view = new FolderView(doc, {\n foldable: foldable,\n props: config.props,\n viewName: config.root ? 'rot' : undefined,\n viewProps: config.viewProps,\n });\n super(Object.assign(Object.assign({}, config), { rackController: new RackController({\n blade: config.blade,\n element: view.containerElement,\n root: config.root,\n viewProps: config.viewProps,\n }), view: view }));\n this.onTitleClick_ = this.onTitleClick_.bind(this);\n this.props = config.props;\n this.foldable = foldable;\n bindFoldable(this.foldable, this.view.containerElement);\n this.rackController.rack.emitter.on('add', () => {\n this.foldable.cleanUpTransition();\n });\n this.rackController.rack.emitter.on('remove', () => {\n this.foldable.cleanUpTransition();\n });\n this.view.buttonElement.addEventListener('click', this.onTitleClick_);\n }\n get document() {\n return this.view.element.ownerDocument;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n expanded: p.required.boolean,\n title: p.optional.string,\n }), (result) => {\n this.foldable.set('expanded', result.expanded);\n this.props.set('title', result.title);\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n expanded: this.foldable.get('expanded'),\n title: this.props.get('title'),\n });\n }\n onTitleClick_() {\n this.foldable.set('expanded', !this.foldable.get('expanded'));\n }\n}\n\nconst FolderBladePlugin = createPlugin({\n id: 'folder',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n title: p.required.string,\n view: p.required.constant('folder'),\n expanded: p.optional.boolean,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new FolderController(args.document, {\n blade: args.blade,\n expanded: args.params.expanded,\n props: ValueMap.fromObject({\n title: args.params.title,\n }),\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (!(args.controller instanceof FolderController)) {\n return null;\n }\n return new FolderApi(args.controller, args.pool);\n },\n});\n\nconst cn$o = ClassName('');\nfunction valueToModifier(elem, modifier) {\n return valueToClassName(elem, cn$o(undefined, modifier));\n}\nclass ViewProps extends ValueMap {\n constructor(valueMap) {\n var _a;\n super(valueMap);\n this.onDisabledChange_ = this.onDisabledChange_.bind(this);\n this.onParentChange_ = this.onParentChange_.bind(this);\n this.onParentGlobalDisabledChange_ =\n this.onParentGlobalDisabledChange_.bind(this);\n [this.globalDisabled_, this.setGlobalDisabled_] = createReadonlyValue(createValue(this.getGlobalDisabled_()));\n this.value('disabled').emitter.on('change', this.onDisabledChange_);\n this.value('parent').emitter.on('change', this.onParentChange_);\n (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n }\n static create(opt_initialValue) {\n var _a, _b, _c;\n const initialValue = opt_initialValue !== null && opt_initialValue !== void 0 ? opt_initialValue : {};\n return new ViewProps(ValueMap.createCore({\n disabled: (_a = initialValue.disabled) !== null && _a !== void 0 ? _a : false,\n disposed: false,\n hidden: (_b = initialValue.hidden) !== null && _b !== void 0 ? _b : false,\n parent: (_c = initialValue.parent) !== null && _c !== void 0 ? _c : null,\n }));\n }\n get globalDisabled() {\n return this.globalDisabled_;\n }\n bindClassModifiers(elem) {\n bindValue(this.globalDisabled_, valueToModifier(elem, 'disabled'));\n bindValueMap(this, 'hidden', valueToModifier(elem, 'hidden'));\n }\n bindDisabled(target) {\n bindValue(this.globalDisabled_, (disabled) => {\n target.disabled = disabled;\n });\n }\n bindTabIndex(elem) {\n bindValue(this.globalDisabled_, (disabled) => {\n elem.tabIndex = disabled ? -1 : 0;\n });\n }\n handleDispose(callback) {\n this.value('disposed').emitter.on('change', (disposed) => {\n if (disposed) {\n callback();\n }\n });\n }\n importState(state) {\n this.set('disabled', state.disabled);\n this.set('hidden', state.hidden);\n }\n exportState() {\n return {\n disabled: this.get('disabled'),\n hidden: this.get('hidden'),\n };\n }\n getGlobalDisabled_() {\n const parent = this.get('parent');\n const parentDisabled = parent ? parent.globalDisabled.rawValue : false;\n return parentDisabled || this.get('disabled');\n }\n updateGlobalDisabled_() {\n this.setGlobalDisabled_(this.getGlobalDisabled_());\n }\n onDisabledChange_() {\n this.updateGlobalDisabled_();\n }\n onParentGlobalDisabledChange_() {\n this.updateGlobalDisabled_();\n }\n onParentChange_(ev) {\n var _a;\n const prevParent = ev.previousRawValue;\n prevParent === null || prevParent === void 0 ? void 0 : prevParent.globalDisabled.emitter.off('change', this.onParentGlobalDisabledChange_);\n (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n this.updateGlobalDisabled_();\n }\n}\n\nconst cn$n = ClassName('tbp');\nclass TabPageView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$n());\n config.viewProps.bindClassModifiers(this.element);\n const containerElem = doc.createElement('div');\n containerElem.classList.add(cn$n('c'));\n this.element.appendChild(containerElem);\n this.containerElement = containerElem;\n }\n}\n\nconst cn$m = ClassName('tbi');\nclass TabItemView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$m());\n config.viewProps.bindClassModifiers(this.element);\n bindValueMap(config.props, 'selected', (selected) => {\n if (selected) {\n this.element.classList.add(cn$m(undefined, 'sel'));\n }\n else {\n this.element.classList.remove(cn$m(undefined, 'sel'));\n }\n });\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$m('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn$m('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n this.titleElement = titleElem;\n }\n}\n\nclass TabItemController {\n constructor(doc, config) {\n this.emitter = new Emitter();\n this.onClick_ = this.onClick_.bind(this);\n this.props = config.props;\n this.viewProps = config.viewProps;\n this.view = new TabItemView(doc, {\n props: config.props,\n viewProps: config.viewProps,\n });\n this.view.buttonElement.addEventListener('click', this.onClick_);\n }\n onClick_() {\n this.emitter.emit('click', {\n sender: this,\n });\n }\n}\n\nclass TabPageController extends ContainerBladeController {\n constructor(doc, config) {\n const view = new TabPageView(doc, {\n viewProps: config.viewProps,\n });\n super(Object.assign(Object.assign({}, config), { rackController: new RackController({\n blade: config.blade,\n element: view.containerElement,\n viewProps: config.viewProps,\n }), view: view }));\n this.onItemClick_ = this.onItemClick_.bind(this);\n this.ic_ = new TabItemController(doc, {\n props: config.itemProps,\n viewProps: ViewProps.create(),\n });\n this.ic_.emitter.on('click', this.onItemClick_);\n this.props = config.props;\n bindValueMap(this.props, 'selected', (selected) => {\n this.itemController.props.set('selected', selected);\n this.viewProps.set('hidden', !selected);\n });\n }\n get itemController() {\n return this.ic_;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n selected: p.required.boolean,\n title: p.required.string,\n }), (result) => {\n this.ic_.props.set('selected', result.selected);\n this.ic_.props.set('title', result.title);\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n selected: this.ic_.props.get('selected'),\n title: this.ic_.props.get('title'),\n });\n }\n onItemClick_() {\n this.props.set('selected', true);\n }\n}\n\nclass TabApi extends ContainerBladeApi {\n constructor(controller, pool) {\n super(controller, pool);\n this.emitter_ = new Emitter();\n this.onSelect_ = this.onSelect_.bind(this);\n this.pool_ = pool;\n this.rackApi_.on('change', (ev) => {\n this.emitter_.emit('change', ev);\n });\n this.controller.tab.selectedIndex.emitter.on('change', this.onSelect_);\n }\n get pages() {\n return this.rackApi_.children;\n }\n addPage(params) {\n const doc = this.controller.view.element.ownerDocument;\n const pc = new TabPageController(doc, {\n blade: createBlade(),\n itemProps: ValueMap.fromObject({\n selected: false,\n title: params.title,\n }),\n props: ValueMap.fromObject({\n selected: false,\n }),\n viewProps: ViewProps.create(),\n });\n const papi = this.pool_.createApi(pc);\n return this.rackApi_.add(papi, params.index);\n }\n removePage(index) {\n this.rackApi_.remove(this.rackApi_.children[index]);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n onSelect_(ev) {\n this.emitter_.emit('select', new TpTabSelectEvent(this, ev.rawValue));\n }\n}\n\nclass TabPageApi extends ContainerBladeApi {\n get title() {\n var _a;\n return (_a = this.controller.itemController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n }\n set title(title) {\n this.controller.itemController.props.set('title', title);\n }\n get selected() {\n return this.controller.props.get('selected');\n }\n set selected(selected) {\n this.controller.props.set('selected', selected);\n }\n get children() {\n return this.rackApi_.children;\n }\n addButton(params) {\n return this.rackApi_.addButton(params);\n }\n addFolder(params) {\n return this.rackApi_.addFolder(params);\n }\n addTab(params) {\n return this.rackApi_.addTab(params);\n }\n add(api, opt_index) {\n this.rackApi_.add(api, opt_index);\n }\n remove(api) {\n this.rackApi_.remove(api);\n }\n addBinding(object, key, opt_params) {\n return this.rackApi_.addBinding(object, key, opt_params);\n }\n addBlade(params) {\n return this.rackApi_.addBlade(params);\n }\n}\n\nconst INDEX_NOT_SELECTED = -1;\nclass Tab {\n constructor() {\n this.onItemSelectedChange_ = this.onItemSelectedChange_.bind(this);\n this.empty = createValue(true);\n this.selectedIndex = createValue(INDEX_NOT_SELECTED);\n this.items_ = [];\n }\n add(item, opt_index) {\n const index = opt_index !== null && opt_index !== void 0 ? opt_index : this.items_.length;\n this.items_.splice(index, 0, item);\n item.emitter.on('change', this.onItemSelectedChange_);\n this.keepSelection_();\n }\n remove(item) {\n const index = this.items_.indexOf(item);\n if (index < 0) {\n return;\n }\n this.items_.splice(index, 1);\n item.emitter.off('change', this.onItemSelectedChange_);\n this.keepSelection_();\n }\n keepSelection_() {\n if (this.items_.length === 0) {\n this.selectedIndex.rawValue = INDEX_NOT_SELECTED;\n this.empty.rawValue = true;\n return;\n }\n const firstSelIndex = this.items_.findIndex((s) => s.rawValue);\n if (firstSelIndex < 0) {\n this.items_.forEach((s, i) => {\n s.rawValue = i === 0;\n });\n this.selectedIndex.rawValue = 0;\n }\n else {\n this.items_.forEach((s, i) => {\n s.rawValue = i === firstSelIndex;\n });\n this.selectedIndex.rawValue = firstSelIndex;\n }\n this.empty.rawValue = false;\n }\n onItemSelectedChange_(ev) {\n if (ev.rawValue) {\n const index = this.items_.findIndex((s) => s === ev.sender);\n this.items_.forEach((s, i) => {\n s.rawValue = i === index;\n });\n this.selectedIndex.rawValue = index;\n }\n else {\n this.keepSelection_();\n }\n }\n}\n\nconst cn$l = ClassName('tab');\nclass TabView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$l(), bladeContainerClassName());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.empty, valueToClassName(this.element, cn$l(undefined, 'nop')));\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn$l('t'));\n this.element.appendChild(titleElem);\n this.itemsElement = titleElem;\n const indentElem = doc.createElement('div');\n indentElem.classList.add(cn$l('i'));\n this.element.appendChild(indentElem);\n const contentsElem = doc.createElement('div');\n contentsElem.classList.add(cn$l('c'));\n this.element.appendChild(contentsElem);\n this.contentsElement = contentsElem;\n }\n}\n\nclass TabController extends ContainerBladeController {\n constructor(doc, config) {\n const tab = new Tab();\n const view = new TabView(doc, {\n empty: tab.empty,\n viewProps: config.viewProps,\n });\n super({\n blade: config.blade,\n rackController: new RackController({\n blade: config.blade,\n element: view.contentsElement,\n viewProps: config.viewProps,\n }),\n view: view,\n });\n this.onRackAdd_ = this.onRackAdd_.bind(this);\n this.onRackRemove_ = this.onRackRemove_.bind(this);\n const rack = this.rackController.rack;\n rack.emitter.on('add', this.onRackAdd_);\n rack.emitter.on('remove', this.onRackRemove_);\n this.tab = tab;\n }\n add(pc, opt_index) {\n this.rackController.rack.add(pc, opt_index);\n }\n remove(index) {\n this.rackController.rack.remove(this.rackController.rack.children[index]);\n }\n onRackAdd_(ev) {\n if (!ev.root) {\n return;\n }\n const pc = ev.bladeController;\n insertElementAt(this.view.itemsElement, pc.itemController.view.element, ev.index);\n pc.itemController.viewProps.set('parent', this.viewProps);\n this.tab.add(pc.props.value('selected'));\n }\n onRackRemove_(ev) {\n if (!ev.root) {\n return;\n }\n const pc = ev.bladeController;\n removeElement(pc.itemController.view.element);\n pc.itemController.viewProps.set('parent', null);\n this.tab.remove(pc.props.value('selected'));\n }\n}\n\nconst TabBladePlugin = createPlugin({\n id: 'tab',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n pages: p.required.array(p.required.object({ title: p.required.string })),\n view: p.required.constant('tab'),\n }));\n if (!result || result.pages.length === 0) {\n return null;\n }\n return { params: result };\n },\n controller(args) {\n const c = new TabController(args.document, {\n blade: args.blade,\n viewProps: args.viewProps,\n });\n args.params.pages.forEach((p) => {\n const pc = new TabPageController(args.document, {\n blade: createBlade(),\n itemProps: ValueMap.fromObject({\n selected: false,\n title: p.title,\n }),\n props: ValueMap.fromObject({\n selected: false,\n }),\n viewProps: ViewProps.create(),\n });\n c.add(pc);\n });\n return c;\n },\n api(args) {\n if (args.controller instanceof TabController) {\n return new TabApi(args.controller, args.pool);\n }\n if (args.controller instanceof TabPageController) {\n return new TabPageApi(args.controller, args.pool);\n }\n return null;\n },\n});\n\nfunction createBladeController(plugin, args) {\n const ac = plugin.accept(args.params);\n if (!ac) {\n return null;\n }\n const params = parseRecord(args.params, (p) => ({\n disabled: p.optional.boolean,\n hidden: p.optional.boolean,\n }));\n return plugin.controller({\n blade: createBlade(),\n document: args.document,\n params: forceCast(Object.assign(Object.assign({}, ac.params), { disabled: params === null || params === void 0 ? void 0 : params.disabled, hidden: params === null || params === void 0 ? void 0 : params.hidden })),\n viewProps: ViewProps.create({\n disabled: params === null || params === void 0 ? void 0 : params.disabled,\n hidden: params === null || params === void 0 ? void 0 : params.hidden,\n }),\n });\n}\n\nclass ListInputBindingApi extends BindingApi {\n get options() {\n return this.controller.valueController.props.get('options');\n }\n set options(options) {\n this.controller.valueController.props.set('options', options);\n }\n}\n\nclass ManualTicker {\n constructor() {\n this.disabled = false;\n this.emitter = new Emitter();\n }\n dispose() { }\n tick() {\n if (this.disabled) {\n return;\n }\n this.emitter.emit('tick', {\n sender: this,\n });\n }\n}\n\nclass IntervalTicker {\n constructor(doc, interval) {\n this.disabled_ = false;\n this.timerId_ = null;\n this.onTick_ = this.onTick_.bind(this);\n this.doc_ = doc;\n this.emitter = new Emitter();\n this.interval_ = interval;\n this.setTimer_();\n }\n get disabled() {\n return this.disabled_;\n }\n set disabled(inactive) {\n this.disabled_ = inactive;\n if (this.disabled_) {\n this.clearTimer_();\n }\n else {\n this.setTimer_();\n }\n }\n dispose() {\n this.clearTimer_();\n }\n clearTimer_() {\n if (this.timerId_ === null) {\n return;\n }\n const win = this.doc_.defaultView;\n if (win) {\n win.clearInterval(this.timerId_);\n }\n this.timerId_ = null;\n }\n setTimer_() {\n this.clearTimer_();\n if (this.interval_ <= 0) {\n return;\n }\n const win = this.doc_.defaultView;\n if (win) {\n this.timerId_ = win.setInterval(this.onTick_, this.interval_);\n }\n }\n onTick_() {\n if (this.disabled_) {\n return;\n }\n this.emitter.emit('tick', {\n sender: this,\n });\n }\n}\n\nclass CompositeConstraint {\n constructor(constraints) {\n this.constraints = constraints;\n }\n constrain(value) {\n return this.constraints.reduce((result, c) => {\n return c.constrain(result);\n }, value);\n }\n}\nfunction findConstraint(c, constraintClass) {\n if (c instanceof constraintClass) {\n return c;\n }\n if (c instanceof CompositeConstraint) {\n const result = c.constraints.reduce((tmpResult, sc) => {\n if (tmpResult) {\n return tmpResult;\n }\n return sc instanceof constraintClass ? sc : null;\n }, null);\n if (result) {\n return result;\n }\n }\n return null;\n}\n\nclass ListConstraint {\n constructor(options) {\n this.values = ValueMap.fromObject({\n options: options,\n });\n }\n constrain(value) {\n const opts = this.values.get('options');\n if (opts.length === 0) {\n return value;\n }\n const matched = opts.filter((item) => {\n return item.value === value;\n }).length > 0;\n return matched ? value : opts[0].value;\n }\n}\n\nfunction parseListOptions(value) {\n var _a;\n const p = MicroParsers;\n if (Array.isArray(value)) {\n return (_a = parseRecord({ items: value }, (p) => ({\n items: p.required.array(p.required.object({\n text: p.required.string,\n value: p.required.raw,\n })),\n }))) === null || _a === void 0 ? void 0 : _a.items;\n }\n if (typeof value === 'object') {\n return p.required.raw(value)\n .value;\n }\n return undefined;\n}\nfunction normalizeListOptions(options) {\n if (Array.isArray(options)) {\n return options;\n }\n const items = [];\n Object.keys(options).forEach((text) => {\n items.push({ text: text, value: options[text] });\n });\n return items;\n}\nfunction createListConstraint(options) {\n return !isEmpty(options)\n ? new ListConstraint(normalizeListOptions(forceCast(options)))\n : null;\n}\n\nconst cn$k = ClassName('lst');\nclass ListView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.props_ = config.props;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$k());\n config.viewProps.bindClassModifiers(this.element);\n const selectElem = doc.createElement('select');\n selectElem.classList.add(cn$k('s'));\n config.viewProps.bindDisabled(selectElem);\n this.element.appendChild(selectElem);\n this.selectElement = selectElem;\n const markElem = doc.createElement('div');\n markElem.classList.add(cn$k('m'));\n markElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n this.element.appendChild(markElem);\n config.value.emitter.on('change', this.onValueChange_);\n this.value_ = config.value;\n bindValueMap(this.props_, 'options', (opts) => {\n removeChildElements(this.selectElement);\n opts.forEach((item) => {\n const optionElem = doc.createElement('option');\n optionElem.textContent = item.text;\n this.selectElement.appendChild(optionElem);\n });\n this.update_();\n });\n }\n update_() {\n const values = this.props_.get('options').map((o) => o.value);\n this.selectElement.selectedIndex = values.indexOf(this.value_.rawValue);\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass ListController {\n constructor(doc, config) {\n this.onSelectChange_ = this.onSelectChange_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new ListView(doc, {\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.selectElement.addEventListener('change', this.onSelectChange_);\n }\n onSelectChange_(e) {\n const selectElem = forceCast(e.currentTarget);\n this.value.rawValue =\n this.props.get('options')[selectElem.selectedIndex].value;\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n options: p.required.custom(parseListOptions),\n }), (result) => {\n this.props.set('options', normalizeListOptions(result.options));\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n options: this.props.get('options'),\n });\n }\n}\n\nconst cn$j = ClassName('pop');\nclass PopupView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$j());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.shows, valueToClassName(this.element, cn$j(undefined, 'v')));\n }\n}\n\nclass PopupController {\n constructor(doc, config) {\n this.shows = createValue(false);\n this.viewProps = config.viewProps;\n this.view = new PopupView(doc, {\n shows: this.shows,\n viewProps: this.viewProps,\n });\n }\n}\n\nconst cn$i = ClassName('txt');\nclass TextView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$i());\n config.viewProps.bindClassModifiers(this.element);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$i('i'));\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n config.value.emitter.on('change', this.onChange_);\n this.value_ = config.value;\n this.refresh();\n }\n refresh() {\n const formatter = this.props_.get('formatter');\n this.inputElement.value = formatter(this.value_.rawValue);\n }\n onChange_() {\n this.refresh();\n }\n}\n\nclass TextController {\n constructor(doc, config) {\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.parser_ = config.parser;\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new TextView(doc, {\n props: config.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n }\n onInputChange_(e) {\n const inputElem = forceCast(e.currentTarget);\n const value = inputElem.value;\n const parsedValue = this.parser_(value);\n if (!isEmpty(parsedValue)) {\n this.value.rawValue = parsedValue;\n }\n this.view.refresh();\n }\n}\n\nfunction boolToString(value) {\n return String(value);\n}\nfunction boolFromUnknown(value) {\n if (value === 'false') {\n return false;\n }\n return !!value;\n}\nfunction BooleanFormatter(value) {\n return boolToString(value);\n}\n\nfunction composeParsers(parsers) {\n return (text) => {\n return parsers.reduce((result, parser) => {\n if (result !== null) {\n return result;\n }\n return parser(text);\n }, null);\n };\n}\n\nconst innerFormatter = createNumberFormatter(0);\nfunction formatPercentage(value) {\n return innerFormatter(value) + '%';\n}\n\nfunction stringFromUnknown(value) {\n return String(value);\n}\nfunction formatString(value) {\n return value;\n}\n\nfunction connectValues({ primary, secondary, forward, backward, }) {\n let changing = false;\n function preventFeedback(callback) {\n if (changing) {\n return;\n }\n changing = true;\n callback();\n changing = false;\n }\n primary.emitter.on('change', (ev) => {\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), ev.options);\n });\n });\n secondary.emitter.on('change', (ev) => {\n preventFeedback(() => {\n primary.setRawValue(backward(primary.rawValue, secondary.rawValue), ev.options);\n });\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), ev.options);\n });\n });\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), {\n forceEmit: false,\n last: true,\n });\n });\n}\n\nfunction getStepForKey(keyScale, keys) {\n const step = keyScale * (keys.altKey ? 0.1 : 1) * (keys.shiftKey ? 10 : 1);\n if (keys.upKey) {\n return +step;\n }\n else if (keys.downKey) {\n return -step;\n }\n return 0;\n}\nfunction getVerticalStepKeys(ev) {\n return {\n altKey: ev.altKey,\n downKey: ev.key === 'ArrowDown',\n shiftKey: ev.shiftKey,\n upKey: ev.key === 'ArrowUp',\n };\n}\nfunction getHorizontalStepKeys(ev) {\n return {\n altKey: ev.altKey,\n downKey: ev.key === 'ArrowLeft',\n shiftKey: ev.shiftKey,\n upKey: ev.key === 'ArrowRight',\n };\n}\nfunction isVerticalArrowKey(key) {\n return key === 'ArrowUp' || key === 'ArrowDown';\n}\nfunction isArrowKey(key) {\n return isVerticalArrowKey(key) || key === 'ArrowLeft' || key === 'ArrowRight';\n}\n\nfunction computeOffset$1(ev, elem) {\n var _a, _b;\n const win = elem.ownerDocument.defaultView;\n const rect = elem.getBoundingClientRect();\n return {\n x: ev.pageX - (((_a = (win && win.scrollX)) !== null && _a !== void 0 ? _a : 0) + rect.left),\n y: ev.pageY - (((_b = (win && win.scrollY)) !== null && _b !== void 0 ? _b : 0) + rect.top),\n };\n}\nclass PointerHandler {\n constructor(element) {\n this.lastTouch_ = null;\n this.onDocumentMouseMove_ = this.onDocumentMouseMove_.bind(this);\n this.onDocumentMouseUp_ = this.onDocumentMouseUp_.bind(this);\n this.onMouseDown_ = this.onMouseDown_.bind(this);\n this.onTouchEnd_ = this.onTouchEnd_.bind(this);\n this.onTouchMove_ = this.onTouchMove_.bind(this);\n this.onTouchStart_ = this.onTouchStart_.bind(this);\n this.elem_ = element;\n this.emitter = new Emitter();\n element.addEventListener('touchstart', this.onTouchStart_, {\n passive: false,\n });\n element.addEventListener('touchmove', this.onTouchMove_, {\n passive: true,\n });\n element.addEventListener('touchend', this.onTouchEnd_);\n element.addEventListener('mousedown', this.onMouseDown_);\n }\n computePosition_(offset) {\n const rect = this.elem_.getBoundingClientRect();\n return {\n bounds: {\n width: rect.width,\n height: rect.height,\n },\n point: offset\n ? {\n x: offset.x,\n y: offset.y,\n }\n : null,\n };\n }\n onMouseDown_(ev) {\n var _a;\n ev.preventDefault();\n (_a = ev.currentTarget) === null || _a === void 0 ? void 0 : _a.focus();\n const doc = this.elem_.ownerDocument;\n doc.addEventListener('mousemove', this.onDocumentMouseMove_);\n doc.addEventListener('mouseup', this.onDocumentMouseUp_);\n this.emitter.emit('down', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onDocumentMouseMove_(ev) {\n this.emitter.emit('move', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onDocumentMouseUp_(ev) {\n const doc = this.elem_.ownerDocument;\n doc.removeEventListener('mousemove', this.onDocumentMouseMove_);\n doc.removeEventListener('mouseup', this.onDocumentMouseUp_);\n this.emitter.emit('up', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onTouchStart_(ev) {\n ev.preventDefault();\n const touch = ev.targetTouches.item(0);\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('down', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n this.lastTouch_ = touch;\n }\n onTouchMove_(ev) {\n const touch = ev.targetTouches.item(0);\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('move', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n this.lastTouch_ = touch;\n }\n onTouchEnd_(ev) {\n var _a;\n const touch = (_a = ev.targetTouches.item(0)) !== null && _a !== void 0 ? _a : this.lastTouch_;\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('up', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n}\n\nconst cn$h = ClassName('txt');\nclass NumberTextView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$h(), cn$h(undefined, 'num'));\n if (config.arrayPosition) {\n this.element.classList.add(cn$h(undefined, config.arrayPosition));\n }\n config.viewProps.bindClassModifiers(this.element);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$h('i'));\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n this.onDraggingChange_ = this.onDraggingChange_.bind(this);\n this.dragging_ = config.dragging;\n this.dragging_.emitter.on('change', this.onDraggingChange_);\n this.element.classList.add(cn$h());\n this.inputElement.classList.add(cn$h('i'));\n const knobElem = doc.createElement('div');\n knobElem.classList.add(cn$h('k'));\n this.element.appendChild(knobElem);\n this.knobElement = knobElem;\n const guideElem = doc.createElementNS(SVG_NS, 'svg');\n guideElem.classList.add(cn$h('g'));\n this.knobElement.appendChild(guideElem);\n const bodyElem = doc.createElementNS(SVG_NS, 'path');\n bodyElem.classList.add(cn$h('gb'));\n guideElem.appendChild(bodyElem);\n this.guideBodyElem_ = bodyElem;\n const headElem = doc.createElementNS(SVG_NS, 'path');\n headElem.classList.add(cn$h('gh'));\n guideElem.appendChild(headElem);\n this.guideHeadElem_ = headElem;\n const tooltipElem = doc.createElement('div');\n tooltipElem.classList.add(ClassName('tt')());\n this.knobElement.appendChild(tooltipElem);\n this.tooltipElem_ = tooltipElem;\n config.value.emitter.on('change', this.onChange_);\n this.value = config.value;\n this.refresh();\n }\n onDraggingChange_(ev) {\n if (ev.rawValue === null) {\n this.element.classList.remove(cn$h(undefined, 'drg'));\n return;\n }\n this.element.classList.add(cn$h(undefined, 'drg'));\n const x = ev.rawValue / this.props_.get('pointerScale');\n const aox = x + (x > 0 ? -1 : x < 0 ? +1 : 0);\n const adx = constrainRange(-aox, -4, +4);\n this.guideHeadElem_.setAttributeNS(null, 'd', [`M ${aox + adx},0 L${aox},4 L${aox + adx},8`, `M ${x},-1 L${x},9`].join(' '));\n this.guideBodyElem_.setAttributeNS(null, 'd', `M 0,4 L${x},4`);\n const formatter = this.props_.get('formatter');\n this.tooltipElem_.textContent = formatter(this.value.rawValue);\n this.tooltipElem_.style.left = `${x}px`;\n }\n refresh() {\n const formatter = this.props_.get('formatter');\n this.inputElement.value = formatter(this.value.rawValue);\n }\n onChange_() {\n this.refresh();\n }\n}\n\nclass NumberTextController {\n constructor(doc, config) {\n var _a;\n this.originRawValue_ = 0;\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.onInputKeyDown_ = this.onInputKeyDown_.bind(this);\n this.onInputKeyUp_ = this.onInputKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.parser_ = config.parser;\n this.props = config.props;\n this.sliderProps_ = (_a = config.sliderProps) !== null && _a !== void 0 ? _a : null;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.dragging_ = createValue(null);\n this.view = new NumberTextView(doc, {\n arrayPosition: config.arrayPosition,\n dragging: this.dragging_,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n this.view.inputElement.addEventListener('keydown', this.onInputKeyDown_);\n this.view.inputElement.addEventListener('keyup', this.onInputKeyUp_);\n const ph = new PointerHandler(this.view.knobElement);\n ph.emitter.on('down', this.onPointerDown_);\n ph.emitter.on('move', this.onPointerMove_);\n ph.emitter.on('up', this.onPointerUp_);\n }\n constrainValue_(value) {\n var _a, _b;\n const min = (_a = this.sliderProps_) === null || _a === void 0 ? void 0 : _a.get('min');\n const max = (_b = this.sliderProps_) === null || _b === void 0 ? void 0 : _b.get('max');\n let v = value;\n if (min !== undefined) {\n v = Math.max(v, min);\n }\n if (max !== undefined) {\n v = Math.min(v, max);\n }\n return v;\n }\n onInputChange_(e) {\n const inputElem = forceCast(e.currentTarget);\n const value = inputElem.value;\n const parsedValue = this.parser_(value);\n if (!isEmpty(parsedValue)) {\n this.value.rawValue = this.constrainValue_(parsedValue);\n }\n this.view.refresh();\n }\n onInputKeyDown_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getVerticalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.constrainValue_(this.value.rawValue + step), {\n forceEmit: false,\n last: false,\n });\n }\n onInputKeyUp_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getVerticalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n onPointerDown_() {\n this.originRawValue_ = this.value.rawValue;\n this.dragging_.rawValue = 0;\n }\n computeDraggingValue_(data) {\n if (!data.point) {\n return null;\n }\n const dx = data.point.x - data.bounds.width / 2;\n return this.constrainValue_(this.originRawValue_ + dx * this.props.get('pointerScale'));\n }\n onPointerMove_(ev) {\n const v = this.computeDraggingValue_(ev.data);\n if (v === null) {\n return;\n }\n this.value.setRawValue(v, {\n forceEmit: false,\n last: false,\n });\n this.dragging_.rawValue = this.value.rawValue - this.originRawValue_;\n }\n onPointerUp_(ev) {\n const v = this.computeDraggingValue_(ev.data);\n if (v === null) {\n return;\n }\n this.value.setRawValue(v, {\n forceEmit: true,\n last: true,\n });\n this.dragging_.rawValue = null;\n }\n}\n\nconst cn$g = ClassName('sld');\nclass SliderView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$g());\n config.viewProps.bindClassModifiers(this.element);\n const trackElem = doc.createElement('div');\n trackElem.classList.add(cn$g('t'));\n config.viewProps.bindTabIndex(trackElem);\n this.element.appendChild(trackElem);\n this.trackElement = trackElem;\n const knobElem = doc.createElement('div');\n knobElem.classList.add(cn$g('k'));\n this.trackElement.appendChild(knobElem);\n this.knobElement = knobElem;\n config.value.emitter.on('change', this.onChange_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const p = constrainRange(mapRange(this.value.rawValue, this.props_.get('min'), this.props_.get('max'), 0, 100), 0, 100);\n this.knobElement.style.width = `${p}%`;\n }\n onChange_() {\n this.update_();\n }\n}\n\nclass SliderController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDownOrMove_ = this.onPointerDownOrMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.props = config.props;\n this.view = new SliderView(doc, {\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.trackElement);\n this.ptHandler_.emitter.on('down', this.onPointerDownOrMove_);\n this.ptHandler_.emitter.on('move', this.onPointerDownOrMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.trackElement.addEventListener('keydown', this.onKeyDown_);\n this.view.trackElement.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n this.value.setRawValue(mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, this.props.get('min'), this.props.get('max')), opts);\n }\n onPointerDownOrMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue + step, {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nconst cn$f = ClassName('sldtxt');\nclass SliderTextView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$f());\n const sliderElem = doc.createElement('div');\n sliderElem.classList.add(cn$f('s'));\n this.sliderView_ = config.sliderView;\n sliderElem.appendChild(this.sliderView_.element);\n this.element.appendChild(sliderElem);\n const textElem = doc.createElement('div');\n textElem.classList.add(cn$f('t'));\n this.textView_ = config.textView;\n textElem.appendChild(this.textView_.element);\n this.element.appendChild(textElem);\n }\n}\n\nclass SliderTextController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.sliderC_ = new SliderController(doc, {\n props: config.sliderProps,\n value: config.value,\n viewProps: this.viewProps,\n });\n this.textC_ = new NumberTextController(doc, {\n parser: config.parser,\n props: config.textProps,\n sliderProps: config.sliderProps,\n value: config.value,\n viewProps: config.viewProps,\n });\n this.view = new SliderTextView(doc, {\n sliderView: this.sliderC_.view,\n textView: this.textC_.view,\n });\n }\n get sliderController() {\n return this.sliderC_;\n }\n get textController() {\n return this.textC_;\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n max: p.required.number,\n min: p.required.number,\n }), (result) => {\n const sliderProps = this.sliderC_.props;\n sliderProps.set('max', result.max);\n sliderProps.set('min', result.min);\n return true;\n });\n }\n exportProps() {\n const sliderProps = this.sliderC_.props;\n return exportBladeState(null, {\n max: sliderProps.get('max'),\n min: sliderProps.get('min'),\n });\n }\n}\nfunction createSliderTextProps(config) {\n return {\n sliderProps: new ValueMap({\n keyScale: config.keyScale,\n max: config.max,\n min: config.min,\n }),\n textProps: new ValueMap({\n formatter: createValue(config.formatter),\n keyScale: config.keyScale,\n pointerScale: createValue(config.pointerScale),\n }),\n };\n}\n\nconst CSS_VAR_MAP = {\n containerUnitSize: 'cnt-usz',\n};\nfunction getCssVar(key) {\n return `--${CSS_VAR_MAP[key]}`;\n}\n\nfunction createPointDimensionParser(p) {\n return createNumberTextInputParamsParser(p);\n}\nfunction parsePointDimensionParams(value) {\n if (!isRecord(value)) {\n return undefined;\n }\n return parseRecord(value, createPointDimensionParser);\n}\nfunction createDimensionConstraint(params, initialValue) {\n if (!params) {\n return undefined;\n }\n const constraints = [];\n const cs = createStepConstraint(params, initialValue);\n if (cs) {\n constraints.push(cs);\n }\n const rs = createRangeConstraint(params);\n if (rs) {\n constraints.push(rs);\n }\n return new CompositeConstraint(constraints);\n}\n\nfunction isCompatible(ver) {\n if (!ver) {\n return false;\n }\n return ver.major === VERSION$1.major;\n}\n\nfunction parsePickerLayout(value) {\n if (value === 'inline' || value === 'popup') {\n return value;\n }\n return undefined;\n}\n\nfunction writePrimitive(target, value) {\n target.write(value);\n}\n\nconst cn$e = ClassName('ckb');\nclass CheckboxView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$e());\n config.viewProps.bindClassModifiers(this.element);\n const labelElem = doc.createElement('label');\n labelElem.classList.add(cn$e('l'));\n this.element.appendChild(labelElem);\n this.labelElement = labelElem;\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$e('i'));\n inputElem.type = 'checkbox';\n this.labelElement.appendChild(inputElem);\n this.inputElement = inputElem;\n config.viewProps.bindDisabled(this.inputElement);\n const wrapperElem = doc.createElement('div');\n wrapperElem.classList.add(cn$e('w'));\n this.labelElement.appendChild(wrapperElem);\n const markElem = createSvgIconElement(doc, 'check');\n wrapperElem.appendChild(markElem);\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n this.inputElement.checked = this.value.rawValue;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass CheckboxController {\n constructor(doc, config) {\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.onLabelMouseDown_ = this.onLabelMouseDown_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new CheckboxView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n this.view.labelElement.addEventListener('mousedown', this.onLabelMouseDown_);\n }\n onInputChange_(ev) {\n const inputElem = forceCast(ev.currentTarget);\n this.value.rawValue = inputElem.checked;\n ev.preventDefault();\n ev.stopPropagation();\n }\n onLabelMouseDown_(ev) {\n ev.preventDefault();\n }\n}\n\nfunction createConstraint$6(params) {\n const constraints = [];\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\nconst BooleanInputPlugin = createPlugin({\n id: 'input-bool',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'boolean') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n options: p.optional.custom(parseListOptions),\n readonly: p.optional.constant(false),\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => boolFromUnknown,\n constraint: (args) => createConstraint$6(args.params),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(doc, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new CheckboxController(doc, {\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'boolean') {\n return null;\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n\nconst cn$d = ClassName('col');\nclass ColorView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$d());\n config.foldable.bindExpandedClass(this.element, cn$d(undefined, 'expanded'));\n bindValueMap(config.foldable, 'completed', valueToClassName(this.element, cn$d(undefined, 'cpl')));\n const headElem = doc.createElement('div');\n headElem.classList.add(cn$d('h'));\n this.element.appendChild(headElem);\n const swatchElem = doc.createElement('div');\n swatchElem.classList.add(cn$d('s'));\n headElem.appendChild(swatchElem);\n this.swatchElement = swatchElem;\n const textElem = doc.createElement('div');\n textElem.classList.add(cn$d('t'));\n headElem.appendChild(textElem);\n this.textElement = textElem;\n if (config.pickerLayout === 'inline') {\n const pickerElem = doc.createElement('div');\n pickerElem.classList.add(cn$d('p'));\n this.element.appendChild(pickerElem);\n this.pickerElement = pickerElem;\n }\n else {\n this.pickerElement = null;\n }\n }\n}\n\nfunction rgbToHslInt(r, g, b) {\n const rp = constrainRange(r / 255, 0, 1);\n const gp = constrainRange(g / 255, 0, 1);\n const bp = constrainRange(b / 255, 0, 1);\n const cmax = Math.max(rp, gp, bp);\n const cmin = Math.min(rp, gp, bp);\n const c = cmax - cmin;\n let h = 0;\n let s = 0;\n const l = (cmin + cmax) / 2;\n if (c !== 0) {\n s = c / (1 - Math.abs(cmax + cmin - 1));\n if (rp === cmax) {\n h = (gp - bp) / c;\n }\n else if (gp === cmax) {\n h = 2 + (bp - rp) / c;\n }\n else {\n h = 4 + (rp - gp) / c;\n }\n h = h / 6 + (h < 0 ? 1 : 0);\n }\n return [h * 360, s * 100, l * 100];\n}\nfunction hslToRgbInt(h, s, l) {\n const hp = ((h % 360) + 360) % 360;\n const sp = constrainRange(s / 100, 0, 1);\n const lp = constrainRange(l / 100, 0, 1);\n const c = (1 - Math.abs(2 * lp - 1)) * sp;\n const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n const m = lp - c / 2;\n let rp, gp, bp;\n if (hp >= 0 && hp < 60) {\n [rp, gp, bp] = [c, x, 0];\n }\n else if (hp >= 60 && hp < 120) {\n [rp, gp, bp] = [x, c, 0];\n }\n else if (hp >= 120 && hp < 180) {\n [rp, gp, bp] = [0, c, x];\n }\n else if (hp >= 180 && hp < 240) {\n [rp, gp, bp] = [0, x, c];\n }\n else if (hp >= 240 && hp < 300) {\n [rp, gp, bp] = [x, 0, c];\n }\n else {\n [rp, gp, bp] = [c, 0, x];\n }\n return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n}\nfunction rgbToHsvInt(r, g, b) {\n const rp = constrainRange(r / 255, 0, 1);\n const gp = constrainRange(g / 255, 0, 1);\n const bp = constrainRange(b / 255, 0, 1);\n const cmax = Math.max(rp, gp, bp);\n const cmin = Math.min(rp, gp, bp);\n const d = cmax - cmin;\n let h;\n if (d === 0) {\n h = 0;\n }\n else if (cmax === rp) {\n h = 60 * (((((gp - bp) / d) % 6) + 6) % 6);\n }\n else if (cmax === gp) {\n h = 60 * ((bp - rp) / d + 2);\n }\n else {\n h = 60 * ((rp - gp) / d + 4);\n }\n const s = cmax === 0 ? 0 : d / cmax;\n const v = cmax;\n return [h, s * 100, v * 100];\n}\nfunction hsvToRgbInt(h, s, v) {\n const hp = loopRange(h, 360);\n const sp = constrainRange(s / 100, 0, 1);\n const vp = constrainRange(v / 100, 0, 1);\n const c = vp * sp;\n const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n const m = vp - c;\n let rp, gp, bp;\n if (hp >= 0 && hp < 60) {\n [rp, gp, bp] = [c, x, 0];\n }\n else if (hp >= 60 && hp < 120) {\n [rp, gp, bp] = [x, c, 0];\n }\n else if (hp >= 120 && hp < 180) {\n [rp, gp, bp] = [0, c, x];\n }\n else if (hp >= 180 && hp < 240) {\n [rp, gp, bp] = [0, x, c];\n }\n else if (hp >= 240 && hp < 300) {\n [rp, gp, bp] = [x, 0, c];\n }\n else {\n [rp, gp, bp] = [c, 0, x];\n }\n return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n}\nfunction hslToHsvInt(h, s, l) {\n const sd = l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100);\n return [\n h,\n sd !== 0 ? (s * (100 - Math.abs(2 * l - 100))) / sd : 0,\n l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100),\n ];\n}\nfunction hsvToHslInt(h, s, v) {\n const sd = 100 - Math.abs((v * (200 - s)) / 100 - 100);\n return [h, sd !== 0 ? (s * v) / sd : 0, (v * (200 - s)) / (2 * 100)];\n}\nfunction removeAlphaComponent(comps) {\n return [comps[0], comps[1], comps[2]];\n}\nfunction appendAlphaComponent(comps, alpha) {\n return [comps[0], comps[1], comps[2], alpha];\n}\nconst MODE_CONVERTER_MAP = {\n hsl: {\n hsl: (h, s, l) => [h, s, l],\n hsv: hslToHsvInt,\n rgb: hslToRgbInt,\n },\n hsv: {\n hsl: hsvToHslInt,\n hsv: (h, s, v) => [h, s, v],\n rgb: hsvToRgbInt,\n },\n rgb: {\n hsl: rgbToHslInt,\n hsv: rgbToHsvInt,\n rgb: (r, g, b) => [r, g, b],\n },\n};\nfunction getColorMaxComponents(mode, type) {\n return [\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 360,\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n ];\n}\nfunction loopHueRange(hue, max) {\n return hue === max ? max : loopRange(hue, max);\n}\nfunction constrainColorComponents(components, mode, type) {\n var _a;\n const ms = getColorMaxComponents(mode, type);\n return [\n mode === 'rgb'\n ? constrainRange(components[0], 0, ms[0])\n : loopHueRange(components[0], ms[0]),\n constrainRange(components[1], 0, ms[1]),\n constrainRange(components[2], 0, ms[2]),\n constrainRange((_a = components[3]) !== null && _a !== void 0 ? _a : 1, 0, 1),\n ];\n}\nfunction convertColorType(comps, mode, from, to) {\n const fms = getColorMaxComponents(mode, from);\n const tms = getColorMaxComponents(mode, to);\n return comps.map((c, index) => (c / fms[index]) * tms[index]);\n}\nfunction convertColor(components, from, to) {\n const intComps = convertColorType(components, from.mode, from.type, 'int');\n const result = MODE_CONVERTER_MAP[from.mode][to.mode](...intComps);\n return convertColorType(result, to.mode, 'int', to.type);\n}\n\nclass IntColor {\n static black() {\n return new IntColor([0, 0, 0], 'rgb');\n }\n constructor(comps, mode) {\n this.type = 'int';\n this.mode = mode;\n this.comps_ = constrainColorComponents(comps, mode, this.type);\n }\n getComponents(opt_mode) {\n return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type: this.type }), this.comps_[3]);\n }\n toRgbaObject() {\n const rgbComps = this.getComponents('rgb');\n return {\n r: rgbComps[0],\n g: rgbComps[1],\n b: rgbComps[2],\n a: rgbComps[3],\n };\n }\n}\n\nconst cn$c = ClassName('colp');\nclass ColorPickerView {\n constructor(doc, config) {\n this.alphaViews_ = null;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$c());\n config.viewProps.bindClassModifiers(this.element);\n const hsvElem = doc.createElement('div');\n hsvElem.classList.add(cn$c('hsv'));\n const svElem = doc.createElement('div');\n svElem.classList.add(cn$c('sv'));\n this.svPaletteView_ = config.svPaletteView;\n svElem.appendChild(this.svPaletteView_.element);\n hsvElem.appendChild(svElem);\n const hElem = doc.createElement('div');\n hElem.classList.add(cn$c('h'));\n this.hPaletteView_ = config.hPaletteView;\n hElem.appendChild(this.hPaletteView_.element);\n hsvElem.appendChild(hElem);\n this.element.appendChild(hsvElem);\n const rgbElem = doc.createElement('div');\n rgbElem.classList.add(cn$c('rgb'));\n this.textsView_ = config.textsView;\n rgbElem.appendChild(this.textsView_.element);\n this.element.appendChild(rgbElem);\n if (config.alphaViews) {\n this.alphaViews_ = {\n palette: config.alphaViews.palette,\n text: config.alphaViews.text,\n };\n const aElem = doc.createElement('div');\n aElem.classList.add(cn$c('a'));\n const apElem = doc.createElement('div');\n apElem.classList.add(cn$c('ap'));\n apElem.appendChild(this.alphaViews_.palette.element);\n aElem.appendChild(apElem);\n const atElem = doc.createElement('div');\n atElem.classList.add(cn$c('at'));\n atElem.appendChild(this.alphaViews_.text.element);\n aElem.appendChild(atElem);\n this.element.appendChild(aElem);\n }\n }\n get allFocusableElements() {\n const elems = [\n this.svPaletteView_.element,\n this.hPaletteView_.element,\n this.textsView_.modeSelectElement,\n ...this.textsView_.inputViews.map((v) => v.inputElement),\n ];\n if (this.alphaViews_) {\n elems.push(this.alphaViews_.palette.element, this.alphaViews_.text.inputElement);\n }\n return elems;\n }\n}\n\nfunction parseColorType(value) {\n return value === 'int' ? 'int' : value === 'float' ? 'float' : undefined;\n}\nfunction parseColorInputParams(params) {\n return parseRecord(params, (p) => ({\n color: p.optional.object({\n alpha: p.optional.boolean,\n type: p.optional.custom(parseColorType),\n }),\n expanded: p.optional.boolean,\n picker: p.optional.custom(parsePickerLayout),\n readonly: p.optional.constant(false),\n }));\n}\nfunction getKeyScaleForColor(forAlpha) {\n return forAlpha ? 0.1 : 1;\n}\nfunction extractColorType(params) {\n var _a;\n return (_a = params.color) === null || _a === void 0 ? void 0 : _a.type;\n}\n\nclass FloatColor {\n constructor(comps, mode) {\n this.type = 'float';\n this.mode = mode;\n this.comps_ = constrainColorComponents(comps, mode, this.type);\n }\n getComponents(opt_mode) {\n return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type: this.type }), this.comps_[3]);\n }\n toRgbaObject() {\n const rgbComps = this.getComponents('rgb');\n return {\n r: rgbComps[0],\n g: rgbComps[1],\n b: rgbComps[2],\n a: rgbComps[3],\n };\n }\n}\n\nconst TYPE_TO_CONSTRUCTOR_MAP = {\n int: (comps, mode) => new IntColor(comps, mode),\n float: (comps, mode) => new FloatColor(comps, mode),\n};\nfunction createColor(comps, mode, type) {\n return TYPE_TO_CONSTRUCTOR_MAP[type](comps, mode);\n}\nfunction isFloatColor(c) {\n return c.type === 'float';\n}\nfunction isIntColor(c) {\n return c.type === 'int';\n}\nfunction convertFloatToInt(cf) {\n const comps = cf.getComponents();\n const ms = getColorMaxComponents(cf.mode, 'int');\n return new IntColor([\n Math.round(mapRange(comps[0], 0, 1, 0, ms[0])),\n Math.round(mapRange(comps[1], 0, 1, 0, ms[1])),\n Math.round(mapRange(comps[2], 0, 1, 0, ms[2])),\n comps[3],\n ], cf.mode);\n}\nfunction convertIntToFloat(ci) {\n const comps = ci.getComponents();\n const ms = getColorMaxComponents(ci.mode, 'int');\n return new FloatColor([\n mapRange(comps[0], 0, ms[0], 0, 1),\n mapRange(comps[1], 0, ms[1], 0, 1),\n mapRange(comps[2], 0, ms[2], 0, 1),\n comps[3],\n ], ci.mode);\n}\nfunction mapColorType(c, type) {\n if (c.type === type) {\n return c;\n }\n if (isIntColor(c) && type === 'float') {\n return convertIntToFloat(c);\n }\n if (isFloatColor(c) && type === 'int') {\n return convertFloatToInt(c);\n }\n throw TpError.shouldNeverHappen();\n}\n\nfunction equalsStringColorFormat(f1, f2) {\n return (f1.alpha === f2.alpha &&\n f1.mode === f2.mode &&\n f1.notation === f2.notation &&\n f1.type === f2.type);\n}\nfunction parseCssNumberOrPercentage(text, max) {\n const m = text.match(/^(.+)%$/);\n if (!m) {\n return Math.min(parseFloat(text), max);\n }\n return Math.min(parseFloat(m[1]) * 0.01 * max, max);\n}\nconst ANGLE_TO_DEG_MAP = {\n deg: (angle) => angle,\n grad: (angle) => (angle * 360) / 400,\n rad: (angle) => (angle * 360) / (2 * Math.PI),\n turn: (angle) => angle * 360,\n};\nfunction parseCssNumberOrAngle(text) {\n const m = text.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);\n if (!m) {\n return parseFloat(text);\n }\n const angle = parseFloat(m[1]);\n const unit = m[2];\n return ANGLE_TO_DEG_MAP[unit](angle);\n}\nfunction parseFunctionalRgbColorComponents(text) {\n const m = text.match(/^rgb\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrPercentage(m[1], 255),\n parseCssNumberOrPercentage(m[2], 255),\n parseCssNumberOrPercentage(m[3], 255),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalRgbColor(text) {\n const comps = parseFunctionalRgbColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseFunctionalRgbaColorComponents(text) {\n const m = text.match(/^rgba\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrPercentage(m[1], 255),\n parseCssNumberOrPercentage(m[2], 255),\n parseCssNumberOrPercentage(m[3], 255),\n parseCssNumberOrPercentage(m[4], 1),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalRgbaColor(text) {\n const comps = parseFunctionalRgbaColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseFunctionalHslColorComponents(text) {\n const m = text.match(/^hsl\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrAngle(m[1]),\n parseCssNumberOrPercentage(m[2], 100),\n parseCssNumberOrPercentage(m[3], 100),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalHslColor(text) {\n const comps = parseFunctionalHslColorComponents(text);\n return comps ? new IntColor(comps, 'hsl') : null;\n}\nfunction parseHslaColorComponents(text) {\n const m = text.match(/^hsla\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrAngle(m[1]),\n parseCssNumberOrPercentage(m[2], 100),\n parseCssNumberOrPercentage(m[3], 100),\n parseCssNumberOrPercentage(m[4], 1),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalHslaColor(text) {\n const comps = parseHslaColorComponents(text);\n return comps ? new IntColor(comps, 'hsl') : null;\n}\nfunction parseHexRgbColorComponents(text) {\n const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n if (mRgb) {\n return [\n parseInt(mRgb[1] + mRgb[1], 16),\n parseInt(mRgb[2] + mRgb[2], 16),\n parseInt(mRgb[3] + mRgb[3], 16),\n ];\n }\n const mRrggbb = text.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n if (mRrggbb) {\n return [\n parseInt(mRrggbb[1], 16),\n parseInt(mRrggbb[2], 16),\n parseInt(mRrggbb[3], 16),\n ];\n }\n return null;\n}\nfunction parseHexRgbColor(text) {\n const comps = parseHexRgbColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseHexRgbaColorComponents(text) {\n const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n if (mRgb) {\n return [\n parseInt(mRgb[1] + mRgb[1], 16),\n parseInt(mRgb[2] + mRgb[2], 16),\n parseInt(mRgb[3] + mRgb[3], 16),\n mapRange(parseInt(mRgb[4] + mRgb[4], 16), 0, 255, 0, 1),\n ];\n }\n const mRrggbb = text.match(/^(?:#|0x)?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n if (mRrggbb) {\n return [\n parseInt(mRrggbb[1], 16),\n parseInt(mRrggbb[2], 16),\n parseInt(mRrggbb[3], 16),\n mapRange(parseInt(mRrggbb[4], 16), 0, 255, 0, 1),\n ];\n }\n return null;\n}\nfunction parseHexRgbaColor(text) {\n const comps = parseHexRgbaColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseObjectRgbColorComponents(text) {\n const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseFloat(m[1]),\n parseFloat(m[2]),\n parseFloat(m[3]),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction createObjectRgbColorParser(type) {\n return (text) => {\n const comps = parseObjectRgbColorComponents(text);\n return comps ? createColor(comps, 'rgb', type) : null;\n };\n}\nfunction parseObjectRgbaColorComponents(text) {\n const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*a\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseFloat(m[1]),\n parseFloat(m[2]),\n parseFloat(m[3]),\n parseFloat(m[4]),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction createObjectRgbaColorParser(type) {\n return (text) => {\n const comps = parseObjectRgbaColorComponents(text);\n return comps ? createColor(comps, 'rgb', type) : null;\n };\n}\nconst PARSER_AND_RESULT = [\n {\n parser: parseHexRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'hex',\n },\n },\n {\n parser: parseHexRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'hex',\n },\n },\n {\n parser: parseFunctionalRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'func',\n },\n },\n {\n parser: parseFunctionalRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'func',\n },\n },\n {\n parser: parseFunctionalHslColorComponents,\n result: {\n alpha: false,\n mode: 'hsl',\n notation: 'func',\n },\n },\n {\n parser: parseHslaColorComponents,\n result: {\n alpha: true,\n mode: 'hsl',\n notation: 'func',\n },\n },\n {\n parser: parseObjectRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'object',\n },\n },\n {\n parser: parseObjectRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'object',\n },\n },\n];\nfunction detectStringColor(text) {\n return PARSER_AND_RESULT.reduce((prev, { parser, result: detection }) => {\n if (prev) {\n return prev;\n }\n return parser(text) ? detection : null;\n }, null);\n}\nfunction detectStringColorFormat(text, type = 'int') {\n const r = detectStringColor(text);\n if (!r) {\n return null;\n }\n if (r.notation === 'hex' && type !== 'float') {\n return Object.assign(Object.assign({}, r), { type: 'int' });\n }\n if (r.notation === 'func') {\n return Object.assign(Object.assign({}, r), { type: type });\n }\n return null;\n}\nfunction createColorStringParser(type) {\n const parsers = [\n parseHexRgbColor,\n parseHexRgbaColor,\n parseFunctionalRgbColor,\n parseFunctionalRgbaColor,\n parseFunctionalHslColor,\n parseFunctionalHslaColor,\n ];\n if (type === 'int') {\n parsers.push(createObjectRgbColorParser('int'), createObjectRgbaColorParser('int'));\n }\n if (type === 'float') {\n parsers.push(createObjectRgbColorParser('float'), createObjectRgbaColorParser('float'));\n }\n const parser = composeParsers(parsers);\n return (text) => {\n const result = parser(text);\n return result ? mapColorType(result, type) : null;\n };\n}\nfunction readIntColorString(value) {\n const parser = createColorStringParser('int');\n if (typeof value !== 'string') {\n return IntColor.black();\n }\n const result = parser(value);\n return result !== null && result !== void 0 ? result : IntColor.black();\n}\nfunction zerofill(comp) {\n const hex = constrainRange(Math.floor(comp), 0, 255).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\nfunction colorToHexRgbString(value, prefix = '#') {\n const hexes = removeAlphaComponent(value.getComponents('rgb'))\n .map(zerofill)\n .join('');\n return `${prefix}${hexes}`;\n}\nfunction colorToHexRgbaString(value, prefix = '#') {\n const rgbaComps = value.getComponents('rgb');\n const hexes = [rgbaComps[0], rgbaComps[1], rgbaComps[2], rgbaComps[3] * 255]\n .map(zerofill)\n .join('');\n return `${prefix}${hexes}`;\n}\nfunction colorToFunctionalRgbString(value) {\n const formatter = createNumberFormatter(0);\n const ci = mapColorType(value, 'int');\n const comps = removeAlphaComponent(ci.getComponents('rgb')).map((comp) => formatter(comp));\n return `rgb(${comps.join(', ')})`;\n}\nfunction colorToFunctionalRgbaString(value) {\n const aFormatter = createNumberFormatter(2);\n const rgbFormatter = createNumberFormatter(0);\n const ci = mapColorType(value, 'int');\n const comps = ci.getComponents('rgb').map((comp, index) => {\n const formatter = index === 3 ? aFormatter : rgbFormatter;\n return formatter(comp);\n });\n return `rgba(${comps.join(', ')})`;\n}\nfunction colorToFunctionalHslString(value) {\n const formatters = [\n createNumberFormatter(0),\n formatPercentage,\n formatPercentage,\n ];\n const ci = mapColorType(value, 'int');\n const comps = removeAlphaComponent(ci.getComponents('hsl')).map((comp, index) => formatters[index](comp));\n return `hsl(${comps.join(', ')})`;\n}\nfunction colorToFunctionalHslaString(value) {\n const formatters = [\n createNumberFormatter(0),\n formatPercentage,\n formatPercentage,\n createNumberFormatter(2),\n ];\n const ci = mapColorType(value, 'int');\n const comps = ci\n .getComponents('hsl')\n .map((comp, index) => formatters[index](comp));\n return `hsla(${comps.join(', ')})`;\n}\nfunction colorToObjectRgbString(value, type) {\n const formatter = createNumberFormatter(type === 'float' ? 2 : 0);\n const names = ['r', 'g', 'b'];\n const cc = mapColorType(value, type);\n const comps = removeAlphaComponent(cc.getComponents('rgb')).map((comp, index) => `${names[index]}: ${formatter(comp)}`);\n return `{${comps.join(', ')}}`;\n}\nfunction createObjectRgbColorFormatter(type) {\n return (value) => colorToObjectRgbString(value, type);\n}\nfunction colorToObjectRgbaString(value, type) {\n const aFormatter = createNumberFormatter(2);\n const rgbFormatter = createNumberFormatter(type === 'float' ? 2 : 0);\n const names = ['r', 'g', 'b', 'a'];\n const cc = mapColorType(value, type);\n const comps = cc.getComponents('rgb').map((comp, index) => {\n const formatter = index === 3 ? aFormatter : rgbFormatter;\n return `${names[index]}: ${formatter(comp)}`;\n });\n return `{${comps.join(', ')}}`;\n}\nfunction createObjectRgbaColorFormatter(type) {\n return (value) => colorToObjectRgbaString(value, type);\n}\nconst FORMAT_AND_STRINGIFIERS = [\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'hex',\n type: 'int',\n },\n stringifier: colorToHexRgbString,\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'hex',\n type: 'int',\n },\n stringifier: colorToHexRgbaString,\n },\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalRgbString,\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalRgbaString,\n },\n {\n format: {\n alpha: false,\n mode: 'hsl',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalHslString,\n },\n {\n format: {\n alpha: true,\n mode: 'hsl',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalHslaString,\n },\n ...['int', 'float'].reduce((prev, type) => {\n return [\n ...prev,\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'object',\n type: type,\n },\n stringifier: createObjectRgbColorFormatter(type),\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'object',\n type: type,\n },\n stringifier: createObjectRgbaColorFormatter(type),\n },\n ];\n }, []),\n];\nfunction findColorStringifier(format) {\n return FORMAT_AND_STRINGIFIERS.reduce((prev, fas) => {\n if (prev) {\n return prev;\n }\n return equalsStringColorFormat(fas.format, format)\n ? fas.stringifier\n : null;\n }, null);\n}\n\nconst cn$b = ClassName('apl');\nclass APaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$b());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const barElem = doc.createElement('div');\n barElem.classList.add(cn$b('b'));\n this.element.appendChild(barElem);\n const colorElem = doc.createElement('div');\n colorElem.classList.add(cn$b('c'));\n barElem.appendChild(colorElem);\n this.colorElem_ = colorElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$b('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n const previewElem = doc.createElement('div');\n previewElem.classList.add(cn$b('p'));\n this.markerElem_.appendChild(previewElem);\n this.previewElem_ = previewElem;\n this.update_();\n }\n update_() {\n const c = this.value.rawValue;\n const rgbaComps = c.getComponents('rgb');\n const leftColor = new IntColor([rgbaComps[0], rgbaComps[1], rgbaComps[2], 0], 'rgb');\n const rightColor = new IntColor([rgbaComps[0], rgbaComps[1], rgbaComps[2], 255], 'rgb');\n const gradientComps = [\n 'to right',\n colorToFunctionalRgbaString(leftColor),\n colorToFunctionalRgbaString(rightColor),\n ];\n this.colorElem_.style.background = `linear-gradient(${gradientComps.join(',')})`;\n this.previewElem_.style.backgroundColor = colorToFunctionalRgbaString(c);\n const left = mapRange(rgbaComps[3], 0, 1, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass APaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new APaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const alpha = d.point.x / d.bounds.width;\n const c = this.value.rawValue;\n const [h, s, v] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, s, v, alpha], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(getKeyScaleForColor(true), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n const c = this.value.rawValue;\n const [h, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, s, v, a + step], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(getKeyScaleForColor(true), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nconst cn$a = ClassName('coltxt');\nfunction createModeSelectElement(doc) {\n const selectElem = doc.createElement('select');\n const items = [\n { text: 'RGB', value: 'rgb' },\n { text: 'HSL', value: 'hsl' },\n { text: 'HSV', value: 'hsv' },\n { text: 'HEX', value: 'hex' },\n ];\n selectElem.appendChild(items.reduce((frag, item) => {\n const optElem = doc.createElement('option');\n optElem.textContent = item.text;\n optElem.value = item.value;\n frag.appendChild(optElem);\n return frag;\n }, doc.createDocumentFragment()));\n return selectElem;\n}\nclass ColorTextsView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$a());\n config.viewProps.bindClassModifiers(this.element);\n const modeElem = doc.createElement('div');\n modeElem.classList.add(cn$a('m'));\n this.modeElem_ = createModeSelectElement(doc);\n this.modeElem_.classList.add(cn$a('ms'));\n modeElem.appendChild(this.modeSelectElement);\n config.viewProps.bindDisabled(this.modeElem_);\n const modeMarkerElem = doc.createElement('div');\n modeMarkerElem.classList.add(cn$a('mm'));\n modeMarkerElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n modeElem.appendChild(modeMarkerElem);\n this.element.appendChild(modeElem);\n const inputsElem = doc.createElement('div');\n inputsElem.classList.add(cn$a('w'));\n this.element.appendChild(inputsElem);\n this.inputsElem_ = inputsElem;\n this.inputViews_ = config.inputViews;\n this.applyInputViews_();\n bindValue(config.mode, (mode) => {\n this.modeElem_.value = mode;\n });\n }\n get modeSelectElement() {\n return this.modeElem_;\n }\n get inputViews() {\n return this.inputViews_;\n }\n set inputViews(inputViews) {\n this.inputViews_ = inputViews;\n this.applyInputViews_();\n }\n applyInputViews_() {\n removeChildElements(this.inputsElem_);\n const doc = this.element.ownerDocument;\n this.inputViews_.forEach((v) => {\n const compElem = doc.createElement('div');\n compElem.classList.add(cn$a('c'));\n compElem.appendChild(v.element);\n this.inputsElem_.appendChild(compElem);\n });\n }\n}\n\nfunction createFormatter$2(type) {\n return createNumberFormatter(type === 'float' ? 2 : 0);\n}\nfunction createConstraint$5(mode, type, index) {\n const max = getColorMaxComponents(mode, type)[index];\n return new DefiniteRangeConstraint({\n min: 0,\n max: max,\n });\n}\nfunction createComponentController(doc, config, index) {\n return new NumberTextController(doc, {\n arrayPosition: index === 0 ? 'fst' : index === 3 - 1 ? 'lst' : 'mid',\n parser: config.parser,\n props: ValueMap.fromObject({\n formatter: createFormatter$2(config.colorType),\n keyScale: getKeyScaleForColor(false),\n pointerScale: config.colorType === 'float' ? 0.01 : 1,\n }),\n value: createValue(0, {\n constraint: createConstraint$5(config.colorMode, config.colorType, index),\n }),\n viewProps: config.viewProps,\n });\n}\nfunction createComponentControllers(doc, config) {\n const cc = {\n colorMode: config.colorMode,\n colorType: config.colorType,\n parser: parseNumber,\n viewProps: config.viewProps,\n };\n return [0, 1, 2].map((i) => {\n const c = createComponentController(doc, cc, i);\n connectValues({\n primary: config.value,\n secondary: c.value,\n forward(p) {\n const mc = mapColorType(p, config.colorType);\n return mc.getComponents(config.colorMode)[i];\n },\n backward(p, s) {\n const pickedMode = config.colorMode;\n const mc = mapColorType(p, config.colorType);\n const comps = mc.getComponents(pickedMode);\n comps[i] = s;\n const c = createColor(appendAlphaComponent(removeAlphaComponent(comps), comps[3]), pickedMode, config.colorType);\n return mapColorType(c, 'int');\n },\n });\n return c;\n });\n}\nfunction createHexController(doc, config) {\n const c = new TextController(doc, {\n parser: createColorStringParser('int'),\n props: ValueMap.fromObject({\n formatter: colorToHexRgbString,\n }),\n value: createValue(IntColor.black()),\n viewProps: config.viewProps,\n });\n connectValues({\n primary: config.value,\n secondary: c.value,\n forward: (p) => new IntColor(removeAlphaComponent(p.getComponents()), p.mode),\n backward: (p, s) => new IntColor(appendAlphaComponent(removeAlphaComponent(s.getComponents(p.mode)), p.getComponents()[3]), p.mode),\n });\n return [c];\n}\nfunction isColorMode(mode) {\n return mode !== 'hex';\n}\nclass ColorTextsController {\n constructor(doc, config) {\n this.onModeSelectChange_ = this.onModeSelectChange_.bind(this);\n this.colorType_ = config.colorType;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.colorMode = createValue(this.value.rawValue.mode);\n this.ccs_ = this.createComponentControllers_(doc);\n this.view = new ColorTextsView(doc, {\n mode: this.colorMode,\n inputViews: [this.ccs_[0].view, this.ccs_[1].view, this.ccs_[2].view],\n viewProps: this.viewProps,\n });\n this.view.modeSelectElement.addEventListener('change', this.onModeSelectChange_);\n }\n createComponentControllers_(doc) {\n const mode = this.colorMode.rawValue;\n if (isColorMode(mode)) {\n return createComponentControllers(doc, {\n colorMode: mode,\n colorType: this.colorType_,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n return createHexController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n onModeSelectChange_(ev) {\n const selectElem = ev.currentTarget;\n this.colorMode.rawValue = selectElem.value;\n this.ccs_ = this.createComponentControllers_(this.view.element.ownerDocument);\n this.view.inputViews = this.ccs_.map((cc) => cc.view);\n }\n}\n\nconst cn$9 = ClassName('hpl');\nclass HPaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$9());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const colorElem = doc.createElement('div');\n colorElem.classList.add(cn$9('c'));\n this.element.appendChild(colorElem);\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$9('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n this.update_();\n }\n update_() {\n const c = this.value.rawValue;\n const [h] = c.getComponents('hsv');\n this.markerElem_.style.backgroundColor = colorToFunctionalRgbString(new IntColor([h, 100, 100], 'hsv'));\n const left = mapRange(h, 0, 360, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass HPaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new HPaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const hue = mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, 0, 360);\n const c = this.value.rawValue;\n const [, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([hue, s, v, a], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(getKeyScaleForColor(false), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n const c = this.value.rawValue;\n const [h, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h + step, s, v, a], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(getKeyScaleForColor(false), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nconst cn$8 = ClassName('svp');\nconst CANVAS_RESOL = 64;\nclass SvPaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$8());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const canvasElem = doc.createElement('canvas');\n canvasElem.height = CANVAS_RESOL;\n canvasElem.width = CANVAS_RESOL;\n canvasElem.classList.add(cn$8('c'));\n this.element.appendChild(canvasElem);\n this.canvasElement = canvasElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$8('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n this.update_();\n }\n update_() {\n const ctx = getCanvasContext(this.canvasElement);\n if (!ctx) {\n return;\n }\n const c = this.value.rawValue;\n const hsvComps = c.getComponents('hsv');\n const width = this.canvasElement.width;\n const height = this.canvasElement.height;\n const imgData = ctx.getImageData(0, 0, width, height);\n const data = imgData.data;\n for (let iy = 0; iy < height; iy++) {\n for (let ix = 0; ix < width; ix++) {\n const s = mapRange(ix, 0, width, 0, 100);\n const v = mapRange(iy, 0, height, 100, 0);\n const rgbComps = hsvToRgbInt(hsvComps[0], s, v);\n const i = (iy * width + ix) * 4;\n data[i] = rgbComps[0];\n data[i + 1] = rgbComps[1];\n data[i + 2] = rgbComps[2];\n data[i + 3] = 255;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n const left = mapRange(hsvComps[1], 0, 100, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n const top = mapRange(hsvComps[2], 0, 100, 100, 0);\n this.markerElem_.style.top = `${top}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass SvPaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new SvPaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const saturation = mapRange(d.point.x, 0, d.bounds.width, 0, 100);\n const value = mapRange(d.point.y, 0, d.bounds.height, 100, 0);\n const [h, , , a] = this.value.rawValue.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, saturation, value, a], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n if (isArrowKey(ev.key)) {\n ev.preventDefault();\n }\n const [h, s, v, a] = this.value.rawValue.getComponents('hsv');\n const keyScale = getKeyScaleForColor(false);\n const ds = getStepForKey(keyScale, getHorizontalStepKeys(ev));\n const dv = getStepForKey(keyScale, getVerticalStepKeys(ev));\n if (ds === 0 && dv === 0) {\n return;\n }\n this.value.setRawValue(new IntColor([h, s + ds, v + dv, a], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const keyScale = getKeyScaleForColor(false);\n const ds = getStepForKey(keyScale, getHorizontalStepKeys(ev));\n const dv = getStepForKey(keyScale, getVerticalStepKeys(ev));\n if (ds === 0 && dv === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nclass ColorPickerController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.hPaletteC_ = new HPaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.svPaletteC_ = new SvPaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.alphaIcs_ = config.supportsAlpha\n ? {\n palette: new APaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n }),\n text: new NumberTextController(doc, {\n parser: parseNumber,\n props: ValueMap.fromObject({\n pointerScale: 0.01,\n keyScale: 0.1,\n formatter: createNumberFormatter(2),\n }),\n value: createValue(0, {\n constraint: new DefiniteRangeConstraint({ min: 0, max: 1 }),\n }),\n viewProps: this.viewProps,\n }),\n }\n : null;\n if (this.alphaIcs_) {\n connectValues({\n primary: this.value,\n secondary: this.alphaIcs_.text.value,\n forward: (p) => p.getComponents()[3],\n backward: (p, s) => {\n const comps = p.getComponents();\n comps[3] = s;\n return new IntColor(comps, p.mode);\n },\n });\n }\n this.textsC_ = new ColorTextsController(doc, {\n colorType: config.colorType,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new ColorPickerView(doc, {\n alphaViews: this.alphaIcs_\n ? {\n palette: this.alphaIcs_.palette.view,\n text: this.alphaIcs_.text.view,\n }\n : null,\n hPaletteView: this.hPaletteC_.view,\n supportsAlpha: config.supportsAlpha,\n svPaletteView: this.svPaletteC_.view,\n textsView: this.textsC_.view,\n viewProps: this.viewProps,\n });\n }\n get textsController() {\n return this.textsC_;\n }\n}\n\nconst cn$7 = ClassName('colsw');\nclass ColorSwatchView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$7());\n config.viewProps.bindClassModifiers(this.element);\n const swatchElem = doc.createElement('div');\n swatchElem.classList.add(cn$7('sw'));\n this.element.appendChild(swatchElem);\n this.swatchElem_ = swatchElem;\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$7('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n this.update_();\n }\n update_() {\n const value = this.value.rawValue;\n this.swatchElem_.style.backgroundColor = colorToHexRgbaString(value);\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass ColorSwatchController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new ColorSwatchView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n\nclass ColorController {\n constructor(doc, config) {\n this.onButtonBlur_ = this.onButtonBlur_.bind(this);\n this.onButtonClick_ = this.onButtonClick_.bind(this);\n this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.foldable_ = Foldable.create(config.expanded);\n this.swatchC_ = new ColorSwatchController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n const buttonElem = this.swatchC_.view.buttonElement;\n buttonElem.addEventListener('blur', this.onButtonBlur_);\n buttonElem.addEventListener('click', this.onButtonClick_);\n this.textC_ = new TextController(doc, {\n parser: config.parser,\n props: ValueMap.fromObject({\n formatter: config.formatter,\n }),\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new ColorView(doc, {\n foldable: this.foldable_,\n pickerLayout: config.pickerLayout,\n });\n this.view.swatchElement.appendChild(this.swatchC_.view.element);\n this.view.textElement.appendChild(this.textC_.view.element);\n this.popC_ =\n config.pickerLayout === 'popup'\n ? new PopupController(doc, {\n viewProps: this.viewProps,\n })\n : null;\n const pickerC = new ColorPickerController(doc, {\n colorType: config.colorType,\n supportsAlpha: config.supportsAlpha,\n value: this.value,\n viewProps: this.viewProps,\n });\n pickerC.view.allFocusableElements.forEach((elem) => {\n elem.addEventListener('blur', this.onPopupChildBlur_);\n elem.addEventListener('keydown', this.onPopupChildKeydown_);\n });\n this.pickerC_ = pickerC;\n if (this.popC_) {\n this.view.element.appendChild(this.popC_.view.element);\n this.popC_.view.element.appendChild(pickerC.view.element);\n connectValues({\n primary: this.foldable_.value('expanded'),\n secondary: this.popC_.shows,\n forward: (p) => p,\n backward: (_, s) => s,\n });\n }\n else if (this.view.pickerElement) {\n this.view.pickerElement.appendChild(this.pickerC_.view.element);\n bindFoldable(this.foldable_, this.view.pickerElement);\n }\n }\n get textController() {\n return this.textC_;\n }\n onButtonBlur_(e) {\n if (!this.popC_) {\n return;\n }\n const elem = this.view.element;\n const nextTarget = forceCast(e.relatedTarget);\n if (!nextTarget || !elem.contains(nextTarget)) {\n this.popC_.shows.rawValue = false;\n }\n }\n onButtonClick_() {\n this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n if (this.foldable_.get('expanded')) {\n this.pickerC_.view.allFocusableElements[0].focus();\n }\n }\n onPopupChildBlur_(ev) {\n if (!this.popC_) {\n return;\n }\n const elem = this.popC_.view.element;\n const nextTarget = findNextTarget(ev);\n if (nextTarget && elem.contains(nextTarget)) {\n return;\n }\n if (nextTarget &&\n nextTarget === this.swatchC_.view.buttonElement &&\n !supportsTouch(elem.ownerDocument)) {\n return;\n }\n this.popC_.shows.rawValue = false;\n }\n onPopupChildKeydown_(ev) {\n if (this.popC_) {\n if (ev.key === 'Escape') {\n this.popC_.shows.rawValue = false;\n }\n }\n else if (this.view.pickerElement) {\n if (ev.key === 'Escape') {\n this.swatchC_.view.buttonElement.focus();\n }\n }\n }\n}\n\nfunction colorToRgbNumber(value) {\n return removeAlphaComponent(value.getComponents('rgb')).reduce((result, comp) => {\n return (result << 8) | (Math.floor(comp) & 0xff);\n }, 0);\n}\nfunction colorToRgbaNumber(value) {\n return (value.getComponents('rgb').reduce((result, comp, index) => {\n const hex = Math.floor(index === 3 ? comp * 255 : comp) & 0xff;\n return (result << 8) | hex;\n }, 0) >>> 0);\n}\nfunction numberToRgbColor(num) {\n return new IntColor([(num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff], 'rgb');\n}\nfunction numberToRgbaColor(num) {\n return new IntColor([\n (num >> 24) & 0xff,\n (num >> 16) & 0xff,\n (num >> 8) & 0xff,\n mapRange(num & 0xff, 0, 255, 0, 1),\n ], 'rgb');\n}\nfunction colorFromRgbNumber(value) {\n if (typeof value !== 'number') {\n return IntColor.black();\n }\n return numberToRgbColor(value);\n}\nfunction colorFromRgbaNumber(value) {\n if (typeof value !== 'number') {\n return IntColor.black();\n }\n return numberToRgbaColor(value);\n}\n\nfunction isRgbColorComponent(obj, key) {\n if (typeof obj !== 'object' || isEmpty(obj)) {\n return false;\n }\n return key in obj && typeof obj[key] === 'number';\n}\nfunction isRgbColorObject(obj) {\n return (isRgbColorComponent(obj, 'r') &&\n isRgbColorComponent(obj, 'g') &&\n isRgbColorComponent(obj, 'b'));\n}\nfunction isRgbaColorObject(obj) {\n return isRgbColorObject(obj) && isRgbColorComponent(obj, 'a');\n}\nfunction isColorObject(obj) {\n return isRgbColorObject(obj);\n}\nfunction equalsColor(v1, v2) {\n if (v1.mode !== v2.mode) {\n return false;\n }\n if (v1.type !== v2.type) {\n return false;\n }\n const comps1 = v1.getComponents();\n const comps2 = v2.getComponents();\n for (let i = 0; i < comps1.length; i++) {\n if (comps1[i] !== comps2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction createColorComponentsFromRgbObject(obj) {\n return 'a' in obj ? [obj.r, obj.g, obj.b, obj.a] : [obj.r, obj.g, obj.b];\n}\n\nfunction createColorStringWriter(format) {\n const stringify = findColorStringifier(format);\n return stringify\n ? (target, value) => {\n writePrimitive(target, stringify(value));\n }\n : null;\n}\nfunction createColorNumberWriter(supportsAlpha) {\n const colorToNumber = supportsAlpha ? colorToRgbaNumber : colorToRgbNumber;\n return (target, value) => {\n writePrimitive(target, colorToNumber(value));\n };\n}\nfunction writeRgbaColorObject(target, value, type) {\n const cc = mapColorType(value, type);\n const obj = cc.toRgbaObject();\n target.writeProperty('r', obj.r);\n target.writeProperty('g', obj.g);\n target.writeProperty('b', obj.b);\n target.writeProperty('a', obj.a);\n}\nfunction writeRgbColorObject(target, value, type) {\n const cc = mapColorType(value, type);\n const obj = cc.toRgbaObject();\n target.writeProperty('r', obj.r);\n target.writeProperty('g', obj.g);\n target.writeProperty('b', obj.b);\n}\nfunction createColorObjectWriter(supportsAlpha, type) {\n return (target, inValue) => {\n if (supportsAlpha) {\n writeRgbaColorObject(target, inValue, type);\n }\n else {\n writeRgbColorObject(target, inValue, type);\n }\n };\n}\n\nfunction shouldSupportAlpha$1(inputParams) {\n var _a;\n if ((_a = inputParams === null || inputParams === void 0 ? void 0 : inputParams.color) === null || _a === void 0 ? void 0 : _a.alpha) {\n return true;\n }\n return false;\n}\nfunction createFormatter$1(supportsAlpha) {\n return supportsAlpha\n ? (v) => colorToHexRgbaString(v, '0x')\n : (v) => colorToHexRgbString(v, '0x');\n}\nfunction isForColor(params) {\n if ('color' in params) {\n return true;\n }\n if (params.view === 'color') {\n return true;\n }\n return false;\n}\nconst NumberColorInputPlugin = createPlugin({\n id: 'input-color-number',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n if (!isForColor(params)) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { supportsAlpha: shouldSupportAlpha$1(params) }),\n }\n : null;\n },\n binding: {\n reader: (args) => {\n return args.params.supportsAlpha\n ? colorFromRgbaNumber\n : colorFromRgbNumber;\n },\n equals: equalsColor,\n writer: (args) => {\n return createColorNumberWriter(args.params.supportsAlpha);\n },\n },\n controller: (args) => {\n var _a, _b;\n return new ColorController(args.document, {\n colorType: 'int',\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: createFormatter$1(args.params.supportsAlpha),\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: args.params.supportsAlpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nfunction colorFromObject(value, type) {\n if (!isColorObject(value)) {\n return mapColorType(IntColor.black(), type);\n }\n if (type === 'int') {\n const comps = createColorComponentsFromRgbObject(value);\n return new IntColor(comps, 'rgb');\n }\n if (type === 'float') {\n const comps = createColorComponentsFromRgbObject(value);\n return new FloatColor(comps, 'rgb');\n }\n return mapColorType(IntColor.black(), 'int');\n}\n\nfunction shouldSupportAlpha(initialValue) {\n return isRgbaColorObject(initialValue);\n}\nfunction createColorObjectBindingReader(type) {\n return (value) => {\n const c = colorFromObject(value, type);\n return mapColorType(c, 'int');\n };\n}\nfunction createColorObjectFormatter(supportsAlpha, type) {\n return (value) => {\n if (supportsAlpha) {\n return colorToObjectRgbaString(value, type);\n }\n return colorToObjectRgbString(value, type);\n };\n}\nconst ObjectColorInputPlugin = createPlugin({\n id: 'input-color-object',\n type: 'input',\n accept: (value, params) => {\n var _a;\n if (!isColorObject(value)) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { colorType: (_a = extractColorType(params)) !== null && _a !== void 0 ? _a : 'int' }),\n }\n : null;\n },\n binding: {\n reader: (args) => createColorObjectBindingReader(args.params.colorType),\n equals: equalsColor,\n writer: (args) => createColorObjectWriter(shouldSupportAlpha(args.initialValue), args.params.colorType),\n },\n controller: (args) => {\n var _a, _b;\n const supportsAlpha = isRgbaColorObject(args.initialValue);\n return new ColorController(args.document, {\n colorType: args.params.colorType,\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: createColorObjectFormatter(supportsAlpha, args.params.colorType),\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: supportsAlpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nconst StringColorInputPlugin = createPlugin({\n id: 'input-color-string',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n if (params.view === 'text') {\n return null;\n }\n const format = detectStringColorFormat(value, extractColorType(params));\n if (!format) {\n return null;\n }\n const stringifier = findColorStringifier(format);\n if (!stringifier) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { format: format, stringifier: stringifier }),\n }\n : null;\n },\n binding: {\n reader: () => readIntColorString,\n equals: equalsColor,\n writer: (args) => {\n const writer = createColorStringWriter(args.params.format);\n if (!writer) {\n throw TpError.notBindable();\n }\n return writer;\n },\n },\n controller: (args) => {\n var _a, _b;\n return new ColorController(args.document, {\n colorType: args.params.format.type,\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: args.params.stringifier,\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: args.params.format.alpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass PointNdConstraint {\n constructor(config) {\n this.components = config.components;\n this.asm_ = config.assembly;\n }\n constrain(value) {\n const comps = this.asm_\n .toComponents(value)\n .map((comp, index) => { var _a, _b; return (_b = (_a = this.components[index]) === null || _a === void 0 ? void 0 : _a.constrain(comp)) !== null && _b !== void 0 ? _b : comp; });\n return this.asm_.fromComponents(comps);\n }\n}\n\nconst cn$6 = ClassName('pndtxt');\nclass PointNdTextView {\n constructor(doc, config) {\n this.textViews = config.textViews;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$6());\n this.textViews.forEach((v) => {\n const axisElem = doc.createElement('div');\n axisElem.classList.add(cn$6('a'));\n axisElem.appendChild(v.element);\n this.element.appendChild(axisElem);\n });\n }\n}\n\nfunction createAxisController(doc, config, index) {\n return new NumberTextController(doc, {\n arrayPosition: index === 0 ? 'fst' : index === config.axes.length - 1 ? 'lst' : 'mid',\n parser: config.parser,\n props: config.axes[index].textProps,\n value: createValue(0, {\n constraint: config.axes[index].constraint,\n }),\n viewProps: config.viewProps,\n });\n}\nclass PointNdTextController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.acs_ = config.axes.map((_, index) => createAxisController(doc, config, index));\n this.acs_.forEach((c, index) => {\n connectValues({\n primary: this.value,\n secondary: c.value,\n forward: (p) => config.assembly.toComponents(p)[index],\n backward: (p, s) => {\n const comps = config.assembly.toComponents(p);\n comps[index] = s;\n return config.assembly.fromComponents(comps);\n },\n });\n });\n this.view = new PointNdTextView(doc, {\n textViews: this.acs_.map((ac) => ac.view),\n });\n }\n get textControllers() {\n return this.acs_;\n }\n}\n\nclass SliderInputBindingApi extends BindingApi {\n get max() {\n return this.controller.valueController.sliderController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.sliderController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.sliderController.props.get('min');\n }\n set min(max) {\n this.controller.valueController.sliderController.props.set('min', max);\n }\n}\n\nfunction createConstraint$4(params, initialValue) {\n const constraints = [];\n const sc = createStepConstraint(params, initialValue);\n if (sc) {\n constraints.push(sc);\n }\n const rc = createRangeConstraint(params);\n if (rc) {\n constraints.push(rc);\n }\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\nconst NumberInputPlugin = createPlugin({\n id: 'input-number',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createNumberTextInputParamsParser(p)), { options: p.optional.custom(parseListOptions), readonly: p.optional.constant(false) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => numberFromUnknown,\n constraint: (args) => createConstraint$4(args.params, args.initialValue),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(args.document, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n const textPropsObj = createNumberTextPropsObject(args.params, value.rawValue);\n const drc = c && findConstraint(c, DefiniteRangeConstraint);\n if (drc) {\n return new SliderTextController(args.document, Object.assign(Object.assign({}, createSliderTextProps(Object.assign(Object.assign({}, textPropsObj), { keyScale: createValue(textPropsObj.keyScale), max: drc.values.value('max'), min: drc.values.value('min') }))), { parser: parseNumber, value: value, viewProps: args.viewProps }));\n }\n return new NumberTextController(args.document, {\n parser: parseNumber,\n props: ValueMap.fromObject(textPropsObj),\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'number') {\n return null;\n }\n if (args.controller.valueController instanceof SliderTextController) {\n return new SliderInputBindingApi(args.controller);\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n\nclass Point2d {\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n getComponents() {\n return [this.x, this.y];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n if (typeof x !== 'number' || typeof y !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n };\n }\n}\nconst Point2dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point2d(...comps),\n};\n\nconst cn$5 = ClassName('p2d');\nclass Point2dView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$5());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.expanded, valueToClassName(this.element, cn$5(undefined, 'expanded')));\n const headElem = doc.createElement('div');\n headElem.classList.add(cn$5('h'));\n this.element.appendChild(headElem);\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$5('b'));\n buttonElem.appendChild(createSvgIconElement(doc, 'p2dpad'));\n config.viewProps.bindDisabled(buttonElem);\n headElem.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const textElem = doc.createElement('div');\n textElem.classList.add(cn$5('t'));\n headElem.appendChild(textElem);\n this.textElement = textElem;\n if (config.pickerLayout === 'inline') {\n const pickerElem = doc.createElement('div');\n pickerElem.classList.add(cn$5('p'));\n this.element.appendChild(pickerElem);\n this.pickerElement = pickerElem;\n }\n else {\n this.pickerElement = null;\n }\n }\n}\n\nconst cn$4 = ClassName('p2dp');\nclass Point2dPickerView {\n constructor(doc, config) {\n this.onFoldableChange_ = this.onFoldableChange_.bind(this);\n this.onPropsChange_ = this.onPropsChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onPropsChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$4());\n if (config.layout === 'popup') {\n this.element.classList.add(cn$4(undefined, 'p'));\n }\n config.viewProps.bindClassModifiers(this.element);\n const padElem = doc.createElement('div');\n padElem.classList.add(cn$4('p'));\n config.viewProps.bindTabIndex(padElem);\n this.element.appendChild(padElem);\n this.padElement = padElem;\n const svgElem = doc.createElementNS(SVG_NS, 'svg');\n svgElem.classList.add(cn$4('g'));\n this.padElement.appendChild(svgElem);\n this.svgElem_ = svgElem;\n const xAxisElem = doc.createElementNS(SVG_NS, 'line');\n xAxisElem.classList.add(cn$4('ax'));\n xAxisElem.setAttributeNS(null, 'x1', '0');\n xAxisElem.setAttributeNS(null, 'y1', '50%');\n xAxisElem.setAttributeNS(null, 'x2', '100%');\n xAxisElem.setAttributeNS(null, 'y2', '50%');\n this.svgElem_.appendChild(xAxisElem);\n const yAxisElem = doc.createElementNS(SVG_NS, 'line');\n yAxisElem.classList.add(cn$4('ax'));\n yAxisElem.setAttributeNS(null, 'x1', '50%');\n yAxisElem.setAttributeNS(null, 'y1', '0');\n yAxisElem.setAttributeNS(null, 'x2', '50%');\n yAxisElem.setAttributeNS(null, 'y2', '100%');\n this.svgElem_.appendChild(yAxisElem);\n const lineElem = doc.createElementNS(SVG_NS, 'line');\n lineElem.classList.add(cn$4('l'));\n lineElem.setAttributeNS(null, 'x1', '50%');\n lineElem.setAttributeNS(null, 'y1', '50%');\n this.svgElem_.appendChild(lineElem);\n this.lineElem_ = lineElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$4('m'));\n this.padElement.appendChild(markerElem);\n this.markerElem_ = markerElem;\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.update_();\n }\n get allFocusableElements() {\n return [this.padElement];\n }\n update_() {\n const [x, y] = this.value.rawValue.getComponents();\n const max = this.props_.get('max');\n const px = mapRange(x, -max, +max, 0, 100);\n const py = mapRange(y, -max, +max, 0, 100);\n const ipy = this.props_.get('invertsY') ? 100 - py : py;\n this.lineElem_.setAttributeNS(null, 'x2', `${px}%`);\n this.lineElem_.setAttributeNS(null, 'y2', `${ipy}%`);\n this.markerElem_.style.left = `${px}%`;\n this.markerElem_.style.top = `${ipy}%`;\n }\n onValueChange_() {\n this.update_();\n }\n onPropsChange_() {\n this.update_();\n }\n onFoldableChange_() {\n this.update_();\n }\n}\n\nfunction computeOffset(ev, keyScales, invertsY) {\n return [\n getStepForKey(keyScales[0], getHorizontalStepKeys(ev)),\n getStepForKey(keyScales[1], getVerticalStepKeys(ev)) * (invertsY ? 1 : -1),\n ];\n}\nclass Point2dPickerController {\n constructor(doc, config) {\n this.onPadKeyDown_ = this.onPadKeyDown_.bind(this);\n this.onPadKeyUp_ = this.onPadKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new Point2dPickerView(doc, {\n layout: config.layout,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.padElement);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.padElement.addEventListener('keydown', this.onPadKeyDown_);\n this.view.padElement.addEventListener('keyup', this.onPadKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const max = this.props.get('max');\n const px = mapRange(d.point.x, 0, d.bounds.width, -max, +max);\n const py = mapRange(this.props.get('invertsY') ? d.bounds.height - d.point.y : d.point.y, 0, d.bounds.height, -max, +max);\n this.value.setRawValue(new Point2d(px, py), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onPadKeyDown_(ev) {\n if (isArrowKey(ev.key)) {\n ev.preventDefault();\n }\n const [dx, dy] = computeOffset(ev, [this.props.get('xKeyScale'), this.props.get('yKeyScale')], this.props.get('invertsY'));\n if (dx === 0 && dy === 0) {\n return;\n }\n this.value.setRawValue(new Point2d(this.value.rawValue.x + dx, this.value.rawValue.y + dy), {\n forceEmit: false,\n last: false,\n });\n }\n onPadKeyUp_(ev) {\n const [dx, dy] = computeOffset(ev, [this.props.get('xKeyScale'), this.props.get('yKeyScale')], this.props.get('invertsY'));\n if (dx === 0 && dy === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nclass Point2dController {\n constructor(doc, config) {\n var _a, _b;\n this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n this.onPadButtonBlur_ = this.onPadButtonBlur_.bind(this);\n this.onPadButtonClick_ = this.onPadButtonClick_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.foldable_ = Foldable.create(config.expanded);\n this.popC_ =\n config.pickerLayout === 'popup'\n ? new PopupController(doc, {\n viewProps: this.viewProps,\n })\n : null;\n const padC = new Point2dPickerController(doc, {\n layout: config.pickerLayout,\n props: new ValueMap({\n invertsY: createValue(config.invertsY),\n max: createValue(config.max),\n xKeyScale: config.axes[0].textProps.value('keyScale'),\n yKeyScale: config.axes[1].textProps.value('keyScale'),\n }),\n value: this.value,\n viewProps: this.viewProps,\n });\n padC.view.allFocusableElements.forEach((elem) => {\n elem.addEventListener('blur', this.onPopupChildBlur_);\n elem.addEventListener('keydown', this.onPopupChildKeydown_);\n });\n this.pickerC_ = padC;\n this.textC_ = new PointNdTextController(doc, {\n assembly: Point2dAssembly,\n axes: config.axes,\n parser: config.parser,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new Point2dView(doc, {\n expanded: this.foldable_.value('expanded'),\n pickerLayout: config.pickerLayout,\n viewProps: this.viewProps,\n });\n this.view.textElement.appendChild(this.textC_.view.element);\n (_a = this.view.buttonElement) === null || _a === void 0 ? void 0 : _a.addEventListener('blur', this.onPadButtonBlur_);\n (_b = this.view.buttonElement) === null || _b === void 0 ? void 0 : _b.addEventListener('click', this.onPadButtonClick_);\n if (this.popC_) {\n this.view.element.appendChild(this.popC_.view.element);\n this.popC_.view.element.appendChild(this.pickerC_.view.element);\n connectValues({\n primary: this.foldable_.value('expanded'),\n secondary: this.popC_.shows,\n forward: (p) => p,\n backward: (_, s) => s,\n });\n }\n else if (this.view.pickerElement) {\n this.view.pickerElement.appendChild(this.pickerC_.view.element);\n bindFoldable(this.foldable_, this.view.pickerElement);\n }\n }\n get textController() {\n return this.textC_;\n }\n onPadButtonBlur_(e) {\n if (!this.popC_) {\n return;\n }\n const elem = this.view.element;\n const nextTarget = forceCast(e.relatedTarget);\n if (!nextTarget || !elem.contains(nextTarget)) {\n this.popC_.shows.rawValue = false;\n }\n }\n onPadButtonClick_() {\n this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n if (this.foldable_.get('expanded')) {\n this.pickerC_.view.allFocusableElements[0].focus();\n }\n }\n onPopupChildBlur_(ev) {\n if (!this.popC_) {\n return;\n }\n const elem = this.popC_.view.element;\n const nextTarget = findNextTarget(ev);\n if (nextTarget && elem.contains(nextTarget)) {\n return;\n }\n if (nextTarget &&\n nextTarget === this.view.buttonElement &&\n !supportsTouch(elem.ownerDocument)) {\n return;\n }\n this.popC_.shows.rawValue = false;\n }\n onPopupChildKeydown_(ev) {\n if (this.popC_) {\n if (ev.key === 'Escape') {\n this.popC_.shows.rawValue = false;\n }\n }\n else if (this.view.pickerElement) {\n if (ev.key === 'Escape') {\n this.view.buttonElement.focus();\n }\n }\n }\n}\n\nfunction point2dFromUnknown(value) {\n return Point2d.isObject(value)\n ? new Point2d(value.x, value.y)\n : new Point2d();\n}\nfunction writePoint2d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n}\n\nfunction createConstraint$3(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point2dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n ],\n });\n}\nfunction getSuitableMaxDimensionValue(params, rawValue) {\n var _a, _b;\n if (!isEmpty(params.min) || !isEmpty(params.max)) {\n return Math.max(Math.abs((_a = params.min) !== null && _a !== void 0 ? _a : 0), Math.abs((_b = params.max) !== null && _b !== void 0 ? _b : 0));\n }\n const step = getSuitableKeyScale(params);\n return Math.max(Math.abs(step) * 10, Math.abs(rawValue) * 10);\n}\nfunction getSuitableMax(params, initialValue) {\n var _a, _b;\n const xr = getSuitableMaxDimensionValue(deepMerge(params, ((_a = params.x) !== null && _a !== void 0 ? _a : {})), initialValue.x);\n const yr = getSuitableMaxDimensionValue(deepMerge(params, ((_b = params.y) !== null && _b !== void 0 ? _b : {})), initialValue.y);\n return Math.max(xr, yr);\n}\nfunction shouldInvertY(params) {\n if (!('y' in params)) {\n return false;\n }\n const yParams = params.y;\n if (!yParams) {\n return false;\n }\n return 'inverted' in yParams ? !!yParams.inverted : false;\n}\nconst Point2dInputPlugin = createPlugin({\n id: 'input-point2d',\n type: 'input',\n accept: (value, params) => {\n if (!Point2d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { expanded: p.optional.boolean, picker: p.optional.custom(parsePickerLayout), readonly: p.optional.constant(false), x: p.optional.custom(parsePointDimensionParams), y: p.optional.object(Object.assign(Object.assign({}, createPointDimensionParser(p)), { inverted: p.optional.boolean })) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: () => point2dFromUnknown,\n constraint: (args) => createConstraint$3(args.params, args.initialValue),\n equals: Point2d.equals,\n writer: () => writePoint2d,\n },\n controller: (args) => {\n var _a, _b;\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const dParams = [args.params.x, args.params.y];\n return new Point2dController(doc, {\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n invertsY: shouldInvertY(args.params),\n max: getSuitableMax(args.params, value.rawValue),\n parser: parseNumber,\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass Point3d {\n constructor(x = 0, y = 0, z = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n getComponents() {\n return [this.x, this.y, this.z];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n const z = obj.z;\n if (typeof x !== 'number' ||\n typeof y !== 'number' ||\n typeof z !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n z: this.z,\n };\n }\n}\nconst Point3dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point3d(...comps),\n};\n\nfunction point3dFromUnknown(value) {\n return Point3d.isObject(value)\n ? new Point3d(value.x, value.y, value.z)\n : new Point3d();\n}\nfunction writePoint3d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n target.writeProperty('z', value.z);\n}\n\nfunction createConstraint$2(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point3dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.z), initialValue.z),\n ],\n });\n}\nconst Point3dInputPlugin = createPlugin({\n id: 'input-point3d',\n type: 'input',\n accept: (value, params) => {\n if (!Point3d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { readonly: p.optional.constant(false), x: p.optional.custom(parsePointDimensionParams), y: p.optional.custom(parsePointDimensionParams), z: p.optional.custom(parsePointDimensionParams) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => point3dFromUnknown,\n constraint: (args) => createConstraint$2(args.params, args.initialValue),\n equals: Point3d.equals,\n writer: (_args) => writePoint3d,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const dParams = [args.params.x, args.params.y, args.params.z];\n return new PointNdTextController(args.document, {\n assembly: Point3dAssembly,\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n parser: parseNumber,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass Point4d {\n constructor(x = 0, y = 0, z = 0, w = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n getComponents() {\n return [this.x, this.y, this.z, this.w];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n const z = obj.z;\n const w = obj.w;\n if (typeof x !== 'number' ||\n typeof y !== 'number' ||\n typeof z !== 'number' ||\n typeof w !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z && v1.w === v2.w;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n z: this.z,\n w: this.w,\n };\n }\n}\nconst Point4dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point4d(...comps),\n};\n\nfunction point4dFromUnknown(value) {\n return Point4d.isObject(value)\n ? new Point4d(value.x, value.y, value.z, value.w)\n : new Point4d();\n}\nfunction writePoint4d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n target.writeProperty('z', value.z);\n target.writeProperty('w', value.w);\n}\n\nfunction createConstraint$1(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point4dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.z), initialValue.z),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.w), initialValue.w),\n ],\n });\n}\nconst Point4dInputPlugin = createPlugin({\n id: 'input-point4d',\n type: 'input',\n accept: (value, params) => {\n if (!Point4d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { readonly: p.optional.constant(false), w: p.optional.custom(parsePointDimensionParams), x: p.optional.custom(parsePointDimensionParams), y: p.optional.custom(parsePointDimensionParams), z: p.optional.custom(parsePointDimensionParams) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => point4dFromUnknown,\n constraint: (args) => createConstraint$1(args.params, args.initialValue),\n equals: Point4d.equals,\n writer: (_args) => writePoint4d,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const dParams = [\n args.params.x,\n args.params.y,\n args.params.z,\n args.params.w,\n ];\n return new PointNdTextController(args.document, {\n assembly: Point4dAssembly,\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n parser: parseNumber,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nfunction createConstraint(params) {\n const constraints = [];\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\nconst StringInputPlugin = createPlugin({\n id: 'input-string',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n readonly: p.optional.constant(false),\n options: p.optional.custom(parseListOptions),\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => stringFromUnknown,\n constraint: (args) => createConstraint(args.params),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(doc, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new TextController(doc, {\n parser: (v) => v,\n props: ValueMap.fromObject({\n formatter: formatString,\n }),\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'string') {\n return null;\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n\nconst Constants = {\n monitor: {\n defaultInterval: 200,\n defaultRows: 3,\n },\n};\n\nconst cn$3 = ClassName('mll');\nclass MultiLogView {\n constructor(doc, config) {\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.formatter_ = config.formatter;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$3());\n config.viewProps.bindClassModifiers(this.element);\n const textareaElem = doc.createElement('textarea');\n textareaElem.classList.add(cn$3('i'));\n textareaElem.style.height = `calc(var(${getCssVar('containerUnitSize')}) * ${config.rows})`;\n textareaElem.readOnly = true;\n config.viewProps.bindDisabled(textareaElem);\n this.element.appendChild(textareaElem);\n this.textareaElem_ = textareaElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const elem = this.textareaElem_;\n const shouldScroll = elem.scrollTop === elem.scrollHeight - elem.clientHeight;\n const lines = [];\n this.value.rawValue.forEach((value) => {\n if (value !== undefined) {\n lines.push(this.formatter_(value));\n }\n });\n elem.textContent = lines.join('\\n');\n if (shouldScroll) {\n elem.scrollTop = elem.scrollHeight;\n }\n }\n onValueUpdate_() {\n this.update_();\n }\n}\n\nclass MultiLogController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new MultiLogView(doc, {\n formatter: config.formatter,\n rows: config.rows,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n\nconst cn$2 = ClassName('sgl');\nclass SingleLogView {\n constructor(doc, config) {\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.formatter_ = config.formatter;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$2());\n config.viewProps.bindClassModifiers(this.element);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$2('i'));\n inputElem.readOnly = true;\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const values = this.value.rawValue;\n const lastValue = values[values.length - 1];\n this.inputElement.value =\n lastValue !== undefined ? this.formatter_(lastValue) : '';\n }\n onValueUpdate_() {\n this.update_();\n }\n}\n\nclass SingleLogController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new SingleLogView(doc, {\n formatter: config.formatter,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n\nconst BooleanMonitorPlugin = createPlugin({\n id: 'monitor-bool',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'boolean') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n readonly: p.required.constant(true),\n rows: p.optional.number,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => boolFromUnknown,\n },\n controller: (args) => {\n var _a;\n if (args.value.rawValue.length === 1) {\n return new SingleLogController(args.document, {\n formatter: BooleanFormatter,\n value: args.value,\n viewProps: args.viewProps,\n });\n }\n return new MultiLogController(args.document, {\n formatter: BooleanFormatter,\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass GraphLogMonitorBindingApi extends BindingApi {\n get max() {\n return this.controller.valueController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.props.get('min');\n }\n set min(min) {\n this.controller.valueController.props.set('min', min);\n }\n}\n\nconst cn$1 = ClassName('grl');\nclass GraphLogView {\n constructor(doc, config) {\n this.onCursorChange_ = this.onCursorChange_.bind(this);\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$1());\n config.viewProps.bindClassModifiers(this.element);\n this.formatter_ = config.formatter;\n this.props_ = config.props;\n this.cursor_ = config.cursor;\n this.cursor_.emitter.on('change', this.onCursorChange_);\n const svgElem = doc.createElementNS(SVG_NS, 'svg');\n svgElem.classList.add(cn$1('g'));\n svgElem.style.height = `calc(var(${getCssVar('containerUnitSize')}) * ${config.rows})`;\n this.element.appendChild(svgElem);\n this.svgElem_ = svgElem;\n const lineElem = doc.createElementNS(SVG_NS, 'polyline');\n this.svgElem_.appendChild(lineElem);\n this.lineElem_ = lineElem;\n const tooltipElem = doc.createElement('div');\n tooltipElem.classList.add(cn$1('t'), ClassName('tt')());\n this.element.appendChild(tooltipElem);\n this.tooltipElem_ = tooltipElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n get graphElement() {\n return this.svgElem_;\n }\n update_() {\n const { clientWidth: w, clientHeight: h } = this.element;\n const maxIndex = this.value.rawValue.length - 1;\n const min = this.props_.get('min');\n const max = this.props_.get('max');\n const points = [];\n this.value.rawValue.forEach((v, index) => {\n if (v === undefined) {\n return;\n }\n const x = mapRange(index, 0, maxIndex, 0, w);\n const y = mapRange(v, min, max, h, 0);\n points.push([x, y].join(','));\n });\n this.lineElem_.setAttributeNS(null, 'points', points.join(' '));\n const tooltipElem = this.tooltipElem_;\n const value = this.value.rawValue[this.cursor_.rawValue];\n if (value === undefined) {\n tooltipElem.classList.remove(cn$1('t', 'a'));\n return;\n }\n const tx = mapRange(this.cursor_.rawValue, 0, maxIndex, 0, w);\n const ty = mapRange(value, min, max, h, 0);\n tooltipElem.style.left = `${tx}px`;\n tooltipElem.style.top = `${ty}px`;\n tooltipElem.textContent = `${this.formatter_(value)}`;\n if (!tooltipElem.classList.contains(cn$1('t', 'a'))) {\n tooltipElem.classList.add(cn$1('t', 'a'), cn$1('t', 'in'));\n forceReflow(tooltipElem);\n tooltipElem.classList.remove(cn$1('t', 'in'));\n }\n }\n onValueUpdate_() {\n this.update_();\n }\n onCursorChange_() {\n this.update_();\n }\n}\n\nclass GraphLogController {\n constructor(doc, config) {\n this.onGraphMouseMove_ = this.onGraphMouseMove_.bind(this);\n this.onGraphMouseLeave_ = this.onGraphMouseLeave_.bind(this);\n this.onGraphPointerDown_ = this.onGraphPointerDown_.bind(this);\n this.onGraphPointerMove_ = this.onGraphPointerMove_.bind(this);\n this.onGraphPointerUp_ = this.onGraphPointerUp_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.cursor_ = createValue(-1);\n this.view = new GraphLogView(doc, {\n cursor: this.cursor_,\n formatter: config.formatter,\n rows: config.rows,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n if (!supportsTouch(doc)) {\n this.view.element.addEventListener('mousemove', this.onGraphMouseMove_);\n this.view.element.addEventListener('mouseleave', this.onGraphMouseLeave_);\n }\n else {\n const ph = new PointerHandler(this.view.element);\n ph.emitter.on('down', this.onGraphPointerDown_);\n ph.emitter.on('move', this.onGraphPointerMove_);\n ph.emitter.on('up', this.onGraphPointerUp_);\n }\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n max: p.required.number,\n min: p.required.number,\n }), (result) => {\n this.props.set('max', result.max);\n this.props.set('min', result.min);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n max: this.props.get('max'),\n min: this.props.get('min'),\n });\n }\n onGraphMouseLeave_() {\n this.cursor_.rawValue = -1;\n }\n onGraphMouseMove_(ev) {\n const { clientWidth: w } = this.view.element;\n this.cursor_.rawValue = Math.floor(mapRange(ev.offsetX, 0, w, 0, this.value.rawValue.length));\n }\n onGraphPointerDown_(ev) {\n this.onGraphPointerMove_(ev);\n }\n onGraphPointerMove_(ev) {\n if (!ev.data.point) {\n this.cursor_.rawValue = -1;\n return;\n }\n this.cursor_.rawValue = Math.floor(mapRange(ev.data.point.x, 0, ev.data.bounds.width, 0, this.value.rawValue.length));\n }\n onGraphPointerUp_() {\n this.cursor_.rawValue = -1;\n }\n}\n\nfunction createFormatter(params) {\n return !isEmpty(params.format) ? params.format : createNumberFormatter(2);\n}\nfunction createTextMonitor(args) {\n var _a;\n if (args.value.rawValue.length === 1) {\n return new SingleLogController(args.document, {\n formatter: createFormatter(args.params),\n value: args.value,\n viewProps: args.viewProps,\n });\n }\n return new MultiLogController(args.document, {\n formatter: createFormatter(args.params),\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: args.value,\n viewProps: args.viewProps,\n });\n}\nfunction createGraphMonitor(args) {\n var _a, _b, _c;\n return new GraphLogController(args.document, {\n formatter: createFormatter(args.params),\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n props: ValueMap.fromObject({\n max: (_b = args.params.max) !== null && _b !== void 0 ? _b : 100,\n min: (_c = args.params.min) !== null && _c !== void 0 ? _c : 0,\n }),\n value: args.value,\n viewProps: args.viewProps,\n });\n}\nfunction shouldShowGraph(params) {\n return params.view === 'graph';\n}\nconst NumberMonitorPlugin = createPlugin({\n id: 'monitor-number',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n format: p.optional.function,\n max: p.optional.number,\n min: p.optional.number,\n readonly: p.required.constant(true),\n rows: p.optional.number,\n view: p.optional.string,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n defaultBufferSize: (params) => (shouldShowGraph(params) ? 64 : 1),\n reader: (_args) => numberFromUnknown,\n },\n controller: (args) => {\n if (shouldShowGraph(args.params)) {\n return createGraphMonitor(args);\n }\n return createTextMonitor(args);\n },\n api: (args) => {\n if (args.controller.valueController instanceof GraphLogController) {\n return new GraphLogMonitorBindingApi(args.controller);\n }\n return null;\n },\n});\n\nconst StringMonitorPlugin = createPlugin({\n id: 'monitor-string',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n multiline: p.optional.boolean,\n readonly: p.required.constant(true),\n rows: p.optional.number,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => stringFromUnknown,\n },\n controller: (args) => {\n var _a;\n const value = args.value;\n const multiline = value.rawValue.length > 1 || args.params.multiline;\n if (multiline) {\n return new MultiLogController(args.document, {\n formatter: formatString,\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new SingleLogController(args.document, {\n formatter: formatString,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass BladeApiCache {\n constructor() {\n this.map_ = new Map();\n }\n get(bc) {\n var _a;\n return (_a = this.map_.get(bc)) !== null && _a !== void 0 ? _a : null;\n }\n has(bc) {\n return this.map_.has(bc);\n }\n add(bc, api) {\n this.map_.set(bc, api);\n bc.viewProps.handleDispose(() => {\n this.map_.delete(bc);\n });\n return api;\n }\n}\n\nclass ReadWriteBinding {\n constructor(config) {\n this.target = config.target;\n this.reader_ = config.reader;\n this.writer_ = config.writer;\n }\n read() {\n return this.reader_(this.target.read());\n }\n write(value) {\n this.writer_(this.target, value);\n }\n inject(value) {\n this.write(this.reader_(value));\n }\n}\n\nfunction createInputBindingController(plugin, args) {\n var _a;\n const result = plugin.accept(args.target.read(), args.params);\n if (isEmpty(result)) {\n return null;\n }\n const valueArgs = {\n target: args.target,\n initialValue: result.initialValue,\n params: result.params,\n };\n const params = parseRecord(args.params, (p) => ({\n disabled: p.optional.boolean,\n hidden: p.optional.boolean,\n label: p.optional.string,\n tag: p.optional.string,\n }));\n const reader = plugin.binding.reader(valueArgs);\n const constraint = plugin.binding.constraint\n ? plugin.binding.constraint(valueArgs)\n : undefined;\n const binding = new ReadWriteBinding({\n reader: reader,\n target: args.target,\n writer: plugin.binding.writer(valueArgs),\n });\n const value = new InputBindingValue(createValue(reader(result.initialValue), {\n constraint: constraint,\n equals: plugin.binding.equals,\n }), binding);\n const controller = plugin.controller({\n constraint: constraint,\n document: args.document,\n initialValue: result.initialValue,\n params: result.params,\n value: value,\n viewProps: ViewProps.create({\n disabled: params === null || params === void 0 ? void 0 : params.disabled,\n hidden: params === null || params === void 0 ? void 0 : params.hidden,\n }),\n });\n return new InputBindingController(args.document, {\n blade: createBlade(),\n props: ValueMap.fromObject({\n label: 'label' in args.params ? (_a = params === null || params === void 0 ? void 0 : params.label) !== null && _a !== void 0 ? _a : null : args.target.key,\n }),\n tag: params === null || params === void 0 ? void 0 : params.tag,\n value: value,\n valueController: controller,\n });\n}\n\nclass ReadonlyBinding {\n constructor(config) {\n this.target = config.target;\n this.reader_ = config.reader;\n }\n read() {\n return this.reader_(this.target.read());\n }\n}\n\nfunction createTicker(document, interval) {\n return interval === 0\n ? new ManualTicker()\n : new IntervalTicker(document, interval !== null && interval !== void 0 ? interval : Constants.monitor.defaultInterval);\n}\nfunction createMonitorBindingController(plugin, args) {\n var _a, _b, _c;\n const result = plugin.accept(args.target.read(), args.params);\n if (isEmpty(result)) {\n return null;\n }\n const bindingArgs = {\n target: args.target,\n initialValue: result.initialValue,\n params: result.params,\n };\n const params = parseRecord(args.params, (p) => ({\n bufferSize: p.optional.number,\n disabled: p.optional.boolean,\n hidden: p.optional.boolean,\n interval: p.optional.number,\n label: p.optional.string,\n }));\n const reader = plugin.binding.reader(bindingArgs);\n const bufferSize = (_b = (_a = params === null || params === void 0 ? void 0 : params.bufferSize) !== null && _a !== void 0 ? _a : (plugin.binding.defaultBufferSize &&\n plugin.binding.defaultBufferSize(result.params))) !== null && _b !== void 0 ? _b : 1;\n const value = new MonitorBindingValue({\n binding: new ReadonlyBinding({\n reader: reader,\n target: args.target,\n }),\n bufferSize: bufferSize,\n ticker: createTicker(args.document, params === null || params === void 0 ? void 0 : params.interval),\n });\n const controller = plugin.controller({\n document: args.document,\n params: result.params,\n value: value,\n viewProps: ViewProps.create({\n disabled: params === null || params === void 0 ? void 0 : params.disabled,\n hidden: params === null || params === void 0 ? void 0 : params.hidden,\n }),\n });\n controller.viewProps.bindDisabled(value.ticker);\n controller.viewProps.handleDispose(() => {\n value.ticker.dispose();\n });\n return new MonitorBindingController(args.document, {\n blade: createBlade(),\n props: ValueMap.fromObject({\n label: 'label' in args.params ? (_c = params === null || params === void 0 ? void 0 : params.label) !== null && _c !== void 0 ? _c : null : args.target.key,\n }),\n value: value,\n valueController: controller,\n });\n}\n\nclass PluginPool {\n constructor(apiCache) {\n this.pluginsMap_ = {\n blades: [],\n inputs: [],\n monitors: [],\n };\n this.apiCache_ = apiCache;\n }\n getAll() {\n return [\n ...this.pluginsMap_.blades,\n ...this.pluginsMap_.inputs,\n ...this.pluginsMap_.monitors,\n ];\n }\n register(bundleId, r) {\n if (!isCompatible(r.core)) {\n throw TpError.notCompatible(bundleId, r.id);\n }\n if (r.type === 'blade') {\n this.pluginsMap_.blades.unshift(r);\n }\n else if (r.type === 'input') {\n this.pluginsMap_.inputs.unshift(r);\n }\n else if (r.type === 'monitor') {\n this.pluginsMap_.monitors.unshift(r);\n }\n }\n createInput_(document, target, params) {\n return this.pluginsMap_.inputs.reduce((result, plugin) => result !== null && result !== void 0 ? result : createInputBindingController(plugin, {\n document: document,\n target: target,\n params: params,\n }), null);\n }\n createMonitor_(document, target, params) {\n return this.pluginsMap_.monitors.reduce((result, plugin) => result !== null && result !== void 0 ? result : createMonitorBindingController(plugin, {\n document: document,\n params: params,\n target: target,\n }), null);\n }\n createBinding(doc, target, params) {\n const initialValue = target.read();\n if (isEmpty(initialValue)) {\n throw new TpError({\n context: {\n key: target.key,\n },\n type: 'nomatchingcontroller',\n });\n }\n const ic = this.createInput_(doc, target, params);\n if (ic) {\n return ic;\n }\n const mc = this.createMonitor_(doc, target, params);\n if (mc) {\n return mc;\n }\n throw new TpError({\n context: {\n key: target.key,\n },\n type: 'nomatchingcontroller',\n });\n }\n createBlade(document, params) {\n const bc = this.pluginsMap_.blades.reduce((result, plugin) => result !== null && result !== void 0 ? result : createBladeController(plugin, {\n document: document,\n params: params,\n }), null);\n if (!bc) {\n throw new TpError({\n type: 'nomatchingview',\n context: {\n params: params,\n },\n });\n }\n return bc;\n }\n createInputBindingApi_(bc) {\n const api = this.pluginsMap_.inputs.reduce((result, plugin) => {\n var _a, _b;\n if (result) {\n return result;\n }\n return ((_b = (_a = plugin.api) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n controller: bc,\n })) !== null && _b !== void 0 ? _b : null);\n }, null);\n return this.apiCache_.add(bc, api !== null && api !== void 0 ? api : new BindingApi(bc));\n }\n createMonitorBindingApi_(bc) {\n const api = this.pluginsMap_.monitors.reduce((result, plugin) => {\n var _a, _b;\n if (result) {\n return result;\n }\n return ((_b = (_a = plugin.api) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n controller: bc,\n })) !== null && _b !== void 0 ? _b : null);\n }, null);\n return this.apiCache_.add(bc, api !== null && api !== void 0 ? api : new BindingApi(bc));\n }\n createBindingApi(bc) {\n if (this.apiCache_.has(bc)) {\n return this.apiCache_.get(bc);\n }\n if (isInputBindingController(bc)) {\n return this.createInputBindingApi_(bc);\n }\n if (isMonitorBindingController(bc)) {\n return this.createMonitorBindingApi_(bc);\n }\n throw TpError.shouldNeverHappen();\n }\n createApi(bc) {\n if (this.apiCache_.has(bc)) {\n return this.apiCache_.get(bc);\n }\n if (isBindingController(bc)) {\n return this.createBindingApi(bc);\n }\n const api = this.pluginsMap_.blades.reduce((result, plugin) => result !== null && result !== void 0 ? result : plugin.api({\n controller: bc,\n pool: this,\n }), null);\n if (!api) {\n throw TpError.shouldNeverHappen();\n }\n return this.apiCache_.add(bc, api);\n }\n}\n\nconst sharedCache = new BladeApiCache();\nfunction createDefaultPluginPool() {\n const pool = new PluginPool(sharedCache);\n [\n Point2dInputPlugin,\n Point3dInputPlugin,\n Point4dInputPlugin,\n StringInputPlugin,\n NumberInputPlugin,\n StringColorInputPlugin,\n ObjectColorInputPlugin,\n NumberColorInputPlugin,\n BooleanInputPlugin,\n BooleanMonitorPlugin,\n StringMonitorPlugin,\n NumberMonitorPlugin,\n ButtonBladePlugin,\n FolderBladePlugin,\n TabBladePlugin,\n ].forEach((p) => {\n pool.register('core', p);\n });\n return pool;\n}\n\nclass ListBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', (ev) => {\n this.emitter_.emit('change', new TpChangeEvent(this, ev.rawValue));\n });\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get options() {\n return this.controller.valueController.props.get('options');\n }\n set options(options) {\n this.controller.valueController.props.set('options', options);\n }\n get value() {\n return this.controller.value.rawValue;\n }\n set value(value) {\n this.controller.value.rawValue = value;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nclass SeparatorBladeApi extends BladeApi {\n}\n\nclass SliderBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', (ev) => {\n this.emitter_.emit('change', new TpChangeEvent(this, ev.rawValue));\n });\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get max() {\n return this.controller.valueController.sliderController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.sliderController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.sliderController.props.get('min');\n }\n set min(min) {\n this.controller.valueController.sliderController.props.set('min', min);\n }\n get value() {\n return this.controller.value.rawValue;\n }\n set value(value) {\n this.controller.value.rawValue = value;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nclass TextBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', (ev) => {\n this.emitter_.emit('change', new TpChangeEvent(this, ev.rawValue));\n });\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get formatter() {\n return this.controller.valueController.props.get('formatter');\n }\n set formatter(formatter) {\n this.controller.valueController.props.set('formatter', formatter);\n }\n get value() {\n return this.controller.value.rawValue;\n }\n set value(value) {\n this.controller.value.rawValue = value;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nconst ListBladePlugin = (function () {\n return {\n id: 'list',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n options: p.required.custom(parseListOptions),\n value: p.required.raw,\n view: p.required.constant('list'),\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n const lc = new ListConstraint(normalizeListOptions(args.params.options));\n const value = createValue(args.params.value, {\n constraint: lc,\n });\n const ic = new ListController(args.document, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n return new LabeledValueBladeController(args.document, {\n blade: args.blade,\n props: ValueMap.fromObject({\n label: args.params.label,\n }),\n value: value,\n valueController: ic,\n });\n },\n api(args) {\n if (!(args.controller instanceof LabeledValueBladeController)) {\n return null;\n }\n if (!(args.controller.valueController instanceof ListController)) {\n return null;\n }\n return new ListBladeApi(args.controller);\n },\n };\n})();\n\nclass RootApi extends FolderApi {\n /**\n * @hidden\n */\n constructor(controller, pool) {\n super(controller, pool);\n }\n get element() {\n return this.controller.view.element;\n }\n}\n\n/**\n * @hidden\n */\nclass RootController extends FolderController {\n constructor(doc, config) {\n super(doc, {\n expanded: config.expanded,\n blade: config.blade,\n props: config.props,\n root: true,\n viewProps: config.viewProps,\n });\n }\n}\n\nconst cn = ClassName('spr');\n/**\n * @hidden\n */\nclass SeparatorView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const hrElem = doc.createElement('hr');\n hrElem.classList.add(cn('r'));\n this.element.appendChild(hrElem);\n }\n}\n\n/**\n * @hidden\n */\nclass SeparatorController extends BladeController {\n /**\n * @hidden\n */\n constructor(doc, config) {\n super(Object.assign(Object.assign({}, config), { view: new SeparatorView(doc, {\n viewProps: config.viewProps,\n }) }));\n }\n}\n\nconst SeparatorBladePlugin = {\n id: 'separator',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n view: p.required.constant('separator'),\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new SeparatorController(args.document, {\n blade: args.blade,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (!(args.controller instanceof SeparatorController)) {\n return null;\n }\n return new SeparatorBladeApi(args.controller);\n },\n};\n\nconst SliderBladePlugin = {\n id: 'slider',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n max: p.required.number,\n min: p.required.number,\n view: p.required.constant('slider'),\n format: p.optional.function,\n label: p.optional.string,\n value: p.optional.number,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n var _a, _b;\n const initialValue = (_a = args.params.value) !== null && _a !== void 0 ? _a : 0;\n const drc = new DefiniteRangeConstraint({\n max: args.params.max,\n min: args.params.min,\n });\n const v = createValue(initialValue, {\n constraint: drc,\n });\n const vc = new SliderTextController(args.document, Object.assign(Object.assign({}, createSliderTextProps({\n formatter: (_b = args.params.format) !== null && _b !== void 0 ? _b : numberToString,\n keyScale: createValue(1),\n max: drc.values.value('max'),\n min: drc.values.value('min'),\n pointerScale: getSuitablePointerScale(args.params, initialValue),\n })), { parser: parseNumber, value: v, viewProps: args.viewProps }));\n return new LabeledValueBladeController(args.document, {\n blade: args.blade,\n props: ValueMap.fromObject({\n label: args.params.label,\n }),\n value: v,\n valueController: vc,\n });\n },\n api(args) {\n if (!(args.controller instanceof LabeledValueBladeController)) {\n return null;\n }\n if (!(args.controller.valueController instanceof SliderTextController)) {\n return null;\n }\n return new SliderBladeApi(args.controller);\n },\n};\n\nconst TextBladePlugin = (function () {\n return {\n id: 'text',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n parse: p.required.function,\n value: p.required.raw,\n view: p.required.constant('text'),\n format: p.optional.function,\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n var _a;\n const v = createValue(args.params.value);\n const ic = new TextController(args.document, {\n parser: args.params.parse,\n props: ValueMap.fromObject({\n formatter: (_a = args.params.format) !== null && _a !== void 0 ? _a : ((v) => String(v)),\n }),\n value: v,\n viewProps: args.viewProps,\n });\n return new LabeledValueBladeController(args.document, {\n blade: args.blade,\n props: ValueMap.fromObject({\n label: args.params.label,\n }),\n value: v,\n valueController: ic,\n });\n },\n api(args) {\n if (!(args.controller instanceof LabeledValueBladeController)) {\n return null;\n }\n if (!(args.controller.valueController instanceof TextController)) {\n return null;\n }\n return new TextBladeApi(args.controller);\n },\n };\n})();\n\nfunction createDefaultWrapperElement(doc) {\n const elem = doc.createElement('div');\n elem.classList.add(ClassName('dfw')());\n if (doc.body) {\n doc.body.appendChild(elem);\n }\n return elem;\n}\nfunction embedStyle(doc, id, css) {\n if (doc.querySelector(`style[data-tp-style=${id}]`)) {\n return;\n }\n const styleElem = doc.createElement('style');\n styleElem.dataset.tpStyle = id;\n styleElem.textContent = css;\n doc.head.appendChild(styleElem);\n}\n/**\n * The root pane of Tweakpane.\n */\nclass Pane extends RootApi {\n constructor(opt_config) {\n var _a, _b;\n const config = opt_config !== null && opt_config !== void 0 ? opt_config : {};\n const doc = (_a = config.document) !== null && _a !== void 0 ? _a : getWindowDocument();\n const pool = createDefaultPluginPool();\n const rootController = new RootController(doc, {\n expanded: config.expanded,\n blade: createBlade(),\n props: ValueMap.fromObject({\n title: config.title,\n }),\n viewProps: ViewProps.create(),\n });\n super(rootController, pool);\n this.pool_ = pool;\n this.containerElem_ = (_b = config.container) !== null && _b !== void 0 ? _b : createDefaultWrapperElement(doc);\n this.containerElem_.appendChild(this.element);\n this.doc_ = doc;\n this.usesDefaultWrapper_ = !config.container;\n this.setUpDefaultPlugins_();\n }\n get document() {\n if (!this.doc_) {\n throw TpError.alreadyDisposed();\n }\n return this.doc_;\n }\n dispose() {\n const containerElem = this.containerElem_;\n if (!containerElem) {\n throw TpError.alreadyDisposed();\n }\n if (this.usesDefaultWrapper_) {\n const parentElem = containerElem.parentElement;\n if (parentElem) {\n parentElem.removeChild(containerElem);\n }\n }\n this.containerElem_ = null;\n this.doc_ = null;\n super.dispose();\n }\n registerPlugin(bundle) {\n if (bundle.css) {\n embedStyle(this.document, `plugin-${bundle.id}`, bundle.css);\n }\n const plugins = 'plugin' in bundle\n ? [bundle.plugin]\n : 'plugins' in bundle\n ? bundle.plugins\n : [];\n plugins.forEach((p) => {\n this.pool_.register(bundle.id, p);\n });\n }\n setUpDefaultPlugins_() {\n this.registerPlugin({\n id: 'default',\n // NOTE: This string literal will be replaced with the default CSS by Rollup at the compilation time\n css: '.tp-tbiv_b,.tp-coltxtv_ms,.tp-colswv_b,.tp-ckbv_i,.tp-sglv_i,.tp-mllv_i,.tp-grlv_g,.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw,.tp-rotv_b,.tp-fldv_b,.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0}.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{background-color:var(--btn-bg);border-radius:var(--bld-br);color:var(--btn-fg);cursor:pointer;display:block;font-weight:bold;height:var(--cnt-usz);line-height:var(--cnt-usz);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tp-p2dv_b:hover,.tp-btnv_b:hover,.tp-lstv_s:hover{background-color:var(--btn-bg-h)}.tp-p2dv_b:focus,.tp-btnv_b:focus,.tp-lstv_s:focus{background-color:var(--btn-bg-f)}.tp-p2dv_b:active,.tp-btnv_b:active,.tp-lstv_s:active{background-color:var(--btn-bg-a)}.tp-p2dv_b:disabled,.tp-btnv_b:disabled,.tp-lstv_s:disabled{opacity:.5}.tp-rotv_c>.tp-cntv.tp-v-lst,.tp-tbpv_c>.tp-cntv.tp-v-lst,.tp-fldv_c>.tp-cntv.tp-v-lst{margin-bottom:calc(-1*var(--cnt-vp))}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-tbpv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_c{border-bottom-left-radius:0}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-tbpv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_b{border-bottom-left-radius:0}.tp-rotv_c>*:not(.tp-v-fst),.tp-tbpv_c>*:not(.tp-v-fst),.tp-fldv_c>*:not(.tp-v-fst){margin-top:var(--cnt-usp)}.tp-rotv_c>.tp-sprv:not(.tp-v-fst),.tp-tbpv_c>.tp-sprv:not(.tp-v-fst),.tp-fldv_c>.tp-sprv:not(.tp-v-fst),.tp-rotv_c>.tp-cntv:not(.tp-v-fst),.tp-tbpv_c>.tp-cntv:not(.tp-v-fst),.tp-fldv_c>.tp-cntv:not(.tp-v-fst){margin-top:var(--cnt-vp)}.tp-rotv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-tbpv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-tbpv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-cntv+*:not(.tp-v-hidden){margin-top:var(--cnt-vp)}.tp-rotv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-tbpv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-fldv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-rotv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-tbpv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-fldv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv{margin-top:0}.tp-tbpv_c>.tp-cntv,.tp-fldv_c>.tp-cntv{margin-left:4px}.tp-tbpv_c>.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-fldv>.tp-fldv_b{border-top-left-radius:var(--bld-br);border-bottom-left-radius:var(--bld-br)}.tp-tbpv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b{border-bottom-left-radius:0}.tp-tbpv_c .tp-fldv>.tp-fldv_c,.tp-fldv_c .tp-fldv>.tp-fldv_c{border-bottom-left-radius:var(--bld-br)}.tp-tbpv_c>.tp-cntv+.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-cntv+.tp-fldv>.tp-fldv_b{border-top-left-radius:0}.tp-tbpv_c>.tp-cntv+.tp-tabv>.tp-tabv_t,.tp-fldv_c>.tp-cntv+.tp-tabv>.tp-tabv_t{border-top-left-radius:0}.tp-tbpv_c>.tp-tabv>.tp-tabv_t,.tp-fldv_c>.tp-tabv>.tp-tabv_t{border-top-left-radius:var(--bld-br)}.tp-tbpv_c .tp-tabv>.tp-tabv_c,.tp-fldv_c .tp-tabv>.tp-tabv_c{border-bottom-left-radius:var(--bld-br)}.tp-rotv_b,.tp-fldv_b{background-color:var(--cnt-bg);color:var(--cnt-fg);cursor:pointer;display:block;height:calc(var(--cnt-usz) + 4px);line-height:calc(var(--cnt-usz) + 4px);overflow:hidden;padding-left:var(--cnt-hp);padding-right:calc(4px + var(--cnt-usz) + var(--cnt-hp));position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%;transition:border-radius .2s ease-in-out .2s}.tp-rotv_b:hover,.tp-fldv_b:hover{background-color:var(--cnt-bg-h)}.tp-rotv_b:focus,.tp-fldv_b:focus{background-color:var(--cnt-bg-f)}.tp-rotv_b:active,.tp-fldv_b:active{background-color:var(--cnt-bg-a)}.tp-rotv_b:disabled,.tp-fldv_b:disabled{opacity:.5}.tp-rotv_m,.tp-fldv_m{background:linear-gradient(to left, var(--cnt-fg), var(--cnt-fg) 2px, transparent 2px, transparent 4px, var(--cnt-fg) 4px);border-radius:2px;bottom:0;content:\"\";display:block;height:6px;right:calc(var(--cnt-hp) + (var(--cnt-usz) + 4px - 6px)/2 - 2px);margin:auto;opacity:.5;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_m,.tp-fldv.tp-fldv-expanded>.tp-fldv_b>.tp-fldv_m{transform:none}.tp-rotv_c,.tp-fldv_c{box-sizing:border-box;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0;position:relative;transition:height .2s ease-in-out,opacity .2s linear,padding .2s ease-in-out}.tp-rotv.tp-rotv-cpl:not(.tp-rotv-expanded) .tp-rotv_c,.tp-fldv.tp-fldv-cpl:not(.tp-fldv-expanded)>.tp-fldv_c{display:none}.tp-rotv.tp-rotv-expanded .tp-rotv_c,.tp-fldv.tp-fldv-expanded>.tp-fldv_c{opacity:1;padding-bottom:var(--cnt-vp);padding-top:var(--cnt-vp);transform:none;overflow:visible;transition:height .2s ease-in-out,opacity .2s linear .2s,padding .2s ease-in-out}.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw{background-color:var(--in-bg);border-radius:var(--bld-br);box-sizing:border-box;color:var(--in-fg);font-family:inherit;height:var(--cnt-usz);line-height:var(--cnt-usz);min-width:0;width:100%}.tp-txtv_i:hover,.tp-p2dpv_p:hover,.tp-colswv_sw:hover{background-color:var(--in-bg-h)}.tp-txtv_i:focus,.tp-p2dpv_p:focus,.tp-colswv_sw:focus{background-color:var(--in-bg-f)}.tp-txtv_i:active,.tp-p2dpv_p:active,.tp-colswv_sw:active{background-color:var(--in-bg-a)}.tp-txtv_i:disabled,.tp-p2dpv_p:disabled,.tp-colswv_sw:disabled{opacity:.5}.tp-lstv,.tp-coltxtv_m{position:relative}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m,.tp-coltxtv_mm{bottom:0;margin:auto;pointer-events:none;position:absolute;right:2px;top:0}.tp-lstv_m svg,.tp-coltxtv_mm svg{bottom:0;height:16px;margin:auto;position:absolute;right:0;top:0;width:16px}.tp-lstv_m svg path,.tp-coltxtv_mm svg path{fill:currentColor}.tp-sglv_i,.tp-mllv_i,.tp-grlv_g{background-color:var(--mo-bg);border-radius:var(--bld-br);box-sizing:border-box;color:var(--mo-fg);height:var(--cnt-usz);scrollbar-color:currentColor rgba(0,0,0,0);scrollbar-width:thin;width:100%}.tp-sglv_i::-webkit-scrollbar,.tp-mllv_i::-webkit-scrollbar,.tp-grlv_g::-webkit-scrollbar{height:8px;width:8px}.tp-sglv_i::-webkit-scrollbar-corner,.tp-mllv_i::-webkit-scrollbar-corner,.tp-grlv_g::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.tp-sglv_i::-webkit-scrollbar-thumb,.tp-mllv_i::-webkit-scrollbar-thumb,.tp-grlv_g::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:currentColor;border:rgba(0,0,0,0) solid 2px;border-radius:4px}.tp-pndtxtv,.tp-coltxtv_w{display:flex}.tp-pndtxtv_a,.tp-coltxtv_c{width:100%}.tp-pndtxtv_a+.tp-pndtxtv_a,.tp-coltxtv_c+.tp-pndtxtv_a,.tp-pndtxtv_a+.tp-coltxtv_c,.tp-coltxtv_c+.tp-coltxtv_c{margin-left:2px}.tp-rotv{--bs-bg: var(--tp-base-background-color, hsl(230, 7%, 17%));--bs-br: var(--tp-base-border-radius, 6px);--bs-ff: var(--tp-base-font-family, Roboto Mono, Source Code Pro, Menlo, Courier, monospace);--bs-sh: var(--tp-base-shadow-color, rgba(0, 0, 0, 0.2));--bld-br: var(--tp-blade-border-radius, 2px);--bld-hp: var(--tp-blade-horizontal-padding, 4px);--bld-vw: var(--tp-blade-value-width, 160px);--btn-bg: var(--tp-button-background-color, hsl(230, 7%, 70%));--btn-bg-a: var(--tp-button-background-color-active, #d6d7db);--btn-bg-f: var(--tp-button-background-color-focus, #c8cad0);--btn-bg-h: var(--tp-button-background-color-hover, #bbbcc4);--btn-fg: var(--tp-button-foreground-color, hsl(230, 7%, 17%));--cnt-bg: var(--tp-container-background-color, rgba(187, 188, 196, 0.1));--cnt-bg-a: var(--tp-container-background-color-active, rgba(187, 188, 196, 0.25));--cnt-bg-f: var(--tp-container-background-color-focus, rgba(187, 188, 196, 0.2));--cnt-bg-h: var(--tp-container-background-color-hover, rgba(187, 188, 196, 0.15));--cnt-fg: var(--tp-container-foreground-color, hsl(230, 7%, 75%));--cnt-hp: var(--tp-container-horizontal-padding, 4px);--cnt-vp: var(--tp-container-vertical-padding, 4px);--cnt-usp: var(--tp-container-unit-spacing, 4px);--cnt-usz: var(--tp-container-unit-size, 20px);--in-bg: var(--tp-input-background-color, rgba(187, 188, 196, 0.1));--in-bg-a: var(--tp-input-background-color-active, rgba(187, 188, 196, 0.25));--in-bg-f: var(--tp-input-background-color-focus, rgba(187, 188, 196, 0.2));--in-bg-h: var(--tp-input-background-color-hover, rgba(187, 188, 196, 0.15));--in-fg: var(--tp-input-foreground-color, hsl(230, 7%, 75%));--lbl-fg: var(--tp-label-foreground-color, rgba(187, 188, 196, 0.7));--mo-bg: var(--tp-monitor-background-color, rgba(0, 0, 0, 0.2));--mo-fg: var(--tp-monitor-foreground-color, rgba(187, 188, 196, 0.7));--grv-fg: var(--tp-groove-foreground-color, rgba(187, 188, 196, 0.1))}.tp-btnv_b{width:100%}.tp-btnv_t{text-align:center}.tp-ckbv_l{display:block;position:relative}.tp-ckbv_i{left:0;opacity:0;position:absolute;top:0}.tp-ckbv_w{background-color:var(--in-bg);border-radius:var(--bld-br);cursor:pointer;display:block;height:var(--cnt-usz);position:relative;width:var(--cnt-usz)}.tp-ckbv_w svg{display:block;height:16px;inset:0;margin:auto;opacity:0;position:absolute;width:16px}.tp-ckbv_w svg path{fill:none;stroke:var(--in-fg);stroke-width:2}.tp-ckbv_i:hover+.tp-ckbv_w{background-color:var(--in-bg-h)}.tp-ckbv_i:focus+.tp-ckbv_w{background-color:var(--in-bg-f)}.tp-ckbv_i:active+.tp-ckbv_w{background-color:var(--in-bg-a)}.tp-ckbv_i:checked+.tp-ckbv_w svg{opacity:1}.tp-ckbv.tp-v-disabled .tp-ckbv_w{opacity:.5}.tp-colv{position:relative}.tp-colv_h{display:flex}.tp-colv_s{flex-grow:0;flex-shrink:0;width:var(--cnt-usz)}.tp-colv_t{flex:1;margin-left:4px}.tp-colv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-colv.tp-colv-expanded.tp-colv-cpl .tp-colv_p{overflow:visible}.tp-colv.tp-colv-expanded .tp-colv_p{margin-top:var(--cnt-usp);opacity:1}.tp-colv .tp-popv{left:calc(-1*var(--cnt-hp));right:calc(-1*var(--cnt-hp));top:var(--cnt-usz)}.tp-colpv_h,.tp-colpv_ap{margin-left:6px;margin-right:6px}.tp-colpv_h{margin-top:var(--cnt-usp)}.tp-colpv_rgb{display:flex;margin-top:var(--cnt-usp);width:100%}.tp-colpv_a{display:flex;margin-top:var(--cnt-vp);padding-top:calc(var(--cnt-vp) + 2px);position:relative}.tp-colpv_a::before{background-color:var(--grv-fg);content:\"\";height:2px;left:calc(-1*var(--cnt-hp));position:absolute;right:calc(-1*var(--cnt-hp));top:0}.tp-colpv.tp-v-disabled .tp-colpv_a::before{opacity:.5}.tp-colpv_ap{align-items:center;display:flex;flex:3}.tp-colpv_at{flex:1;margin-left:4px}.tp-svpv{border-radius:var(--bld-br);outline:none;overflow:hidden;position:relative}.tp-svpv.tp-v-disabled{opacity:.5}.tp-svpv_c{cursor:crosshair;display:block;height:calc(var(--cnt-usz)*4);width:100%}.tp-svpv_m{border-radius:100%;border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;filter:drop-shadow(0 0 1px rgba(0, 0, 0, 0.3));height:12px;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;width:12px}.tp-svpv:focus .tp-svpv_m{border-color:#fff}.tp-hplv{cursor:pointer;height:var(--cnt-usz);outline:none;position:relative}.tp-hplv.tp-v-disabled{opacity:.5}.tp-hplv_c{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAABCAYAAABubagXAAAAQ0lEQVQoU2P8z8Dwn0GCgQEDi2OK/RBgYHjBgIpfovFh8j8YBIgzFGQxuqEgPhaDOT5gOhPkdCxOZeBg+IDFZZiGAgCaSSMYtcRHLgAAAABJRU5ErkJggg==);background-position:left top;background-repeat:no-repeat;background-size:100% 100%;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;position:absolute;top:50%;width:100%}.tp-hplv_m{border-radius:var(--bld-br);border:rgba(255,255,255,.75) solid 2px;box-shadow:0 0 2px rgba(0,0,0,.1);box-sizing:border-box;height:12px;left:50%;margin-left:-6px;margin-top:-6px;position:absolute;top:50%;width:12px}.tp-hplv:focus .tp-hplv_m{border-color:#fff}.tp-aplv{cursor:pointer;height:var(--cnt-usz);outline:none;position:relative;width:100%}.tp-aplv.tp-v-disabled{opacity:.5}.tp-aplv_b{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:4px 4px;background-position:0 0,2px 2px;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;overflow:hidden;position:absolute;top:50%;width:100%}.tp-aplv_c{inset:0;position:absolute}.tp-aplv_m{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:12px 12px;background-position:0 0,6px 6px;border-radius:var(--bld-br);box-shadow:0 0 2px rgba(0,0,0,.1);height:12px;left:50%;margin-left:-6px;margin-top:-6px;overflow:hidden;position:absolute;top:50%;width:12px}.tp-aplv_p{border-radius:var(--bld-br);border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;inset:0;position:absolute}.tp-aplv:focus .tp-aplv_p{border-color:#fff}.tp-colswv{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:10px 10px;background-position:0 0,5px 5px;border-radius:var(--bld-br);overflow:hidden}.tp-colswv.tp-v-disabled{opacity:.5}.tp-colswv_sw{border-radius:0}.tp-colswv_b{cursor:pointer;display:block;height:var(--cnt-usz);left:0;position:absolute;top:0;width:var(--cnt-usz)}.tp-colswv_b:focus::after{border:rgba(255,255,255,.75) solid 2px;border-radius:var(--bld-br);content:\"\";display:block;inset:0;position:absolute}.tp-coltxtv{display:flex;width:100%}.tp-coltxtv_m{margin-right:4px}.tp-coltxtv_ms{border-radius:var(--bld-br);color:var(--lbl-fg);cursor:pointer;height:var(--cnt-usz);line-height:var(--cnt-usz);padding:0 18px 0 4px}.tp-coltxtv_ms:hover{background-color:var(--in-bg-h)}.tp-coltxtv_ms:focus{background-color:var(--in-bg-f)}.tp-coltxtv_ms:active{background-color:var(--in-bg-a)}.tp-coltxtv_mm{color:var(--lbl-fg)}.tp-coltxtv.tp-v-disabled .tp-coltxtv_mm{opacity:.5}.tp-coltxtv_w{flex:1}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv{position:relative}.tp-fldv_t{padding-left:4px}.tp-fldv_b:disabled .tp-fldv_m{display:none}.tp-fldv_c{padding-left:4px}.tp-fldv_i{bottom:0;color:var(--cnt-bg);left:0;overflow:hidden;position:absolute;top:calc(var(--cnt-usz) + 4px);width:max(var(--bs-br),4px)}.tp-fldv_i::before{background-color:currentColor;bottom:0;content:\"\";left:0;position:absolute;top:0;width:4px}.tp-fldv_b:hover+.tp-fldv_i{color:var(--cnt-bg-h)}.tp-fldv_b:focus+.tp-fldv_i{color:var(--cnt-bg-f)}.tp-fldv_b:active+.tp-fldv_i{color:var(--cnt-bg-a)}.tp-fldv.tp-v-disabled>.tp-fldv_i{opacity:.5}.tp-grlv{position:relative}.tp-grlv_g{display:block;height:calc(var(--cnt-usz)*3)}.tp-grlv_g polyline{fill:none;stroke:var(--mo-fg);stroke-linejoin:round}.tp-grlv_t{margin-top:-4px;transition:left .05s,top .05s;visibility:hidden}.tp-grlv_t.tp-grlv_t-a{visibility:visible}.tp-grlv_t.tp-grlv_t-in{transition:none}.tp-grlv.tp-v-disabled .tp-grlv_g{opacity:.5}.tp-grlv .tp-ttv{background-color:var(--mo-fg)}.tp-grlv .tp-ttv::before{border-top-color:var(--mo-fg)}.tp-lblv{align-items:center;display:flex;line-height:1.3;padding-left:var(--cnt-hp);padding-right:var(--cnt-hp)}.tp-lblv.tp-lblv-nol{display:block}.tp-lblv_l{color:var(--lbl-fg);flex:1;-webkit-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv.tp-v-disabled .tp-lblv_l{opacity:.5}.tp-lblv.tp-lblv-nol .tp-lblv_l{display:none}.tp-lblv_v{align-self:flex-start;flex-grow:0;flex-shrink:0;width:var(--bld-vw)}.tp-lblv.tp-lblv-nol .tp-lblv_v{width:100%}.tp-lstv_s{padding:0 20px 0 var(--bld-hp);width:100%}.tp-lstv_m{color:var(--btn-fg)}.tp-sglv_i{padding-left:var(--bld-hp);padding-right:var(--bld-hp)}.tp-sglv.tp-v-disabled .tp-sglv_i{opacity:.5}.tp-mllv_i{display:block;height:calc(var(--cnt-usz)*3);line-height:var(--cnt-usz);padding-left:var(--bld-hp);padding-right:var(--bld-hp);resize:none;white-space:pre}.tp-mllv.tp-v-disabled .tp-mllv_i{opacity:.5}.tp-p2dv{position:relative}.tp-p2dv_h{display:flex}.tp-p2dv_b{height:var(--cnt-usz);margin-right:4px;position:relative;width:var(--cnt-usz)}.tp-p2dv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dv_b svg path{stroke:currentColor;stroke-width:2}.tp-p2dv_b svg circle{fill:currentColor}.tp-p2dv_t{flex:1}.tp-p2dv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-p2dv.tp-p2dv-expanded .tp-p2dv_p{margin-top:var(--cnt-usp);opacity:1}.tp-p2dv .tp-popv{left:calc(-1*var(--cnt-hp));right:calc(-1*var(--cnt-hp));top:var(--cnt-usz)}.tp-p2dpv{padding-left:calc(var(--cnt-usz) + 4px)}.tp-p2dpv_p{cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpv.tp-v-disabled .tp-p2dpv_p{opacity:.5}.tp-p2dpv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpv_ax{opacity:.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_l{opacity:.5;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_m{border:var(--in-fg) solid 1px;border-radius:50%;box-sizing:border-box;height:4px;margin-left:-2px;margin-top:-2px;position:absolute;width:4px}.tp-p2dpv_p:focus .tp-p2dpv_m{background-color:var(--in-fg);border-width:0}.tp-popv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);display:none;max-width:var(--bld-vw);padding:var(--cnt-vp) var(--cnt-hp);position:absolute;visibility:hidden;z-index:1000}.tp-popv.tp-popv-v{display:block;visibility:visible}.tp-sldv.tp-v-disabled{opacity:.5}.tp-sldv_t{box-sizing:border-box;cursor:pointer;height:var(--cnt-usz);margin:0 6px;outline:none;position:relative}.tp-sldv_t::before{background-color:var(--in-bg);border-radius:1px;content:\"\";display:block;height:2px;inset:0;margin:auto;position:absolute}.tp-sldv_k{height:100%;left:0;position:absolute;top:0}.tp-sldv_k::before{background-color:var(--in-fg);border-radius:1px;content:\"\";display:block;height:2px;inset:0;margin-bottom:auto;margin-top:auto;position:absolute}.tp-sldv_k::after{background-color:var(--btn-bg);border-radius:var(--bld-br);bottom:0;content:\"\";display:block;height:12px;margin-bottom:auto;margin-top:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldv_t:hover .tp-sldv_k::after{background-color:var(--btn-bg-h)}.tp-sldv_t:focus .tp-sldv_k::after{background-color:var(--btn-bg-f)}.tp-sldv_t:active .tp-sldv_k::after{background-color:var(--btn-bg-a)}.tp-sldtxtv{display:flex}.tp-sldtxtv_s{flex:2}.tp-sldtxtv_t{flex:1;margin-left:4px}.tp-tabv{position:relative}.tp-tabv_t{align-items:flex-end;color:var(--cnt-bg);display:flex;overflow:hidden;position:relative}.tp-tabv_t:hover{color:var(--cnt-bg-h)}.tp-tabv_t:has(*:focus){color:var(--cnt-bg-f)}.tp-tabv_t:has(*:active){color:var(--cnt-bg-a)}.tp-tabv_t::before{background-color:currentColor;bottom:0;content:\"\";height:2px;left:0;pointer-events:none;position:absolute;right:0}.tp-tabv.tp-v-disabled .tp-tabv_t::before{opacity:.5}.tp-tabv.tp-tabv-nop .tp-tabv_t{height:calc(var(--cnt-usz) + 4px);position:relative}.tp-tabv.tp-tabv-nop .tp-tabv_t::before{background-color:var(--cnt-bg);bottom:0;content:\"\";height:2px;left:0;position:absolute;right:0}.tp-tabv_i{bottom:0;color:var(--cnt-bg);left:0;overflow:hidden;position:absolute;top:calc(var(--cnt-usz) + 4px);width:max(var(--bs-br),4px)}.tp-tabv_i::before{background-color:currentColor;bottom:0;content:\"\";left:0;position:absolute;top:0;width:4px}.tp-tabv_t:hover+.tp-tabv_i{color:var(--cnt-bg-h)}.tp-tabv_t:has(*:focus)+.tp-tabv_i{color:var(--cnt-bg-f)}.tp-tabv_t:has(*:active)+.tp-tabv_i{color:var(--cnt-bg-a)}.tp-tabv.tp-v-disabled>.tp-tabv_i{opacity:.5}.tp-tbiv{flex:1;min-width:0;position:relative}.tp-tbiv+.tp-tbiv{margin-left:2px}.tp-tbiv+.tp-tbiv.tp-v-disabled::before{opacity:.5}.tp-tbiv_b{display:block;padding-left:calc(var(--cnt-hp) + 4px);padding-right:calc(var(--cnt-hp) + 4px);position:relative;width:100%}.tp-tbiv_b:disabled{opacity:.5}.tp-tbiv_b::before{background-color:var(--cnt-bg);content:\"\";inset:0 0 2px;pointer-events:none;position:absolute}.tp-tbiv_b:hover::before{background-color:var(--cnt-bg-h)}.tp-tbiv_b:focus::before{background-color:var(--cnt-bg-f)}.tp-tbiv_b:active::before{background-color:var(--cnt-bg-a)}.tp-tbiv_t{color:var(--cnt-fg);height:calc(var(--cnt-usz) + 4px);line-height:calc(var(--cnt-usz) + 4px);opacity:.5;overflow:hidden;position:relative;text-overflow:ellipsis}.tp-tbiv.tp-tbiv-sel .tp-tbiv_t{opacity:1}.tp-tbpv_c{padding-bottom:var(--cnt-vp);padding-left:4px;padding-top:var(--cnt-vp)}.tp-txtv{position:relative}.tp-txtv_i{padding-left:var(--bld-hp);padding-right:var(--bld-hp)}.tp-txtv.tp-txtv-fst .tp-txtv_i{border-bottom-right-radius:0;border-top-right-radius:0}.tp-txtv.tp-txtv-mid .tp-txtv_i{border-radius:0}.tp-txtv.tp-txtv-lst .tp-txtv_i{border-bottom-left-radius:0;border-top-left-radius:0}.tp-txtv.tp-txtv-num .tp-txtv_i{text-align:right}.tp-txtv.tp-txtv-drg .tp-txtv_i{opacity:.3}.tp-txtv_k{cursor:pointer;height:100%;left:calc(var(--bld-hp) - 5px);position:absolute;top:0;width:12px}.tp-txtv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:\"\";height:calc(var(--cnt-usz) - 4px);left:50%;margin-bottom:auto;margin-left:-1px;margin-top:auto;opacity:.1;position:absolute;top:0;transition:border-radius .1s,height .1s,transform .1s,width .1s;width:2px}.tp-txtv_k:hover::before,.tp-txtv.tp-txtv-drg .tp-txtv_k::before{opacity:1}.tp-txtv.tp-txtv-drg .tp-txtv_k::before{border-radius:50%;height:4px;transform:translateX(-1px);width:4px}.tp-txtv_g{bottom:0;display:block;height:8px;left:50%;margin:auto;overflow:visible;pointer-events:none;position:absolute;top:0;visibility:hidden;width:100%}.tp-txtv.tp-txtv-drg .tp-txtv_g{visibility:visible}.tp-txtv_gb{fill:none;stroke:var(--in-fg);stroke-dasharray:1}.tp-txtv_gh{fill:none;stroke:var(--in-fg)}.tp-txtv .tp-ttv{margin-left:6px;visibility:hidden}.tp-txtv.tp-txtv-drg .tp-ttv{visibility:visible}.tp-ttv{background-color:var(--in-fg);border-radius:var(--bld-br);color:var(--bs-bg);padding:2px 4px;pointer-events:none;position:absolute;transform:translate(-50%, -100%)}.tp-ttv::before{border-color:var(--in-fg) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);border-style:solid;border-width:2px;box-sizing:border-box;content:\"\";font-size:.9em;height:4px;left:50%;margin-left:-2px;position:absolute;top:100%;width:4px}.tp-rotv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);font-family:var(--bs-ff);font-size:11px;font-weight:500;line-height:1;text-align:left}.tp-rotv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br);border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br);padding-left:calc(4px + var(--cnt-usz) + var(--cnt-hp));text-align:center}.tp-rotv.tp-rotv-expanded .tp-rotv_b{border-bottom-left-radius:0;border-bottom-right-radius:0;transition-delay:0s;transition-duration:0s}.tp-rotv.tp-rotv-not>.tp-rotv_b{display:none}.tp-rotv_b:disabled .tp-rotv_m{display:none}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_i{border-bottom-left-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst.tp-fldv-expanded>.tp-fldv_b{transition-delay:0s;transition-duration:0s}.tp-rotv_c .tp-fldv.tp-v-vlst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst{margin-top:calc(-1*var(--cnt-vp))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst>.tp-fldv_b{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_i{border-bottom-left-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst{margin-top:calc(-1*var(--cnt-vp))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst>.tp-tabv_t{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-v-disabled,.tp-rotv .tp-v-disabled{pointer-events:none}.tp-rotv.tp-v-hidden,.tp-rotv .tp-v-hidden{display:none}.tp-sprv_r{background-color:var(--grv-fg);border-width:0;display:block;height:2px;margin:0;width:100%}.tp-sprv.tp-v-disabled .tp-sprv_r{opacity:.5}',\n plugins: [\n ListBladePlugin,\n SeparatorBladePlugin,\n SliderBladePlugin,\n TabBladePlugin,\n TextBladePlugin,\n ],\n });\n }\n}\n\nconst VERSION = new Semver('4.0.5');\n\nexport { BladeApi, ButtonApi, FolderApi, ListBladeApi, ListInputBindingApi, Pane, Semver, SeparatorBladeApi, SliderBladeApi, SliderInputBindingApi, TabApi, TabPageApi, TextBladeApi, TpChangeEvent, VERSION };\n","import { Pane } from 'tweakpane';\nimport type { SoundPlugin } from './SoundPlugin';\nimport type { SoundChannel } from './SoundPlugin.types';\n\n/**\n * Debug GUI for SoundPlugin using Tweakpane.\n * Provides visual controls for testing sound playback, channels, and stop methods.\n *\n * @example\n * ```typescript\n * import { SoundTestGUI } from './SoundTestGUI';\n *\n * // After soundPlugin is initialized:\n * if (isDevelopment) {\n * new SoundTestGUI(soundPlugin);\n * }\n * ```\n */\nexport class SoundTestGUI {\n // Using 'any' because Tweakpane's Pane extends RootApi which extends FolderApi,\n // but TypeScript doesn't properly infer the inherited methods\n private pane: any;\n private plugin: SoundPlugin;\n private playingFolder: any = null;\n private soundsFolder: any = null;\n private updateInterval: ReturnType<typeof setInterval> | null = null;\n private lastSoundCount: number = 0;\n\n private params = {\n masterVolume: 1.0,\n groupName: '',\n channelToStop: 'music' as SoundChannel,\n };\n\n private channelParams: Record<SoundChannel, { volume: number; muted: boolean }> = {\n music: { volume: 1.0, muted: false },\n sfx: { volume: 1.0, muted: false },\n voice: { volume: 1.0, muted: false },\n ui: { volume: 1.0, muted: false },\n };\n\n constructor(soundPlugin: SoundPlugin) {\n this.plugin = soundPlugin;\n this.pane = new Pane({ title: 'SoundPlugin Debug', expanded: true });\n\n // Set wider width for the pane and fix positioning\n const paneElement = this.pane.element;\n paneElement.style.width = '400px';\n paneElement.style.position = 'fixed';\n paneElement.style.top = '10px';\n paneElement.style.right = '8px';\n\n // Increase font size for better readability\n this.applyCustomStyles();\n\n // Expose to window for console access\n (window as any).soundPlugin = soundPlugin;\n (window as any).soundTestGUI = this;\n\n this.initMasterControls();\n this.initChannelControls();\n this.initSoundsFolder();\n this.initPlayingFolder();\n this.initGroupControls();\n\n // Start auto-refresh for currently playing and sounds list\n this.startAutoRefresh();\n }\n\n private applyCustomStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n /* Base font sizes - larger for readability */\n .tp-dfwv {\n font-size: 15px !important;\n }\n .tp-lblv_l {\n font-size: 14px !important;\n }\n .tp-btnv_b {\n font-size: 14px !important;\n }\n .tp-fldv_t {\n font-size: 15px !important;\n }\n .tp-rotv_t {\n font-size: 18px !important;\n font-weight: bold !important;\n }\n \n /* Input fields */\n .tp-txtv_i {\n font-size: 14px !important;\n }\n\n /* Larger emoji icons */\n .tp-fldv_t .emoji {\n font-size: 20px !important;\n vertical-align: middle;\n margin-right: 2px;\n }\n `;\n document.head.appendChild(style);\n }\n\n private initMasterControls(): void {\n const folder = this.pane.addFolder({ title: 'Master Controls' });\n\n // Master volume\n this.params.masterVolume = this.plugin.masterVolume;\n folder.addBinding(this.params, 'masterVolume', { min: 0, max: 1, step: 0.01 })\n .on('change', (ev: { value: number }) => {\n this.plugin.masterVolume = ev.value;\n });\n\n // Stop All button\n folder.addButton({ title: 'Stop All' }).on('click', () => {\n this.plugin.stopAll();\n });\n\n // Refresh sounds list button\n folder.addButton({ title: 'Refresh Sound List' }).on('click', () => {\n this.refreshSoundsList();\n });\n }\n\n private initChannelControls(): void {\n const folder = this.pane.addFolder({ title: 'Channels' });\n\n const channels: SoundChannel[] = ['music', 'sfx'/*, 'voice', 'ui'*/];\n const channelIcons: Record<SoundChannel, string> = {\n music: '🎵',\n sfx: '💥',\n voice: '🗣️',\n ui: '🔔',\n };\n\n for (const channel of channels) {\n const channelFolder = folder.addFolder({ title: '...' });\n const titleEl = channelFolder.element.querySelector('.tp-fldv_t') as HTMLElement;\n if (titleEl) {\n titleEl.innerHTML = `<span class=\"emoji\">${channelIcons[channel]}</span> ${channel}`;\n }\n\n // Get current values from plugin\n this.channelParams[channel].volume = this.plugin.getChannelVolume(channel);\n this.channelParams[channel].muted = this.plugin.isChannelMuted(channel);\n\n // Volume slider\n channelFolder.addBinding(this.channelParams[channel], 'volume', { min: 0, max: 1, step: 0.01 })\n .on('change', (ev: { value: number }) => {\n this.plugin.setChannelVolume(channel, ev.value);\n });\n\n // Muted checkbox\n channelFolder.addBinding(this.channelParams[channel], 'muted')\n .on('change', (ev: { value: boolean }) => {\n if (ev.value) {\n this.plugin.muteChannel(channel);\n } else {\n this.plugin.unmuteChannel(channel);\n }\n });\n\n // Stop channel button\n channelFolder.addButton({ title: 'Stop Channel' }).on('click', () => {\n this.plugin.stopChannel(channel);\n });\n }\n }\n\n private initSoundsFolder(): void {\n this.soundsFolder = this.pane.addFolder({ title: 'Loaded Sounds', expanded: false });\n this.refreshSoundsList();\n }\n\n private refreshSoundsList(): void {\n if (!this.soundsFolder) return;\n\n // Clear existing children\n const children = [...this.soundsFolder.children];\n children.forEach((child) => child.dispose());\n\n // Get sound channel mappings from plugin (using any to access private)\n const soundChannelMap = (this.plugin as any).soundChannelMap as Map<string, SoundChannel>;\n const spriteRegistry = (this.plugin as any).spriteRegistry as Map<string, { soundAlias: string; spriteKey: string; channel?: SoundChannel }>;\n\n // Collect all sound aliases\n const allAliases = new Set<string>();\n\n soundChannelMap.forEach((_, alias) => allAliases.add(alias));\n spriteRegistry.forEach((_, alias) => allAliases.add(alias));\n\n // Channel icons for visual distinction\n const channelIcons: Record<string, string> = {\n music: '🎵',\n sfx: '💥',\n voice: '🗣️',\n ui: '🔔',\n };\n\n // Sort aliases\n const sortedAliases = Array.from(allAliases).sort();\n\n for (const alias of sortedAliases) {\n const channel = soundChannelMap.get(alias) ?? spriteRegistry.get(alias)?.channel ?? 'unknown';\n const channelIcon = channelIcons[channel as string] ?? '❓';\n const soundFolder = this.soundsFolder.addFolder({ title: '...', expanded: false });\n const titleEl = soundFolder.element.querySelector('.tp-fldv_t') as HTMLElement;\n if (titleEl) {\n titleEl.innerHTML = `<span class=\"emoji\">${channelIcon}</span> ${alias}`;\n }\n\n // Play button\n soundFolder.addButton({ title: 'Play' }).on('click', () => {\n this.plugin.play(alias);\n });\n\n // Loop button\n soundFolder.addButton({ title: 'Loop' }).on('click', () => {\n this.plugin.play(alias, { loop: true });\n });\n\n // Queue In (Crossfade) - fades out and in simultaneously\n soundFolder.addButton({ title: 'QueueIn (Cross)' }).on('click', () => {\n this.plugin.queueIn(alias, 1, { loop: true, type: 'crossfade' });\n });\n\n // Queue In (Sequential) - fades out first, then fades in\n soundFolder.addButton({ title: 'QueueIn (Seq)' }).on('click', () => {\n this.plugin.queueIn(alias, 1, { loop: true, type: 'sequential' });\n });\n\n // Stop button\n soundFolder.addButton({ title: 'Stop' }).on('click', () => {\n this.plugin.stopAlias(alias);\n });\n }\n\n if (sortedAliases.length === 0) {\n const infoParams = { info: 'No sounds loaded yet' };\n this.soundsFolder.addBinding(infoParams, 'info', { readonly: true });\n }\n }\n\n private initPlayingFolder(): void {\n this.playingFolder = this.pane.addFolder({ title: 'Currently Playing', expanded: true });\n this.updatePlayingList();\n }\n\n private expandedAliases: Set<string> = new Set();\n\n private updatePlayingList(): void {\n if (!this.playingFolder) return;\n\n // Save expanded state before clearing\n const children = [...this.playingFolder.children];\n children.forEach((child: any) => {\n // Extract alias from the folder - stored in data attribute or title\n const alias = child._alias;\n if (alias && child.expanded) {\n this.expandedAliases.add(alias);\n } else if (alias && !child.expanded) {\n this.expandedAliases.delete(alias);\n }\n });\n\n // Clear existing children\n children.forEach((child) => child.dispose());\n\n // Get playing instances and mappings from plugin\n const playingInstances = (this.plugin as any).playingInstances as Map<string, any[]>;\n const soundChannelMap = (this.plugin as any).soundChannelMap as Map<string, SoundChannel>;\n const spriteRegistry = (this.plugin as any).spriteRegistry as Map<string, { soundAlias: string; spriteKey: string; channel?: SoundChannel }>;\n const groupInstances = (this.plugin as any).groupInstances as Map<string, any[]>;\n const activeLoopInstances = (this.plugin as any).activeLoopInstances as Map<string, any>;\n const intervalTimers = (this.plugin as any).intervalTimers as Map<string, any>;\n\n // Build reverse lookup: find which groups contain this alias\n const aliasToGroups = new Map<string, string[]>();\n groupInstances.forEach((instances, groupName) => {\n playingInstances.forEach((aliasInstances, alias) => {\n const hasCommon = aliasInstances.some(inst => instances.includes(inst));\n if (hasCommon) {\n if (!aliasToGroups.has(alias)) {\n aliasToGroups.set(alias, []);\n }\n aliasToGroups.get(alias)!.push(groupName);\n }\n });\n });\n\n // Channel icons for visual distinction\n const channelIcons: Record<string, string> = {\n music: '🎵',\n sfx: '💥',\n voice: '🗣️',\n ui: '🔔',\n };\n\n // Collect all aliases that are either playing or waiting for interval\n const allActiveAliases = new Set<string>();\n playingInstances.forEach((instances, alias) => {\n if (instances.length > 0) {\n allActiveAliases.add(alias);\n }\n });\n // Also add aliases that are waiting for interval (not currently playing but will play)\n intervalTimers.forEach((_, alias) => {\n allActiveAliases.add(alias);\n });\n\n let hasPlaying = false;\n allActiveAliases.forEach((alias) => {\n hasPlaying = true;\n const instances = playingInstances.get(alias) ?? [];\n\n // Get channel info\n const channel = soundChannelMap.get(alias) ?? spriteRegistry.get(alias)?.channel ?? '?';\n const channelIcon = channelIcons[channel as string] ?? '❓';\n // Get group info\n const groups = aliasToGroups.get(alias) ?? [];\n const groupStr = groups.length > 0 ? ` 📁${groups.join(',')}` : '';\n\n // Get volume and loop status of first instance\n const firstInstance = instances[0];\n const vol = firstInstance?.volume ?? 0;\n const volStr = instances.length > 0 ? vol.toFixed(2) : '-';\n const isLoop = firstInstance?.loop ?? false;\n const loopIcon = isLoop ? '🔁' : '';\n\n // Check if this is an interval loop (loopInterval)\n const isIntervalLoop = activeLoopInstances.has(alias);\n const isWaiting = intervalTimers.has(alias) && instances.length === 0;\n const intervalIcon = isIntervalLoop ? '⏱️' : '';\n // If waiting for next interval play, show hourglass\n const waitingIcon = isWaiting ? '⏳' : '';\n\n const countStr = isWaiting ? 'waiting' : `${instances.length}`;\n\n // Build icons HTML with emoji class for larger size\n const icons = [channelIcon, loopIcon, intervalIcon, waitingIcon].filter(Boolean);\n const iconsHtml = icons.map(i => `<span class=\"emoji\">${i}</span>`).join('');\n const groupHtml = groupStr ? `<span class=\"emoji\">📁</span>${groups.join(',')}` : '';\n\n // Create folder with placeholder title, restore expanded state\n const wasExpanded = this.expandedAliases.has(alias);\n const itemFolder = this.playingFolder!.addFolder({ title: '...', expanded: wasExpanded });\n (itemFolder as any)._alias = alias; // Store alias for state tracking\n\n const titleEl = itemFolder.element.querySelector('.tp-fldv_t') as HTMLElement;\n if (titleEl) {\n titleEl.innerHTML = `${iconsHtml} ${alias} (${countStr}) v:${volStr}${groupHtml}`;\n }\n\n // Add Trigger button for interval loop sounds\n if (isIntervalLoop) {\n itemFolder.addButton({ title: 'Trigger' }).on('click', () => {\n this.plugin.triggerIntervalLoop(alias);\n });\n }\n\n itemFolder.addButton({ title: 'Stop' }).on('click', () => {\n this.plugin.stopAlias(alias);\n });\n });\n\n if (!hasPlaying) {\n const statusParams = { status: 'Nothing playing' };\n this.playingFolder.addBinding(statusParams, 'status', { readonly: true });\n }\n }\n\n private initGroupControls(): void {\n const folder = this.pane.addFolder({ title: 'Group Controls' });\n\n // Group name input\n folder.addBinding(this.params, 'groupName', { label: 'Group Name' });\n\n // Stop group button\n folder.addButton({ title: 'Stop Group' }).on('click', () => {\n if (this.params.groupName) {\n this.plugin.stopGroup(this.params.groupName);\n }\n });\n }\n\n private startAutoRefresh(): void {\n // Update playing list and sounds list every 500ms\n this.updateInterval = setInterval(() => {\n this.updatePlayingList();\n this.syncChannelParams();\n\n // Also refresh sounds list if it was empty (sounds may have loaded)\n const soundChannelMap = (this.plugin as any).soundChannelMap as Map<string, SoundChannel>;\n const currentCount = soundChannelMap.size;\n if (currentCount > 0 && this.lastSoundCount === 0) {\n this.refreshSoundsList();\n }\n this.lastSoundCount = currentCount;\n }, 500);\n }\n\n private syncChannelParams(): void {\n // Sync channel params with plugin state (for external changes)\n const channels: SoundChannel[] = ['music', 'sfx', 'voice', 'ui'];\n let needsRefresh = false;\n\n for (const channel of channels) {\n const pluginVolume = this.plugin.getChannelVolume(channel);\n const pluginMuted = this.plugin.isChannelMuted(channel);\n\n if (this.channelParams[channel].volume !== pluginVolume) {\n this.channelParams[channel].volume = pluginVolume;\n needsRefresh = true;\n }\n if (this.channelParams[channel].muted !== pluginMuted) {\n this.channelParams[channel].muted = pluginMuted;\n needsRefresh = true;\n }\n }\n\n // Sync master volume\n if (this.params.masterVolume !== this.plugin.masterVolume) {\n this.params.masterVolume = this.plugin.masterVolume;\n needsRefresh = true;\n }\n\n if (needsRefresh) {\n this.pane.refresh();\n }\n }\n\n /**\n * Dispose the GUI and clean up resources.\n */\n public dispose(): void {\n if (this.updateInterval) {\n clearInterval(this.updateInterval);\n this.updateInterval = null;\n }\n this.pane.dispose();\n delete (window as any).soundPlugin;\n delete (window as any).soundTestGUI;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../plugins/device/DeviceOptimizerPlugin.ts","../../plugins/resource/ResourcePlugin.ts","../../plugins/display/DisplayPlugin.ts","../../plugins/display/displayViewport.ts","../../plugins/eventbus/EventBusPlugin.ts","../../plugins/gsap/GsapPlugin.ts","../../plugins/input/InputPlugin.const.ts","../../plugins/input/KeyboardManager.ts","../../plugins/input/InputPlugin.ts","../../plugins/language/I18NextPlugin.ts","../../plugins/scene/ScenePlugin.ts","../../plugins/scene/Scene.ts","../../plugins/sentry/SentryPlugin.ts","../../plugins/service/types/api.types.ts","../../plugins/service/ServicePlugin.ts","../../plugins/service/ServiceAdapter.ts","../../plugins/service/adapters/RGSAdapter.ts","../../plugins/service/adapters/resolvePublicIp.ts","../../plugins/service/adapters/DevAuthAdapter.ts","../../plugins/skin/Skin.ts","../../plugins/skin/SkinPlugin.ts","../../plugins/sound/SoundPlugin.ts","../../../../node_modules/tweakpane/dist/tweakpane.js","../../plugins/sound/SoundTestGUI.ts"],"names":["detectWebp","EventEmitter","ServiceActions","skin","path","parts","Assets","gsap","instances","op","result","t","document","p","c","_a","v"],"mappings":"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","file":"index.js","sourcesContent":["import { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport { isMobile, detectWebp } from 'pixi.js';\nimport type {\n DeviceInfo,\n PerformanceMetrics,\n OptimizationSettings,\n DeviceOptimizerConfig,\n} from './DeviceOptimizerPlugin.types';\n\n/**\n * Device detection and optimization plugin for PixiJS games.\n *\n * DeviceOptimizerPlugin automatically detects device capabilities and generates\n * optimal performance settings. It analyzes platform, memory, network, battery,\n * and GPU to calculate a performance tier (low/medium/high) and provides\n * appropriate optimization settings.\n *\n * ## Features\n *\n * - **Device Detection**: Platform, browser, OS, screen properties\n * - **Performance Metrics**: Memory, network, battery, GPU capabilities\n * - **Automatic Tier Calculation**: Low, medium, or high performance tier\n * - **Optimization Settings**: Asset resolution, particle limits, memory management\n * - **ResourcePlugin Integration**: Provides settings for asset loading\n *\n * ## Performance Tiers\n *\n * - **Low Tier**: Mobile devices, low memory, slow network\n * - Asset resolution: 0.25x\n * - Max particles: 25\n * - Target FPS: 30\n * - Aggressive memory cleanup\n *\n * - **Medium Tier**: Tablets, mid-range devices\n * - Asset resolution: 0.5x\n * - Max particles: 100\n * - Target FPS: 60\n * - Moderate memory management\n *\n * - **High Tier**: Desktop, high-end devices\n * - Asset resolution: 1.0x - 2.0x\n * - Max particles: 500\n * - Target FPS: 60\n * - Advanced effects enabled\n *\n * ## Integration with ResourcePlugin\n *\n * DeviceOptimizerPlugin must initialize before ResourcePlugin. ResourcePlugin\n * reads optimization settings to determine which asset resolutions to load.\n *\n * @example\n * ```typescript\n * const deviceOptimizer = new DeviceOptimizerPlugin({\n * enableAdvancedMetrics: true,\n * enableNetworkDetection: true,\n * enableBatteryDetection: true,\n * debug: true\n * });\n *\n * engine.registerPlugin(deviceOptimizer);\n * await engine.initialize();\n *\n * // Get optimization settings\n * const settings = deviceOptimizer.getSettings();\n * console.log('Asset resolution:', settings.assetResolution);\n * console.log('Performance tier:', deviceOptimizer.getPerformanceTier());\n * ```\n *\n * @example\n * ```typescript\n * // Force specific tier for testing\n * const deviceOptimizer = new DeviceOptimizerPlugin({\n * forceTier: 'low',\n * forceResolution: 0.5\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class DeviceOptimizerPlugin implements EnginePlugin {\n public name: string = 'deviceOptimizerPlugin';\n public priority: number = 10; // Very early - before asset loading\n public dependencies: string[] = []; // No dependencies\n\n private config: DeviceOptimizerConfig;\n private deviceInfo: DeviceInfo | null = null;\n private metrics: PerformanceMetrics | null = null;\n private settings: OptimizationSettings | null = null;\n private performanceTier: 'low' | 'medium' | 'high' = 'medium';\n private isInitialized = false;\n\n /**\n * Detect WebP support using PIXI's native method\n */\n private async detectWebP(): Promise<boolean> {\n try {\n return await detectWebp.test();\n } catch (error) {\n return false;\n }\n }\n\n // Default tier settings - will be initialized in constructor\n private defaultTierSettings: Record<'low' | 'medium' | 'high', OptimizationSettings>;\n\n constructor(config: DeviceOptimizerConfig = {}) {\n this.config = {\n enableAdvancedMetrics: false, // Safe default\n enableNetworkDetection: true,\n enableBatteryDetection: true,\n enableGPUDetection: true,\n ...config,\n };\n\n // Initialize default tier settings\n this.defaultTierSettings = {\n low: {\n assetResolution: 0.25,\n assetSuffix: '@0.25x',\n assetQuality: 'low' as const,\n preloadStrategy: 'minimal' as const,\n enableWebP: false,\n particleSettings: {\n maxParticles: 25,\n quality: 'low' as const,\n enableAdvancedEffects: false,\n enableBlur: false,\n enableGlow: false,\n },\n targetFPS: 30 as const,\n enableAntialiasing: false,\n enableMipmaps: false,\n textureMaxSize: 1024,\n memoryLimits: {\n maxAssetMemoryMB: 32,\n maxTextureMemoryMB: 16,\n enableAggressiveCleanup: true,\n gcInterval: 5000,\n },\n packagePreferences: {\n mobile: 2,\n desktop: -1,\n particles: -1,\n highres: -1,\n effects: -1,\n },\n },\n medium: {\n assetResolution: 0.5,\n assetSuffix: '@0.5x',\n assetQuality: 'medium' as const,\n preloadStrategy: 'moderate' as const,\n enableWebP: false, // Will be updated in initialize()\n particleSettings: {\n maxParticles: 100,\n quality: 'medium' as const,\n enableAdvancedEffects: true,\n enableBlur: true,\n enableGlow: false,\n },\n targetFPS: 60 as const,\n enableAntialiasing: true,\n enableMipmaps: true,\n textureMaxSize: 2048,\n memoryLimits: {\n maxAssetMemoryMB: 128,\n maxTextureMemoryMB: 64,\n enableAggressiveCleanup: false,\n gcInterval: 10000,\n },\n packagePreferences: {\n mobile: 1,\n desktop: 0,\n particles: 0,\n highres: 0,\n effects: 0,\n },\n },\n high: {\n assetResolution: 1.0,\n assetSuffix: '@1x',\n assetQuality: 'high' as const,\n preloadStrategy: 'aggressive' as const,\n enableWebP: false, // Will be updated in initialize()\n particleSettings: {\n maxParticles: 500,\n quality: 'high' as const,\n enableAdvancedEffects: true,\n enableBlur: true,\n enableGlow: true,\n },\n targetFPS: 60 as const,\n enableAntialiasing: true,\n enableMipmaps: true,\n textureMaxSize: 4096,\n memoryLimits: {\n maxAssetMemoryMB: 256,\n maxTextureMemoryMB: 128,\n enableAggressiveCleanup: false,\n gcInterval: 15000,\n },\n packagePreferences: {\n mobile: -1,\n desktop: 2,\n particles: 1,\n highres: 1,\n effects: 1,\n },\n },\n };\n\n // Apply tier setting overrides\n if (config.tierSettings) {\n Object.entries(config.tierSettings).forEach(([tier, overrides]) => {\n if (overrides) {\n this.defaultTierSettings[tier as 'low' | 'medium' | 'high'] = {\n ...this.defaultTierSettings[tier as 'low' | 'medium' | 'high'],\n ...overrides,\n };\n }\n });\n }\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n try {\n // Detect device safely\n this.deviceInfo = this.detectDevice();\n\n // Gather performance metrics\n this.metrics = await this.gatherMetrics();\n\n // Calculate performance tier\n this.performanceTier = this.config.forceTier || this.calculatePerformanceTier();\n\n // Generate optimization settings\n this.settings = this.generateOptimizationSettings();\n\n // Detect WebP support and update settings\n const webpSupported = await this.detectWebP();\n if (this.settings) {\n this.settings.enableWebP = webpSupported;\n }\n\n // Apply force overrides\n this.applyForceOverrides();\n\n this.isInitialized = true;\n\n this.logDeviceInfo();\n\n\n getLogger('DeviceOptimizerPlugin').info('Device optimization initialized', {\n platform: this.deviceInfo.platform,\n tier: this.performanceTier,\n resolution: this.settings.assetResolution,\n webpSupported,\n });\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').error('Device optimization failed, using fallbacks', error);\n this.useFallbackSettings();\n }\n }\n\n public onReady(engine: PixiEngine): void {\n // Plugin is ready - no need to store in engine data\n getLogger('DeviceOptimizerPlugin').debug('DeviceOptimizerPlugin is ready');\n }\n\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public cleanup(): void {\n this.isInitialized = false;\n getLogger('DeviceOptimizerPlugin').debug('DeviceOptimizerPlugin cleaned up');\n }\n\n /**\n * Safe device detection\n */\n private detectDevice(): DeviceInfo {\n const userAgent = navigator.userAgent.toLowerCase();\n const screen = window.screen || { width: 1920, height: 1080 };\n const pixelRatio = window.devicePixelRatio || 1;\n\n return {\n platform: this.detectPlatform(userAgent),\n browser: this.detectBrowser(userAgent),\n os: this.detectOS(userAgent),\n screen: {\n width: screen.width,\n height: screen.height,\n pixelRatio,\n diagonal: this.calculateDiagonal(screen.width, screen.height),\n orientation: screen.width > screen.height ? 'landscape' : 'portrait',\n },\n };\n }\n\n private detectPlatform(userAgent: string): 'mobile' | 'tablet' | 'desktop' {\n if (this.config.forcePlatform) {\n return this.config.forcePlatform;\n }\n\n if (isMobile.phone || /mobile|android.*mobile|iphone|ipod/i.test(userAgent)) {\n return 'mobile';\n }\n\n if (isMobile.tablet || /tablet|ipad/i.test(userAgent)) {\n return 'tablet';\n }\n\n // Fallback to screen size\n const width = window.screen?.width || window.innerWidth || 1920;\n if (width < 768) return 'mobile';\n if (width < 1024) return 'tablet';\n\n return 'desktop';\n }\n\n private detectBrowser(userAgent: string): DeviceInfo['browser'] {\n let name: DeviceInfo['browser']['name'] = 'unknown';\n let version = 'unknown';\n\n try {\n if (/edg\\//i.test(userAgent)) {\n name = 'edge';\n version = userAgent.match(/edg\\/([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/chrome/i.test(userAgent) && !/edg/i.test(userAgent)) {\n name = 'chrome';\n version = userAgent.match(/chrome\\/([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/firefox/i.test(userAgent)) {\n name = 'firefox';\n version = userAgent.match(/firefox\\/([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/safari/i.test(userAgent) && !/chrome/i.test(userAgent)) {\n name = 'safari';\n version = userAgent.match(/version\\/([0-9.]+)/i)?.[1] || 'unknown';\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Browser detection failed', error);\n }\n\n return { name, version };\n }\n\n private detectOS(userAgent: string): DeviceInfo['os'] {\n let name: DeviceInfo['os']['name'] = 'unknown';\n let version = 'unknown';\n\n try {\n if (/iphone|ipad|ipod/i.test(userAgent)) {\n name = 'ios';\n version = userAgent.match(/os ([0-9_]+)/i)?.[1]?.replace(/_/g, '.') || 'unknown';\n } else if (/android/i.test(userAgent)) {\n name = 'android';\n version = userAgent.match(/android ([0-9.]+)/i)?.[1] || 'unknown';\n } else if (/mac os x/i.test(userAgent)) {\n name = 'macos';\n version = userAgent.match(/mac os x ([0-9_]+)/i)?.[1]?.replace(/_/g, '.') || 'unknown';\n } else if (/windows/i.test(userAgent)) {\n name = 'windows';\n if (/windows nt 10/i.test(userAgent)) version = '10';\n else if (/windows nt 6.3/i.test(userAgent)) version = '8.1';\n else if (/windows nt 6.2/i.test(userAgent)) version = '8';\n else if (/windows nt 6.1/i.test(userAgent)) version = '7';\n } else if (/linux/i.test(userAgent)) {\n name = 'linux';\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('OS detection failed', error);\n }\n\n return { name, version };\n }\n\n private calculateDiagonal(width: number, height: number): number {\n return Math.sqrt(width * width + height * height);\n }\n\n /**\n * Gather performance metrics safely\n */\n private async gatherMetrics(): Promise<PerformanceMetrics> {\n const metrics: PerformanceMetrics = {\n memory: await this.getMemoryInfo(),\n network: await this.getNetworkInfo(),\n battery: await this.getBatteryInfo(),\n gpu: await this.getGPUInfo(),\n };\n\n return metrics;\n }\n\n private async getMemoryInfo(): Promise<PerformanceMetrics['memory']> {\n let totalMB = 4096; // Default 4GB\n let usedMB = 512; // Default 512MB\n\n try {\n if (this.config.enableAdvancedMetrics) {\n // @ts-ignore - Chrome specific\n const memoryInfo = (performance as any).memory;\n if (memoryInfo) {\n totalMB = memoryInfo.jsHeapSizeLimit / (1024 * 1024);\n usedMB = memoryInfo.usedJSHeapSize / (1024 * 1024);\n }\n\n // @ts-ignore - Chrome specific\n const deviceMemory = (navigator as any).deviceMemory;\n if (deviceMemory) {\n totalMB = deviceMemory * 1024; // Convert GB to MB\n }\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Memory detection failed', error);\n }\n\n let tier: 'low' | 'medium' | 'high' = 'medium';\n if (totalMB < 2048)\n tier = 'low'; // < 2GB\n else if (totalMB >= 8192) tier = 'high'; // >= 8GB\n\n return { totalMB, usedMB, tier };\n }\n\n private async getNetworkInfo(): Promise<PerformanceMetrics['network']> {\n const defaultNetwork: PerformanceMetrics['network'] = {\n type: 'unknown',\n effectiveType: '4g',\n downlink: 10,\n rtt: 50,\n isSlow: false,\n };\n\n if (!this.config.enableNetworkDetection) {\n return defaultNetwork;\n }\n\n try {\n // @ts-ignore - Chrome specific\n const connection =\n (navigator as any).connection ||\n (navigator as any).mozConnection ||\n (navigator as any).webkitConnection;\n\n if (connection) {\n const isSlow =\n connection.effectiveType === 'slow-2g' ||\n connection.effectiveType === '2g' ||\n connection.saveData;\n\n return {\n type: connection.type || 'unknown',\n effectiveType: connection.effectiveType || '4g',\n downlink: connection.downlink || 10,\n rtt: connection.rtt || 50,\n isSlow,\n };\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Network detection failed', error);\n }\n\n return defaultNetwork;\n }\n\n private async getBatteryInfo(): Promise<PerformanceMetrics['battery']> {\n const defaultBattery: PerformanceMetrics['battery'] = {\n level: 100,\n charging: true,\n isLow: false,\n savePower: false,\n };\n\n if (!this.config.enableBatteryDetection) {\n return defaultBattery;\n }\n\n try {\n // @ts-ignore - Battery API\n const battery = await (navigator as any).getBattery?.();\n\n if (battery) {\n const level = Math.floor(battery.level * 100);\n const isLow = level < 20;\n const savePower = isLow && !battery.charging;\n\n return {\n level,\n charging: battery.charging,\n isLow,\n savePower,\n };\n }\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('Battery detection failed', error);\n }\n\n return defaultBattery;\n }\n\n private async getGPUInfo(): Promise<PerformanceMetrics['gpu']> {\n const defaultGPU: PerformanceMetrics['gpu'] = {\n renderer: 'unknown',\n vendor: 'unknown',\n tier: 'medium',\n maxTextureSize: 2048,\n supportsWebGL2: false,\n };\n\n if (!this.config.enableGPUDetection) {\n return defaultGPU;\n }\n\n try {\n const canvas = document.createElement('canvas');\n const gl2 = canvas.getContext('webgl2');\n const gl = gl2 || canvas.getContext('webgl');\n\n if (!gl) {\n return { ...defaultGPU, tier: 'low' };\n }\n\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n const renderer = debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : 'unknown';\n const vendor = debugInfo ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : 'unknown';\n const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\n const tier = this.assessGPUTier(renderer, maxTextureSize);\n\n return {\n renderer,\n vendor,\n tier,\n maxTextureSize,\n supportsWebGL2: !!gl2,\n };\n } catch (error) {\n getLogger('DeviceOptimizerPlugin').warn('GPU detection failed', error);\n return defaultGPU;\n }\n }\n\n private assessGPUTier(renderer: string, maxTextureSize: number): 'low' | 'medium' | 'high' {\n const rendererLower = renderer.toLowerCase();\n\n // High-end indicators\n if (\n rendererLower.includes('rtx') ||\n rendererLower.includes('gtx 1060') ||\n rendererLower.includes('rx 580') ||\n maxTextureSize >= 16384\n ) {\n return 'high';\n }\n\n // Low-end indicators\n if (\n (rendererLower.includes('intel') && rendererLower.includes('hd')) ||\n rendererLower.includes('mali-400') ||\n (rendererLower.includes('adreno') && !rendererLower.includes('6')) ||\n maxTextureSize < 4096\n ) {\n return 'low';\n }\n\n return 'medium';\n }\n\n /**\n * Calculate overall performance tier\n */\n private calculatePerformanceTier(): 'low' | 'medium' | 'high' {\n if (!this.deviceInfo || !this.metrics) return 'medium';\n\n let score = 0;\n\n // Platform weight (25%)\n if (this.deviceInfo.platform === 'desktop') score += 25;\n else if (this.deviceInfo.platform === 'tablet') score += 15;\n else score += 5;\n\n // Memory weight (25%)\n if (this.metrics.memory.tier === 'high') score += 25;\n else if (this.metrics.memory.tier === 'medium') score += 15;\n else score += 5;\n\n // GPU weight (25%)\n if (this.metrics.gpu.tier === 'high') score += 25;\n else if (this.metrics.gpu.tier === 'medium') score += 15;\n else score += 5;\n\n // Network weight (15%)\n if (this.metrics.network.effectiveType === '4g' && !this.metrics.network.isSlow) score += 15;\n else if (this.metrics.network.effectiveType === '3g') score += 10;\n else score += 3;\n\n // Battery weight (10%)\n if (!this.metrics.battery.isLow && !this.metrics.battery.savePower) score += 10;\n else if (!this.metrics.battery.isLow) score += 6;\n else score += 2;\n\n // Determine tier\n if (score >= 70) return 'high';\n if (score >= 40) return 'medium';\n return 'low';\n }\n\n private generateOptimizationSettings(): OptimizationSettings {\n const baseSettings = { ...this.defaultTierSettings[this.performanceTier] };\n\n // Calculate actual physical resolution\n const actualWidth = this.deviceInfo?.screen.width\n ? this.deviceInfo.screen.width * this.deviceInfo.screen.pixelRatio\n : 1920;\n const actualHeight = this.deviceInfo?.screen.height\n ? this.deviceInfo.screen.height * this.deviceInfo.screen.pixelRatio\n : 1080;\n\n getLogger('DeviceOptimizerPlugin').info('Screen Resolution Analysis', {\n cssViewport: `${this.deviceInfo?.screen.width}x${this.deviceInfo?.screen.height}`,\n pixelRatio: this.deviceInfo?.screen.pixelRatio,\n physicalResolution: `${actualWidth}x${actualHeight}`,\n diagonal: this.deviceInfo?.screen.diagonal,\n });\n\n\n // Platform-specific adjustments\n if (this.deviceInfo?.platform === 'mobile') {\n baseSettings.assetResolution = Math.min(baseSettings.assetResolution, 0.75);\n baseSettings.particleSettings.maxParticles = Math.floor(\n baseSettings.particleSettings.maxParticles * 0.6,\n );\n baseSettings.memoryLimits.maxAssetMemoryMB = Math.floor(\n baseSettings.memoryLimits.maxAssetMemoryMB * 0.7,\n );\n }\n\n // Resolution-based asset selection\n if (this.deviceInfo?.screen.pixelRatio && this.deviceInfo.screen.pixelRatio > 2) {\n if (this.performanceTier === 'high') {\n // High resolution displays need higher quality assets\n const physicalPixelCount = actualWidth * actualHeight;\n\n if (physicalPixelCount >= 3000000) {\n // ~1920x1560+ equivalent\n // Very high resolution - use 2x assets\n baseSettings.assetResolution = 2.0;\n baseSettings.assetSuffix = '@2x';\n } else if (physicalPixelCount >= 2000000) {\n // ~1414x1414+ equivalent\n // High resolution - use 1.5x or 2x assets\n baseSettings.assetResolution = this.deviceInfo.screen.pixelRatio >= 3.0 ? 2.0 : 1.5;\n baseSettings.assetSuffix = baseSettings.assetResolution >= 2.0 ? '@2x' : '@1.5x';\n } else {\n // Medium-high resolution - use 1x or 1.5x\n baseSettings.assetResolution = 1.0;\n baseSettings.assetSuffix = '@1x';\n }\n\n getLogger('DeviceOptimizerPlugin').info('Resolution-based asset selection', {\n physicalPixelCount,\n selectedResolution: baseSettings.assetResolution,\n selectedSuffix: baseSettings.assetSuffix,\n reasoning: `Physical resolution: ${actualWidth}x${actualHeight}`,\n });\n } else if (this.performanceTier === 'medium') {\n // Medium tier: More conservative, prioritize performance\n const physicalPixelCount = actualWidth * actualHeight;\n\n if (physicalPixelCount >= 2500000 && this.deviceInfo.screen.pixelRatio >= 3.0) {\n // Only use higher res for very high DPI medium devices\n baseSettings.assetResolution = 1.0;\n baseSettings.assetSuffix = '@1x';\n } else {\n // Stay at lower resolution for performance\n baseSettings.assetResolution = 0.5;\n baseSettings.assetSuffix = '@0.5x';\n }\n }\n }\n\n // Battery-based adjustments (override high resolution if needed)\n if (this.metrics?.battery.savePower) {\n // Power saving mode: reduce asset quality\n baseSettings.assetResolution = Math.min(baseSettings.assetResolution, 1.0);\n if (baseSettings.assetResolution <= 0.5) {\n baseSettings.assetSuffix = '@0.5x';\n } else {\n baseSettings.assetSuffix = '@1x';\n }\n\n baseSettings.targetFPS = 30;\n baseSettings.particleSettings.maxParticles = Math.floor(\n baseSettings.particleSettings.maxParticles * 0.5,\n );\n baseSettings.particleSettings.enableAdvancedEffects = false;\n }\n\n return baseSettings;\n }\n\n private applyForceOverrides(): void {\n if (!this.settings) return;\n\n if (this.config.forceResolution) {\n this.settings.assetResolution = this.config.forceResolution;\n this.settings.assetSuffix = `@${this.config.forceResolution}x`;\n }\n }\n\n private useFallbackSettings(): void {\n this.deviceInfo = {\n platform: isMobile.any ? 'mobile' : 'desktop',\n browser: { name: 'unknown', version: 'unknown' },\n os: { name: 'unknown', version: 'unknown' },\n screen: {\n width: window.screen?.width || 1920,\n height: window.screen?.height || 1080,\n pixelRatio: window.devicePixelRatio || 1,\n diagonal: 0,\n orientation: 'landscape',\n },\n };\n\n this.metrics = {\n memory: { totalMB: 4096, usedMB: 512, tier: 'medium' },\n network: { type: 'unknown', effectiveType: '4g', downlink: 10, rtt: 50, isSlow: false },\n battery: { level: 100, charging: true, isLow: false, savePower: false },\n gpu: {\n renderer: 'unknown',\n vendor: 'unknown',\n tier: 'medium',\n maxTextureSize: 2048,\n supportsWebGL2: false,\n },\n };\n\n this.performanceTier = 'medium';\n this.settings = { ...this.defaultTierSettings.medium };\n this.isInitialized = true;\n }\n\n private logDeviceInfo(): void {\n if (!this.deviceInfo || !this.metrics || !this.settings) return;\n\n console.group('🔍 Device Detection Results');\n console.log('Platform:', this.deviceInfo.platform);\n console.log('Browser:', `${this.deviceInfo.browser.name} ${this.deviceInfo.browser.version}`);\n console.log('OS:', `${this.deviceInfo.os.name} ${this.deviceInfo.os.version}`);\n console.log(\n 'Screen:',\n `${this.deviceInfo.screen.width}x${this.deviceInfo.screen.height} (${this.deviceInfo.screen.pixelRatio}x)`,\n );\n console.log('Performance Tier:', this.performanceTier);\n console.log('Asset Resolution:', this.settings.assetResolution);\n console.log('Max Particles:', this.settings.particleSettings.maxParticles);\n console.log('Memory Tier:', this.metrics.memory.tier);\n console.log('GPU Tier:', this.metrics.gpu.tier);\n console.groupEnd();\n }\n\n // Public API\n /**\n * Gets detected device information.\n *\n * @returns Device info or null if not yet initialized\n */\n public getDeviceInfo(): DeviceInfo | null {\n return this.deviceInfo;\n }\n\n /**\n * Gets gathered performance metrics.\n *\n * @returns Performance metrics or null if not yet initialized\n */\n public getMetrics(): PerformanceMetrics | null {\n return this.metrics;\n }\n\n /**\n * Gets calculated optimization settings.\n *\n * These settings are used by ResourcePlugin to determine asset loading strategy.\n *\n * @returns Optimization settings or null if not yet initialized\n */\n public getSettings(): OptimizationSettings | null {\n return this.settings;\n }\n\n /**\n * Gets the calculated performance tier.\n *\n * @returns Performance tier: 'low', 'medium', or 'high'\n */\n public getPerformanceTier(): 'low' | 'medium' | 'high' {\n return this.performanceTier;\n }\n\n /**\n * Gets the recommended asset resolution multiplier.\n *\n * @returns Resolution multiplier (e.g., 0.25, 0.5, 1.0, 2.0)\n */\n public getAssetResolution(): number {\n return this.settings?.assetResolution ?? 1.0;\n }\n\n public getAssetSuffix(): string {\n return this.settings?.assetSuffix ?? '@1x';\n }\n\n /**\n * Gets the optimal particle count for the current device.\n *\n * @param baseCount Base particle count\n * @returns Adjusted particle count\n */\n public getOptimalParticleCount(baseCount: number): number {\n const maxParticles = this.settings?.particleSettings.maxParticles ?? 200;\n const ratio = maxParticles / 200; // Normalize to base 200\n return Math.floor(baseCount * ratio);\n }\n\n /**\n * Checks if advanced particle effects are supported.\n *\n * @returns True if advanced effects are supported, false otherwise\n */\n public supportsAdvancedEffects(): boolean {\n return this.settings?.particleSettings.enableAdvancedEffects ?? true;\n }\n\n /**\n * Gets package loading preferences for ResourcePlugin.\n *\n * Returns a map of package names to preference values:\n * - -1: Disable package\n * - 0: Normal priority\n * - 1: Prefer package\n * - 2: High priority\n *\n * @returns Package preferences map\n */\n public getPackagePreferences(): Record<string, number> {\n return this.settings?.packagePreferences ?? {};\n }\n\n /**\n * Overrides optimization settings with custom values.\n *\n * @param overrides Custom optimization settings\n */\n public overrideSettings(overrides: Partial<OptimizationSettings>): void {\n if (this.settings) {\n this.settings = { ...this.settings, ...overrides };\n getLogger('DeviceOptimizerPlugin').debug('Settings overridden', overrides);\n }\n }\n\n public forceTier(tier: 'low' | 'medium' | 'high'): void {\n this.performanceTier = tier;\n this.settings = { ...this.defaultTierSettings[tier] };\n getLogger('DeviceOptimizerPlugin').debug(`Forced performance tier: ${tier}`);\n }\n\n [key: symbol]: any;\n}\n","import { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport { resolvePublicPath } from '../../helpers/resolvePublicPath';\nimport { Assets, detectWebp } from 'pixi.js';\nimport '@esotericsoftware/spine-pixi-v8';\nimport type {\n ResourcePluginConfig,\n AssetItem,\n AssetBundleState,\n LoadingProgress,\n LoadPriority,\n TextureFormat,\n SpinePackageConfig,\n SoundPackageConfig,\n} from './ResourcePlugin.types';\n\n/**\n * Asset loading and management plugin for PixiJS games.\n *\n * ResourcePlugin manages game assets with automatic resolution selection,\n * platform-specific loading, and priority-based strategies. It uses PixiJS\n * native features (isMobile, detectWebp) for device detection.\n *\n * ## Features\n *\n * - **Automatic Resolution Selection**: Based on devicePixelRatio\n * - **Platform-Specific Assets**: Desktop vs mobile asset variants\n * - **Priority-Based Loading**: Critical, high, medium, low priority bundles\n * - **Lazy Loading**: Load assets on-demand\n * - **WebP Support**: Automatic WebP format detection\n * - **Font Loading**: Integrated font asset management\n * - **Progress Tracking**: Per-bundle loading progress callbacks\n *\n * ## Asset Resolution Strategy\n *\n * Assets are organized in directories with resolution variants:\n * ```\n * /assets/graphics/\n * package-name/\n * package-name-0@0.25x.webp.json // Low quality\n * package-name-0@0.5x.webp.json // Medium quality\n * package-name-0@1x.webp.json // High quality\n * package-name-0@2x.webp.json // Ultra quality\n * ```\n *\n * @example\n * ```typescript\n * const resourcePlugin = new ResourcePlugin({\n * basePath: '/assets/graphics/',\n * devicePixelRatio: window.devicePixelRatio,\n * bundles: [\n * {\n * name: 'ui',\n * packages: ['buttons', 'icons'],\n * priority: 0 // Critical\n * },\n * {\n * name: 'game',\n * packages: ['symbols', 'backgrounds'],\n * priority: 1, // High\n * isLazy: false\n * }\n * ]\n * });\n *\n * engine.registerPlugin(resourcePlugin);\n * await engine.initialize();\n *\n * // Load critical assets\n * await resourcePlugin.loadCriticalAssets();\n *\n * // Load all non-lazy bundles\n * await resourcePlugin.preloadAssets();\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class ResourcePlugin implements EnginePlugin {\n public name: string = 'resourcePlugin';\n public priority: number = 50;\n public dependencies: string[] = [];\n\n private config: ResourcePluginConfig;\n private engine!: PixiEngine;\n private isInitialized = false;\n\n // Asset management state\n private bundleStates: Map<string, AssetBundleState> = new Map();\n private manifest: Record<string, AssetItem[]> = {};\n private resolution: number = 1.0;\n private resolutionSuffix!: string;\n private textureFormat: TextureFormat = 'png';\n\n /** Sound alias -> channel mapping collected from bundle configs */\n private _soundChannelMappings: Map<string, string> = new Map();\n\n constructor(config: ResourcePluginConfig) {\n this.config = {\n basePath: resolvePublicPath('assets/graphics/'),\n spineBasePath: resolvePublicPath('assets/spine/'),\n audioBasePath: resolvePublicPath('assets/sounds/'),\n availableResolutions: [0.25, 0.5, 1.0, 2.0],\n availableTextureFormats: ['png', 'webp'],\n ...config,\n };\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n this.engine = engine;\n\n // 2. Texture format detection\n const deviceSupportsWebP = await detectWebp.test();\n const gameHasWebP = this.config.availableTextureFormats?.includes('webp') ?? true;\n this.textureFormat = (deviceSupportsWebP && gameHasWebP) ? 'webp' : 'png';\n\n // 3. Resolution calculation\n this.resolution = this.calculateOptimalResolution(this.engine.devicePixelRatio, this.engine.platform, this.config.forceResolution);\n this.resolutionSuffix = `@${this.resolution}x`;\n\n // 4. Generate manifest\n this.generateManifest();\n\n // 5. Initialize PixiJS Assets\n this.initializePixiAssets();\n\n this.isInitialized = true;\n\n getLogger('ResourcePlugin').info('ResourcePlugin initialized', {\n platform: this.engine.platform,\n resolution: this.resolution,\n textureFormat: this.textureFormat,\n bundles: this.config.bundles.length,\n });\n }\n\n public onReady(engine: PixiEngine): void {\n getLogger('ResourcePlugin').debug('ResourcePlugin is ready');\n }\n\n /**\n * Calculates optimal asset resolution based on device screen size and DPR.\n * Uses diagonal ratio between device physical resolution and design resolution (1920x1080).\n *\n * Formula: requiredScale = deviceDiagonal / designDiagonal\n *\n * Strategy:\n * - Mobile: Round DOWN to nearest available resolution (performance priority)\n * - Desktop: Round UP to nearest available resolution (quality priority)\n *\n * @param dpr - Device pixel ratio\n * @param platform - 'mobile' or 'desktop'\n * @param forceResolution - Optional forced scale value (bypasses diagonal calculation)\n */\n private calculateOptimalResolution(dpr: number, platform: string, forceResolution?: number): number {\n const available = this.config.availableResolutions!;\n const sortedAvailable = [...available].sort((a, b) => a - b);\n\n // Design resolution (asset'lerin hazırlandığı çözünürlük)\n const designWidth = 1920;\n const designHeight = 1080;\n const designDiagonal = Math.sqrt(designWidth ** 2 + designHeight ** 2); // ~2202.9\n\n // Device physical resolution (logical × DPR)\n const screenWidth = window.screen.width * dpr;\n const screenHeight = window.screen.height * dpr;\n const deviceDiagonal = Math.sqrt(screenWidth ** 2 + screenHeight ** 2);\n\n let requiredScale: number;\n if (forceResolution !== undefined) {\n // Force resolution: bypass diagonal calculation\n requiredScale = forceResolution;\n } else {\n // Calculate required scale based on diagonal ratio\n requiredScale = deviceDiagonal / designDiagonal;\n }\n\n let optimalResolution: number;\n if (platform === 'mobile') {\n // Mobile: Round DOWN - smaller asset, better performance\n // Find largest resolution that is <= requiredScale\n optimalResolution = sortedAvailable.reduce((prev, curr) =>\n curr <= requiredScale ? curr : prev\n , sortedAvailable[0]);\n } else {\n // Desktop: Round UP - larger asset, better quality\n // Find smallest resolution that is >= requiredScale\n optimalResolution = sortedAvailable.reduce((prev, curr) =>\n curr >= requiredScale && curr < prev ? curr : prev\n , sortedAvailable[sortedAvailable.length - 1]);\n }\n\n getLogger('ResourcePlugin').debug('Resolution calculation', {\n screenSize: `${window.screen.width}x${window.screen.height}`,\n physicalSize: `${screenWidth}x${screenHeight}`,\n dpr,\n deviceDiagonal: deviceDiagonal.toFixed(1),\n designDiagonal: designDiagonal.toFixed(1),\n requiredScale: requiredScale.toFixed(3),\n forceResolution: forceResolution ?? 'none',\n platform,\n selectedResolution: optimalResolution,\n });\n\n return optimalResolution;\n }\n\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public cleanup(): void {\n Assets.reset();\n this.bundleStates.clear();\n this.isInitialized = false;\n getLogger('ResourcePlugin').info('ResourcePlugin cleaned up');\n }\n\n\n /**\n * Check if a package config is a Spine package\n */\n private isSpinePackage(pkg: unknown): pkg is SpinePackageConfig {\n return typeof pkg === 'object' && pkg !== null && 'type' in pkg && (pkg as SpinePackageConfig).type === 'spine';\n }\n\n /**\n * Check if a package config is a Sound package\n */\n private isSoundPackage(pkg: unknown): pkg is SoundPackageConfig {\n return typeof pkg === 'object' && pkg !== null && 'type' in pkg && (pkg as SoundPackageConfig).type === 'sound';\n }\n\n private generateManifest(): void {\n const manifest: Record<string, AssetItem[]> = {};\n\n this.config.bundles.forEach((bundle) => {\n const assets: AssetItem[] = [];\n\n bundle.packages.forEach((pkg) => {\n // Handle Spine packages separately\n if (this.isSpinePackage(pkg)) {\n const spineAssets = this.generateSpineAssets(pkg);\n if (spineAssets) {\n assets.push(...spineAssets);\n }\n return;\n }\n\n // Handle Sound packages separately\n if (this.isSoundPackage(pkg)) {\n const soundAsset = this.generateSoundAsset(pkg);\n if (soundAsset) {\n assets.push(soundAsset);\n }\n return;\n }\n\n const packageName = typeof pkg === 'string' ? pkg : pkg.name;\n const alias = typeof pkg === 'string' ? pkg : pkg.alias || pkg.name;\n const hasResolutions = typeof pkg === 'string' ? true : (pkg.hasResolutions ?? true);\n const platform = typeof pkg === 'string' ? 'both' : (pkg.platform ?? 'both');\n\n // Check if package should be loaded on current platform\n if (!this.shouldLoadPackage(platform)) {\n getLogger('ResourcePlugin').debug(`Skipping package: ${packageName} (platform: ${platform}, current: ${this.engine.platform})`);\n return;\n }\n\n // Generate asset URL based on resolution support\n const src = this.generateAssetURL(packageName, hasResolutions);\n assets.push({ alias, src });\n\n getLogger('ResourcePlugin').debug(`Package: ${packageName}, URL: ${src}`);\n });\n\n if (assets.length > 0) {\n manifest[bundle.name] = assets;\n this.bundleStates.set(bundle.name, {\n name: bundle.name,\n status: 'pending',\n priority: (bundle.priority ?? 2) as LoadPriority,\n assets,\n });\n }\n });\n\n // Add fonts if configured\n if (this.config.fonts && this.config.fonts.length > 0) {\n const fontAssets: AssetItem[] = this.config.fonts.map((font) => ({\n alias: font.alias,\n src: font.src,\n data: font.data,\n }));\n\n manifest['fonts'] = fontAssets;\n this.bundleStates.set('fonts', {\n name: 'fonts',\n status: 'pending',\n priority: 0,\n assets: fontAssets,\n });\n\n getLogger('ResourcePlugin').debug('Fonts added to manifest', fontAssets);\n }\n\n this.manifest = manifest;\n getLogger('ResourcePlugin').debug('Asset manifest generated', { bundles: Object.keys(manifest) });\n }\n\n /**\n * Check if a package should be loaded on current platform\n */\n private shouldLoadPackage(packagePlatform: 'desktop' | 'mobile' | 'both'): boolean {\n if (packagePlatform === 'both') {\n return true;\n }\n return packagePlatform === this.engine.platform;\n }\n\n /**\n * Generate asset URL based on resolution support and texture format.\n */\n private generateAssetURL(packageName: string, hasResolutions: boolean): string {\n const basePath = this.config.basePath;\n const formatExtension = `.${this.textureFormat}`;\n\n if (hasResolutions) {\n // Standard resolution-aware assets: packageName-0@1x.webp.json\n return `${basePath}${packageName}/${packageName}-0${this.resolutionSuffix}${formatExtension}.json`;\n } else {\n // Static assets without resolution variants: packageName-0.webp.json\n return `${basePath}${packageName}/${packageName}-0${formatExtension}.json`;\n }\n }\n\n /**\n * Generate Spine asset URLs (skeleton + atlas) with resolution support.\n *\n * @param pkg - Spine package configuration\n * @returns Array of AssetItems for skeleton and atlas, or null if platform doesn't match\n */\n private generateSpineAssets(pkg: SpinePackageConfig): AssetItem[] | null {\n const platform = pkg.platform ?? 'both';\n\n // Check if package should be loaded on current platform\n if (!this.shouldLoadPackage(platform)) {\n getLogger('ResourcePlugin').debug(`Skipping Spine package: ${pkg.name} (platform: ${platform}, current: ${this.engine.platform})`);\n return null;\n }\n\n const spineBasePath = this.config.spineBasePath ?? resolvePublicPath('assets/spine/');\n const alias = pkg.alias ?? pkg.name;\n const hasResolutions = pkg.hasResolutions ?? true;\n const skeletonFormat = pkg.skeletonFormat ?? 'skel';\n\n // Skeleton URL (no resolution variants - skeleton is resolution-independent)\n const skeletonSrc = `${spineBasePath}${pkg.name}.${skeletonFormat}`;\n\n // Atlas URL (with resolution variants if enabled)\n const atlasSrc = hasResolutions\n ? `${spineBasePath}${pkg.name}${this.resolutionSuffix}.atlas`\n : `${spineBasePath}${pkg.name}.atlas`;\n\n const assets: AssetItem[] = [\n { alias: alias, src: skeletonSrc },\n { alias: `${alias}-atlas`, src: atlasSrc },\n ];\n\n getLogger('ResourcePlugin').debug(`Spine package: ${pkg.name}`, {\n skeleton: skeletonSrc,\n atlas: atlasSrc,\n aliases: [alias, `${alias}-atlas`],\n });\n\n return assets;\n }\n\n /**\n * Generate Sound asset URL with format fallback support.\n *\n * @param pkg - Sound package configuration\n * @returns AssetItem for the sound, or null if platform doesn't match\n */\n private generateSoundAsset(pkg: SoundPackageConfig): AssetItem | null {\n const platform = pkg.platform ?? 'both';\n\n // Check if package should be loaded on current platform\n if (!this.shouldLoadPackage(platform)) {\n getLogger('ResourcePlugin').debug(`Skipping Sound package: ${pkg.name} (platform: ${platform}, current: ${this.engine.platform})`);\n return null;\n }\n\n const audioBasePath = this.config.audioBasePath ?? resolvePublicPath('assets/sounds/');\n const alias = pkg.alias ?? pkg.name;\n\n // Use direct src if provided, otherwise auto-generate from audioBasePath + name\n const src = pkg.src\n ? `${audioBasePath}${pkg.src}`\n : `${audioBasePath}${pkg.name}.{ogg,mp3}`;\n\n getLogger('ResourcePlugin').debug(`Sound package: ${pkg.name}`, {\n src,\n alias,\n channel: pkg.channel,\n });\n\n // Store channel mapping for SoundPlugin to consume\n if (pkg.channel) {\n this._soundChannelMappings.set(alias, pkg.channel);\n }\n\n return { alias, src };\n }\n\n /**\n * Returns sound alias -> channel mappings collected from bundle configs.\n */\n public get soundChannelMappings(): ReadonlyMap<string, string> {\n return this._soundChannelMappings;\n }\n\n private initializePixiAssets(): void {\n Object.entries(this.manifest).forEach(([bundleName, assets]) => {\n const bundleAssets = assets.reduce(\n (acc, asset) => {\n if (bundleName === 'fonts') {\n acc[asset.alias] = { src: asset.src, data: asset.data };\n } else {\n acc[asset.alias] = asset.src;\n }\n return acc;\n },\n {} as Record<string, any>,\n );\n\n Assets.addBundle(bundleName, bundleAssets);\n });\n\n getLogger('ResourcePlugin').debug('PixiJS Assets initialized', { bundles: Object.keys(this.manifest) });\n }\n\n /**\n * Loads a specific asset bundle.\n *\n * @param bundleName - Name of the bundle to load\n * @param onProgress - Optional progress callback\n * @throws Error if bundle not found\n *\n * @example\n * ```typescript\n * await resourcePlugin.loadBundle('ui', (progress) => {\n * console.log(`Loading: ${progress.percentage}%`);\n * });\n * ```\n */\n public async loadBundle(\n bundleName: string,\n onProgress?: (progress: LoadingProgress) => void,\n globalContext?: { bundleIndex: number; totalBundles: number },\n ): Promise<void> {\n const bundleState = this.bundleStates.get(bundleName);\n\n if (!bundleState) {\n throw new Error(`Bundle not found: ${bundleName}`);\n }\n\n if (bundleState.status === 'loaded') {\n return;\n }\n\n const bundleIndex = globalContext?.bundleIndex ?? 0;\n const totalBundles = globalContext?.totalBundles ?? 1;\n\n try {\n bundleState.status = 'loading';\n this.bundleStates.set(bundleName, bundleState);\n\n await Assets.loadBundle(bundleName, (progress) => {\n if (onProgress) {\n const globalPercentage = (bundleIndex + progress) / totalBundles;\n onProgress({\n bundleName,\n loaded: Math.floor(progress * bundleState.assets.length),\n total: bundleState.assets.length,\n percentage: progress,\n globalPercentage,\n bundleIndex,\n totalBundles,\n });\n }\n });\n\n bundleState.status = 'loaded';\n this.bundleStates.set(bundleName, bundleState);\n\n getLogger('ResourcePlugin').debug(`Bundle loaded: ${bundleName}`);\n } catch (error) {\n bundleState.status = 'error';\n bundleState.error = error as Error;\n this.bundleStates.set(bundleName, bundleState);\n\n getLogger('ResourcePlugin').error(`Failed to load bundle: ${bundleName}`, error);\n throw error;\n }\n }\n\n /**\n * Loads all critical priority assets (priority 0).\n *\n * Should be called during initial loading screen before game starts.\n *\n * @param onProgress - Optional progress callback\n */\n public async loadCriticalAssets(onProgress?: (progress: LoadingProgress) => void): Promise<void> {\n const criticalBundles = Array.from(this.bundleStates.values())\n .filter((bundle) => bundle.priority === 0)\n .map((bundle) => bundle.name);\n\n const totalBundles = criticalBundles.length;\n for (let i = 0; i < criticalBundles.length; i++) {\n await this.loadBundle(criticalBundles[i], onProgress, { bundleIndex: i, totalBundles });\n }\n }\n\n /**\n * Preloads all non-lazy bundles.\n *\n * Loads all bundles that are not marked as lazy, typically called\n * after critical assets are loaded.\n *\n * @param onProgress - Optional progress callback\n */\n public async preloadAssets(onProgress?: (progress: LoadingProgress) => void): Promise<void> {\n const nonLazyBundles = this.config.bundles\n .filter((bundle) => !bundle.isLazy)\n .map((bundle) => bundle.name);\n\n const totalBundles = nonLazyBundles.length;\n for (let i = 0; i < nonLazyBundles.length; i++) {\n await this.loadBundle(nonLazyBundles[i], onProgress, { bundleIndex: i, totalBundles });\n }\n }\n\n /**\n * Checks if a bundle has been loaded.\n *\n * @param bundleName - Name of the bundle\n * @returns True if loaded, false otherwise\n */\n public isBundleLoaded(bundleName: string): boolean {\n const state = this.bundleStates.get(bundleName);\n return state?.status === 'loaded' || false;\n }\n\n /**\n * Returns the count of critical bundles (priority 0).\n */\n public getCriticalBundleCount(): number {\n return Array.from(this.bundleStates.values())\n .filter((bundle) => bundle.priority === 0).length;\n }\n\n /**\n * Returns the count of non-lazy bundles to preload.\n */\n public getPreloadBundleCount(): number {\n return this.config.bundles\n .filter((bundle) => !bundle.isLazy).length;\n }\n\n [key: symbol]: any;\n}\n","import { getLogger } from '../../utils/Logger';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport type { DisplayPluginConfig, OrientationConfig, DisplayEvents, DisplayResizeData } from './DisplayPlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\nimport { EventEmitter } from 'pixi.js';\n\n/**\n * Display management plugin for PixiJS games.\n *\n * DisplayPlugin handles responsive canvas scaling and positioning, maintaining a fixed\n * design resolution while adapting to different window sizes and aspect ratios.\n *\n * ## Features\n *\n * - **Fixed Design Resolution**: Work with consistent logical coordinates\n * - **Responsive Scaling**: Automatically scales to fit any window size\n * - **Aspect Ratio Preservation**: Maintains design proportions\n * - **Flexible Alignment**: Position game canvas anywhere in the window\n * - **Scale Modes**: Contain (letterbox) or cover (fill) options\n * - **Automatic Resize Handling**: Responds to window size changes\n *\n * ## Scaling Behavior\n *\n * ### Contain Mode (default)\n * Fits the entire game within the window, adding letterboxing or pillarboxing if needed.\n * Ensures all content is visible but may leave empty space.\n *\n * ### Cover Mode\n * Fills the entire window, potentially cropping content at the edges.\n * No empty space but some content may be off-screen.\n *\n * ## Design Resolution\n *\n * The plugin uses a fixed design resolution (e.g., 1920x1080) that your game is built for.\n * All game objects use these logical coordinates. The plugin handles scaling to physical pixels.\n *\n * @example\n * ```typescript\n * // Standard 1080p design resolution\n * const displayPlugin = new DisplayPlugin({\n * width: 1920,\n * height: 1080,\n * scaleMode: 'contain',\n * alignment: 'center'\n * });\n *\n * engine.registerPlugin(displayPlugin);\n * await engine.initialize();\n *\n * // Your game objects use logical coordinates\n * sprite.position.set(960, 540); // Center of 1920x1080\n * ```\n *\n * @example\n * ```typescript\n * // Mobile-optimized vertical layout\n * const displayPlugin = new DisplayPlugin({\n * width: 720,\n * height: 1280,\n * scaleMode: 'contain',\n * alignment: 'center'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Cover mode for full-screen games\n * const displayPlugin = new DisplayPlugin({\n * width: 1920,\n * height: 1080,\n * scaleMode: 'cover', // Fill entire window\n * alignment: 'center'\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class DisplayPlugin extends EventEmitter<DisplayEvents> implements EnginePlugin {\n public name: string = 'displayPlugin';\n public priority: number = 900; // Plugin that will be processed last\n\n /**\n * No dependencies - this is a core display plugin\n */\n public dependencies: string[] = [];\n\n private _designWidth: number;\n private _designHeight: number;\n private _engine: PixiEngine | null = null;\n private config: DisplayPluginConfig;\n private isInitialized = false;\n private _currentOrientation: 'landscape' | 'portrait' = 'landscape';\n private _activeConfig: OrientationConfig;\n private _lastResizeData: DisplayResizeData | null = null;\n\n /**\n * Creates a new DisplayPlugin instance.\n *\n * @param config - Display configuration options\n *\n * @example\n * ```typescript\n * const displayPlugin = new DisplayPlugin({\n * width: 1920,\n * height: 1080,\n * scaleMode: 'contain',\n * alignment: 'center',\n * debug: true\n * });\n * ```\n */\n constructor(config: DisplayPluginConfig) {\n super();\n\n this.config = config;\n\n // Use customized priority value if provided\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use customized name value if provided\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n\n // Initialize with landscape config as default\n this._activeConfig = this.config.landscape;\n this._designWidth = this._activeConfig.width;\n this._designHeight = this._activeConfig.height;\n }\n\n /**\n * Detects orientation based on width/height ratio.\n * @param width - Window width\n * @param height - Window height\n * @returns 'landscape' if width >= height, 'portrait' otherwise\n */\n private detectOrientation(width: number, height: number): 'landscape' | 'portrait' {\n return width >= height ? 'landscape' : 'portrait';\n }\n\n /**\n * Gets the active configuration based on current orientation.\n * Falls back to landscape config if portrait is not defined.\n */\n private getActiveConfig(orientation: 'landscape' | 'portrait'): OrientationConfig {\n if (orientation === 'portrait') {\n if (this.config.portrait) {\n return this.config.portrait;\n }\n getLogger('DisplayPlugin').warn('Portrait config not defined, falling back to landscape config');\n return this.config.landscape;\n }\n return this.config.landscape;\n }\n\n /**\n * Gets the current orientation.\n */\n public get orientation(): 'landscape' | 'portrait' {\n return this._currentOrientation;\n }\n\n /**\n * Initializes the DisplayPlugin.\n *\n * Sets up canvas styles and prepares for resize handling.\n * Called automatically by PixiEngine during plugin initialization.\n *\n * @param engine - PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n this._engine = engine;\n\n // Configure document and body styles\n\n // Configure basic canvas styles - operations that should be done only once\n const canvas = this._engine.pixiApp.canvas;\n if (canvas) {\n canvas.style.display = 'block';\n canvas.style.margin = '0';\n canvas.style.padding = '0';\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n getLogger('DisplayPlugin').debug('Canvas styles applied', canvas);\n\n }\n\n this.isInitialized = true;\n\n // onResize will be triggered by PixiEngine\n getLogger('DisplayPlugin').info('DisplayPlugin initialized with app:', this._engine.pixiApp);\n\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n getLogger('DisplayPlugin').debug('DisplayPlugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized && this._engine !== null;\n }\n\n /**\n * Handles window resize events.\n *\n * Calculates optimal scale and position for the game canvas based on the new window size,\n * design resolution, scale mode, and alignment settings.\n *\n * @param width - New window width in pixels\n * @param height - New window height in pixels\n * @returns True if resize was handled (prevents other plugins from handling)\n *\n * @remarks\n * This method is called automatically by PixiEngine when the window resizes.\n * It calculates the scale factor, applies it to the stage, and positions the canvas\n * according to the alignment setting.\n */\n [ENGINE_HOOKS.onResize](width: number, height: number, resolution: number): boolean {\n if (!this._engine || !this.isInitialized) {\n getLogger('DisplayPlugin').warn('Resize called but engine is not initialized yet');\n return false;\n }\n\n // Detect orientation and get active config\n const newOrientation = this.detectOrientation(width, height);\n if (newOrientation !== this._currentOrientation) {\n const oldOrientation = this._currentOrientation;\n this._currentOrientation = newOrientation;\n this._activeConfig = this.getActiveConfig(newOrientation);\n this._designWidth = this._activeConfig.width;\n this._designHeight = this._activeConfig.height;\n\n // Emit orientation change event\n this.emit('display:orientationChange', {\n oldOrientation,\n newOrientation,\n });\n\n getLogger('DisplayPlugin').debug('Orientation changed', {\n orientation: newOrientation,\n designWidth: this._designWidth,\n designHeight: this._designHeight,\n });\n }\n\n // ============================================\n // STEP 1: Clamp window dimensions to supported aspect ratio range\n // Creates a \"clamped area\" that is always centered on screen\n // ============================================\n const aspectRatioRange = this._activeConfig.aspectRatioRange;\n const currentRatio = width / height;\n let clampedWidth = width;\n let clampedHeight = height;\n\n if (aspectRatioRange) {\n const clampedRatio = Math.max(aspectRatioRange.min, Math.min(aspectRatioRange.max, currentRatio));\n\n if (currentRatio !== clampedRatio) {\n if (currentRatio < clampedRatio) {\n // Too narrow - reduce height to match min ratio\n clampedHeight = width / clampedRatio;\n } else {\n // Too wide - reduce width to match max ratio\n clampedWidth = height * clampedRatio;\n }\n\n getLogger('DisplayPlugin').debug('Aspect ratio clamped', {\n currentRatio,\n clampedRatio,\n originalWidth: width,\n originalHeight: height,\n clampedWidth,\n clampedHeight,\n });\n\n }\n }\n\n // Calculate offset to center the clamped area on screen\n const offsetX = Math.floor((width - clampedWidth) / 2);\n const offsetY = Math.floor((height - clampedHeight) / 2);\n\n // ============================================\n // STEP 2: Calculate scale based on clamped dimensions\n // ============================================\n let scaleX = clampedWidth / this._designWidth;\n let scaleY = clampedHeight / this._designHeight;\n const scaleMode = this._activeConfig.scaleMode || 'contain';\n\n // Apply safe area constraints for safe mode (using clamped dimensions)\n if (scaleMode === 'safe' && this._activeConfig.safeArea) {\n const safeArea = this._activeConfig.safeArea;\n const safeTop = safeArea.top || 0;\n const safeRight = safeArea.right || 0;\n const safeBottom = safeArea.bottom || 0;\n const safeLeft = safeArea.left || 0;\n\n // Calculate the safe area dimensions\n const safeWidth = this._designWidth - safeLeft - safeRight;\n const safeHeight = this._designHeight - safeTop - safeBottom;\n\n // Calculate scale that ensures safe area fits within clamped viewport\n const safeScaleX = clampedWidth / safeWidth;\n const safeScaleY = clampedHeight / safeHeight;\n\n // Use the minimum scale to ensure safe area is never cropped\n const safeScale = Math.min(safeScaleX, safeScaleY);\n\n // Use the safe scale as maximum allowed scale in cover mode\n scaleX = Math.min(scaleX, safeScale);\n scaleY = Math.min(scaleY, safeScale);\n\n getLogger('DisplayPlugin').debug('Safe area constraints applied', {\n safeArea,\n safeWidth,\n safeHeight,\n safeScale,\n adjustedScaleX: scaleX,\n adjustedScaleY: scaleY,\n });\n\n }\n\n const scale = scaleMode === 'contain' ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\n\n // ============================================\n // STEP 3: Calculate stage position within clamped area\n // Stage is positioned according to alignment WITHIN the clamped area\n // Then offset is added to center the clamped area on screen\n // ============================================\n const scaledWidth = Math.floor(this._designWidth * scale);\n const scaledHeight = Math.floor(this._designHeight * scale);\n\n // Apply scale\n this._engine.pixiApp.stage.scale.set(scale);\n\n // Calculate position within clamped area based on alignment\n let left = 0;\n let top = 0;\n const alignment = this._activeConfig.alignment || 'center';\n\n switch (alignment) {\n case 'center':\n left = Math.floor((clampedWidth - scaledWidth) / 2);\n top = Math.floor((clampedHeight - scaledHeight) / 2);\n break;\n case 'top':\n left = Math.floor((clampedWidth - scaledWidth) / 2);\n top = 0;\n break;\n case 'bottom':\n left = Math.floor((clampedWidth - scaledWidth) / 2);\n top = clampedHeight - scaledHeight;\n break;\n case 'left':\n left = 0;\n top = Math.floor((clampedHeight - scaledHeight) / 2);\n break;\n case 'right':\n left = clampedWidth - scaledWidth;\n top = Math.floor((clampedHeight - scaledHeight) / 2);\n break;\n case 'top-left':\n left = 0;\n top = 0;\n break;\n case 'top-right':\n left = clampedWidth - scaledWidth;\n top = 0;\n break;\n case 'bottom-left':\n left = 0;\n top = clampedHeight - scaledHeight;\n break;\n case 'bottom-right':\n left = clampedWidth - scaledWidth;\n top = clampedHeight - scaledHeight;\n break;\n }\n\n // Resize renderer with actual window size\n this._engine.pixiApp.renderer.resize(width, height, resolution);\n\n // Position stage: offset (to center clamped area) + alignment position\n this._engine.pixiApp.stage.position.set(offsetX + left, offsetY + top);\n\n const uiViewportLeftX = -left / scale;\n const uiViewportTopY = -top / scale;\n const uiViewportRightX = (clampedWidth - left) / scale;\n const uiViewportBottomY = (clampedHeight - top) / scale;\n\n // Cache and emit resize event\n this._lastResizeData = {\n designWidth: this._designWidth,\n designHeight: this._designHeight,\n windowWidth: width,\n windowHeight: height,\n width: clampedWidth,\n height: clampedHeight,\n scale,\n left,\n top,\n offsetX,\n offsetY,\n resolution,\n orientation: this._currentOrientation,\n uiViewportLeftX,\n uiViewportTopY,\n uiViewportRightX,\n uiViewportBottomY,\n };\n this.emit('display:resize', this._lastResizeData);\n\n\n getLogger('DisplayPlugin').debug('DisplayPlugin resized', {\n orientation: this._currentOrientation,\n windowWidth: width,\n windowHeight: height,\n clampedWidth,\n clampedHeight,\n scaledWidth,\n scaledHeight,\n scale,\n offsetX,\n offsetY,\n alignmentLeft: left,\n alignmentTop: top,\n });\n\n\n // This plugin handled the resize; prevent other plugins or the engine from resizing\n return true;\n }\n\n /**\n * Gets the design width.\n *\n * @returns Design width in logical pixels\n *\n * @example\n * ```typescript\n * const centerX = displayPlugin.width / 2; // 960 for 1920x1080\n * ```\n */\n public get width(): number {\n return this._designWidth;\n }\n\n /**\n * Gets the design height.\n *\n * @returns Design height in logical pixels\n *\n * @example\n * ```typescript\n * const centerY = displayPlugin.height / 2; // 540 for 1920x1080\n * ```\n */\n public get height(): number {\n return this._designHeight;\n }\n\n /**\n * Gets the last resize data.\n * Useful for getting current display state without waiting for resize event.\n *\n * @returns Last resize data or null if not yet resized\n */\n public getLastResizeData() {\n return this._lastResizeData;\n }\n\n /**\n * Gets the current fullscreen state.\n *\n * @returns True if the document is in fullscreen mode\n */\n public get isFullscreen(): boolean {\n return document.fullscreenElement !== null;\n }\n\n /**\n * Toggles fullscreen mode using the Browser Fullscreen API.\n *\n * @param state - Optional. If true, enters fullscreen. If false, exits fullscreen.\n * If not provided, toggles the current state.\n * @returns Promise that resolves when the fullscreen state change is complete\n *\n * @example\n * ```typescript\n * // Toggle fullscreen\n * await displayPlugin.toggleFullscreen();\n *\n * // Enter fullscreen\n * await displayPlugin.toggleFullscreen(true);\n *\n * // Exit fullscreen\n * await displayPlugin.toggleFullscreen(false);\n * ```\n */\n public async toggleFullscreen(state?: boolean): Promise<void> {\n const shouldBeFullscreen = state ?? !this.isFullscreen;\n\n try {\n if (shouldBeFullscreen && !this.isFullscreen) {\n await document.documentElement.requestFullscreen();\n this.emit('display:fullscreenChange', { isFullscreen: true });\n getLogger('DisplayPlugin').debug('Entered fullscreen mode');\n } else if (!shouldBeFullscreen && this.isFullscreen) {\n await document.exitFullscreen();\n this.emit('display:fullscreenChange', { isFullscreen: false });\n getLogger('DisplayPlugin').debug('Exited fullscreen mode');\n }\n } catch (error) {\n getLogger('DisplayPlugin').error('Fullscreen toggle failed', error);\n throw error;\n }\n }\n\n /**\n * Cleanup the plugin\n */\n public cleanup(): void {\n this._engine = null;\n this.isInitialized = false;\n getLogger('DisplayPlugin').info('DisplayPlugin cleaned up');\n }\n\n /**\n * Plugin update process\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // Nothing to update\n return false;\n }\n\n [key: symbol]: any;\n}\n\n// Re-export types for documentation\nexport type { DisplayPluginConfig, DisplayEvents, DisplayResizeData } from './DisplayPlugin.types';\n","import type { DisplayResizeData } from './DisplayPlugin.types';\n\nexport interface DesignViewportRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** Maps DisplayPlugin clamp geometry to a rectangle in design coordinates. */\nexport function computeDesignViewportRect(data: DisplayResizeData): DesignViewportRect {\n const viewportLeft = data.uiViewportLeftX ?? -data.left / data.scale;\n const viewportTop = data.uiViewportTopY ?? -data.top / data.scale;\n\n return {\n x: viewportLeft,\n y: viewportTop,\n width: data.width / data.scale,\n height: data.height / data.scale,\n };\n}\n","import { EventEmitter } from 'pixi.js';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\nimport type { PixiEngine } from '../../engine/PixiEngine';\nimport type { EventResult, EngineEvents } from './EventBusPlugin.types';\nimport { getLogger } from '../../utils/Logger';\n\nexport class EventBusPlugin<TEvents extends EngineEvents = EngineEvents>\n extends EventEmitter<TEvents>\n implements EnginePlugin {\n public readonly name = 'eventBusPlugin';\n public readonly priority = 5;\n\n\n constructor() {\n super();\n }\n\n async initialize(_engine: PixiEngine): Promise<void> {\n getLogger('EventBusPlugin').debug('Initialized');\n }\n\n [ENGINE_HOOKS.onEngineReady](_engine: PixiEngine): void {\n (this.emit as any)('engine:ready' as any);\n getLogger('EventBusPlugin').debug('Engine ready event emitted');\n }\n\n [ENGINE_HOOKS.onPause](_engine: PixiEngine): void {\n (this.emit as any)('engine:pause' as any);\n getLogger('EventBusPlugin').debug('Engine pause event emitted');\n }\n\n [ENGINE_HOOKS.onResume](_engine: PixiEngine): void {\n (this.emit as any)('engine:resume' as any);\n getLogger('EventBusPlugin').debug('Engine resume event emitted');\n }\n\n [ENGINE_HOOKS.onResize](width: number, height: number): boolean {\n (this.emit as any)('engine:resize' as any, width, height);\n getLogger('EventBusPlugin').debug(`Engine resize event emitted: ${width}x${height}`);\n return true;\n }\n\n cleanup(): void {\n this.removeAllListeners();\n getLogger('EventBusPlugin').debug('Cleaned up');\n }\n\n // emit<T extends keyof TEvents>(\n // event: T,\n // ...args: TEvents[T] extends (...args: any[]) => any ? Parameters<TEvents[T]> : never\n // ): boolean;\n // emit(event: string | symbol, ...args: any[]): boolean;\n // emit(event: string | symbol, ...args: any[]): boolean {\n // getLogger('EventBusPlugin').debug(`emit: ${event as string}`, args);\n // return super.emit(event as any, ...(args as any));\n // }\n emit<T extends EventEmitter.EventNames<TEvents>>(event: T, ...args: Parameters<EventEmitter.EventListener<TEvents, T>>): boolean {\n getLogger('EventBusPlugin').debug(`emit: ${event as string}`, args);\n return super.emit(event as any, ...(args as any));\n }\n\n\n // async emitAsync<T extends keyof TEvents>(\n // event: T,\n // ...args: TEvents[T] extends (...args: any[]) => any ? Parameters<TEvents[T]> : never\n // ): Promise<void>\n async emitAsync<T extends EventEmitter.EventNames<TEvents>>(event: T, ...args: Parameters<EventEmitter.EventListener<TEvents, T>>): Promise<any> {\n getLogger('EventBusPlugin').debug(`emitAsync: ${event as string}`, args);\n const listeners = this.listeners(event as any) as Array<(...args: any[]) => any>;\n const results = await Promise.all(listeners.map((listener) => Promise.resolve(listener(...args))));\n return results;\n }\n\n emitCancellable<T extends keyof TEvents>(event: T, ...args: any[]): EventResult {\n const result: EventResult = {\n cancelled: false,\n data: undefined,\n priority: 0,\n cancel(priority: number = 0) {\n if (priority >= this.priority) {\n this.cancelled = true;\n this.priority = priority;\n }\n },\n setData(data: any) {\n this.data = data;\n },\n };\n\n getLogger('EventBusPlugin').debug(`emitCancellable: ${event as string}`, args);\n\n // @ts-expect-error - EventEmitter doesn't support EventResult parameter in type signature\n super.emit(event as any, ...args, result);\n\n if (result.cancelled) {\n getLogger('EventBusPlugin').debug(`Event cancelled: ${event as string}`, result.data);\n }\n\n return result;\n }\n\n async emitCancellableAsync<T extends keyof TEvents>(\n event: T,\n ...args: any[]\n ): Promise<EventResult> {\n const result: EventResult = {\n cancelled: false,\n data: undefined,\n priority: 0,\n cancel(priority: number = 0) {\n if (priority >= this.priority) {\n this.cancelled = true;\n this.priority = priority;\n }\n },\n setData(data: any) {\n this.data = data;\n },\n };\n\n getLogger('EventBusPlugin').debug(`emitCancellableAsync: ${event as string}`, args);\n\n const listeners = this.listeners(event as any) as Array<(...args: any[]) => void>;\n\n for (const listener of listeners) {\n if (result.cancelled) break;\n await Promise.resolve(listener(...args, result));\n }\n\n if (result.cancelled) {\n getLogger('EventBusPlugin').debug(`Async event cancelled: ${event as string}`, result.data);\n }\n\n return result;\n }\n}\n","import { gsap } from 'gsap';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { Container } from 'pixi.js';\nimport { getLogger } from '../../utils/Logger';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\n\n/**\n * GSAP animation integration plugin for PixiJS games.\n *\n * GsapPlugin integrates the powerful GSAP (GreenSock Animation Platform) library\n * with PixiJS, providing a unified animation loop and convenient animation helpers.\n *\n * ## Features\n *\n * - **Unified Ticker**: Single animation loop driven by GSAP\n * - **Animation Helpers**: Pre-built fade, scale, move animations\n * - **Timeline Support**: Create complex animation sequences\n * - **PixiJS Integration**: Direct access to stage management\n * - **Type-Safe**: Full TypeScript support\n *\n * ## How It Works\n *\n * GsapPlugin replaces PixiJS's default ticker with GSAP's ticker, ensuring all\n * animations (both GSAP and PixiJS) run on the same timeline. This prevents\n * timing conflicts and improves performance.\n *\n * ### Ticker Integration\n *\n * 1. GSAP ticker runs at 60 FPS (or requestAnimationFrame)\n * 2. On each tick, GSAP updates all its tweens\n * 3. Plugin forwards tick to PixiJS ticker\n * 4. Engine's onUpdate is called for game logic\n *\n * ## Animation Helpers\n *\n * The plugin provides convenient methods for common animations:\n * - `fadeIn()` / `fadeOut()` - Opacity animations\n * - `scaleIn()` / `scaleOut()` - Scale animations with easing\n * - `moveTo()` - Position animations\n * - `animate()` - Generic property animations\n * - `sequence()` - Staggered animation sequences\n * - `createTimeline()` - Complex animation timelines\n *\n * @example\n * ```typescript\n * const gsapPlugin = new GsapPlugin();\n * engine.registerPlugin(gsapPlugin);\n * await engine.initialize();\n *\n * // Fade in a sprite\n * const sprite = new Sprite(texture);\n * gsapPlugin.addToStage(sprite);\n * gsapPlugin.fadeIn(sprite, 1.0);\n * ```\n *\n * @example\n * ```typescript\n * // Create a complex animation sequence\n * const timeline = gsapPlugin.createTimeline();\n *\n * timeline\n * .add(gsapPlugin.fadeIn(logo, 0.5))\n * .add(gsapPlugin.scaleIn(button, 0.3), '-=0.2')\n * .add(gsapPlugin.moveTo(panel, 100, 200, 0.5));\n * ```\n *\n * @example\n * ```typescript\n * // Staggered animations\n * const buttons = [button1, button2, button3];\n *\n * gsapPlugin.sequence(\n * buttons.map(btn => () => gsapPlugin.fadeIn(btn, 0.3)),\n * 0.1 // 0.1s delay between each\n * );\n * ```\n *\n * @example\n * ```typescript\n * // Custom animation with callbacks\n * gsapPlugin.animate(sprite, { rotation: Math.PI * 2 }, 2.0, {\n * ease: 'elastic.out',\n * onComplete: () => console.log('Rotation complete!')\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class GsapPlugin implements EnginePlugin {\n /**\n * Plugin name\n */\n public name: string = 'gsapPlugin';\n\n /**\n * High priority to ensure it runs before other plugins\n */\n public priority: number = 100;\n\n /**\n * No dependencies - this is a core plugin\n */\n public dependencies: string[] = [];\n\n private engine!: PixiEngine;\n private gsapTickerCallback!: (\n time: number,\n deltaTime: number,\n frame: number,\n elapsed: number,\n ) => void;\n private isInitialized = false;\n\n /**\n * Initializes the GSAP plugin.\n *\n * Sets up the unified ticker system by connecting GSAP's ticker to PixiJS.\n * Called automatically by PixiEngine during plugin initialization.\n *\n * @param engine - PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n this.engine = engine;\n\n // Create ticker callback that will update Pixi's ticker\n this.gsapTickerCallback = (time: number, deltaTime: number, frame: number, elapsed: number) => {\n // Update Pixi's ticker with the time from GSAP\n engine.pixiApp.ticker.update(time * 1000);\n\n this.engine.onUpdate(deltaTime);\n };\n\n // Add our callback to GSAP's ticker\n gsap.ticker.add(this.gsapTickerCallback);\n\n this.isInitialized = true;\n getLogger('GsapPlugin').info('GSAP Plugin initialized - Pixi ticker now driven by GSAP');\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n getLogger('GsapPlugin').debug('GSAP Plugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Called when engine is paused\n * Pauses GSAP's ticker to stop all animations\n */\n [ENGINE_HOOKS.onPause](_engine: PixiEngine): void {\n gsap.ticker.sleep();\n getLogger('GsapPlugin').info('GSAP ticker paused');\n }\n\n /**\n * Called when engine is resumed\n * Resumes GSAP's ticker to continue animations\n */\n [ENGINE_HOOKS.onResume](_engine: PixiEngine): void {\n gsap.ticker.wake();\n getLogger('GsapPlugin').info('GSAP ticker resumed');\n }\n\n [key: symbol]: any;\n\n /**\n * Clean up when plugin is removed\n */\n public cleanup(): void {\n if (this.gsapTickerCallback) {\n gsap.ticker.remove(this.gsapTickerCallback);\n getLogger('GsapPlugin').debug('GSAP ticker callback removed');\n }\n\n this.isInitialized = false;\n getLogger('GsapPlugin').info('GSAP Plugin cleaned up');\n }\n\n /**\n * Plugin hook that runs every tick\n * @param deltaTime The time elapsed since the last update\n * @returns Returns false because GsapPlugin allows other plugins to continue updating.\n * GSAP ticker and plugin onUpdate loops are different mechanisms.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // No need to do anything here because GsapPlugin manages its own update loop\n // The engine's onUpdate method is already called inside the GSAP ticker callback\n return false;\n }\n\n /**\n * Creates a GSAP timeline for complex animation sequences.\n *\n * Timelines allow you to choreograph multiple animations with precise timing control.\n *\n * @param vars - Timeline configuration options\n * @returns GSAP Timeline instance\n *\n * @example\n * ```typescript\n * const timeline = gsapPlugin.createTimeline({ repeat: -1, yoyo: true });\n * timeline\n * .to(sprite, { x: 100, duration: 1 })\n * .to(sprite, { y: 100, duration: 1 })\n * .to(sprite, { rotation: Math.PI, duration: 1 });\n * ```\n */\n public createTimeline(vars?: gsap.TimelineVars): gsap.core.Timeline {\n getLogger('GsapPlugin').debug('Created GSAP timeline', vars);\n return gsap.timeline(vars);\n }\n\n /**\n * Fades in a container from transparent to opaque.\n *\n * Sets alpha to 0 and animates to 1.\n *\n * @param target - Container to animate\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.fadeIn(sprite, 1.0, {\n * ease: 'power2.out',\n * onComplete: () => console.log('Fade complete!')\n * });\n * ```\n */\n public fadeIn(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Fading in container over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n alpha: 1,\n duration,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Fade out a Container\n * @param target Container to animate\n * @param duration Animation duration in seconds\n * @param vars Additional animation variables\n * @returns Promise that resolves to GSAP Tween instance\n */\n public fadeOut(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Fading out container over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n alpha: 0,\n duration,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Scales in a container with a bounce effect.\n *\n * Starts from 0.5 scale and animates to original scale with back.out easing.\n *\n * @param target - Container to animate\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.scaleIn(button, 0.3, {\n * delay: 0.5,\n * onComplete: () => button.interactive = true\n * });\n * ```\n */\n public scaleIn(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n // Store original scale or use 1 as default\n const targetScale = {\n x: target.scale.x || 1,\n y: target.scale.y || 1,\n };\n\n // Start from a smaller scale\n target.scale.set(0.5, 0.5);\n\n getLogger('GsapPlugin').debug(\n `Scaling in container to (${targetScale.x}, ${targetScale.y}) over ${duration}s`,\n );\n\n // Animate to the target scale with a bounce effect\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target.scale, {\n x: targetScale.x,\n y: targetScale.y,\n duration,\n ease: 'back.out(1.7)',\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Scale out a Container\n * @param target Container to animate\n * @param duration Animation duration in seconds\n * @param vars Additional animation variables\n * @returns Promise that resolves to GSAP Tween instance\n */\n public scaleOut(\n target: Container,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Scaling out container over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target.scale, {\n x: 0,\n y: 0,\n duration,\n ease: 'back.in(1.7)',\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Moves a container to a new position.\n *\n * Animates x and y properties with power2.out easing.\n *\n * @param target - Container to animate\n * @param x - Target x position\n * @param y - Target y position\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.moveTo(sprite, 400, 300, 1.0, {\n * ease: 'elastic.out',\n * onUpdate: () => console.log('Moving...')\n * });\n * ```\n */\n public moveTo(\n target: Container,\n x: number,\n y: number,\n duration: number = 0.5,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Moving container to (${x}, ${y}) over ${duration}s`);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n x,\n y,\n duration,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Animates any properties of an object.\n *\n * Generic animation method for custom property animations.\n *\n * @param target - Object to animate (Container, Sprite, or any object)\n * @param props - Properties to animate with target values\n * @param duration - Animation duration in seconds (default: 0.5)\n * @param vars - Additional GSAP tween options\n * @returns Promise that resolves to GSAP Tween instance\n *\n * @example\n * ```typescript\n * gsapPlugin.animate(sprite, {\n * rotation: Math.PI * 2,\n * alpha: 0.5,\n * scale: { x: 2, y: 2 }\n * }, 2.0, {\n * ease: 'bounce.out'\n * });\n * ```\n */\n public animate(\n target: gsap.TweenTarget,\n props: object,\n vars?: gsap.TweenVars,\n ): Promise<gsap.core.Tween> {\n getLogger('GsapPlugin').debug(`Animating properties over ${vars?.duration || 0.5}s`, props);\n return new Promise((resolve) => {\n const userOnComplete = vars?.onComplete;\n const tween: gsap.core.Tween = gsap.to(target, {\n ...props,\n ...vars,\n onComplete: () => {\n userOnComplete?.();\n resolve(tween);\n },\n });\n });\n }\n\n /**\n * Creates a staggered sequence of animations.\n *\n * Executes multiple animations with a time delay between each.\n *\n * @param animations - Array of functions that return GSAP Tweens\n * @param stagger - Time delay between each animation in seconds (default: 0.1)\n * @returns Promise that resolves to GSAP Timeline instance\n *\n * @example\n * ```typescript\n * const items = [item1, item2, item3, item4];\n *\n * gsapPlugin.timeline(\n * items.map(item => () => gsapPlugin.fadeIn(item, 0.3)),\n * 0.15 // 0.15s delay between each\n * );\n * ```\n */\n public timeline(\n animations: Array<() => gsap.core.Tween>,\n stagger: number = 0.1,\n ): Promise<gsap.core.Timeline> {\n return new Promise((resolve) => {\n const timeline = this.createTimeline({ onComplete: () => resolve(timeline) });\n\n animations.forEach((animFn, index) => {\n timeline.add(animFn(), index * stagger);\n });\n });\n }\n\n /**\n * Creates a delayed function call.\n *\n * Executes a callback after a specified delay.\n *\n * @param delay - Delay in seconds before executing the callback\n * @param callback - Function to execute after the delay\n * @param params - Optional parameters to pass to the callback\n * @returns GSAP Tween instance (can be used to kill the delayed call)\n *\n * @example\n * ```typescript\n * // Simple delayed call\n * gsapPlugin.delayedCall(2, () => console.log('2 seconds passed'));\n *\n * // With parameters\n * gsapPlugin.delayedCall(1.5, (msg) => console.log(msg), ['Hello!']);\n *\n * // Store reference to cancel later\n * const call = gsapPlugin.delayedCall(5, doSomething);\n * call.kill(); // Cancel the delayed call\n * ```\n */\n public delayedCall(\n delay: number,\n callback: gsap.Callback,\n params?: any[],\n ): gsap.core.Tween {\n getLogger('GsapPlugin').debug(`Creating delayed call for ${delay}s`);\n return gsap.delayedCall(delay, callback, params);\n }\n\n /**\n * Waits for a duration using GSAP delayedCall.\n * Respects engine pause/resume via GSAP ticker sleep/wake.\n *\n * @param duration - Delay in seconds\n * @returns Promise that resolves after the delay\n *\n * @example\n * ```typescript\n * await gsapPlugin.delay(0.5);\n * showPopup();\n * ```\n */\n public delay(duration: number): Promise<void> {\n return new Promise((resolve) => {\n this.delayedCall(duration, resolve);\n });\n }\n}\n","/**\n * Keyboard event constants.\n *\n * @public\n */\nexport const KEY_EVENTS = {\n /** Fired when a key is pressed down */\n KEY_DOWN: 'keyDown',\n /** Fired when a key is released */\n KEY_UP: 'keyUp',\n};\n\n/**\n * Mouse event constants (reserved for future implementation).\n *\n * @public\n */\nexport const MOUSE_EVENTS = {\n /** Fired when a mouse button is pressed */\n MOUSE_DOWN: 'mouseDown',\n /** Fired when a mouse button is released */\n MOUSE_UP: 'mouseUp',\n /** Fired while the mouse is moving */\n MOUSE_MOVE: 'mouseMove',\n};\n\n/**\n * Touch event constants (reserved for future implementation).\n *\n * @public\n */\nexport const TOUCH_EVENTS = {\n /** Fired when a touch begins */\n TOUCH_START: 'touchStart',\n /** Fired when a touch ends */\n TOUCH_END: 'touchEnd',\n /** Fired while a touch is moving */\n TOUCH_MOVE: 'touchMove',\n};\n\n/**\n * Combined input event constants.\n *\n * Includes all keyboard, mouse, and touch events.\n *\n * @public\n */\nexport const INPUT_EVENTS = {\n ...KEY_EVENTS,\n ...MOUSE_EVENTS,\n ...TOUCH_EVENTS,\n};\n\n/**\n * Keyboard key states.\n *\n * Represents the current state of a keyboard key.\n *\n * @public\n */\nexport enum KeyState {\n /** Key is not pressed */\n UP = 'up',\n /** Key is currently pressed */\n DOWN = 'down',\n /** Key was pressed in the current frame */\n PRESSED = 'pressed',\n /** Key was released in the current frame */\n RELEASED = 'released',\n}\n","import { getLogger } from '../../utils/Logger';\nimport { EventEmitter } from 'pixi.js';\nimport { InputPluginConfig } from './InputPlugin.types';\nimport { KEY_EVENTS, KeyState } from './InputPlugin.const';\nimport type { KeyEvent } from './KeyboardManager.types';\n\n/**\n * Keyboard input manager.\n *\n * KeyboardManager handles keyboard input with frame-perfect state tracking.\n * It distinguishes between keys that are held down and keys that were just\n * pressed or released in the current frame.\n *\n * ## Key State Tracking\n *\n * - **isDown()**: Check if key is currently pressed\n * - **isUp()**: Check if key is not pressed\n * - **isJustPressed()**: Check if key was pressed this frame\n * - **isJustReleased()**: Check if key was released this frame\n *\n * ## Event System\n *\n * Emits events for key presses and releases:\n * - `KEY_DOWN`: When a key is pressed\n * - `KEY_UP`: When a key is released\n *\n * @example\n * ```typescript\n * const keyboard = new KeyboardManager({\n * preventDefaultKeys: ['space', 'arrowup']\n * });\n *\n * // Event-based\n * keyboard.on(KEY_EVENTS.KEY_DOWN, (event) => {\n * console.log('Key pressed:', event.key);\n * });\n *\n * // Polling-based\n * if (keyboard.isDown('w')) {\n * player.moveUp();\n * }\n *\n * if (keyboard.isJustPressed('space')) {\n * player.jump();\n * }\n * ```\n *\n * @public\n */\nexport class KeyboardManager extends EventEmitter {\n private keys: Map<string, KeyState> = new Map();\n private justPressed: Set<string> = new Set();\n private justReleased: Set<string> = new Set();\n private config: InputPluginConfig;\n\n constructor(config: InputPluginConfig = {}) {\n super();\n this.config = config;\n getLogger('KeyboardManager').info('KeyboardManager initialized');\n this.setupListeners();\n }\n\n /**\n * Set up keyboard listeners\n */\n private setupListeners(): void {\n // When a key is pressed\n window.addEventListener('keydown', (event) => {\n const key = event.key.toLowerCase();\n\n // Prevent browser default behavior (e.g. switching to fullscreen when F11 is pressed)\n if (this.config.preventDefaultKeys && this.config.preventDefaultKeys.includes(key)) {\n event.preventDefault();\n }\n\n // Update key state\n const wasDown = this.keys.get(key) === KeyState.DOWN;\n\n // If the key is already down and this is not a repeat, do nothing\n if (wasDown && !event.repeat) return;\n\n // If the key is not down or it is the first repeat\n if (!wasDown) {\n this.justPressed.add(key);\n this.keys.set(key, KeyState.DOWN);\n\n getLogger('KeyboardManager').debug(`Key pressed: ${key}`);\n\n\n // Emit event (both normal keyDown and justPressed)\n const keyEvent: KeyEvent = {\n key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n repeat: event.repeat,\n original: event,\n };\n\n this.emit(KEY_EVENTS.KEY_DOWN, keyEvent);\n }\n });\n\n // When a key is released\n window.addEventListener('keyup', (event) => {\n const key = event.key.toLowerCase();\n\n // Prevent browser default behavior (as a precaution)\n if (this.config.preventDefaultKeys && this.config.preventDefaultKeys.includes(key)) {\n event.preventDefault();\n }\n\n // Mark that the key is released\n this.justReleased.add(key);\n this.keys.set(key, KeyState.UP);\n\n\n getLogger('KeyboardManager').debug(`Key released: ${key}`);\n\n\n // Emit event\n const keyEvent: KeyEvent = {\n key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n repeat: false, // There is no repeat in keyUp events\n original: event,\n };\n\n this.emit(KEY_EVENTS.KEY_UP, keyEvent);\n });\n }\n\n /**\n * Updates keyboard state.\n *\n * Called at the end of each frame to clear single-frame states\n * (justPressed and justReleased). This ensures these states only\n * last for one frame.\n *\n * @remarks\n * This method is called automatically by InputPlugin.onUpdate().\n */\n public update(): void {\n // Clear temporary (single-frame) states\n this.justPressed.clear();\n this.justReleased.clear();\n }\n\n /**\n * Checks if a key is currently pressed.\n *\n * Returns true as long as the key is held down.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key is pressed, false otherwise\n *\n * @example\n * ```typescript\n * if (keyboard.isDown('w')) {\n * player.moveForward();\n * }\n * ```\n */\n public isDown(key: string): boolean {\n return this.keys.get(key.toLowerCase()) === KeyState.DOWN;\n }\n\n /**\n * Checks if a key is not pressed.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key is not pressed, false if it is pressed\n *\n * @example\n * ```typescript\n * if (keyboard.isUp('space')) {\n * // Space is not being pressed\n * }\n * ```\n */\n public isUp(key: string): boolean {\n const state = this.keys.get(key.toLowerCase());\n return !state || state === KeyState.UP;\n }\n\n /**\n * Checks if a key was pressed in the current frame.\n *\n * Returns true only on the frame when the key was first pressed.\n * Useful for actions that should trigger once per press.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key was pressed this frame, false otherwise\n *\n * @example\n * ```typescript\n * if (keyboard.isJustPressed('space')) {\n * player.jump(); // Jump only once per press\n * }\n * ```\n */\n public isJustPressed(key: string): boolean {\n return this.justPressed.has(key.toLowerCase());\n }\n\n /**\n * Checks if a key was released in the current frame.\n *\n * Returns true only on the frame when the key was released.\n * Useful for detecting when a key is let go.\n *\n * @param key - Key name to check (case-insensitive)\n * @returns True if the key was released this frame, false otherwise\n *\n * @example\n * ```typescript\n * if (keyboard.isJustReleased('space')) {\n * player.stopCharging(); // Stop charging when space is released\n * }\n * ```\n */\n public isJustReleased(key: string): boolean {\n return this.justReleased.has(key.toLowerCase());\n }\n\n /**\n * Cleans up the keyboard manager.\n *\n * Clears all key states and removes event listeners.\n * Called automatically when the plugin is destroyed.\n */\n public cleanup(): void {\n this.keys.clear();\n this.justPressed.clear();\n this.justReleased.clear();\n this.removeAllListeners();\n getLogger('KeyboardManager').info('KeyboardManager cleaned up');\n }\n}\n","import { EventEmitter } from 'pixi.js';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { KeyboardManager } from './KeyboardManager';\nimport { INPUT_EVENTS, KEY_EVENTS, MOUSE_EVENTS, TOUCH_EVENTS } from './InputPlugin.const';\nimport { getLogger } from '../../utils/Logger';\nimport type { InputPluginConfig } from './InputPlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport type { KeyEvent } from './KeyboardManager.types';\n\nexport { INPUT_EVENTS, KEY_EVENTS, MOUSE_EVENTS, TOUCH_EVENTS };\n\n/**\n * Input management plugin for PixiJS games.\n *\n * InputPlugin provides a unified interface for handling keyboard, mouse, and touch input.\n * It uses a modular architecture with separate managers for each input type.\n *\n * ## Features\n *\n * - **Keyboard Input**: Full keyboard support with key state tracking\n * - **Event System**: EventEmitter-based for easy event handling\n * - **Frame-Perfect Input**: Distinguishes between held and just-pressed keys\n * - **Browser Default Prevention**: Prevent unwanted browser actions\n * - **Modular Design**: Extensible for mouse, touch, and gamepad support\n *\n * ## Current Implementation\n *\n * Currently supports:\n * - ✅ Keyboard input via KeyboardManager\n *\n * Planned for future:\n * - 🔜 Mouse input\n * - 🔜 Touch input\n * - 🔜 Gamepad input\n *\n * ## Usage Patterns\n *\n * ### Event-Based Input\n * Listen to input events using the EventEmitter API:\n *\n * ```typescript\n * inputPlugin.on(INPUT_EVENTS.KEY_DOWN, (event: KeyEvent) => {\n * console.log('Key pressed:', event.key);\n * });\n * ```\n *\n * ### Polling-Based Input\n * Check key states directly in your game loop:\n *\n * ```typescript\n * if (inputPlugin.keyboard.isDown('space')) {\n * player.jump();\n * }\n * ```\n *\n * @example\n * ```typescript\n * const inputPlugin = new InputPlugin({\n * preventDefaultKeys: ['space', 'arrowup', 'arrowdown'],\n * debug: true\n * });\n *\n * engine.registerPlugin(inputPlugin);\n * await engine.initialize();\n *\n * // Event-based input\n * inputPlugin.on(INPUT_EVENTS.KEY_DOWN, (event) => {\n * if (event.key === 'enter') {\n * console.log('Enter pressed!');\n * }\n * });\n *\n * // Polling in game loop\n * function update() {\n * if (inputPlugin.keyboard.isDown('w')) {\n * player.moveUp();\n * }\n * if (inputPlugin.keyboard.isJustPressed('space')) {\n * player.shoot();\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Combo detection\n * inputPlugin.on(INPUT_EVENTS.KEY_DOWN, (event) => {\n * if (event.ctrlKey && event.key === 's') {\n * event.original.preventDefault();\n * saveGame();\n * }\n * });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class InputPlugin extends EventEmitter implements EnginePlugin {\n public name: string = 'inputPlugin';\n public priority: number = 150; // Should run after GSAP and before other plugins\n\n /**\n * No dependencies - this is a core input plugin\n */\n public dependencies: string[] = [];\n\n // Input managers\n public keyboard: KeyboardManager;\n\n // Managers to be added in the future:\n // public mouse: MouseManager;\n // public touch: TouchManager;\n // public gamepad: GamepadManager;\n\n private _engine!: PixiEngine;\n private config: InputPluginConfig;\n private isInitialized = false;\n\n // Default configuration values\n private readonly defaultConfig: InputPluginConfig = {\n priority: 150,\n enabled: true,\n repeatRate: 0.2, // 5 repeats per second (200ms)\n preventDefaultKeys: ['f11', 'space', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright'],\n };\n\n constructor(config: InputPluginConfig = {}) {\n super();\n\n // Merge configuration with default values\n this.config = { ...this.defaultConfig, ...config };\n\n // Use the customized priority value\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use the customized name value\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n\n // Show more detailed logs if debug mode is active\n getLogger('InputPlugin').info('InputPlugin created with config:', this.config);\n\n\n // Create the keyboard manager\n this.keyboard = new KeyboardManager(this.config);\n\n // Listen to and forward events coming from KeyboardManager\n this.setupKeyboardEvents();\n }\n\n /**\n * Listen to and forward keyboard events\n */\n private setupKeyboardEvents(): void {\n // Listen to all keyboard events and forward them through this InputPlugin\n this.keyboard.on(KEY_EVENTS.KEY_DOWN, (event: KeyEvent) => {\n this.emit(INPUT_EVENTS.KEY_DOWN, event);\n });\n\n this.keyboard.on(KEY_EVENTS.KEY_UP, (event: KeyEvent) => {\n this.emit(INPUT_EVENTS.KEY_UP, event);\n });\n }\n\n /**\n * Initialize the plugin\n * @param engine PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n // Store the engine reference (may be needed later for mouse operations, etc.)\n this._engine = engine;\n\n this.isInitialized = true;\n\n getLogger('InputPlugin').info('InputPlugin initialized with engine instance and config:', this.config);\n\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n getLogger('InputPlugin').debug('InputPlugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Provides access to the engine instance\n */\n public get engine(): PixiEngine {\n return this._engine;\n }\n\n /**\n * Called on every frame update\n * @param _deltaTime Frame duration in ms (currently not used)\n * @returns Should propagation stop? (false = continue)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // Do not update if the plugin is disabled\n if (this.config.enabled === false) {\n return false;\n }\n\n // Update the keyboard manager\n this.keyboard.update();\n\n // The Input plugin only updates input states,\n // and returns false to allow other plugins to continue processing\n return false;\n }\n\n /**\n * Called when the plugin is cleaned up\n */\n public cleanup(): void {\n // Clean up the keyboard manager\n this.keyboard.cleanup();\n\n // Clean up Input plugin event listeners\n this.removeAllListeners();\n\n this.isInitialized = false;\n\n getLogger('InputPlugin').info('InputPlugin cleaned up');\n }\n\n [key: symbol]: any;\n}\n\n// Re-export types for documentation\nexport type { InputPluginConfig } from './InputPlugin.types';\n","import {\n changeLanguage,\n getCurrentLanguage,\n getI18nInstance,\n initSlotI18n,\n isI18nReady,\n t,\n} from '../../i18n/sharedI18n';\nimport { getLogger } from '../../utils/Logger';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { I18NextPluginConfig } from './I18NextPlugin.types';\n\n/**\n * Internationalization (i18n) plugin using i18next.\n *\n * Uses the shared singleton from `@rb-games/core/i18n` so Svelte shell and\n * Pixi engine share the same translations and language state.\n *\n * @category Plugins\n * @public\n */\nexport class I18NextPlugin implements EnginePlugin {\n public name: string = 'i18nextPlugin';\n public priority: number = 900;\n public dependencies: string[] = [];\n private _engine: PixiEngine | null = null;\n private config: I18NextPluginConfig;\n\n constructor(config: I18NextPluginConfig = {}) {\n this.config = {\n priority: 900,\n enabled: true,\n };\n\n Object.assign(this.config, config);\n\n this.dependencies = config.dependencies || [];\n\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n this._engine = engine;\n\n getLogger('I18NextPlugin').info('I18NextPlugin initializing - loading language files...');\n console.log(this);\n\n try {\n await initSlotI18n();\n getLogger('I18NextPlugin').info('I18NextPlugin initialized successfully - language files loaded');\n } catch (error) {\n getLogger('I18NextPlugin').error('Failed to initialize I18NextPlugin:', error);\n throw error;\n }\n }\n\n public t(key: string, options?: Record<string, unknown>): string {\n return t(key, options);\n }\n\n public async changeLanguage(lng: string): Promise<void> {\n try {\n await changeLanguage(lng);\n getLogger('I18NextPlugin').info(`Language changed to: ${lng}`);\n } catch (error) {\n getLogger('I18NextPlugin').error(`Failed to change language to ${lng}:`, error);\n throw error;\n }\n }\n\n public getCurrentLanguage(): string {\n return getCurrentLanguage();\n }\n\n public isReady(): boolean {\n return isI18nReady();\n }\n\n public get i18n() {\n return getI18nInstance();\n }\n\n public cleanup(): void {\n getLogger('I18NextPlugin').info('I18NextPlugin cleaned up');\n }\n\n [key: symbol]: any;\n}\n\nexport type { I18NextPluginConfig } from './I18NextPlugin.types';\n","import { Container } from 'pixi.js';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { getLogger } from '../../utils/Logger';\nimport type { ScenePluginConfig } from './ScenePlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { ENGINE_HOOKS } from '../Plugin.types';\nimport { Scene } from './Scene';\n\n/**\n * Scene management plugin for PixiJS games.\n *\n * ScenePlugin provides a structured way to manage different game screens\n * (menus, gameplay, loading screens, etc.) with smooth transitions and\n * lifecycle management.\n *\n * ## Features\n *\n * - **Scene Registration**: Register multiple scenes\n * - **Smooth Transitions**: Async scene switching with animations\n * - **Lifecycle Management**: Automatic enter/exit/update calls\n * - **Transition Safety**: Prevents overlapping transitions\n * - **Default Scene**: Auto-load initial scene\n * - **Custom Root**: Use custom container for scenes\n *\n * ## Usage Pattern\n *\n * 1. Create scenes extending Scene base class\n * 2. Register scenes with ScenePlugin\n * 3. Switch between scenes using switchScene()\n * 4. Plugin handles lifecycle automatically\n *\n * ## Scene Lifecycle\n *\n * When switching from SceneA to SceneB:\n * 1. SceneA.onExit() - Exit animation\n * 2. SceneA.cleanup() - Resource cleanup\n * 3. SceneA removed from stage\n * 4. SceneB added to stage\n * 5. SceneB.onInitialize() - First time only\n * 6. SceneB.onEnter() - Entry animation\n * 7. SceneB.update() - Called every frame\n *\n * @example\n * ```typescript\n * // Create scenes\n * const mainMenu = new MainMenuScene();\n * const gameplay = new GameplayScene();\n *\n * // Create and configure plugin\n * const scenePlugin = new ScenePlugin({\n * defaultScene: 'MainMenu'\n * });\n *\n * // Register scenes\n * scenePlugin.registerScene('MainMenu', mainMenu);\n * scenePlugin.registerScene('Gameplay', gameplay);\n *\n * // Register plugin\n * engine.registerPlugin(scenePlugin);\n * await engine.initialize();\n *\n * // Switch scenes\n * await scenePlugin.switchScene('Gameplay');\n * ```\n *\n * @example\n * ```typescript\n * // Scene with transitions\n * class MenuScene extends Scene {\n * protected async onEnter(): Promise<void> {\n * this.alpha = 0;\n * await gsap.to(this, { alpha: 1, duration: 0.5 });\n * }\n *\n * protected async onExit(): Promise<void> {\n * await gsap.to(this, { alpha: 0, duration: 0.3 });\n * }\n * }\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class ScenePlugin implements EnginePlugin {\n public name: string = 'scenePlugin';\n public priority: number = 90;\n public dependencies: string[] = []; // No hard dependencies for now\n\n private engine: PixiEngine | null = null;\n private currentScene: Scene | null = null;\n private scenes: Map<string, Scene>;\n private isTransitioning = false;\n private config: ScenePluginConfig;\n private root: Container | null = null; // Initially defined as null\n\n constructor(config: ScenePluginConfig = {}) {\n this.scenes = new Map();\n\n // Default configuration values\n this.config = {\n priority: 90,\n enabled: true,\n };\n\n Object.assign(this.config, config);\n\n this.dependencies = config.dependencies || [];\n\n // Use customized priority value if provided\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use customized name value if provided\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n\n // If debug mode is active, log more detailed information\n getLogger('ScenePlugin').info('ScenePlugin created with config:', this.config);\n\n }\n\n /**\n * Initialize the scene plugin\n */\n public async initialize(engine: PixiEngine): Promise<void> {\n // Store engine reference\n this.engine = engine;\n\n // Get root container from config or use engine.pixiApp.stage\n this.root = this.config.root || engine.pixiApp.stage;\n\n // Assign engine reference to all registered scenes\n this.scenes.forEach((scene, name) => {\n scene.setEngine(engine);\n getLogger('ScenePlugin').debug(`Updated engine reference for scene: ${name}`);\n\n });\n\n getLogger('ScenePlugin').info('ScenePlugin initialized');\n\n }\n\n /**\n * Called when plugin is ready and can safely use other plugins\n */\n public async onReady(engine: PixiEngine): Promise<void> {\n // If defaultScene is specified in the config, switch to that scene\n // At this point, all dependencies are guaranteed to be ready\n if (this.config.defaultScene && this.scenes.has(this.config.defaultScene)) {\n await this.switchScene(this.config.defaultScene);\n }\n\n getLogger('ScenePlugin').info('ScenePlugin is ready');\n }\n\n /**\n * Registers a scene with the plugin.\n *\n * Scenes must be registered before they can be switched to.\n * If the engine is already initialized, the scene will receive\n * the engine reference immediately.\n *\n * @param name - Unique name for the scene\n * @param scene - Scene instance to register\n *\n * @example\n * ```typescript\n * const mainMenu = new MainMenuScene();\n * scenePlugin.registerScene('MainMenu', mainMenu);\n * ```\n */\n public registerScene(name: string, scene: Scene): void {\n if (this.scenes.has(name)) {\n getLogger('ScenePlugin').warn(`Scene with name ${name} already registered`);\n return;\n }\n\n // If engine reference is already set, assign it to the scene immediately\n // Otherwise, it will be assigned when initialize() is called\n if (this.engine) {\n scene.setEngine(this.engine);\n getLogger('ScenePlugin').debug(`Engine reference set for scene: ${name}`);\n\n }\n\n // Register the scene\n this.scenes.set(name, scene);\n getLogger('ScenePlugin').info(`Registered scene: ${name}`);\n }\n\n /**\n * Switches to a different scene.\n *\n * Handles the complete transition:\n * - Exits current scene (with animation)\n * - Removes current scene from stage\n * - Adds new scene to stage\n * - Enters new scene (with animation)\n *\n * Prevents overlapping transitions.\n *\n * @param name - Name of the scene to switch to\n * @param params - Optional parameters to pass to the scene's onEnter() method\n * @throws Error if scene is not registered\n *\n * @example\n * ```typescript\n * await scenePlugin.switchScene('Gameplay');\n * // With parameters\n * await scenePlugin.switchScene('Gameplay', { level: 5, mode: 'bonus' });\n * ```\n */\n public async switchScene(name: string, params?: unknown): Promise<void> {\n // If the plugin is disabled, do nothing\n if (this.config.enabled === false) {\n getLogger('ScenePlugin').warn('ScenePlugin is disabled, ignoring scene switch request');\n return;\n }\n\n if (this.isTransitioning) {\n getLogger('ScenePlugin').warn('Scene transition already in progress, ignoring request');\n return;\n }\n\n if (!this.scenes.has(name)) {\n const error = `Scene ${name} not found`;\n getLogger('ScenePlugin').error(error);\n throw new Error(error);\n }\n\n const nextScene = this.scenes.get(name)!;\n\n // If we're already on this scene, do nothing\n if (this.currentScene === nextScene) {\n return;\n }\n\n this.isTransitioning = true;\n getLogger('ScenePlugin').info(`Switching to scene: ${name}`);\n\n try {\n // Exit the current scene if it exists\n if (this.currentScene) {\n await this.currentScene.exit();\n this.root?.removeChild(this.currentScene);\n }\n\n // Set and enter the new scene\n this.currentScene = nextScene;\n this.root?.addChild(this.currentScene);\n await this.currentScene.enter(params);\n\n\n getLogger('ScenePlugin').debug(`Scene switch to ${name} completed successfully`);\n\n } catch (error) {\n getLogger('ScenePlugin').error('Error during scene transition:', error);\n } finally {\n this.isTransitioning = false;\n }\n }\n\n /**\n * Gets the currently active scene.\n *\n * @returns Current scene instance or null if no scene is active\n *\n * @example\n * ```typescript\n * const current = scenePlugin.getCurrentScene();\n * if (current?.sceneName === 'Gameplay') {\n * // Do something\n * }\n * ```\n */\n public getCurrentScene(): Scene | null {\n return this.currentScene;\n }\n\n /**\n * Updates the current scene\n * @param deltaTime The time elapsed since the last update\n */\n public onUpdate(deltaTime: number): boolean {\n // If the plugin is disabled, do nothing\n if (this.config.enabled === false) {\n return false;\n }\n\n if (this.currentScene && !this.isTransitioning) {\n this.currentScene.update(deltaTime);\n }\n return false;\n }\n\n [ENGINE_HOOKS.onResize](width: number, height: number): boolean {\n if (this.currentScene) {\n this.currentScene.onResize(width, height);\n }\n\n return false;\n }\n\n [key: symbol]: any;\n\n public cleanup(): void {\n // Ensure current scene is exited properly\n if (this.currentScene) {\n this.currentScene.exit();\n this.root?.removeChild(this.currentScene);\n this.currentScene = null;\n }\n\n // Clear scenes map\n this.scenes.clear();\n getLogger('ScenePlugin').info('Scene plugin cleaned up');\n }\n}\n\n// Re-export types for documentation\nexport type { ScenePluginConfig } from './ScenePlugin.types';\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Container } from 'pixi.js';\nimport { PixiEngine } from '../../engine';\n\n/**\n * Abstract base class for all game scenes.\n *\n * Scene provides a structured lifecycle for game screens (menus, gameplay, etc.).\n * Extends PixiJS Container, so all display objects can be added as children.\n *\n * ## Lifecycle Methods\n *\n * 1. **onInitialize()** - Called once when scene is first entered\n * 2. **onEnter()** - Called every time scene becomes active (async, for animations)\n * 3. **update()** - Called every frame while scene is active\n * 4. **onResize()** - Called when window is resized\n * 5. **onExit()** - Called when leaving scene (async, for exit animations)\n * 6. **cleanup()** - Called after exit for resource cleanup\n *\n * ## Usage Pattern\n *\n * 1. Create a class extending Scene\n * 2. Override lifecycle methods as needed\n * 3. Register scene with ScenePlugin\n * 4. Switch to scene using ScenePlugin.switchScene()\n *\n * @example\n * ```typescript\n * class MainMenuScene extends Scene {\n * private logo: Sprite;\n *\n * constructor() {\n * super('MainMenu');\n * }\n *\n * protected onInitialize(): void {\n * // Create UI elements\n * this.logo = new Sprite(texture);\n * this.addChild(this.logo);\n * }\n *\n * protected async onEnter(): Promise<void> {\n * // Fade in animation\n * await gsap.to(this, { alpha: 1, duration: 0.5 });\n * }\n *\n * public update(deltaTime: number): void {\n * // Update logic\n * this.logo.rotation += deltaTime * 0.001;\n * }\n *\n * protected async onExit(): Promise<void> {\n * // Fade out animation\n * await gsap.to(this, { alpha: 0, duration: 0.3 });\n * }\n *\n * protected cleanup(): void {\n * // Clean up resources\n * this.logo.destroy();\n * }\n * }\n * ```\n *\n * @public\n */\nexport abstract class Scene extends Container {\n protected engine!: PixiEngine;\n\n constructor(public sceneName: string) {\n super();\n this.label = sceneName;\n this.sortableChildren = true;\n }\n\n /**\n * Sets the engine reference.\n *\n * Called automatically by ScenePlugin when scene is registered.\n *\n * @param engine - PixiEngine instance\n * @internal\n */\n public setEngine(engine: PixiEngine): void {\n this.engine = engine;\n }\n\n /**\n * Enters the scene.\n *\n * Calls onInitialize() and onEnter() in sequence.\n * Called automatically by ScenePlugin when switching to this scene.\n *\n * @param params - Optional parameters passed from switchScene()\n * @internal\n */\n public async enter(params?: unknown): Promise<void> {\n await this.onInitialize();\n await this.onEnter(params);\n }\n\n /**\n * Exits the scene.\n *\n * Calls onExit() and cleanup() in sequence.\n * Called automatically by ScenePlugin when switching away from this scene.\n *\n * @internal\n */\n public async exit(): Promise<void> {\n await this.onExit();\n this.cleanup();\n }\n\n /**\n * Initializes the scene.\n *\n * Called once when the scene is first entered.\n * Override to create UI elements and set up initial state.\n *\n * @example\n * ```typescript\n * protected onInitialize(): void {\n * this.background = new Sprite(bgTexture);\n * this.addChild(this.background);\n * }\n * ```\n */\n protected async onInitialize(): Promise<void> {\n // Default empty implementation, override if needed\n }\n\n /**\n * Called when the scene becomes active.\n *\n * Override to implement entry animations.\n * This method is async, so you can await animations.\n *\n * @param _params - Optional parameters passed from switchScene()\n *\n * @example\n * ```typescript\n * protected async onEnter(params?: { level: number }): Promise<void> {\n * this.alpha = 0;\n * if (params) {\n * this.level = params.level;\n * }\n * await gsap.to(this, { alpha: 1, duration: 0.5 });\n * }\n * ```\n */\n protected async onEnter(_params?: unknown): Promise<void> {\n // Default implementation - can be overridden for entry animations\n return Promise.resolve();\n }\n\n /**\n * Called when leaving the scene.\n *\n * Override to implement exit animations.\n * This method is async, so you can await animations.\n *\n * @example\n * ```typescript\n * protected async onExit(): Promise<void> {\n * await gsap.to(this, { alpha: 0, duration: 0.3 });\n * }\n * ```\n */\n protected async onExit(): Promise<void> {\n // Default implementation - can be overridden for exit animations\n return Promise.resolve();\n }\n\n /**\n * Cleans up scene resources.\n *\n * Called after onExit() when the scene is removed.\n * Override to destroy textures, remove event listeners, etc.\n *\n * @example\n * ```typescript\n * protected cleanup(): void {\n * this.background.destroy();\n * this.removeAllListeners();\n * }\n * ```\n */\n protected cleanup(): void {\n // Default empty implementation, override if needed\n }\n\n /**\n * Updates the scene every frame.\n *\n * Override to implement per-frame logic like animations,\n * physics, or input handling.\n *\n * @param _deltaTime - Time elapsed since last frame in milliseconds\n *\n * @example\n * ```typescript\n * public update(deltaTime: number): void {\n * this.player.x += this.velocity * deltaTime;\n * this.checkCollisions();\n * }\n * ```\n */\n public update(_deltaTime: number): void {\n // This is intentionally empty as default implementation\n // Child classes should override this to implement frame updates\n // using the deltaTime parameter for smooth animations\n }\n\n /**\n * Called when the window is resized.\n *\n * Override to reposition or scale UI elements.\n *\n * @param _width - New window width\n * @param _height - New window height\n *\n * @example\n * ```typescript\n * public onResize(width: number, height: number): void {\n * this.background.width = width;\n * this.background.height = height;\n * this.centerLogo(width, height);\n * }\n * ```\n */\n public onResize(_width: number, _height: number): void {\n // This is intentionally empty as default implementation\n // Child classes should override this to handle resize events\n }\n\n /**\n * Get the stage (root container) by traversing up the parent chain.\n * Useful for attaching global event listeners.\n * \n * @returns The stage container or null if not attached to stage\n */\n public getStage(): Container | null {\n let current: Container | null = this as Container;\n\n while (current && current.parent) {\n current = current.parent;\n }\n\n return current;\n }\n}\n","import { PixiEngine } from '../../engine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport * as Sentry from '@sentry/browser';\nimport { SentryPluginConfig } from './SentryPlugin.types';\nimport { VERSION } from 'pixi.js'; // Import PixiJS VERSION constant\n\n/**\n * Error tracking and monitoring plugin using Sentry.\n *\n * @category Plugins\n * @public\n */\nexport class SentryPlugin implements EnginePlugin {\n public name: string = 'sentryPlugin';\n public priority: number = -1; // Highest priority - this plugin will run first\n\n /**\n * No dependencies - this should be the first plugin to initialize\n */\n public dependencies: string[] = [];\n\n private _engine: PixiEngine | null = null;\n private config: SentryPluginConfig;\n private isInitialized = false;\n\n constructor(config: SentryPluginConfig) {\n // Default configuration\n this.config = {\n priority: -1,\n enabled: true,\n dsn: '',\n };\n\n // Merge incoming configuration\n Object.assign(this.config, config);\n\n // Use customized priority value if provided\n if (this.config.priority !== undefined) {\n this.priority = this.config.priority;\n }\n\n // Use customized name value if provided\n if (this.config.name !== undefined) {\n this.name = this.config.name;\n }\n }\n\n /**\n * Initialize Sentry plugin\n * @param engine PixiEngine instance\n */\n public initialize(engine: PixiEngine): void {\n this._engine = engine;\n\n try {\n Sentry.init({\n dsn: this.config.dsn,\n // Setting this option to true will send default PII data to Sentry.\n // For example, automatic IP address collection on events\n sendDefaultPii: true,\n integrations: [\n // send console.log, console.error, and console.warn calls as logs to Sentry\n Sentry.consoleLoggingIntegration({ levels: ['log', 'error', 'warn'] }),\n Sentry.browserTracingIntegration(),\n Sentry.replayIntegration(),\n Sentry.replayCanvasIntegration(),\n ],\n _experiments: {\n enableLogs: true,\n },\n environment: process.env.NODE_ENV || 'development',\n // Tracing\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: ['localhost'],\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n beforeSend(event) {\n // Filter out events if needed\n return event;\n },\n });\n\n this.isInitialized = true;\n getLogger('SentryPlugin').info('SentryPlugin initialized with engine:', this._engine.pixiApp);\n\n } catch (error) {\n getLogger('SentryPlugin').error('Failed to initialize SentryPlugin:', error);\n throw error;\n }\n }\n\n /**\n * Plugin is ready immediately after initialization\n */\n public onReady(engine: PixiEngine): void {\n // Set user context if available\n Sentry.setUser({\n id: 'anonymous',\n // Add more user data if available\n });\n\n // Set game context\n Sentry.setTag('game', 'slot-game');\n Sentry.setContext('engine', {\n pixiVersion: VERSION, // Use PixiJS VERSION constant\n canvasSize: {\n width: engine.pixiApp.canvas.width,\n height: engine.pixiApp.canvas.height,\n },\n renderer: {\n type: engine.pixiApp.renderer.type,\n resolution: engine.pixiApp.renderer.resolution,\n },\n });\n\n getLogger('SentryPlugin').debug('SentryPlugin is ready for use');\n }\n\n /**\n * Check if plugin is ready for use\n */\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Report an error to Sentry\n * @param error Error to report\n * @param extra Additional context\n */\n public captureError(error: Error, extra?: Record<string, any>): void {\n if (!this.isInitialized) {\n getLogger('SentryPlugin').warn('Sentry not initialized, cannot capture error:', error);\n return;\n }\n\n Sentry.withScope((scope) => {\n if (extra) {\n scope.setContext('additional', extra);\n }\n Sentry.captureException(error);\n });\n }\n\n /**\n * Report a message to Sentry\n * @param message Message to report\n * @param level Message level\n * @param extra Additional context\n */\n public captureMessage(\n message: string,\n level: Sentry.SeverityLevel = 'info',\n extra?: Record<string, any>,\n ): void {\n if (!this.isInitialized) {\n getLogger('SentryPlugin').warn('Sentry not initialized, cannot capture message:', message);\n return;\n }\n\n Sentry.withScope((scope) => {\n if (extra) {\n scope.setContext('additional', extra);\n }\n Sentry.captureMessage(message, level);\n });\n }\n\n /**\n * Add breadcrumb to Sentry\n * @param message Breadcrumb message\n * @param category Category\n * @param level Level\n */\n public addBreadcrumb(\n message: string,\n category: string = 'custom',\n level: Sentry.SeverityLevel = 'info',\n ): void {\n if (!this.isInitialized) {\n return;\n }\n\n Sentry.addBreadcrumb({\n message,\n category,\n level,\n timestamp: Date.now() / 1000,\n });\n }\n\n /**\n * Plugin update process\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onUpdate(_deltaTime: number): boolean {\n // Nothing to update\n return false;\n }\n\n /**\n * Cleanup the plugin\n */\n public cleanup(): void {\n // No need to explicitly shut down Sentry; just clear references\n this._engine = null;\n this.isInitialized = false;\n getLogger('SentryPlugin').info('SentryPlugin cleaned up');\n }\n\n [key: symbol]: any;\n}\n\n// Re-export types for documentation\nexport type { SentryPluginConfig } from './SentryPlugin.types';\n","/**\n * Backend API Type Definitions\n * Based on Swagger API at /api-json\n * @module ServicePlugin/Types\n */\n\n// ============================================================================\n// Session Types\n// ============================================================================\n\n/**\n * Session state enum\n */\nexport type SessionState = 'ready' | 'processing' | 'finished';\n\n/**\n * Symbol type enum\n */\nexport type SymbolType = 'regular' | 'wild' | 'scatter' | 'bonus' | 'cluster';\n\n/**\n * Win model type\n */\nexport type WinModel = 'cluster' | 'line' | 'ways';\n\n/**\n * Game state type\n */\nexport type GameStateType = 'basic' | 'bonus';\n\n// ============================================================================\n// Game Configuration (from GET /session)\n// ============================================================================\n\n/**\n * Symbol definition\n */\nexport interface SymbolDefinition {\n id: number;\n name: string;\n type: SymbolType;\n}\n\n/**\n * Board configuration\n */\nexport interface BoardConfig {\n reels: number;\n rows: number;\n}\n\n/**\n * Payout entry for a specific count\n */\nexport interface PayoutEntry {\n count: number;\n value: number;\n andMore?: boolean;\n}\n\n/**\n * Symbol payout configuration\n */\nexport interface SymbolPayout {\n symbolId: number;\n payouts: PayoutEntry[];\n}\n\n/**\n * Cluster paytable configuration\n */\nexport interface ClusterPaytable {\n minCount: number;\n decimalBase: number;\n payouts: SymbolPayout[];\n}\n\n/**\n * Paytable configuration\n */\nexport interface PaytableConfig {\n cluster?: ClusterPaytable;\n}\n\n/**\n * Free spins award entry\n */\nexport interface FreeSpinsAward {\n count: number;\n spins: number;\n andMore?: boolean;\n}\n\n/**\n * Free spins configuration\n */\nexport interface FreeSpinsConfig {\n awards: FreeSpinsAward[];\n}\n\n/**\n * buy bonus configuration\n */\nexport interface GameActions {\n type: string;\n totalBetMultiplier: number;\n count?: number;\n}\n\n/**\n * Complete game configuration from backend\n */\nexport interface GameConfig {\n winModel: WinModel;\n spinCost: number;\n betMultipliers: BetMultiplierDefinition[];\n board: BoardConfig;\n symbols: SymbolDefinition[];\n reels: number[][];\n paytable: PaytableConfig;\n freeSpins: FreeSpinsConfig;\n actions: GameActions[];\n}\n\n// ============================================================================\n// Session Response (GET /session)\n// ============================================================================\n\n/**\n * Basic game state\n */\nexport interface BasicGameState {\n state: 'basic';\n totalWin?: number;\n}\n\n/**\n * Bonus game state (active freespin round)\n */\nexport interface BonusGameState {\n state: 'bonus';\n bonusOrigin: 'spin' | 'buy-bonus' | 'buy-super-bonus';\n remainingFreespins: number;\n usedFreespins: number;\n totalFreespins: number;\n bet: number;\n totalWin: number;\n}\n\n/**\n * Bonus ended game state (carries summary until next spin)\n */\nexport interface BonusEndedGameState {\n state: 'bonus_ended';\n bonusOrigin: 'spin' | 'buy-bonus' | 'buy-super-bonus';\n usedFreespins: number;\n totalFreespins: number;\n bet: number;\n totalWin: number;\n}\n\n/**\n * Game state union type\n */\nexport type GameState = BasicGameState | BonusGameState | BonusEndedGameState;\n\n/**\n * Session response from GET /session\n */\nexport interface SessionResponse {\n sessionId: string;\n state: SessionState;\n nonce: number;\n serverSeedCommit: string;\n gameState: GameState;\n currentRoundId?: string | null;\n gameConfig: GameConfig;\n platform: PlatformResponse;\n}\n\n// ============================================================================\n// Gameplay Types (POST /gameplay)\n// ============================================================================\n\n/**\n * Spin action request\n */\nexport interface SpinAction {\n type: string;\n totalBet: number;\n}\n\n/**\n * Gameplay request body\n */\nexport interface GameplayRequest {\n action: SpinAction;\n clientSeed?: string;\n}\n\n/**\n * Platform response (balance info)\n */\nexport interface PlatformResponse {\n balanceMinor: number;\n currency: string;\n}\n\n/**\n * Bet multiplier response\n */\nexport type BetMultiplierDefinition = number;\n\n/**\n * Cluster win information\n */\nexport interface ClusterWin {\n id: number;\n symbol: number;\n size: number;\n multiplier: number;\n payout: number;\n cells: number[];\n}\n\n/**\n * Scatter win information (temporary frontend implementation)\n */\nexport interface ScatterWin {\n symbol: number;\n count: number;\n cells: number[];\n}\n\n/**\n * Cluster mutation (one cascade step)\n */\nexport interface ClusterMutation {\n generationId: number;\n board: number[];\n cellMultipliers: number[];\n hitCounts?: number[];\n win: number;\n clusters: ClusterWin[];\n scatters?: ScatterWin;\n}\n\n/**\n * Gameplay action result payload\n */\nexport interface GameplayPayload {\n type?: 'spin-result';\n mutations: ClusterMutation[];\n}\n\n/**\n * Game state info for basic/bonus transitions\n */\nexport interface GameStateInfo {\n state: 'basic' | 'bonus' | 'bonus_ended';\n bonusOrigin?: string;\n remainingFreespins?: number;\n usedFreespins?: number;\n totalFreespins?: number;\n bet?: number;\n totalWin?: number;\n}\n\n/**\n * Gameplay response from POST /gameplay\n */\nexport interface GameplayResponse {\n type: 'finished';\n action: string;\n sessionId: string;\n roundId: string;\n roundStartNonce?: number;\n totalBet: number;\n winAmount: number;\n actionCost: number;\n actionResult: GameplayPayload;\n /** @deprecated Prefer `state` / `previousState` — not always present on play responses */\n gameState?: GameState;\n previousState?: GameStateInfo;\n state?: GameStateInfo;\n usedNonce: number;\n nextNonce: number;\n platform: PlatformResponse;\n}\n\n// ============================================================================\n// History Types (GET /history)\n// ============================================================================\n\n/**\n * History entry nonce — single action uses a number; multi-action range uses start/end.\n */\nexport type HistoryNonce = number | { start: number; end: number };\n\n/**\n * History entry\n */\nexport interface HistoryEntry {\n roundId: string;\n nonce: HistoryNonce;\n action: string;\n totalBet: number;\n winAmount: number;\n timestamp?: number;\n nonces?: number[];\n kind?: 'single' | 'range';\n}\n\n/**\n * History response from GET /history\n */\nexport interface HistoryResponse {\n entries: HistoryEntry[];\n nextPointer?: number | null;\n}\n\n// ============================================================================\n// Service Events\n// ============================================================================\n\n/**\n * Service action event types\n */\nexport enum ServiceActions {\n SESSION = 'service:session',\n GAMEPLAY = 'service:gameplay',\n HISTORY = 'service:history',\n ERROR = 'service:error',\n TIMEOUT = 'service:timeout',\n BALANCE_UPDATE = 'service:balance',\n}\n\n/**\n * Service event structure\n */\nexport interface ServiceEvent<T = unknown> {\n target: unknown;\n data: T;\n error?: unknown;\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/**\n * Service error response\n */\nexport interface ServiceError {\n code?: number;\n message?: string;\n error?: string;\n}\n","/**\n * Service plugin for backend API communication\n * @module ServicePlugin\n */\n\nimport { EventEmitter } from 'pixi.js';\nimport type { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport type { ServicePluginConfig } from './ServicePlugin.types';\nimport type { ServiceAdapter } from './ServiceAdapter';\nimport {\n ServiceActions,\n type SessionResponse,\n type GameplayResponse,\n type HistoryEntry,\n type HistoryResponse,\n type PlatformResponse,\n type ServiceEvent,\n type GameConfig,\n} from './types';\n\n/**\n * Service plugin for managing backend API communication\n *\n * This plugin provides a unified interface for all game-server communication including:\n * - Session management and game configuration\n * - Spin requests\n * - Game history\n *\n * The plugin uses an adapter pattern to support different environments\n * (RGSAdapter for production, OfflineAdapter for development).\n *\n * @example\n * ```typescript\n * // Create adapter\n * const adapter = new RGSAdapter({\n * baseUrl: 'http://localhost:3000',\n * sessionId: 'test-session-123',\n * });\n *\n * // Create plugin\n * const servicePlugin = new ServicePlugin({\n * adapter,\n * debug: true,\n * });\n *\n * // Register with engine\n * engine.registerPlugin(servicePlugin);\n * await engine.initialize();\n *\n * // Use in GameLogic\n * const servicePlugin = engine.getPluginThrow<ServicePlugin>('servicePlugin');\n * const session = await servicePlugin.getSession();\n * const response = await servicePlugin.spin(2000);\n * ```\n */\nexport class ServicePlugin extends EventEmitter implements EnginePlugin {\n public name = 'servicePlugin';\n public priority = 15;\n public dependencies = ['eventBusPlugin'];\n\n // Required for EnginePlugin interface\n [key: symbol]: unknown;\n\n private engine!: PixiEngine;\n private adapter: ServiceAdapter;\n private config: ServicePluginConfig;\n\n /** Cached session response */\n private _session: SessionResponse | null = null;\n\n /** Cached game config */\n private _gameConfig: GameConfig | null = null;\n\n constructor(config: ServicePluginConfig) {\n super();\n\n this.config = {\n priority: 15,\n enabled: true,\n ...config,\n };\n\n this.adapter = config.adapter;\n\n // Forward adapter events to plugin\n this.adapter.on(ServiceActions.SESSION, this.onAdapterEvent.bind(this, ServiceActions.SESSION));\n this.adapter.on(\n ServiceActions.GAMEPLAY,\n this.onAdapterEvent.bind(this, ServiceActions.GAMEPLAY),\n );\n this.adapter.on(ServiceActions.HISTORY, this.onAdapterEvent.bind(this, ServiceActions.HISTORY));\n this.adapter.on(ServiceActions.ERROR, this.onAdapterEvent.bind(this, ServiceActions.ERROR));\n this.adapter.on(ServiceActions.TIMEOUT, this.onAdapterEvent.bind(this, ServiceActions.TIMEOUT));\n\n getLogger('ServicePlugin').info('ServicePlugin created');\n\n }\n\n /**\n * Initialize the plugin\n */\n public async initialize(engine: PixiEngine): Promise<void> {\n this.engine = engine;\n\n\n getLogger('ServicePlugin').info('ServicePlugin initialized');\n\n }\n\n /**\n * Called when plugin is ready\n */\n public async onReady(_engine: PixiEngine): Promise<void> {\n getLogger('ServicePlugin').info('ServicePlugin ready');\n }\n\n /**\n * Cleanup plugin resources\n */\n public cleanup(): void {\n this.removeAllListeners();\n this.adapter.removeAllListeners();\n this._session = null;\n this._gameConfig = null;\n\n getLogger('ServicePlugin').info('ServicePlugin cleaned up');\n }\n\n /**\n * Handle adapter events\n */\n private onAdapterEvent(action: ServiceActions, data: unknown): void {\n const serviceEvent: ServiceEvent = {\n target: this,\n data,\n };\n\n this.emit(action, serviceEvent);\n\n getLogger('ServicePlugin').debug(`Event: ${action}`, data);\n\n }\n\n // ============================================================================\n // Public API Methods\n // ============================================================================\n\n /**\n * Get session info and game configuration\n * Fetches from backend and caches the result\n *\n * @returns Promise resolving to session response with gameConfig\n */\n public async getSession(): Promise<SessionResponse> {\n\n getLogger('ServicePlugin').info('Fetching session...');\n\n const response = await this.adapter.getSession();\n\n // Cache session and config\n this._session = response;\n this._gameConfig = response.gameConfig;\n\n getLogger('ServicePlugin').info('Session fetched', {\n sessionId: response.sessionId,\n state: response.state,\n gameState: response.gameState,\n });\n\n return response;\n }\n\n /**\n * Execute a spin action\n *\n * @param totalBet - Total bet amount\n * @param clientSeed - Optional client seed for provably fair\n * @returns Promise resolving to gameplay response\n */\n public async spin(action: string, totalBet: number, clientSeed?: string): Promise<GameplayResponse> {\n getLogger('ServicePlugin').info('Requesting spin...', { totalBet, clientSeed });\n\n const response = await this.adapter.spin({\n action: { type: action, totalBet },\n clientSeed,\n });\n\n getLogger('ServicePlugin').info('Spin response received', response);\n\n return response;\n }\n\n /**\n * Get game history\n *\n * @param limit - Maximum number of entries to return\n * @param pointer - Pagination pointer for next page\n * @returns Promise resolving to history response\n */\n public async getHistory(limit?: number, pointer?: number): Promise<HistoryResponse> {\n\n getLogger('ServicePlugin').info('Fetching history...', { limit, pointer });\n\n const response = await this.adapter.getHistory(limit, pointer);\n\n getLogger('ServicePlugin').info('History fetched', {\n entries: response.entries.length,\n nextPointer: response.nextPointer,\n });\n\n return response;\n }\n\n /**\n * Get a single round summary by round ID\n *\n * @param roundId - Round identifier\n * @returns Promise resolving to history entry (single or range)\n */\n public async getRound(roundId: string): Promise<HistoryEntry> {\n getLogger('ServicePlugin').info('Fetching round...', { roundId });\n\n const response = await this.adapter.getRound(roundId);\n\n getLogger('ServicePlugin').info('Round fetched', {\n roundId: response.roundId,\n kind: response.kind,\n });\n\n return response;\n }\n\n /**\n * Get player balance\n *\n * @returns Promise resolving to platform response with balance\n */\n public async getBalance(): Promise<PlatformResponse> {\n\n getLogger('ServicePlugin').info('Fetching balance...');\n\n const response = await this.adapter.getBalance();\n\n getLogger('ServicePlugin').info('Balance fetched', {\n balanceMinor: response.balanceMinor,\n currency: response.currency,\n });\n\n return response;\n }\n\n /**\n * Replay a completed spin by nonce\n *\n * @param nonce - The nonce of the spin to replay\n * @returns Promise resolving to gameplay response\n */\n public async replay(nonce: number): Promise<GameplayResponse> {\n\n getLogger('ServicePlugin').info('Replaying spin...', { nonce });\n\n const response = await this.adapter.replay(nonce);\n\n getLogger('ServicePlugin').info('Replay response', {\n type: response.type,\n winAmount: response.winAmount,\n });\n\n return response;\n }\n\n // ============================================================================\n // Getters\n // ============================================================================\n\n /**\n * Get session ID from adapter\n */\n public get sessionId(): string {\n return this.adapter.sessionId;\n }\n\n /**\n * Get cached session response\n */\n public get session(): SessionResponse | null {\n return this._session;\n }\n\n /**\n * Get cached game config\n */\n public get gameConfig(): GameConfig | null {\n return this._gameConfig;\n }\n\n /**\n * Get the adapter instance\n */\n public get serviceAdapter(): ServiceAdapter {\n return this.adapter;\n }\n}\n","/**\n * Abstract service adapter for backend API communication\n * @module ServicePlugin\n */\n\nimport { EventEmitter } from 'pixi.js';\nimport type {\n SessionResponse,\n GameplayRequest,\n GameplayResponse,\n HistoryEntry,\n HistoryResponse,\n PlatformResponse,\n ServiceActions,\n} from './types';\n\n/**\n * Abstract base class for service adapters\n *\n * Service adapters handle the low-level communication with the backend API.\n * Different adapters can be implemented for different environments\n * (RGSAdapter for production, OfflineAdapter for development).\n *\n * @example\n * ```typescript\n * class CustomAdapter extends ServiceAdapter {\n * async getSession(): Promise<SessionResponse> {\n * // Fetch session and game config\n * }\n *\n * async spin(request: GameplayRequest): Promise<GameplayResponse> {\n * // Execute spin action\n * }\n * }\n * ```\n */\nexport abstract class ServiceAdapter extends EventEmitter {\n /**\n * Session ID for the current game session\n */\n abstract get sessionId(): string;\n\n /**\n * Get session info and game configuration\n * GET /session\n *\n * @returns Promise resolving to session response with gameConfig\n */\n abstract getSession(): Promise<SessionResponse>;\n\n /**\n * Execute a gameplay action (spin)\n * POST /gameplay\n *\n * @param request - Gameplay request with action and optional clientSeed\n * @returns Promise resolving to gameplay response\n */\n abstract spin(request: GameplayRequest): Promise<GameplayResponse>;\n\n /**\n * Get game history\n * GET /session/{sessionId}/history\n *\n * @param limit - Maximum number of entries to return\n * @param pointer - Pagination pointer for next page\n * @returns Promise resolving to history response\n */\n abstract getHistory(limit?: number, pointer?: number): Promise<HistoryResponse>;\n\n /**\n * Get a single round summary by round ID\n * GET /session/{sessionId}/round/{roundId}\n *\n * @param roundId - Round identifier\n * @returns Promise resolving to history entry (single or range)\n */\n abstract getRound(roundId: string): Promise<HistoryEntry>;\n\n /**\n * Get player balance\n * GET /session/{sessionId}/balance\n *\n * @returns Promise resolving to platform response with balance\n */\n abstract getBalance(): Promise<PlatformResponse>;\n\n /**\n * Replay a completed spin by nonce\n * GET /session/{sessionId}/replay/{nonce}\n *\n * @param nonce - The nonce of the spin to replay\n * @returns Promise resolving to gameplay response\n */\n abstract replay(nonce: number): Promise<GameplayResponse>;\n\n /**\n * Emit a service action event\n *\n * @param action - Service action type\n * @param data - Event data\n * @protected\n */\n protected emitAction(action: ServiceActions, data: unknown): void {\n this.emit(action, data);\n }\n}\n","/**\n * RGS Adapter for production use with backend API\n * @module ServicePlugin/Adapters\n */\n\nimport { ServiceAdapter } from '../ServiceAdapter';\nimport {\n ServiceActions,\n type SessionResponse,\n type GameplayRequest,\n type GameplayResponse,\n type HistoryEntry,\n type HistoryResponse,\n type PlatformResponse,\n type ServiceError,\n} from '../types';\nimport { getLogger } from '../../../utils/Logger';\n\n/**\n * RGS Adapter configuration\n */\nexport interface RGSAdapterConfig {\n /** Base URL for the backend API (e.g., 'http://localhost:3000') */\n baseUrl: string;\n /** Session ID for authentication */\n sessionId: string;\n /** Request timeout in milliseconds */\n requestTimeout?: number;\n}\n\n/**\n * Production RGS adapter for backend API communication\n *\n * This adapter handles HTTP communication with the backend API:\n * - GET /session/{sessionId} - Fetch session and game config\n * - POST /session/{sessionId}/play - Execute spin action\n * - GET /session/{sessionId}/history - Fetch game history\n *\n * @example\n * ```typescript\n * const adapter = new RGSAdapter({\n * baseUrl: 'http://localhost:3000',\n * sessionId: 'test-session-123',\n * debug: true,\n * });\n *\n * const session = await adapter.getSession();\n * const spin = await adapter.spin({ action: { type: 'spin', totalBet: 2000 } });\n * ```\n */\nexport class RGSAdapter extends ServiceAdapter {\n private _sessionId: string;\n private baseUrl: string;\n private requestTimeout: number;\n\n constructor(config: RGSAdapterConfig) {\n super();\n this._sessionId = config.sessionId;\n this.baseUrl = config.baseUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.requestTimeout = config.requestTimeout || 30000;\n\n\n getLogger('RGSAdapter').info('RGSAdapter initialized', {\n baseUrl: this.baseUrl,\n sessionId: this._sessionId,\n });\n\n }\n\n /**\n * Get the current session ID\n */\n public get sessionId(): string {\n return this._sessionId;\n }\n\n /**\n * Get session info and game configuration\n * GET /session/{sessionId}\n */\n public async getSession(): Promise<SessionResponse> {\n\n getLogger('RGSAdapter').info('Fetching session...');\n\n const response = await this.request<SessionResponse>('GET', `/session/${this._sessionId}`);\n\n getLogger('RGSAdapter').info('Session fetched', response);\n\n\n this.emitAction(ServiceActions.SESSION, response);\n return response;\n }\n\n /**\n * Execute a gameplay action (spin)\n * POST /session/{sessionId}/play\n */\n public async spin(request: GameplayRequest): Promise<GameplayResponse> {\n getLogger('RGSAdapter').info('Executing spin...', request);\n\n const response = await this.request<GameplayResponse>('POST', `/session/${this._sessionId}/play`, request);\n\n getLogger('RGSAdapter').info('Spin response', response);\n\n\n this.emitAction(ServiceActions.GAMEPLAY, response);\n return response;\n }\n\n /**\n * Get game history\n * GET /session/{sessionId}/history\n */\n public async getHistory(limit?: number, pointer?: number): Promise<HistoryResponse> {\n getLogger('RGSAdapter').info('Fetching history...', { limit, pointer });\n\n\n const params = new URLSearchParams();\n if (limit !== undefined) params.set('pageSize', limit.toString());\n if (pointer !== undefined) params.set('pointer', pointer.toString());\n\n const queryString = params.toString();\n const url = queryString ? `/session/${this._sessionId}/history?${queryString}` : `/session/${this._sessionId}/history`;\n\n const response = await this.request<HistoryResponse>('GET', url);\n\n getLogger('RGSAdapter').info('History fetched', response);\n\n this.emitAction(ServiceActions.HISTORY, response);\n return response;\n }\n\n /**\n * Get a single round summary by round ID\n * GET /session/{sessionId}/round/{roundId}\n */\n public async getRound(roundId: string): Promise<HistoryEntry> {\n getLogger('RGSAdapter').info('Fetching round...', { roundId });\n\n const response = await this.request<HistoryEntry>(\n 'GET',\n `/session/${this._sessionId}/round/${encodeURIComponent(roundId)}`,\n );\n\n getLogger('RGSAdapter').info('Round fetched', response);\n\n this.emitAction(ServiceActions.HISTORY, response);\n return response;\n }\n\n /**\n * Get player balance\n * GET /session/{sessionId}/balance\n */\n public async getBalance(): Promise<PlatformResponse> {\n getLogger('RGSAdapter').info('Fetching balance...');\n\n\n const response = await this.request<PlatformResponse>('GET', `/session/${this._sessionId}/balance`);\n\n getLogger('RGSAdapter').info('Balance fetched', response);\n\n this.emitAction(ServiceActions.BALANCE_UPDATE, response);\n return response;\n }\n\n /**\n * Replay a completed spin by nonce\n * GET /session/{sessionId}/replay/{nonce}\n */\n public async replay(nonce: number): Promise<GameplayResponse> {\n\n getLogger('RGSAdapter').info('Replaying spin...', { nonce });\n\n const response = await this.request<GameplayResponse>('GET', `/session/${this._sessionId}/replay/${nonce}`);\n\n getLogger('RGSAdapter').info('Replay response', response);\n\n this.emitAction(ServiceActions.GAMEPLAY, response);\n return response;\n }\n\n /**\n * Make an HTTP request to the backend API\n */\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const url = `${this.baseUrl}${path}`;\n const xhr = new XMLHttpRequest();\n\n xhr.open(method, url);\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.timeout = this.requestTimeout;\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 400) {\n try {\n const response: T = JSON.parse(xhr.responseText);\n\n getLogger('RGSAdapter').debug('Response received', { url, response });\n\n resolve(response);\n } catch (error) {\n const serviceError: ServiceError = {\n code: 500,\n message: 'Failed to parse response',\n error: xhr.responseText,\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error('Failed to parse response'));\n }\n } else {\n let serviceError: ServiceError;\n try {\n serviceError = JSON.parse(xhr.responseText);\n } catch {\n serviceError = {\n code: xhr.status,\n message: xhr.statusText,\n error: xhr.responseText,\n };\n }\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error(`HTTP ${xhr.status}: ${serviceError.message || xhr.statusText}`));\n }\n };\n\n xhr.onerror = () => {\n const reason = xhr.status === 0 ? 'CORS' : 'Network error';\n const serviceError: ServiceError = {\n code: 0,\n message: reason,\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error(reason));\n };\n\n xhr.onabort = () => {\n const serviceError: ServiceError = {\n code: -1,\n message: 'Request aborted',\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(new Error('Request aborted'));\n };\n\n xhr.ontimeout = () => {\n const serviceError: ServiceError = {\n code: 408,\n message: 'Request timeout',\n };\n this.emitAction(ServiceActions.TIMEOUT, serviceError);\n reject(new Error('Request timeout'));\n };\n\n try {\n const bodyString = body ? JSON.stringify(body) : undefined;\n\n getLogger('RGSAdapter').debug('Sending request', { url, method, body: bodyString });\n\n xhr.send(bodyString);\n } catch (error) {\n const serviceError: ServiceError = {\n code: 500,\n message: 'Failed to send request',\n error: String(error),\n };\n this.emitAction(ServiceActions.ERROR, serviceError);\n reject(error);\n }\n });\n }\n}\n","const IPIFY_URL = 'https://api.ipify.org?format=json';\nconst LOOKUP_TIMEOUT_MS = 5000;\n\nlet cachedIp: string | null = null;\n\nexport interface ResolvePublicIpOptions {\n configIp?: string;\n queryParams?: URLSearchParams;\n}\n\n/**\n * Resolves the client's public IP for dev session creation.\n * Priority: ?clientIP= / ?ip= query param → config override → ipify.org lookup.\n */\nexport async function resolvePublicIp(options: ResolvePublicIpOptions = {}): Promise<string> {\n if (cachedIp) {\n return cachedIp;\n }\n\n const params = options.queryParams ?? new URLSearchParams(window.location.search);\n const fromQuery = params.get('clientIP') || params.get('ip');\n if (fromQuery) {\n cachedIp = fromQuery;\n return fromQuery;\n }\n\n if (options.configIp) {\n cachedIp = options.configIp;\n return options.configIp;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), LOOKUP_TIMEOUT_MS);\n\n try {\n const response = await fetch(IPIFY_URL, { signal: controller.signal });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n const data = (await response.json()) as { ip?: string };\n if (!data.ip) {\n throw new Error('Invalid ipify response');\n }\n\n cachedIp = data.ip;\n return data.ip;\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error('Public IP lookup timeout');\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n","/**\n * Development adapter that creates session via POST /session\n * Use this in development to auto-create sessions\n * @module ServicePlugin/Adapters\n */\n\nimport { RGSAdapter, type RGSAdapterConfig } from './RGSAdapter';\nimport { resolvePublicIp } from './resolvePublicIp';\nimport type { SessionResponse } from '../types';\nimport { getLogger } from '../../../utils/Logger';\n\n/**\n * Create session request body\n */\ninterface CreateSessionRequest {\n operatorId: string;\n playerId: string;\n gameId: string;\n ip: string;\n userAgent: string;\n currency: string;\n}\n\n/**\n * Development adapter configuration\n */\nexport interface DevAdapterConfig extends Omit<RGSAdapterConfig, 'sessionId'> {\n /** Operator ID (UUID) */\n operatorId?: string;\n /** Player ID */\n playerId?: string;\n /** Game ID (UUID) */\n gameId?: string;\n /** Currency code */\n currency?: string;\n /** Optional public IP override (also overridable via ?clientIP= or ?ip=) */\n ip?: string;\n}\n\n/**\n * Development adapter that auto-creates sessions\n *\n * This adapter calls POST /session to create a new session,\n * then uses the returned sessionId for subsequent requests.\n *\n * @example\n * ```typescript\n * const adapter = new DevAdapter({\n * baseUrl: 'http://localhost:3000',\n * debug: true,\n * });\n *\n * // Creates session and returns session info\n * const session = await adapter.getSession();\n * console.log('Session ID:', adapter.sessionId);\n * ```\n */\nexport class DevAdapter extends RGSAdapter {\n private createSessionData: Omit<CreateSessionRequest, 'ip'>;\n private configIp?: string;\n private queryParams: URLSearchParams;\n private _sessionCreated = false;\n\n constructor(config: DevAdapterConfig) {\n // Initialize parent with empty session ID (will be set after creation)\n super({\n ...config,\n sessionId: '',\n });\n\n this.configIp = config.ip;\n this.queryParams = new URLSearchParams(window.location.search);\n\n // Query string overrides config; config overrides defaults\n this.createSessionData = {\n operatorId:\n this.queryParams.get('operatorId') ||\n config.operatorId ||\n '00000000-0000-0000-0000-000000000001',\n playerId: this.queryParams.get('playerId') || config.playerId || 'web-client-2',\n gameId:\n this.queryParams.get('gameId') ||\n config.gameId ||\n 'b0a60930-82b4-4097-99c8-78299cef6e80',\n userAgent: window.navigator.userAgent,\n currency: this.queryParams.get('currency') || config.currency || 'USD',\n };\n getLogger('DevAdapter').info('DevAdapter initialized', this.createSessionData);\n }\n\n /**\n * Get session - creates session if not exists, then fetches session info\n */\n public override async getSession(): Promise<SessionResponse> {\n // Create session if not already created\n if (!this._sessionCreated) {\n await this.createSession();\n }\n\n // Now call parent getSession\n return super.getSession();\n }\n\n /**\n * Create a new session via POST /session\n */\n private async createSession(): Promise<SessionResponse> {\n const ip = await resolvePublicIp({\n configIp: this.configIp,\n queryParams: this.queryParams,\n });\n\n const sessionPayload: CreateSessionRequest = {\n ...this.createSessionData,\n ip,\n };\n\n const url = `${this['baseUrl']}/session`;\n\n getLogger('DevAdapter').info('Creating session...', { url, data: sessionPayload });\n\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open('POST', url);\n request.setRequestHeader('Content-Type', 'application/json');\n request.timeout = this['requestTimeout'];\n\n request.onload = () => {\n if (request.status >= 200 && request.status < 300) {\n try {\n const response: SessionResponse = JSON.parse(request.responseText);\n\n // Store the session ID\n this['_sessionId'] = response.sessionId;\n this._sessionCreated = true;\n\n getLogger('DevAdapter').info('Session created', {\n sessionId: response.sessionId,\n state: response.state,\n });\n\n resolve(response);\n } catch (error) {\n getLogger('DevAdapter').error('Failed to parse session response', error);\n reject(error);\n }\n } else {\n const errorMsg = `HTTP ${request.status}: ${request.responseText}`;\n getLogger('DevAdapter').error('Failed to create session', errorMsg);\n reject(new Error(errorMsg));\n }\n };\n\n request.onerror = () => {\n const reason = request.status === 0 ? 'CORS' : 'Network error';\n getLogger('DevAdapter').error(`Network error creating session (${reason})`);\n reject(new Error(reason));\n };\n\n request.ontimeout = () => {\n getLogger('DevAdapter').error('Timeout creating session');\n reject(new Error('Request timeout'));\n };\n\n try {\n request.send(JSON.stringify(sessionPayload));\n } catch (error) {\n getLogger('DevAdapter').error('Failed to send create session request', error);\n reject(error);\n }\n });\n }\n}\n","// @ts-ignore - lodash types may not be available\nimport { merge } from 'lodash';\nimport { EventEmitter } from 'pixi.js';\nimport type { ThemeData, SkinOptions } from './SkinPlugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport type { ISkin, SkinEvents } from './ISkin';\n\n/**\n * Skin implementation for theme-based configuration.\n *\n * Skin manages theme data and provides property access with automatic merging\n * of default and current theme properties. Supports global data injection.\n *\n * ## Features\n *\n * - **Multi-Theme Support**: Switch between different themes at runtime\n * - **Property Merging**: Current theme inherits from default theme\n * - **Data Injection**: Global data can be injected using template strings\n * - **Event Emission**: Fires events on theme changes and data injection\n * - **Fallback Handling**: Falls back to default theme if theme not found\n *\n * ## Data Injection\n *\n * Skin supports template string injection using `${path}` syntax:\n *\n * ```typescript\n * // Skin data with template strings\n * const skinData = {\n * default: {\n * color: '${ui.default.themeColor.default}',\n * fontSize: '${ui.default.fontSize.normal}'\n * }\n * };\n *\n * // Set global data\n * skinPlugin.setGlobalData('ui.default.themeColor.default', 0xFFD100);\n * skinPlugin.setGlobalData('ui.default.fontSize.normal', 24);\n *\n * // Properties are automatically injected\n * const props = skin.getProperties();\n * // { color: 0xFFD100, fontSize: 24 }\n * ```\n *\n * @typeParam T - The type of properties this skin manages\n *\n * @example\n * ```typescript\n * // Create skin with multiple themes\n * const { skin } = skinPlugin.createSkin({\n * data: {\n * default: {\n * background: { color: 0xFF0000 },\n * text: { fontSize: 24 }\n * },\n * dark: {\n * background: { color: 0x000000 }\n * // text inherits from default\n * },\n * mobile: {\n * text: { fontSize: 18 }\n * // background inherits from default\n * }\n * },\n * defaultTheme: 'default'\n * });\n *\n * // Get properties (merges default + current theme)\n * const props = skin.getProperties();\n *\n * // Switch theme\n * skin.setTheme('dark');\n *\n * // Listen to theme changes\n * skin.on('themeChanged', (event) => {\n * console.log(`Theme changed from ${event.oldTheme} to ${event.newTheme}`);\n * updateUI(skin.getProperties());\n * });\n * ```\n *\n * @public\n */\nexport class Skin<T = any> extends EventEmitter<SkinEvents<T>> implements ISkin<T> {\n private data: ThemeData<T>;\n private currentTheme: string;\n private defaultTheme: string;\n private id: string;\n private plugin: any; // SkinPlugin instance\n\n constructor(options: SkinOptions<T>, plugin: any) {\n super();\n this.data = options.data;\n this.defaultTheme = options.defaultTheme ?? Object.keys(this.data)[0];\n this.currentTheme = this.defaultTheme;\n this.id = Math.random().toString(36).substr(2, 9);\n this.plugin = plugin;\n }\n\n /**\n * Sets the current theme.\n *\n * If the theme doesn't exist, falls back to default theme.\n * Emits 'themeChanged' event if theme actually changes.\n *\n * @param themeName - Name of the theme to activate\n *\n * @example\n * ```typescript\n * skin.setTheme('dark');\n * skin.setTheme('mobile');\n * ```\n */\n setTheme(themeName: string): void {\n const oldTheme = this.currentTheme;\n let newTheme = themeName;\n\n // If theme doesn't exist, fallback to default\n if (!this.data[themeName]) {\n newTheme = this.defaultTheme;\n\n // Optional warning for non-existent themes (for debugging)\n if (this.plugin?.config?.debugMode) {\n getLogger('Skin').warn(\n `Theme \"${themeName}\" not found in skin data, falling back to default theme \"${this.defaultTheme}\"`,\n );\n }\n }\n\n // Only change and emit if actually different\n if (oldTheme !== newTheme) {\n this.currentTheme = newTheme;\n\n this.emit('themeChanged', {\n skin: this,\n oldTheme,\n newTheme,\n });\n }\n }\n\n /**\n * Gets the current theme name.\n *\n * @returns Current theme name\n */\n getCurrentTheme(): string {\n return this.currentTheme;\n }\n\n /**\n * Gets all properties for the current theme.\n *\n * Merges default theme properties with current theme properties.\n * Current theme properties override default theme properties.\n * Applies global data injection if configured.\n *\n * @returns Readonly properties object\n *\n * @example\n * ```typescript\n * const props = skin.getProperties();\n * button.applyStyle(props);\n * ```\n */\n getProperties(): Readonly<T> {\n const currentData = this.data[this.currentTheme] as any;\n const defaultData = this.data[this.defaultTheme] as any;\n\n // Deep merge default properties with current theme properties using lodash\n // Current theme overrides default theme properties\n let mergedData: T;\n if (!defaultData) {\n mergedData = currentData;\n } else if (!currentData) {\n mergedData = defaultData;\n } else {\n mergedData = merge({}, defaultData, currentData);\n }\n\n // Apply property injection if global data exists\n const injectedData = this.plugin?.injectGlobalData\n ? this.plugin.injectGlobalData(mergedData)\n : mergedData;\n\n // Return readonly to prevent mutation\n return Object.freeze(injectedData) as Readonly<T>;\n }\n\n /**\n * Gets a specific property by key.\n *\n * @param key - Property key\n * @returns Property value or undefined\n *\n * @example\n * ```typescript\n * const color = skin.getProperty('color');\n * ```\n */\n getProperty<K extends keyof T>(key: K): T[K] | undefined {\n const mergedProperties = this.getProperties();\n return mergedProperties ? mergedProperties[key] : undefined;\n }\n\n /**\n * Gets the unique skin ID.\n *\n * @returns Skin ID\n */\n getId(): string {\n return this.id;\n }\n\n getDefaultTheme(): string {\n return this.defaultTheme;\n }\n\n /**\n * Checks if a theme exists.\n *\n * @param themeName - Theme name to check\n * @returns True if theme exists\n */\n hasTheme(themeName: string): boolean {\n return !!this.data[themeName];\n }\n\n /**\n * Destroys the skin.\n *\n * Emits 'destroyed' event, removes all listeners, and unregisters from plugin.\n */\n destroy(): void {\n // Emit destroyed event before cleanup\n this.emit('destroyed');\n\n // Clear all event listeners to prevent memory leaks\n this.removeAllListeners();\n\n // Unregister from plugin\n this.plugin?.unregisterSkin(this);\n }\n}\n","import { Skin } from './Skin';\nimport type { SkinPluginConfig, SkinOptions } from './SkinPlugin.types';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport { getLogger } from '../../utils/Logger';\n\n/**\n * Event data for global data changes.\n *\n * @public\n */\nexport interface GlobalDataChangeEvent {\n /** Property path that changed */\n path: string;\n /** Previous value */\n oldValue: any;\n /** New value */\n newValue: any;\n /** Skins affected by this change */\n affectedSkins: Skin<any>[];\n}\n\n/**\n * Skin management plugin for theme-based UI configuration.\n *\n * SkinPlugin provides a centralized system for managing UI themes and data injection.\n * It allows components to have multiple themes and dynamically inject global data.\n *\n * ## Features\n *\n * - **Multi-Theme Support**: Create skins with multiple theme variants\n * - **Global Theme Switching**: Change themes across all skins at once\n * - **Data Injection**: Inject global data into skin properties using template strings\n * - **Automatic Updates**: Components automatically update when data changes\n * - **Type-Safe**: Full TypeScript support with generics\n *\n * ## Core Concepts\n *\n * ### 1. Skins\n * Skins are theme-based configuration objects. Each skin can have multiple themes\n * (default, dark, mobile, etc.) and properties are merged from default + current theme.\n *\n * ### 2. Global Data Injection\n * Use template strings `${path}` in skin data to reference global values:\n * ```typescript\n * const skinData = {\n * default: {\n * color: '${ui.default.themeColor.default}', // Will be injected\n * fontSize: '${ui.default.fontSize.normal}' // Will be injected\n * }\n * };\n * ```\n *\n * ### 3. Theme Inheritance\n * Themes inherit from the default theme. Only specify differences:\n * ```typescript\n * {\n * default: { color: 0xFF0000, size: 100 },\n * dark: { color: 0x000000 } // size inherited from default\n * }\n * ```\n *\n * @example\n * Basic usage:\n * ```typescript\n * const skinPlugin = new SkinPlugin({ debugMode: true });\n * engine.registerPlugin(skinPlugin);\n *\n * // Create a button skin\n * const { skin: buttonSkin } = skinPlugin.createSkin({\n * data: {\n * default: {\n * up: { background: { texture: 'btn_spin_up' } },\n * over: { background: { texture: 'btn_spin_over' } }\n * },\n * dark: {\n * up: { background: { texture: 'btn_spin_dark_up' } }\n * }\n * }\n * });\n *\n * // Use skin properties\n * const button = new ButtonComp({\n * skinData: buttonSkin.getProperties()\n * });\n *\n * // Switch theme\n * skinPlugin.setTheme('dark');\n * ```\n *\n * @example\n * Global data injection from EmptyScene:\n * ```typescript\n * const skinPlugin = engine.getPlugin<SkinPlugin>('skinPlugin');\n *\n * // Set global UI values\n * skinPlugin.setGlobalData('ui.default.fontSize.header', 36);\n * skinPlugin.setGlobalData('ui.default.fontSize.normal', 24);\n * skinPlugin.setGlobalData('ui.default.fontFamily', 'NotoSansBlack');\n * skinPlugin.setGlobalData('ui.default.textColor', 0xFFFFFF);\n * skinPlugin.setGlobalData('ui.default.themeColor.default', 0xFFD100);\n *\n * // Create skin with template strings\n * const { skin } = skinPlugin.createSkin({\n * data: {\n * default: {\n * title: {\n * fontSize: '${ui.default.fontSize.header}',\n * fontFamily: '${ui.default.fontFamily}',\n * fill: '${ui.default.textColor}'\n * },\n * button: {\n * color: '${ui.default.themeColor.default}'\n * }\n * }\n * }\n * });\n *\n * // Properties are automatically injected\n * const props = skin.getProperties();\n * // { title: { fontSize: 36, fontFamily: 'NotoSansBlack', fill: 0xFFFFFF },\n * // button: { color: 0xFFD100 } }\n * ```\n *\n * @example\n * Using with DataInjector from EmptyScene:\n * ```typescript\n * import { DataInjector } from '@rb-games/core/utils';\n *\n * // Start with default skin\n * let autoplaySkin = defaultAutoplayMenuSkin;\n *\n * // Inject specific textures\n * autoplaySkin = DataInjector(autoplaySkin, 'options.buttonSkin', {\n * up: { background: { texture: 'btn_checkbox_up' } },\n * over: { background: { texture: 'btn_checkbox_over' } },\n * down: { background: { texture: 'btn_checkbox_down' } }\n * });\n *\n * autoplaySkin = DataInjector(autoplaySkin, 'count.sliderSkin', {\n * up: { knob: { texture: 'icon_autoplay_slider_up' } },\n * over: { knob: { texture: 'icon_autoplay_slider_over' } }\n * });\n *\n * // Create skin with injected data\n * const { skin } = skinPlugin.createSkin({\n * data: { default: autoplaySkin }\n * });\n * ```\n *\n * @example\n * Listening to data changes:\n * ```typescript\n * const { skin } = skinPlugin.createSkin({ data: skinData });\n *\n * // Listen for data injection\n * skin.on('dataInjected', (event) => {\n * console.log(`Data changed: ${event.path}`);\n * console.log(`Old: ${event.oldValue}, New: ${event.newValue}`);\n * updateComponent(skin.getProperties());\n * });\n *\n * // Listen for theme changes\n * skin.on('themeChanged', (event) => {\n * console.log(`Theme: ${event.oldTheme} -> ${event.newTheme}`);\n * updateComponent(skin.getProperties());\n * });\n *\n * // Change global data (triggers dataInjected event)\n * skinPlugin.setGlobalData('ui.button.color', 0xFF0000);\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class SkinPlugin implements EnginePlugin {\n public name: string = 'skinPlugin';\n public priority: number = 50;\n public dependencies: string[] = [];\n\n private skins: Map<string, Skin<any>> = new Map();\n private skinCache: Map<string, { skinId: string; refCount: number }> = new Map();\n private globalTheme: string = '';\n private config: SkinPluginConfig;\n private isInitialized = false;\n private globalData: Record<string, any> = {};\n\n constructor(config: SkinPluginConfig = {}) {\n this.config = {\n autoCleanup: true,\n enableCache: true,\n ...config,\n };\n }\n\n public async initialize(engine: PixiEngine): Promise<void> {\n this.isInitialized = true;\n getLogger('SkinPlugin').info('SkinPlugin initialized with config', this.config);\n\n }\n\n public onReady(engine: PixiEngine): void {\n getLogger('SkinPlugin').debug('SkinPlugin is ready');\n }\n\n public isReady(): boolean {\n return this.isInitialized;\n }\n\n public cleanup(): void {\n this.clearAllSkins();\n this.isInitialized = false;\n getLogger('SkinPlugin').info('SkinPlugin cleaned up');\n }\n\n /**\n * Creates a new skin instance.\n *\n * Factory method that creates and registers a skin.\n *\n * @typeParam T - The type of skin properties\n * @param options - Skin configuration options\n * @returns Object containing the skin instance and its ID\n *\n * @example\n * ```typescript\n * const { skin, skinId } = skinPlugin.createSkin({\n * data: {\n * default: { color: 0xFF0000 },\n * dark: { color: 0x000000 }\n * },\n * defaultTheme: 'default'\n * });\n * ```\n */\n public createSkin<T extends Record<string, any>>(\n options: SkinOptions<T>,\n ): { skin: Skin<T>; skinId: string; cached?: boolean } {\n const useCache = options.useCache ?? true;\n\n if (useCache && this.config.enableCache) {\n const cacheKey = options.cacheKey || this.generateCacheKey(options);\n const cached = this.skinCache.get(cacheKey);\n\n if (cached) {\n cached.refCount++;\n getLogger('SkinPlugin').debug(`Reusing cached skin: ${cacheKey} (refCount: ${cached.refCount})`);\n\n const skin = this.skins.get(cached.skinId);\n return { skin: skin as Skin<T>, skinId: cached.skinId, cached: true };\n }\n\n const { skin, skinId } = this.createAndRegisterSkin<T>(options);\n this.skinCache.set(cacheKey, { skinId, refCount: 1 });\n\n getLogger('SkinPlugin').debug(`Created and cached new skin: ${cacheKey}`);\n\n return { skin, skinId, cached: false };\n }\n\n return this.createAndRegisterSkin<T>(options);\n }\n\n private createAndRegisterSkin<T>(options: SkinOptions<T>): { skin: Skin<T>; skinId: string } {\n const skin = new Skin<T>(options, this);\n skin.setTheme(this.globalTheme);\n const skinId = this.registerSkin(skin);\n return { skin, skinId };\n }\n\n public registerSkin(skin: Skin<any>): string {\n const skinId = skin.getId();\n this.skins.set(skinId, skin);\n getLogger('SkinPlugin').debug(`Registered skin: ${skinId}`);\n\n return skinId;\n }\n\n public unregisterSkin(skin: Skin<any> | string): void {\n const skinId = typeof skin === 'string' ? skin : skin.getId();\n const removed = this.skins.delete(skinId);\n if (removed) getLogger('SkinPlugin').debug(`Unregistered skin: ${skinId}`);\n }\n\n /**\n * Sets the global theme for all registered skins.\n *\n * Applies the theme to all skins that have it defined.\n *\n * @param themeName - Theme name to activate\n *\n * @example\n * ```typescript\n * skinPlugin.setTheme('dark');\n * skinPlugin.setTheme('mobile');\n * ```\n */\n public setTheme(themeName: string): void {\n this.globalTheme = themeName;\n\n // Apply theme to all registered skins\n this.skins.forEach((skin) => {\n if (skin.hasTheme(themeName)) {\n skin.setTheme(themeName);\n }\n });\n\n getLogger('SkinPlugin').info(`Applied theme \"${themeName}\" to ${this.skins.size} skins`);\n\n }\n\n public getTheme(): string {\n return this.globalTheme;\n }\n\n public getSkinCount(): number {\n return this.skins.size;\n }\n\n public getAllSkins(): Skin<any>[] {\n return Array.from(this.skins.values());\n }\n\n public clearAllSkins(): void {\n this.skins.forEach((skin) => skin.destroy());\n this.skins.clear();\n getLogger('SkinPlugin').debug('Cleared all skins');\n }\n\n public getSkinById(id: string): Skin<any> | undefined {\n return this.skins.get(id);\n }\n\n /**\n * Sets global data for property injection.\n *\n * Updates global data and triggers 'dataInjected' event on affected skins.\n * Skins using template strings like `${path}` will be automatically updated.\n *\n * @param path - Dot-notation path (e.g., 'ui.button.color')\n * @param value - Value to set\n * @example\n * ```typescript\n * skinPlugin.setGlobalData('ui.default.themeColor.default', 0xFFD100);\n * skinPlugin.setGlobalData('ui.default.fontSize.header', 36);\n * // Or set multiple values at once:\n * skinPlugin.setGlobalData({\n * 'ui.default.themeColor.default': 0xFFD100,\n * 'ui.default.fontSize.header': 36\n * });\n * ```\n */\n public setGlobalData(path: string, value: any): void;\n public setGlobalData(data: Record<string, any>): void;\n public setGlobalData(pathOrData: string | Record<string, any>, value?: any): void {\n if (typeof pathOrData === 'object') {\n Object.entries(pathOrData).forEach(([path, val]) => {\n this.setGlobalData(path, val);\n });\n return;\n }\n\n const path = pathOrData;\n const oldValue = this.getNestedProperty(this.globalData, path);\n\n // Only proceed if value actually changed\n if (oldValue === value) return;\n\n this.setNestedProperty(this.globalData, path, value);\n\n getLogger('SkinPlugin').debug(`Set global data: ${path} = ${JSON.stringify(value)}`);\n\n // Find affected skins\n const affectedSkins = this.findSkinsUsingProperty(path);\n\n // Trigger dataInjected event on affected skins\n affectedSkins.forEach((skin) => {\n skin.emit('dataInjected', {\n path,\n oldValue,\n newValue: value,\n });\n });\n }\n\n /**\n * Gets global data.\n *\n * @param path - Optional dot-notation path. If omitted, returns all global data.\n * @returns Global data value or entire global data object\n */\n public getGlobalData(path?: string): any {\n if (!path) return this.globalData;\n return this.getNestedProperty(this.globalData, path);\n }\n\n public clearGlobalData(): void {\n this.globalData = {};\n getLogger('SkinPlugin').debug('Cleared all global data');\n }\n\n public clearCache(): void {\n this.skinCache.clear();\n getLogger('SkinPlugin').debug('Cleared skin cache');\n }\n\n public getCacheStats(): { size: number; entries: Array<{ key: string; skinId: string; refCount: number }> } {\n const entries = Array.from(this.skinCache.entries()).map(([key, value]) => ({\n key,\n skinId: value.skinId,\n refCount: value.refCount,\n }));\n return { size: this.skinCache.size, entries };\n }\n\n private generateCacheKey(options: SkinOptions<any>): string {\n const normalized = this.stringifyDeterministic(options.data, 0);\n return this.simpleHash(normalized);\n }\n\n private stringifyDeterministic(obj: any, depth: number = 0): string {\n // Depth limit to prevent excessive recursion\n if (depth > 10) return '[deep]';\n\n if (obj === null) return 'null';\n if (obj === undefined) return 'undefined';\n if (typeof obj !== 'object') return JSON.stringify(obj);\n\n // Check if this is a class instance (not a plain object)\n const isClassInstance = obj.constructor && obj.constructor !== Object && !Array.isArray(obj);\n if (isClassInstance) {\n // Use constructor name + toString for better uniqueness\n return `[${obj.constructor.name}:${obj.toString()}]`;\n }\n\n if (Array.isArray(obj)) {\n const parts: string[] = [];\n for (let i = 0; i < obj.length; i++) {\n parts.push(this.stringifyDeterministic(obj[i], depth + 1));\n }\n return '[' + parts.join(',') + ']';\n }\n\n const keys = Object.keys(obj).sort();\n const parts: string[] = [];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n parts.push(JSON.stringify(key) + ':' + this.stringifyDeterministic(obj[key], depth + 1));\n }\n return '{' + parts.join(',') + '}';\n }\n\n private simpleHash(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return `skin_${Math.abs(hash).toString(36)}`;\n }\n\n // Property injection for skins\n public injectGlobalData<T>(skinData: T): T {\n return this.injectProperties(skinData, this.globalData);\n }\n\n // Helper method to set nested properties\n private setNestedProperty(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n let current = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n }\n\n // Helper method to get nested properties\n private getNestedProperty(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n\n // Property injection logic\n private injectProperties<T>(obj: T, globalData: Record<string, any>): T {\n if (!obj || typeof obj !== 'object') return obj;\n\n // Preserve class instances (not plain objects or arrays)\n // This prevents class instances like FillGradient, Texture, etc. from being converted to plain objects\n if (obj.constructor !== Object && obj.constructor !== Array) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => this.injectProperties(item, globalData)) as T;\n }\n\n const result: any = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'string' && value.startsWith('${') && value.endsWith('}')) {\n // Property injection: ${ui.labels.button} -> globalData.ui.labels.button\n const propertyPath = value.slice(2, -1); // Remove ${ and }\n const injectedValue = this.getNestedProperty(globalData, propertyPath);\n result[key] = injectedValue !== undefined ? injectedValue : value;\n } else if (typeof value === 'object') {\n // Recursively inject properties in nested objects\n result[key] = this.injectProperties(value, globalData);\n } else {\n result[key] = value;\n }\n }\n\n return result as T;\n }\n\n // Find skins that use a specific property path\n private findSkinsUsingProperty(propertyPath: string): Skin<any>[] {\n const affectedSkins: Skin<any>[] = [];\n const templateString = `\\${${propertyPath}}`;\n\n this.skins.forEach((skin) => {\n if (this.skinUsesProperty(skin, templateString)) {\n affectedSkins.push(skin);\n }\n });\n\n return affectedSkins;\n }\n\n // Check if a skin uses a specific property in its data\n private skinUsesProperty(skin: Skin<any>, templateString: string): boolean {\n const skinData = (skin as any).data; // Access private data via type assertion\n return this.objectContainsTemplate(skinData, templateString);\n }\n\n // Recursively check if an object contains a specific template string\n private objectContainsTemplate(obj: any, templateString: string): boolean {\n if (!obj || typeof obj !== 'object') return false;\n\n if (Array.isArray(obj)) {\n return obj.some((item) => this.objectContainsTemplate(item, templateString));\n }\n\n for (const value of Object.values(obj)) {\n if (typeof value === 'string' && value === templateString) {\n return true;\n } else if (typeof value === 'object') {\n if (this.objectContainsTemplate(value, templateString)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n [key: symbol]: any;\n}\n","import { Assets } from 'pixi.js';\nimport { sound, Sound, IMediaInstance } from '@pixi/sound';\nimport gsap from 'gsap';\nimport { PixiEngine } from '../../engine/PixiEngine';\nimport type { EnginePlugin } from '../Plugin.types';\nimport { getLogger } from '../../utils/Logger';\nimport type {\n SoundPluginConfig,\n SoundSpriteData,\n SpriteRegistryEntry,\n PlayOptions,\n QueueInOptions,\n ChannelConfig,\n SoundChannel,\n} from './SoundPlugin.types';\n\n/**\n * Sound playback and channel management plugin for PixiJS games.\n *\n * SoundPlugin provides a unified API for playing sounds, managing audio channels,\n * and handling sound sprites. It works with ResourcePlugin for asset loading.\n *\n * ## Features\n *\n * - **Channel System**: Separate volume/mute control for music, voice, sfx, ui\n * - **Sound Sprites**: Play segments of longer audio files\n * - **Unified Play API**: Same `play(alias)` for both sprites and regular sounds\n * - **Fade Effects**: FadeIn, fadeOut, crossfade with GSAP\n * - **Mobile Unlock**: Auto-unlock AudioContext on user interaction\n *\n * @example\n * ```typescript\n * const soundPlugin = new SoundPlugin({\n * channels: {\n * music: { volume: 0.7, maxInstances: 1 },\n * sfx: { volume: 0.8, maxInstances: 10 },\n * },\n * masterVolume: 1.0,\n * autoUnlock: true,\n * });\n *\n * engine.registerPlugin(soundPlugin);\n * await engine.initialize();\n *\n * // Add sprites\n * soundPlugin.addSprites('sfx-sprite', {\n * 'win-big': { start: 0, end: 3 },\n * 'spin': { start: 4, end: 5 },\n * });\n *\n * // Play sounds (sprites or regular)\n * await soundPlugin.play('win-big');\n * await soundPlugin.play('bgm-main', { loop: true });\n * ```\n *\n * @category Plugins\n * @public\n */\nexport class SoundPlugin implements EnginePlugin {\n public name: string = 'SoundPlugin';\n public priority: number = 60;\n public dependencies: string[] = ['resourcePlugin'];\n\n private config: SoundPluginConfig;\n\n /** Sprite alias -> sound alias + sprite key mapping */\n private spriteRegistry: Map<string, SpriteRegistryEntry> = new Map();\n\n /** Channel configurations */\n private channels: Map<SoundChannel, ChannelConfig> = new Map();\n\n /** Currently playing instances by alias */\n private playingInstances: Map<string, IMediaInstance[]> = new Map();\n\n /** Sound alias -> channel mapping */\n private soundChannelMap: Map<string, SoundChannel> = new Map();\n\n /** Master volume */\n private _masterVolume: number = 1.0;\n\n /** Audio context unlocked flag */\n private _unlocked: boolean = false;\n\n /** Active interval loop timers by alias */\n private intervalTimers: Map<string, ReturnType<typeof setTimeout>> = new Map();\n\n /** Active interval loop instance per alias — only this instance may schedule the next play */\n private activeLoopInstances: Map<string, IMediaInstance> = new Map();\n\n /** Store original PlayOptions for interval loops to restore on trigger/replay */\n private intervalLoopOptions: Map<string, PlayOptions> = new Map();\n\n /** Store original volume for all playing sounds (for mute/unmute restore) */\n private soundVolumeMap: Map<string, number> = new Map();\n\n /** Group -> tracked instances for stopGroup support */\n private groupInstances: Map<string, IMediaInstance[]> = new Map();\n\n constructor(config: SoundPluginConfig = {}) {\n this.config = {\n masterVolume: 1.0,\n autoUnlock: true,\n disableAutoPause: false,\n channels: {\n music: { volume: 1.0, maxInstances: 1 },\n voice: { volume: 1.0, maxInstances: 1 },\n sfx: { volume: 1.0, maxInstances: 10 },\n ui: { volume: 1.0, maxInstances: 5 },\n },\n ...config,\n };\n\n this._masterVolume = this.config.masterVolume ?? 1.0;\n }\n\n public async initialize(_engine: PixiEngine): Promise<void> {\n // Initialize channels\n this.initializeChannels();\n\n // Import channel mappings from ResourcePlugin\n const resourcePlugin = _engine.getPlugin<any>('resourcePlugin');\n if (resourcePlugin?.soundChannelMappings) {\n for (const [alias, channel] of resourcePlugin.soundChannelMappings) {\n this.soundChannelMap.set(alias, channel as SoundChannel);\n }\n getLogger('SoundPlugin').debug('Imported sound channel mappings from ResourcePlugin', {\n count: this.soundChannelMap.size,\n mappings: Object.fromEntries(this.soundChannelMap),\n });\n }\n\n // Setup auto-pause\n if (!this.config.disableAutoPause) {\n sound.disableAutoPause = false;\n } else {\n sound.disableAutoPause = true;\n }\n\n // Set initial master volume globally\n sound.volumeAll = this._masterVolume;\n\n // Setup auto-unlock\n if (this.config.autoUnlock) {\n this.setupAutoUnlock();\n }\n\n getLogger('SoundPlugin').info('SoundPlugin initialized', {\n channels: Array.from(this.channels.keys()),\n masterVolume: this._masterVolume,\n autoUnlock: this.config.autoUnlock,\n });\n }\n\n public onReady(_engine: PixiEngine): void {\n getLogger('SoundPlugin').debug('SoundPlugin is ready');\n }\n\n public cleanup(): void {\n this.stopAll();\n this.spriteRegistry.clear();\n this.playingInstances.clear();\n this.groupInstances.clear();\n this.soundChannelMap.clear();\n this.activeLoopInstances.clear();\n this.intervalTimers.forEach((timer) => clearTimeout(timer));\n this.intervalTimers.clear();\n getLogger('SoundPlugin').info('SoundPlugin cleaned up');\n }\n\n /**\n * Initialize channel configurations\n */\n private initializeChannels(): void {\n const defaultChannels: Record<SoundChannel, ChannelConfig> = {\n music: { volume: 0.7, maxInstances: 1 },\n voice: { volume: 1.0, maxInstances: 1 },\n sfx: { volume: 0.8, maxInstances: 10 },\n ui: { volume: 0.6, maxInstances: 5 },\n };\n\n const configChannels = this.config.channels ?? {};\n\n for (const channel of ['music', 'voice', 'sfx', 'ui'] as SoundChannel[]) {\n const config = {\n ...defaultChannels[channel],\n ...configChannels[channel],\n };\n this.channels.set(channel, config);\n }\n }\n\n /**\n * Setup auto-unlock for mobile browsers\n */\n private setupAutoUnlock(): void {\n const unlock = () => {\n if (this._unlocked) return;\n\n // Try to unlock audio context\n if (sound.context && sound.context.audioContext) {\n const ctx = sound.context.audioContext;\n if (ctx.state === 'suspended') {\n ctx.resume().then(() => {\n this._unlocked = true;\n getLogger('SoundPlugin').info('AudioContext unlocked');\n });\n } else {\n this._unlocked = true;\n }\n }\n\n // Remove listeners after unlock\n document.removeEventListener('touchstart', unlock, true);\n document.removeEventListener('touchend', unlock, true);\n document.removeEventListener('click', unlock, true);\n document.removeEventListener('keydown', unlock, true);\n };\n\n document.addEventListener('touchstart', unlock, true);\n document.addEventListener('touchend', unlock, true);\n document.addEventListener('click', unlock, true);\n document.addEventListener('keydown', unlock, true);\n }\n\n /**\n * Add sound sprites to a sound file.\n * Each sprite key becomes a playable alias.\n *\n * @param soundAlias - The alias of the loaded sound file\n * @param sprites - Map of sprite names to their start/end times\n * @param channel - Optional channel assignment for all sprites\n *\n * @example\n * ```typescript\n * soundPlugin.addSprites('sfx-sprite', {\n * 'win-big': { start: 0, end: 3 },\n * 'spin': { start: 4, end: 5.5 },\n * 'click': { start: 6, end: 6.2 },\n * }, 'sfx');\n * ```\n */\n public addSprites(\n soundAlias: string,\n sprites: Record<string, SoundSpriteData>,\n channel?: SoundChannel\n ): void {\n const soundInstance = Assets.get<Sound>(soundAlias);\n\n if (!soundInstance) {\n getLogger('SoundPlugin').warn(`Sound not found: ${soundAlias}. Make sure it's loaded first.`);\n return;\n }\n\n // Add sprites to the sound instance\n soundInstance.addSprites(sprites);\n\n // Register each sprite as a playable alias\n for (const spriteKey of Object.keys(sprites)) {\n this.spriteRegistry.set(spriteKey, {\n soundAlias,\n spriteKey,\n channel,\n });\n\n if (channel) {\n this.soundChannelMap.set(spriteKey, channel);\n }\n }\n\n getLogger('SoundPlugin').debug(`Added ${Object.keys(sprites).length} sprites to ${soundAlias}`, {\n sprites: Object.keys(sprites),\n channel,\n });\n }\n\n /**\n * Add sprites from a JSON file.\n *\n * @param soundAlias - The alias of the loaded sound file\n * @param jsonPath - Path to the JSON file containing sprite definitions\n * @param channel - Optional channel assignment for all sprites\n */\n public async addSpritesFromJson(\n soundAlias: string,\n jsonPath: string,\n channel?: SoundChannel\n ): Promise<void> {\n try {\n const response = await fetch(jsonPath);\n const sprites = await response.json() as Record<string, SoundSpriteData>;\n this.addSprites(soundAlias, sprites, channel);\n } catch (error) {\n getLogger('SoundPlugin').error(`Failed to load sprites from ${jsonPath}`, error);\n }\n }\n\n /**\n * Register a sound alias to a channel.\n *\n * @param alias - Sound alias\n * @param channel - Channel to assign\n */\n public setChannel(alias: string, channel: SoundChannel): void {\n this.soundChannelMap.set(alias, channel);\n }\n\n /**\n * Play a sound by alias. Works for both regular sounds and sprites.\n *\n * @param alias - Sound alias or sprite name\n * @param options - Play options\n * @returns Promise resolving to the media instance\n *\n * @example\n * ```typescript\n * // Play regular sound\n * await soundPlugin.play('bgm-main', { loop: true });\n *\n * // Play sprite (same API)\n * await soundPlugin.play('win-big');\n * ```\n */\n public async play(alias: string, options: PlayOptions = {}): Promise<IMediaInstance | null> {\n // Auto-stop previous sounds under the same alias if requested\n if (options.group && options.stopPreviousGroup) {\n this.stopGroup(options.group);\n }\n\n // Check if this is a sprite\n const spriteInfo = this.spriteRegistry.get(alias);\n\n let soundInstance: Sound | undefined;\n let playAlias: string | undefined;\n\n const resolveAlias = spriteInfo ? spriteInfo.soundAlias : alias;\n\n if (spriteInfo) {\n playAlias = spriteInfo.spriteKey;\n }\n\n // Try cache first, lazy load if not found\n soundInstance = Assets.get<Sound>(resolveAlias);\n if (!soundInstance) {\n try {\n getLogger('SoundPlugin').debug(`Lazy loading sound: ${resolveAlias}`);\n soundInstance = await Assets.load<Sound>(resolveAlias);\n } catch (error) {\n getLogger('SoundPlugin').warn(`Sound not found: ${alias}`, error);\n return null;\n }\n }\n\n // Get channel for volume calculation\n const channel = spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n const channelConfig = channel ? this.channels.get(channel) : undefined;\n const channelVolume = channelConfig?.volume ?? 1.0;\n const maxInstances = channelConfig?.maxInstances ?? 10;\n\n // Calculate final volume (master volume handled globally via sound.volumeAll)\n const baseVolume = options.volume ?? 1.0;\n const isMuted = channelConfig?.muted ?? false;\n const finalVolume = isMuted ? 0 : baseVolume * channelVolume;\n\n // Store original volume for mute/unmute restore\n this.soundVolumeMap.set(alias, baseVolume);\n\n // Check max instances\n const currentInstances = this.playingInstances.get(alias) ?? [];\n if (currentInstances.length >= maxInstances) {\n // Stop oldest instance\n const oldest = currentInstances.shift();\n oldest?.stop();\n }\n\n // If loopInterval is set, use interval loop instead of native loop\n const useIntervalLoop = options.loopInterval !== undefined;\n\n // Clear any existing interval timer\n if (useIntervalLoop) {\n this.clearIntervalTimer(alias);\n }\n\n // Play the sound\n try {\n const playOptions: any = {\n volume: finalVolume,\n loop: useIntervalLoop ? false : (options.loop ?? false),\n speed: options.speed ?? 1,\n complete: options.complete,\n };\n\n if (options.start !== undefined) {\n playOptions.start = options.start;\n }\n if (options.end !== undefined) {\n playOptions.end = options.end;\n }\n\n let instance: IMediaInstance;\n\n if (playAlias) {\n // Play sprite with options\n playOptions.sprite = playAlias;\n }\n\n const playResult = soundInstance.play(playOptions);\n\n // DEBUG: Check if Sound.play() returns Promise or IMediaInstance\n const isPromise = playResult instanceof Promise;\n const audioCtxState = sound.context?.audioContext?.state;\n getLogger('SoundPlugin').debug(`Sound.play() result for: ${alias}`, {\n isPromise,\n audioContextState: audioCtxState,\n resultType: isPromise ? 'Promise' : typeof playResult,\n audioCtxState: audioCtxState,\n hasVolume: !isPromise && typeof (playResult as any)?.volume !== 'undefined',\n });\n\n instance = playResult as IMediaInstance;\n\n // Track instance\n if (!this.playingInstances.has(alias)) {\n this.playingInstances.set(alias, []);\n }\n this.playingInstances.get(alias)!.push(instance);\n\n // Track under group if provided\n const playGroup = options.group;\n if (playGroup) {\n if (!this.groupInstances.has(playGroup)) {\n this.groupInstances.set(playGroup, []);\n }\n this.groupInstances.get(playGroup)!.push(instance);\n }\n\n // Register as the active loop instance (replaces any previous)\n if (useIntervalLoop) {\n this.activeLoopInstances.set(alias, instance);\n // Store original options for trigger/replay\n this.intervalLoopOptions.set(alias, options);\n }\n\n // Cleanup function for removing instance from tracking\n const cleanupInstance = () => {\n const instances = this.playingInstances.get(alias);\n if (instances) {\n const idx = instances.indexOf(instance);\n if (idx !== -1) {\n instances.splice(idx, 1);\n }\n }\n\n // Clean up group tracking\n if (playGroup) {\n const groupInsts = this.groupInstances.get(playGroup);\n if (groupInsts) {\n const aIdx = groupInsts.indexOf(instance);\n if (aIdx !== -1) {\n groupInsts.splice(aIdx, 1);\n }\n }\n }\n };\n\n // Remove from tracking when done (end = natural finish, stop = manual stop)\n instance.once('end', () => {\n cleanupInstance();\n\n // Schedule next play ONLY if THIS instance is the active loop instance\n if (useIntervalLoop && this.activeLoopInstances.get(alias) === instance && options.loopInterval !== undefined) {\n const delay = this.getIntervalDelay(options.loopInterval);\n const timer = setTimeout(() => {\n this.intervalTimers.delete(alias);\n if (this.activeLoopInstances.has(alias)) {\n this.play(alias, options);\n }\n }, delay);\n this.intervalTimers.set(alias, timer);\n }\n });\n\n // Also cleanup on manual stop\n instance.once('stop', cleanupInstance);\n\n return instance;\n } catch (error) {\n getLogger('SoundPlugin').error(`Failed to play sound: ${alias}`, error);\n return null;\n }\n }\n\n /**\n * Stop all sounds registered under a logical group.\n *\n * @param group - The logical group set via PlayOptions.group\n */\n public stopGroup(group: string): void {\n const instances = this.groupInstances.get(group);\n if (instances) {\n instances.forEach((inst) => inst.stop());\n this.groupInstances.delete(group);\n }\n }\n\n /**\n * Stop a sound by alias.\n *\n * @param alias - Sound alias or sprite name\n */\n public stopAlias(alias: string): void {\n // Remove from active loops and clear interval timer BEFORE stopping instances\n this.activeLoopInstances.delete(alias);\n this.intervalLoopOptions.delete(alias);\n this.soundVolumeMap.delete(alias);\n this.clearIntervalTimer(alias);\n\n const instances = this.playingInstances.get(alias);\n if (instances) {\n instances.forEach((instance) => instance.stop());\n this.playingInstances.delete(alias);\n }\n\n // Also try to stop the sound directly\n const spriteInfo = this.spriteRegistry.get(alias);\n const soundAlias = spriteInfo?.soundAlias ?? alias;\n const soundInstance = Assets.get<Sound>(soundAlias);\n soundInstance?.stop();\n }\n\n /**\n * Stop all sounds in a specific channel.\n *\n * @param channel - Channel name (music, sfx, voice, ui)\n */\n public stopChannel(channel: SoundChannel): void {\n const aliasesToRemove: string[] = [];\n\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n const spriteInfo = this.spriteRegistry.get(alias);\n const effectiveChannel = spriteInfo?.channel ?? soundChannel;\n\n if (effectiveChannel === channel) {\n instances.forEach((instance) => instance.stop());\n this.activeLoopInstances.delete(alias);\n this.intervalLoopOptions.delete(alias);\n this.clearIntervalTimer(alias);\n aliasesToRemove.push(alias);\n }\n });\n\n // Clean up playingInstances\n aliasesToRemove.forEach((alias) => this.playingInstances.delete(alias));\n }\n\n /**\n * Stop all playing sounds.\n */\n public stopAll(): void {\n // Clear all active loops and interval timers\n this.activeLoopInstances.clear();\n this.intervalLoopOptions.clear();\n this.soundVolumeMap.clear();\n this.intervalTimers.forEach((timer) => clearTimeout(timer));\n this.intervalTimers.clear();\n\n sound.stopAll();\n this.playingInstances.clear();\n this.groupInstances.clear();\n }\n\n /**\n * Pause a sound by alias.\n *\n * @param alias - Sound alias\n */\n public pause(alias: string): void {\n const spriteInfo = this.spriteRegistry.get(alias);\n const soundAlias = spriteInfo?.soundAlias ?? alias;\n const soundInstance = Assets.get<Sound>(soundAlias);\n soundInstance?.pause();\n }\n\n /**\n * Resume a paused sound.\n *\n * @param alias - Sound alias\n */\n public resume(alias: string): void {\n const spriteInfo = this.spriteRegistry.get(alias);\n const soundAlias = spriteInfo?.soundAlias ?? alias;\n const soundInstance = Assets.get<Sound>(soundAlias);\n soundInstance?.resume();\n }\n\n /**\n * Fade in a sound.\n *\n * @param alias - Sound alias\n * @param duration - Fade duration in seconds\n * @param options - Play options\n */\n public async fadeIn(alias: string, duration: number, options: PlayOptions = {}): Promise<void> {\n const instance = await this.play(alias, { ...options });\n if (!instance) return;\n instance.volume = 0;\n\n const spriteInfo = this.spriteRegistry.get(alias);\n const channel = spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n const targetVolume = options.volume ?? 1.0;\n\n // Use proxy object for tweening - allows dynamic volume calculation on each frame\n const proxy = { value: 0 };\n\n gsap.to(proxy, {\n value: targetVolume,\n duration,\n ease: 'power2.out',\n onUpdate: () => {\n // Recalculate final volume on each frame based on current channel state\n const channelConfig = channel ? this.channels.get(channel) : undefined;\n const isMuted = channelConfig?.muted ?? false;\n const channelVolume = channelConfig?.volume ?? 1.0;\n\n instance.volume = isMuted ? 0 : proxy.value * channelVolume;\n },\n });\n }\n\n /**\n * Fade out a sound.\n *\n * @param alias - Sound alias\n * @param duration - Fade duration in seconds\n * @param stopAfter - Whether to stop the sound after fading out\n */\n public async fadeOut(alias: string, duration: number, stopAfter: boolean = true): Promise<void> {\n const instances = this.playingInstances.get(alias);\n if (!instances || instances.length === 0) return;\n\n const spriteInfo = this.spriteRegistry.get(alias);\n const channel = spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n\n const promises = instances.map((instance) => {\n // Get current volume as starting point\n const startVolume = instance.volume;\n\n return new Promise<void>((resolve) => {\n // Use proxy object for tweening - allows dynamic volume calculation on each frame\n const proxy = { value: 1 }; // 1 = full volume, 0 = silent\n\n gsap.to(proxy, {\n value: 0,\n duration,\n ease: 'power2.in',\n onUpdate: () => {\n // Recalculate final volume on each frame based on current channel state\n const channelConfig = channel ? this.channels.get(channel) : undefined;\n const isMuted = channelConfig?.muted ?? false;\n const channelVolume = channelConfig?.volume ?? 1.0;\n\n instance.volume = isMuted ? 0 : startVolume * proxy.value * channelVolume;\n },\n onComplete: () => {\n if (stopAfter) {\n instance.stop();\n }\n resolve();\n },\n });\n });\n });\n\n await Promise.all(promises);\n\n if (stopAfter) {\n this.playingInstances.delete(alias);\n }\n }\n\n /**\n * Crossfade between two sounds.\n *\n * @param fromAlias - Sound to fade out\n * @param toAlias - Sound to fade in\n * @param duration - Crossfade duration in seconds\n * @param options - Play options for the new sound\n */\n public async crossfade(\n fromAlias: string,\n toAlias: string,\n duration: number,\n options: PlayOptions = {}\n ): Promise<void> {\n await Promise.all([\n this.fadeOut(fromAlias, duration),\n this.fadeIn(toAlias, duration, options),\n ]);\n }\n\n /**\n * Fade out all sounds in a channel.\n *\n * @param channel - Channel name\n * @param duration - Fade duration in seconds\n */\n public async fadeOutChannel(channel: SoundChannel, duration: number): Promise<void> {\n const aliasesToFadeOut: string[] = [];\n\n this.playingInstances.forEach((instances, alias) => {\n if (instances.length === 0) return;\n\n const soundChannel = this.soundChannelMap.get(alias);\n const spriteInfo = this.spriteRegistry.get(alias);\n const effectiveChannel = spriteInfo?.channel ?? soundChannel;\n\n if (effectiveChannel === channel) {\n aliasesToFadeOut.push(alias);\n }\n });\n\n if (aliasesToFadeOut.length === 0) return;\n\n await Promise.all(aliasesToFadeOut.map((alias) => this.fadeOut(alias, duration, true)));\n }\n\n /**\n * Queue in a new sound by fading out all sounds in its channel and fading in the new one.\n * Supports both crossfade (simultaneous) and sequential (fade out first, then fade in) transitions.\n *\n * @param alias - Sound alias to play\n * @param duration - Fade in duration in seconds\n * @param options - Queue in options (includes fadeOutDuration, type, channel, and PlayOptions)\n * @returns The new sound instance, or null if failed\n *\n * @example\n * ```typescript\n * // Crossfade (default) - fade out existing and fade in new simultaneously\n * soundPlugin.queueIn('freespin', 1, { loop: true });\n *\n * // Sequential - fade out first, then fade in\n * soundPlugin.queueIn('freespin', 1, { loop: true, type: 'sequential' });\n *\n * // Different fade durations\n * soundPlugin.queueIn('freespin', 1, { loop: true, fadeOutDuration: 0.5 });\n * ```\n */\n public async queueIn(\n alias: string,\n duration: number,\n options: QueueInOptions = {}\n ): Promise<IMediaInstance | null> {\n const { fadeOutDuration, type = 'crossfade', channel: overrideChannel, ...playOptions } = options;\n\n // Determine channel from override, sprite registry, or sound channel map\n const spriteInfo = this.spriteRegistry.get(alias);\n const channel = overrideChannel ?? spriteInfo?.channel ?? this.soundChannelMap.get(alias);\n\n if (!channel) {\n getLogger('SoundPlugin').warn(`queueIn: No channel found for alias \"${alias}\"`);\n return this.fadeIn(alias, duration, playOptions).then(() => {\n const instances = this.playingInstances.get(alias);\n return instances?.[instances.length - 1] ?? null;\n });\n }\n\n const fadeOutTime = fadeOutDuration ?? duration;\n\n if (type === 'sequential') {\n // Sequential: fade out first, then fade in\n await this.fadeOutChannel(channel, fadeOutTime);\n await this.fadeIn(alias, duration, playOptions);\n } else {\n // Crossfade: fade out and fade in simultaneously\n await Promise.all([\n this.fadeOutChannel(channel, fadeOutTime),\n this.fadeIn(alias, duration, playOptions),\n ]);\n }\n\n // Return the new instance\n const instances = this.playingInstances.get(alias);\n return instances?.[instances.length - 1] ?? null;\n }\n\n /**\n * Set channel volume.\n *\n * @param channel - Channel name\n * @param volume - Volume (0-1)\n */\n public setChannelVolume(channel: SoundChannel, volume: number): void {\n const config = this.channels.get(channel);\n if (config) {\n const newVolume = Math.max(0, Math.min(1, volume));\n config.volume = newVolume;\n this.channels.set(channel, config);\n\n // Update volume of all currently playing instances in this channel (if not muted)\n if (!config.muted) {\n this.setChannelInstancesVolume(channel, newVolume);\n }\n\n getLogger('SoundPlugin').debug(`Channel ${channel} volume set to ${volume}`);\n }\n }\n\n /**\n * Get channel volume.\n *\n * @param channel - Channel name\n * @returns Volume (0-1)\n */\n public getChannelVolume(channel: SoundChannel): number {\n return this.channels.get(channel)?.volume ?? 1.0;\n }\n\n /**\n * Mute a channel.\n *\n * @param channel - Channel name\n */\n public muteChannel(channel: SoundChannel): void {\n const config = this.channels.get(channel);\n if (config) {\n config.muted = true;\n this.channels.set(channel, config);\n // Mute all currently playing instances in this channel\n this.setChannelInstancesVolume(channel, 0);\n getLogger('SoundPlugin').debug(`Channel ${channel} muted`);\n }\n }\n\n /**\n * Unmute a channel.\n *\n * @param channel - Channel name\n */\n public unmuteChannel(channel: SoundChannel): void {\n const config = this.channels.get(channel);\n if (config) {\n config.muted = false;\n this.channels.set(channel, config);\n // Restore volume on all currently playing instances in this channel\n this.setChannelInstancesVolume(channel, config.volume);\n getLogger('SoundPlugin').debug(`Channel ${channel} unmuted`);\n }\n }\n\n /**\n * Set volume on all currently playing instances in a channel.\n * Takes into account the original sound volume from soundVolumeMap.\n */\n private setChannelInstancesVolume(channel: SoundChannel, channelVolume: number): void {\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n const spriteInfo = this.spriteRegistry.get(alias);\n const effectiveChannel = spriteInfo?.channel ?? soundChannel;\n if (effectiveChannel === channel) {\n // Get original sound volume\n const soundVolume = this.soundVolumeMap.get(alias) ?? 1.0;\n const finalVolume = soundVolume * channelVolume;\n\n instances.forEach((instance: IMediaInstance) => {\n instance.volume = finalVolume;\n });\n }\n });\n }\n\n /**\n * Check if a channel is muted.\n *\n * @param channel - Channel name\n * @returns True if muted\n */\n public isChannelMuted(channel: SoundChannel): boolean {\n return this.channels.get(channel)?.muted ?? false;\n }\n\n /**\n * Pause all sounds in a channel.\n *\n * @param channel - Channel name\n */\n public pauseChannel(channel: SoundChannel): void {\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n if (soundChannel === channel) {\n instances.forEach((instance: IMediaInstance) => instance.paused = true);\n }\n });\n }\n\n /**\n * Resume all sounds in a channel.\n *\n * @param channel - Channel name\n */\n public resumeChannel(channel: SoundChannel): void {\n this.playingInstances.forEach((instances, alias) => {\n const soundChannel = this.soundChannelMap.get(alias);\n if (soundChannel === channel) {\n instances.forEach((instance: IMediaInstance) => instance.paused = false);\n }\n });\n }\n\n /**\n * Set master volume.\n *\n * @param volume - Volume (0-1)\n */\n public set masterVolume(volume: number) {\n this._masterVolume = Math.max(0, Math.min(1, volume));\n sound.volumeAll = this._masterVolume;\n getLogger('SoundPlugin').debug(`Master volume set to ${this._masterVolume}`);\n }\n\n /**\n * Get master volume.\n */\n public get masterVolume(): number {\n return this._masterVolume;\n }\n\n /**\n * Check if audio context is unlocked.\n */\n public get isUnlocked(): boolean {\n return this._unlocked;\n }\n\n /**\n * Calculate interval delay from a fixed number or random range.\n */\n private getIntervalDelay(loopInterval: number | [number, number]): number {\n if (Array.isArray(loopInterval)) {\n const [min, max] = loopInterval;\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n return loopInterval;\n }\n\n /**\n * Clear an active interval timer for an alias.\n */\n private clearIntervalTimer(alias: string): void {\n const timer = this.intervalTimers.get(alias);\n if (timer) {\n clearTimeout(timer);\n this.intervalTimers.delete(alias);\n }\n }\n\n /**\n * Trigger an interval loop sound immediately, skipping the wait timer.\n * Only works for sounds that are in interval loop mode (loopInterval).\n *\n * @param alias - Sound alias to trigger\n */\n public triggerIntervalLoop(alias: string): void {\n if (!this.activeLoopInstances.has(alias)) {\n getLogger('SoundPlugin').warn(`triggerIntervalLoop: \"${alias}\" is not an active interval loop`);\n return;\n }\n\n // Clear the existing timer\n this.clearIntervalTimer(alias);\n\n // Get original options (includes volume, loopInterval, etc.)\n const originalOptions = this.intervalLoopOptions.get(alias);\n\n // Play immediately with original options\n this.play(alias, originalOptions);\n }\n\n /**\n * Check if an alias is currently in interval loop mode.\n *\n * @param alias - Sound alias to check\n * @returns True if the alias is an active interval loop\n */\n public isIntervalLoop(alias: string): boolean {\n return this.activeLoopInstances.has(alias);\n }\n\n /**\n * Check if an alias is waiting for its next interval play.\n *\n * @param alias - Sound alias to check\n * @returns True if the alias has a pending interval timer\n */\n public isWaitingForInterval(alias: string): boolean {\n return this.intervalTimers.has(alias);\n }\n\n [key: symbol]: any;\n}\n","/*! Tweakpane 4.0.5 (c) 2016 cocopon, licensed under the MIT license. */\nfunction forceCast(v) {\n return v;\n}\nfunction isEmpty(value) {\n return value === null || value === undefined;\n}\nfunction isObject$1(value) {\n return value !== null && typeof value === 'object';\n}\nfunction isRecord(value) {\n return value !== null && typeof value === 'object';\n}\nfunction deepEqualsArray(a1, a2) {\n if (a1.length !== a2.length) {\n return false;\n }\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction deepMerge(r1, r2) {\n const keys = Array.from(new Set([...Object.keys(r1), ...Object.keys(r2)]));\n return keys.reduce((result, key) => {\n const v1 = r1[key];\n const v2 = r2[key];\n return isRecord(v1) && isRecord(v2)\n ? Object.assign(Object.assign({}, result), { [key]: deepMerge(v1, v2) }) : Object.assign(Object.assign({}, result), { [key]: key in r2 ? v2 : v1 });\n }, {});\n}\n\nfunction isBinding(value) {\n if (!isObject$1(value)) {\n return false;\n }\n return 'target' in value;\n}\n\nconst CREATE_MESSAGE_MAP = {\n alreadydisposed: () => 'View has been already disposed',\n invalidparams: (context) => `Invalid parameters for '${context.name}'`,\n nomatchingcontroller: (context) => `No matching controller for '${context.key}'`,\n nomatchingview: (context) => `No matching view for '${JSON.stringify(context.params)}'`,\n notbindable: () => `Value is not bindable`,\n notcompatible: (context) => `Not compatible with plugin '${context.id}'`,\n propertynotfound: (context) => `Property '${context.name}' not found`,\n shouldneverhappen: () => 'This error should never happen',\n};\nclass TpError {\n static alreadyDisposed() {\n return new TpError({ type: 'alreadydisposed' });\n }\n static notBindable() {\n return new TpError({\n type: 'notbindable',\n });\n }\n static notCompatible(bundleId, id) {\n return new TpError({\n type: 'notcompatible',\n context: {\n id: `${bundleId}.${id}`,\n },\n });\n }\n static propertyNotFound(name) {\n return new TpError({\n type: 'propertynotfound',\n context: {\n name: name,\n },\n });\n }\n static shouldNeverHappen() {\n return new TpError({ type: 'shouldneverhappen' });\n }\n constructor(config) {\n var _a;\n this.message =\n (_a = CREATE_MESSAGE_MAP[config.type](forceCast(config.context))) !== null && _a !== void 0 ? _a : 'Unexpected error';\n this.name = this.constructor.name;\n this.stack = new Error(this.message).stack;\n this.type = config.type;\n }\n toString() {\n return this.message;\n }\n}\n\nclass BindingTarget {\n constructor(obj, key) {\n this.obj_ = obj;\n this.key = key;\n }\n static isBindable(obj) {\n if (obj === null) {\n return false;\n }\n if (typeof obj !== 'object' && typeof obj !== 'function') {\n return false;\n }\n return true;\n }\n read() {\n return this.obj_[this.key];\n }\n write(value) {\n this.obj_[this.key] = value;\n }\n writeProperty(name, value) {\n const valueObj = this.read();\n if (!BindingTarget.isBindable(valueObj)) {\n throw TpError.notBindable();\n }\n if (!(name in valueObj)) {\n throw TpError.propertyNotFound(name);\n }\n valueObj[name] = value;\n }\n}\n\nclass Emitter {\n constructor() {\n this.observers_ = {};\n }\n on(eventName, handler, opt_options) {\n var _a;\n let observers = this.observers_[eventName];\n if (!observers) {\n observers = this.observers_[eventName] = [];\n }\n observers.push({\n handler: handler,\n key: (_a = opt_options === null || opt_options === void 0 ? void 0 : opt_options.key) !== null && _a !== void 0 ? _a : handler,\n });\n return this;\n }\n off(eventName, key) {\n const observers = this.observers_[eventName];\n if (observers) {\n this.observers_[eventName] = observers.filter((observer) => {\n return observer.key !== key;\n });\n }\n return this;\n }\n emit(eventName, event) {\n const observers = this.observers_[eventName];\n if (!observers) {\n return;\n }\n observers.forEach((observer) => {\n observer.handler(event);\n });\n }\n}\n\nclass ComplexValue {\n constructor(initialValue, config) {\n var _a;\n this.constraint_ = config === null || config === void 0 ? void 0 : config.constraint;\n this.equals_ = (_a = config === null || config === void 0 ? void 0 : config.equals) !== null && _a !== void 0 ? _a : ((v1, v2) => v1 === v2);\n this.emitter = new Emitter();\n this.rawValue_ = initialValue;\n }\n get constraint() {\n return this.constraint_;\n }\n get rawValue() {\n return this.rawValue_;\n }\n set rawValue(rawValue) {\n this.setRawValue(rawValue, {\n forceEmit: false,\n last: true,\n });\n }\n setRawValue(rawValue, options) {\n const opts = options !== null && options !== void 0 ? options : {\n forceEmit: false,\n last: true,\n };\n const constrainedValue = this.constraint_\n ? this.constraint_.constrain(rawValue)\n : rawValue;\n const prevValue = this.rawValue_;\n const changed = !this.equals_(prevValue, constrainedValue);\n if (!changed && !opts.forceEmit) {\n return;\n }\n this.emitter.emit('beforechange', {\n sender: this,\n });\n this.rawValue_ = constrainedValue;\n this.emitter.emit('change', {\n options: opts,\n previousRawValue: prevValue,\n rawValue: constrainedValue,\n sender: this,\n });\n }\n}\n\nclass PrimitiveValue {\n constructor(initialValue) {\n this.emitter = new Emitter();\n this.value_ = initialValue;\n }\n get rawValue() {\n return this.value_;\n }\n set rawValue(value) {\n this.setRawValue(value, {\n forceEmit: false,\n last: true,\n });\n }\n setRawValue(value, options) {\n const opts = options !== null && options !== void 0 ? options : {\n forceEmit: false,\n last: true,\n };\n const prevValue = this.value_;\n if (prevValue === value && !opts.forceEmit) {\n return;\n }\n this.emitter.emit('beforechange', {\n sender: this,\n });\n this.value_ = value;\n this.emitter.emit('change', {\n options: opts,\n previousRawValue: prevValue,\n rawValue: this.value_,\n sender: this,\n });\n }\n}\n\nclass ReadonlyPrimitiveValue {\n constructor(value) {\n this.emitter = new Emitter();\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value_ = value;\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n }\n get rawValue() {\n return this.value_.rawValue;\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\n\nfunction createValue(initialValue, config) {\n const constraint = config === null || config === void 0 ? void 0 : config.constraint;\n const equals = config === null || config === void 0 ? void 0 : config.equals;\n if (!constraint && !equals) {\n return new PrimitiveValue(initialValue);\n }\n return new ComplexValue(initialValue, config);\n}\nfunction createReadonlyValue(value) {\n return [\n new ReadonlyPrimitiveValue(value),\n (rawValue, options) => {\n value.setRawValue(rawValue, options);\n },\n ];\n}\n\nclass ValueMap {\n constructor(valueMap) {\n this.emitter = new Emitter();\n this.valMap_ = valueMap;\n for (const key in this.valMap_) {\n const v = this.valMap_[key];\n v.emitter.on('change', () => {\n this.emitter.emit('change', {\n key: key,\n sender: this,\n });\n });\n }\n }\n static createCore(initialValue) {\n const keys = Object.keys(initialValue);\n return keys.reduce((o, key) => {\n return Object.assign(o, {\n [key]: createValue(initialValue[key]),\n });\n }, {});\n }\n static fromObject(initialValue) {\n const core = this.createCore(initialValue);\n return new ValueMap(core);\n }\n get(key) {\n return this.valMap_[key].rawValue;\n }\n set(key, value) {\n this.valMap_[key].rawValue = value;\n }\n value(key) {\n return this.valMap_[key];\n }\n}\n\nclass DefiniteRangeConstraint {\n constructor(config) {\n this.values = ValueMap.fromObject({\n max: config.max,\n min: config.min,\n });\n }\n constrain(value) {\n const max = this.values.get('max');\n const min = this.values.get('min');\n return Math.min(Math.max(value, min), max);\n }\n}\n\nclass RangeConstraint {\n constructor(config) {\n this.values = ValueMap.fromObject({\n max: config.max,\n min: config.min,\n });\n }\n constrain(value) {\n const max = this.values.get('max');\n const min = this.values.get('min');\n let result = value;\n if (!isEmpty(min)) {\n result = Math.max(result, min);\n }\n if (!isEmpty(max)) {\n result = Math.min(result, max);\n }\n return result;\n }\n}\n\nclass StepConstraint {\n constructor(step, origin = 0) {\n this.step = step;\n this.origin = origin;\n }\n constrain(value) {\n const o = this.origin % this.step;\n const r = Math.round((value - o) / this.step);\n return o + r * this.step;\n }\n}\n\nclass NumberLiteralNode {\n constructor(text) {\n this.text = text;\n }\n evaluate() {\n return Number(this.text);\n }\n toString() {\n return this.text;\n }\n}\nconst BINARY_OPERATION_MAP = {\n '**': (v1, v2) => Math.pow(v1, v2),\n '*': (v1, v2) => v1 * v2,\n '/': (v1, v2) => v1 / v2,\n '%': (v1, v2) => v1 % v2,\n '+': (v1, v2) => v1 + v2,\n '-': (v1, v2) => v1 - v2,\n '<<': (v1, v2) => v1 << v2,\n '>>': (v1, v2) => v1 >> v2,\n '>>>': (v1, v2) => v1 >>> v2,\n '&': (v1, v2) => v1 & v2,\n '^': (v1, v2) => v1 ^ v2,\n '|': (v1, v2) => v1 | v2,\n};\nclass BinaryOperationNode {\n constructor(operator, left, right) {\n this.left = left;\n this.operator = operator;\n this.right = right;\n }\n evaluate() {\n const op = BINARY_OPERATION_MAP[this.operator];\n if (!op) {\n throw new Error(`unexpected binary operator: '${this.operator}`);\n }\n return op(this.left.evaluate(), this.right.evaluate());\n }\n toString() {\n return [\n 'b(',\n this.left.toString(),\n this.operator,\n this.right.toString(),\n ')',\n ].join(' ');\n }\n}\nconst UNARY_OPERATION_MAP = {\n '+': (v) => v,\n '-': (v) => -v,\n '~': (v) => ~v,\n};\nclass UnaryOperationNode {\n constructor(operator, expr) {\n this.operator = operator;\n this.expression = expr;\n }\n evaluate() {\n const op = UNARY_OPERATION_MAP[this.operator];\n if (!op) {\n throw new Error(`unexpected unary operator: '${this.operator}`);\n }\n return op(this.expression.evaluate());\n }\n toString() {\n return ['u(', this.operator, this.expression.toString(), ')'].join(' ');\n }\n}\n\nfunction combineReader(parsers) {\n return (text, cursor) => {\n for (let i = 0; i < parsers.length; i++) {\n const result = parsers[i](text, cursor);\n if (result !== '') {\n return result;\n }\n }\n return '';\n };\n}\nfunction readWhitespace(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^\\s+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readNonZeroDigit(text, cursor) {\n const ch = text.substr(cursor, 1);\n return ch.match(/^[1-9]$/) ? ch : '';\n}\nfunction readDecimalDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-9]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readSignedInteger(text, cursor) {\n const ds = readDecimalDigits(text, cursor);\n if (ds !== '') {\n return ds;\n }\n const sign = text.substr(cursor, 1);\n cursor += 1;\n if (sign !== '-' && sign !== '+') {\n return '';\n }\n const sds = readDecimalDigits(text, cursor);\n if (sds === '') {\n return '';\n }\n return sign + sds;\n}\nfunction readExponentPart(text, cursor) {\n const e = text.substr(cursor, 1);\n cursor += 1;\n if (e.toLowerCase() !== 'e') {\n return '';\n }\n const si = readSignedInteger(text, cursor);\n if (si === '') {\n return '';\n }\n return e + si;\n}\nfunction readDecimalIntegerLiteral(text, cursor) {\n const ch = text.substr(cursor, 1);\n if (ch === '0') {\n return ch;\n }\n const nzd = readNonZeroDigit(text, cursor);\n cursor += nzd.length;\n if (nzd === '') {\n return '';\n }\n return nzd + readDecimalDigits(text, cursor);\n}\nfunction readDecimalLiteral1(text, cursor) {\n const dil = readDecimalIntegerLiteral(text, cursor);\n cursor += dil.length;\n if (dil === '') {\n return '';\n }\n const dot = text.substr(cursor, 1);\n cursor += dot.length;\n if (dot !== '.') {\n return '';\n }\n const dds = readDecimalDigits(text, cursor);\n cursor += dds.length;\n return dil + dot + dds + readExponentPart(text, cursor);\n}\nfunction readDecimalLiteral2(text, cursor) {\n const dot = text.substr(cursor, 1);\n cursor += dot.length;\n if (dot !== '.') {\n return '';\n }\n const dds = readDecimalDigits(text, cursor);\n cursor += dds.length;\n if (dds === '') {\n return '';\n }\n return dot + dds + readExponentPart(text, cursor);\n}\nfunction readDecimalLiteral3(text, cursor) {\n const dil = readDecimalIntegerLiteral(text, cursor);\n cursor += dil.length;\n if (dil === '') {\n return '';\n }\n return dil + readExponentPart(text, cursor);\n}\nconst readDecimalLiteral = combineReader([\n readDecimalLiteral1,\n readDecimalLiteral2,\n readDecimalLiteral3,\n]);\nfunction parseBinaryDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[01]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readBinaryIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0b') {\n return '';\n }\n const bds = parseBinaryDigits(text, cursor);\n if (bds === '') {\n return '';\n }\n return prefix + bds;\n}\nfunction readOctalDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-7]+/);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readOctalIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0o') {\n return '';\n }\n const ods = readOctalDigits(text, cursor);\n if (ods === '') {\n return '';\n }\n return prefix + ods;\n}\nfunction readHexDigits(text, cursor) {\n var _a;\n const m = text.substr(cursor).match(/^[0-9a-f]+/i);\n return (_a = (m && m[0])) !== null && _a !== void 0 ? _a : '';\n}\nfunction readHexIntegerLiteral(text, cursor) {\n const prefix = text.substr(cursor, 2);\n cursor += prefix.length;\n if (prefix.toLowerCase() !== '0x') {\n return '';\n }\n const hds = readHexDigits(text, cursor);\n if (hds === '') {\n return '';\n }\n return prefix + hds;\n}\nconst readNonDecimalIntegerLiteral = combineReader([\n readBinaryIntegerLiteral,\n readOctalIntegerLiteral,\n readHexIntegerLiteral,\n]);\nconst readNumericLiteral = combineReader([\n readNonDecimalIntegerLiteral,\n readDecimalLiteral,\n]);\n\nfunction parseLiteral(text, cursor) {\n const num = readNumericLiteral(text, cursor);\n cursor += num.length;\n if (num === '') {\n return null;\n }\n return {\n evaluable: new NumberLiteralNode(num),\n cursor: cursor,\n };\n}\nfunction parseParenthesizedExpression(text, cursor) {\n const op = text.substr(cursor, 1);\n cursor += op.length;\n if (op !== '(') {\n return null;\n }\n const expr = parseExpression(text, cursor);\n if (!expr) {\n return null;\n }\n cursor = expr.cursor;\n cursor += readWhitespace(text, cursor).length;\n const cl = text.substr(cursor, 1);\n cursor += cl.length;\n if (cl !== ')') {\n return null;\n }\n return {\n evaluable: expr.evaluable,\n cursor: cursor,\n };\n}\nfunction parsePrimaryExpression(text, cursor) {\n var _a;\n return ((_a = parseLiteral(text, cursor)) !== null && _a !== void 0 ? _a : parseParenthesizedExpression(text, cursor));\n}\nfunction parseUnaryExpression(text, cursor) {\n const expr = parsePrimaryExpression(text, cursor);\n if (expr) {\n return expr;\n }\n const op = text.substr(cursor, 1);\n cursor += op.length;\n if (op !== '+' && op !== '-' && op !== '~') {\n return null;\n }\n const num = parseUnaryExpression(text, cursor);\n if (!num) {\n return null;\n }\n cursor = num.cursor;\n return {\n cursor: cursor,\n evaluable: new UnaryOperationNode(op, num.evaluable),\n };\n}\nfunction readBinaryOperator(ops, text, cursor) {\n cursor += readWhitespace(text, cursor).length;\n const op = ops.filter((op) => text.startsWith(op, cursor))[0];\n if (!op) {\n return null;\n }\n cursor += op.length;\n cursor += readWhitespace(text, cursor).length;\n return {\n cursor: cursor,\n operator: op,\n };\n}\nfunction createBinaryOperationExpressionParser(exprParser, ops) {\n return (text, cursor) => {\n const firstExpr = exprParser(text, cursor);\n if (!firstExpr) {\n return null;\n }\n cursor = firstExpr.cursor;\n let expr = firstExpr.evaluable;\n for (;;) {\n const op = readBinaryOperator(ops, text, cursor);\n if (!op) {\n break;\n }\n cursor = op.cursor;\n const nextExpr = exprParser(text, cursor);\n if (!nextExpr) {\n return null;\n }\n cursor = nextExpr.cursor;\n expr = new BinaryOperationNode(op.operator, expr, nextExpr.evaluable);\n }\n return expr\n ? {\n cursor: cursor,\n evaluable: expr,\n }\n : null;\n };\n}\nconst parseBinaryOperationExpression = [\n ['**'],\n ['*', '/', '%'],\n ['+', '-'],\n ['<<', '>>>', '>>'],\n ['&'],\n ['^'],\n ['|'],\n].reduce((parser, ops) => {\n return createBinaryOperationExpressionParser(parser, ops);\n}, parseUnaryExpression);\nfunction parseExpression(text, cursor) {\n cursor += readWhitespace(text, cursor).length;\n return parseBinaryOperationExpression(text, cursor);\n}\nfunction parseEcmaNumberExpression(text) {\n const expr = parseExpression(text, 0);\n if (!expr) {\n return null;\n }\n const cursor = expr.cursor + readWhitespace(text, expr.cursor).length;\n if (cursor !== text.length) {\n return null;\n }\n return expr.evaluable;\n}\n\nfunction parseNumber(text) {\n var _a;\n const r = parseEcmaNumberExpression(text);\n return (_a = r === null || r === void 0 ? void 0 : r.evaluate()) !== null && _a !== void 0 ? _a : null;\n}\nfunction numberFromUnknown(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const pv = parseNumber(value);\n if (!isEmpty(pv)) {\n return pv;\n }\n }\n return 0;\n}\nfunction numberToString(value) {\n return String(value);\n}\nfunction createNumberFormatter(digits) {\n return (value) => {\n return value.toFixed(Math.max(Math.min(digits, 20), 0));\n };\n}\n\nfunction mapRange(value, start1, end1, start2, end2) {\n const p = (value - start1) / (end1 - start1);\n return start2 + p * (end2 - start2);\n}\nfunction getDecimalDigits(value) {\n const text = String(value.toFixed(10));\n const frac = text.split('.')[1];\n return frac.replace(/0+$/, '').length;\n}\nfunction constrainRange(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nfunction loopRange(value, max) {\n return ((value % max) + max) % max;\n}\nfunction getSuitableDecimalDigits(params, rawValue) {\n return !isEmpty(params.step)\n ? getDecimalDigits(params.step)\n : Math.max(getDecimalDigits(rawValue), 2);\n}\nfunction getSuitableKeyScale(params) {\n var _a;\n return (_a = params.step) !== null && _a !== void 0 ? _a : 1;\n}\nfunction getSuitablePointerScale(params, rawValue) {\n var _a;\n const base = Math.abs((_a = params.step) !== null && _a !== void 0 ? _a : rawValue);\n return base === 0 ? 0.1 : Math.pow(10, Math.floor(Math.log10(base)) - 1);\n}\nfunction createStepConstraint(params, initialValue) {\n if (!isEmpty(params.step)) {\n return new StepConstraint(params.step, initialValue);\n }\n return null;\n}\nfunction createRangeConstraint(params) {\n if (!isEmpty(params.max) && !isEmpty(params.min)) {\n return new DefiniteRangeConstraint({\n max: params.max,\n min: params.min,\n });\n }\n if (!isEmpty(params.max) || !isEmpty(params.min)) {\n return new RangeConstraint({\n max: params.max,\n min: params.min,\n });\n }\n return null;\n}\nfunction createNumberTextPropsObject(params, initialValue) {\n var _a, _b, _c;\n return {\n formatter: (_a = params.format) !== null && _a !== void 0 ? _a : createNumberFormatter(getSuitableDecimalDigits(params, initialValue)),\n keyScale: (_b = params.keyScale) !== null && _b !== void 0 ? _b : getSuitableKeyScale(params),\n pointerScale: (_c = params.pointerScale) !== null && _c !== void 0 ? _c : getSuitablePointerScale(params, initialValue),\n };\n}\nfunction createNumberTextInputParamsParser(p) {\n return {\n format: p.optional.function,\n keyScale: p.optional.number,\n max: p.optional.number,\n min: p.optional.number,\n pointerScale: p.optional.number,\n step: p.optional.number,\n };\n}\n\nfunction createPointAxis(config) {\n return {\n constraint: config.constraint,\n textProps: ValueMap.fromObject(createNumberTextPropsObject(config.params, config.initialValue)),\n };\n}\n\nclass BladeApi {\n constructor(controller) {\n this.controller = controller;\n }\n get element() {\n return this.controller.view.element;\n }\n get disabled() {\n return this.controller.viewProps.get('disabled');\n }\n set disabled(disabled) {\n this.controller.viewProps.set('disabled', disabled);\n }\n get hidden() {\n return this.controller.viewProps.get('hidden');\n }\n set hidden(hidden) {\n this.controller.viewProps.set('hidden', hidden);\n }\n dispose() {\n this.controller.viewProps.set('disposed', true);\n }\n importState(state) {\n return this.controller.importState(state);\n }\n exportState() {\n return this.controller.exportState();\n }\n}\n\nclass TpEvent {\n constructor(target) {\n this.target = target;\n }\n}\nclass TpChangeEvent extends TpEvent {\n constructor(target, value, last) {\n super(target);\n this.value = value;\n this.last = last !== null && last !== void 0 ? last : true;\n }\n}\nclass TpFoldEvent extends TpEvent {\n constructor(target, expanded) {\n super(target);\n this.expanded = expanded;\n }\n}\nclass TpTabSelectEvent extends TpEvent {\n constructor(target, index) {\n super(target);\n this.index = index;\n }\n}\nclass TpMouseEvent extends TpEvent {\n constructor(target, nativeEvent) {\n super(target);\n this.native = nativeEvent;\n }\n}\n\nclass BindingApi extends BladeApi {\n constructor(controller) {\n super(controller);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', this.onValueChange_);\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get key() {\n return this.controller.value.binding.target.key;\n }\n get tag() {\n return this.controller.tag;\n }\n set tag(tag) {\n this.controller.tag = tag;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n refresh() {\n this.controller.value.fetch();\n }\n onValueChange_(ev) {\n const value = this.controller.value;\n this.emitter_.emit('change', new TpChangeEvent(this, forceCast(value.binding.target.read()), ev.options.last));\n }\n}\n\nclass InputBindingValue {\n constructor(value, binding) {\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.binding = binding;\n this.value_ = value;\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n this.emitter = new Emitter();\n }\n get rawValue() {\n return this.value_.rawValue;\n }\n set rawValue(rawValue) {\n this.value_.rawValue = rawValue;\n }\n setRawValue(rawValue, options) {\n this.value_.setRawValue(rawValue, options);\n }\n fetch() {\n this.value_.rawValue = this.binding.read();\n }\n push() {\n this.binding.write(this.value_.rawValue);\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.push();\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\nfunction isInputBindingValue(v) {\n if (!('binding' in v)) {\n return false;\n }\n const b = v['binding'];\n return isBinding(b) && 'read' in b && 'write' in b;\n}\n\nfunction parseObject(value, keyToParserMap) {\n const keys = Object.keys(keyToParserMap);\n const result = keys.reduce((tmp, key) => {\n if (tmp === undefined) {\n return undefined;\n }\n const parser = keyToParserMap[key];\n const result = parser(value[key]);\n return result.succeeded\n ? Object.assign(Object.assign({}, tmp), { [key]: result.value }) : undefined;\n }, {});\n return forceCast(result);\n}\nfunction parseArray(value, parseItem) {\n return value.reduce((tmp, item) => {\n if (tmp === undefined) {\n return undefined;\n }\n const result = parseItem(item);\n if (!result.succeeded || result.value === undefined) {\n return undefined;\n }\n return [...tmp, result.value];\n }, []);\n}\nfunction isObject(value) {\n if (value === null) {\n return false;\n }\n return typeof value === 'object';\n}\nfunction createMicroParserBuilder(parse) {\n return (optional) => (v) => {\n if (!optional && v === undefined) {\n return {\n succeeded: false,\n value: undefined,\n };\n }\n if (optional && v === undefined) {\n return {\n succeeded: true,\n value: undefined,\n };\n }\n const result = parse(v);\n return result !== undefined\n ? {\n succeeded: true,\n value: result,\n }\n : {\n succeeded: false,\n value: undefined,\n };\n };\n}\nfunction createMicroParserBuilders(optional) {\n return {\n custom: (parse) => createMicroParserBuilder(parse)(optional),\n boolean: createMicroParserBuilder((v) => typeof v === 'boolean' ? v : undefined)(optional),\n number: createMicroParserBuilder((v) => typeof v === 'number' ? v : undefined)(optional),\n string: createMicroParserBuilder((v) => typeof v === 'string' ? v : undefined)(optional),\n function: createMicroParserBuilder((v) =>\n typeof v === 'function' ? v : undefined)(optional),\n constant: (value) => createMicroParserBuilder((v) => (v === value ? value : undefined))(optional),\n raw: createMicroParserBuilder((v) => v)(optional),\n object: (keyToParserMap) => createMicroParserBuilder((v) => {\n if (!isObject(v)) {\n return undefined;\n }\n return parseObject(v, keyToParserMap);\n })(optional),\n array: (itemParser) => createMicroParserBuilder((v) => {\n if (!Array.isArray(v)) {\n return undefined;\n }\n return parseArray(v, itemParser);\n })(optional),\n };\n}\nconst MicroParsers = {\n optional: createMicroParserBuilders(true),\n required: createMicroParserBuilders(false),\n};\nfunction parseRecord(value, keyToParserMap) {\n const map = keyToParserMap(MicroParsers);\n const result = MicroParsers.required.object(map)(value);\n return result.succeeded ? result.value : undefined;\n}\n\nfunction importBladeState(state, superImport, parser, callback) {\n if (superImport && !superImport(state)) {\n return false;\n }\n const result = parseRecord(state, parser);\n return result ? callback(result) : false;\n}\nfunction exportBladeState(superExport, thisState) {\n var _a;\n return deepMerge((_a = superExport === null || superExport === void 0 ? void 0 : superExport()) !== null && _a !== void 0 ? _a : {}, thisState);\n}\n\nfunction isValueBladeController(bc) {\n return 'value' in bc;\n}\n\nfunction isBindingValue(v) {\n if (!isObject$1(v) || !('binding' in v)) {\n return false;\n }\n const b = v.binding;\n return isBinding(b);\n}\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nfunction forceReflow(element) {\n element.offsetHeight;\n}\nfunction disableTransitionTemporarily(element, callback) {\n const t = element.style.transition;\n element.style.transition = 'none';\n callback();\n element.style.transition = t;\n}\nfunction supportsTouch(doc) {\n return doc.ontouchstart !== undefined;\n}\nfunction getGlobalObject() {\n return globalThis;\n}\nfunction getWindowDocument() {\n const globalObj = forceCast(getGlobalObject());\n return globalObj.document;\n}\nfunction getCanvasContext(canvasElement) {\n const win = canvasElement.ownerDocument.defaultView;\n if (!win) {\n return null;\n }\n const isBrowser = 'document' in win;\n return isBrowser\n ? canvasElement.getContext('2d', {\n willReadFrequently: true,\n })\n : null;\n}\nconst ICON_ID_TO_INNER_HTML_MAP = {\n check: '<path d=\"M2 8l4 4l8 -8\"/>',\n dropdown: '<path d=\"M5 7h6l-3 3 z\"/>',\n p2dpad: '<path d=\"M8 4v8\"/><path d=\"M4 8h8\"/><circle cx=\"12\" cy=\"12\" r=\"1.2\"/>',\n};\nfunction createSvgIconElement(document, iconId) {\n const elem = document.createElementNS(SVG_NS, 'svg');\n elem.innerHTML = ICON_ID_TO_INNER_HTML_MAP[iconId];\n return elem;\n}\nfunction insertElementAt(parentElement, element, index) {\n parentElement.insertBefore(element, parentElement.children[index]);\n}\nfunction removeElement(element) {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n}\nfunction removeChildElements(element) {\n while (element.children.length > 0) {\n element.removeChild(element.children[0]);\n }\n}\nfunction removeChildNodes(element) {\n while (element.childNodes.length > 0) {\n element.removeChild(element.childNodes[0]);\n }\n}\nfunction findNextTarget(ev) {\n if (ev.relatedTarget) {\n return forceCast(ev.relatedTarget);\n }\n if ('explicitOriginalTarget' in ev) {\n return ev.explicitOriginalTarget;\n }\n return null;\n}\n\nfunction bindValue(value, applyValue) {\n value.emitter.on('change', (ev) => {\n applyValue(ev.rawValue);\n });\n applyValue(value.rawValue);\n}\nfunction bindValueMap(valueMap, key, applyValue) {\n bindValue(valueMap.value(key), applyValue);\n}\n\nconst PREFIX = 'tp';\nfunction ClassName(viewName) {\n const fn = (opt_elementName, opt_modifier) => {\n return [\n PREFIX,\n '-',\n viewName,\n 'v',\n opt_elementName ? `_${opt_elementName}` : '',\n opt_modifier ? `-${opt_modifier}` : '',\n ].join('');\n };\n return fn;\n}\n\nconst cn$r = ClassName('lbl');\nfunction createLabelNode(doc, label) {\n const frag = doc.createDocumentFragment();\n const lineNodes = label.split('\\n').map((line) => {\n return doc.createTextNode(line);\n });\n lineNodes.forEach((lineNode, index) => {\n if (index > 0) {\n frag.appendChild(doc.createElement('br'));\n }\n frag.appendChild(lineNode);\n });\n return frag;\n}\nclass LabelView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$r());\n config.viewProps.bindClassModifiers(this.element);\n const labelElem = doc.createElement('div');\n labelElem.classList.add(cn$r('l'));\n bindValueMap(config.props, 'label', (value) => {\n if (isEmpty(value)) {\n this.element.classList.add(cn$r(undefined, 'nol'));\n }\n else {\n this.element.classList.remove(cn$r(undefined, 'nol'));\n removeChildNodes(labelElem);\n labelElem.appendChild(createLabelNode(doc, value));\n }\n });\n this.element.appendChild(labelElem);\n this.labelElement = labelElem;\n const valueElem = doc.createElement('div');\n valueElem.classList.add(cn$r('v'));\n this.element.appendChild(valueElem);\n this.valueElement = valueElem;\n }\n}\n\nclass LabelController {\n constructor(doc, config) {\n this.props = config.props;\n this.valueController = config.valueController;\n this.viewProps = config.valueController.viewProps;\n this.view = new LabelView(doc, {\n props: config.props,\n viewProps: this.viewProps,\n });\n this.view.valueElement.appendChild(this.valueController.view.element);\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n label: p.optional.string,\n }), (result) => {\n this.props.set('label', result.label);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n label: this.props.get('label'),\n });\n }\n}\n\nfunction getAllBladePositions() {\n return ['veryfirst', 'first', 'last', 'verylast'];\n}\n\nconst cn$q = ClassName('');\nconst POS_TO_CLASS_NAME_MAP = {\n veryfirst: 'vfst',\n first: 'fst',\n last: 'lst',\n verylast: 'vlst',\n};\nclass BladeController {\n constructor(config) {\n this.parent_ = null;\n this.blade = config.blade;\n this.view = config.view;\n this.viewProps = config.viewProps;\n const elem = this.view.element;\n this.blade.value('positions').emitter.on('change', () => {\n getAllBladePositions().forEach((pos) => {\n elem.classList.remove(cn$q(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n });\n this.blade.get('positions').forEach((pos) => {\n elem.classList.add(cn$q(undefined, POS_TO_CLASS_NAME_MAP[pos]));\n });\n });\n this.viewProps.handleDispose(() => {\n removeElement(elem);\n });\n }\n get parent() {\n return this.parent_;\n }\n set parent(parent) {\n this.parent_ = parent;\n this.viewProps.set('parent', this.parent_ ? this.parent_.viewProps : null);\n }\n importState(state) {\n return importBladeState(state, null, (p) => ({\n disabled: p.required.boolean,\n hidden: p.required.boolean,\n }), (result) => {\n this.viewProps.importState(result);\n return true;\n });\n }\n exportState() {\n return exportBladeState(null, Object.assign({}, this.viewProps.exportState()));\n }\n}\n\nclass LabeledValueBladeController extends BladeController {\n constructor(doc, config) {\n if (config.value !== config.valueController.value) {\n throw TpError.shouldNeverHappen();\n }\n const viewProps = config.valueController.viewProps;\n const lc = new LabelController(doc, {\n blade: config.blade,\n props: config.props,\n valueController: config.valueController,\n });\n super(Object.assign(Object.assign({}, config), { view: new LabelView(doc, {\n props: config.props,\n viewProps: viewProps,\n }), viewProps: viewProps }));\n this.labelController = lc;\n this.value = config.value;\n this.valueController = config.valueController;\n this.view.valueElement.appendChild(this.valueController.view.element);\n }\n importState(state) {\n return importBladeState(state, (s) => {\n var _a, _b, _c;\n return super.importState(s) &&\n this.labelController.importProps(s) &&\n ((_c = (_b = (_a = this.valueController).importProps) === null || _b === void 0 ? void 0 : _b.call(_a, state)) !== null && _c !== void 0 ? _c : true);\n }, (p) => ({\n value: p.optional.raw,\n }), (result) => {\n if (result.value) {\n this.value.rawValue = result.value;\n }\n return true;\n });\n }\n exportState() {\n var _a, _b, _c;\n return exportBladeState(() => super.exportState(), Object.assign(Object.assign({ value: this.value.rawValue }, this.labelController.exportProps()), ((_c = (_b = (_a = this.valueController).exportProps) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : {})));\n }\n}\n\nfunction excludeValue(state) {\n const result = Object.assign({}, state);\n delete result.value;\n return result;\n}\nclass BindingController extends LabeledValueBladeController {\n constructor(doc, config) {\n super(doc, config);\n this.tag = config.tag;\n }\n importState(state) {\n return importBladeState(state,\n (_s) => super.importState(excludeValue(state)), (p) => ({\n tag: p.optional.string,\n }), (result) => {\n this.tag = result.tag;\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => excludeValue(super.exportState()), {\n binding: {\n key: this.value.binding.target.key,\n value: this.value.binding.target.read(),\n },\n tag: this.tag,\n });\n }\n}\nfunction isBindingController(bc) {\n return isValueBladeController(bc) && isBindingValue(bc.value);\n}\n\nclass InputBindingController extends BindingController {\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n binding: p.required.object({\n value: p.required.raw,\n }),\n }), (result) => {\n this.value.binding.inject(result.binding.value);\n this.value.fetch();\n return true;\n });\n }\n}\nfunction isInputBindingController(bc) {\n return isValueBladeController(bc) && isInputBindingValue(bc.value);\n}\n\nfunction fillBuffer(buffer, bufferSize) {\n while (buffer.length < bufferSize) {\n buffer.push(undefined);\n }\n}\nfunction initializeBuffer(bufferSize) {\n const buffer = [];\n fillBuffer(buffer, bufferSize);\n return buffer;\n}\nfunction createTrimmedBuffer(buffer) {\n const index = buffer.indexOf(undefined);\n return forceCast(index < 0 ? buffer : buffer.slice(0, index));\n}\nfunction createPushedBuffer(buffer, newValue) {\n const newBuffer = [...createTrimmedBuffer(buffer), newValue];\n if (newBuffer.length > buffer.length) {\n newBuffer.splice(0, newBuffer.length - buffer.length);\n }\n else {\n fillBuffer(newBuffer, buffer.length);\n }\n return newBuffer;\n}\n\nclass MonitorBindingValue {\n constructor(config) {\n this.emitter = new Emitter();\n this.onTick_ = this.onTick_.bind(this);\n this.onValueBeforeChange_ = this.onValueBeforeChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.binding = config.binding;\n this.value_ = createValue(initializeBuffer(config.bufferSize));\n this.value_.emitter.on('beforechange', this.onValueBeforeChange_);\n this.value_.emitter.on('change', this.onValueChange_);\n this.ticker = config.ticker;\n this.ticker.emitter.on('tick', this.onTick_);\n this.fetch();\n }\n get rawValue() {\n return this.value_.rawValue;\n }\n set rawValue(rawValue) {\n this.value_.rawValue = rawValue;\n }\n setRawValue(rawValue, options) {\n this.value_.setRawValue(rawValue, options);\n }\n fetch() {\n this.value_.rawValue = createPushedBuffer(this.value_.rawValue, this.binding.read());\n }\n onTick_() {\n this.fetch();\n }\n onValueBeforeChange_(ev) {\n this.emitter.emit('beforechange', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n onValueChange_(ev) {\n this.emitter.emit('change', Object.assign(Object.assign({}, ev), { sender: this }));\n }\n}\nfunction isMonitorBindingValue(v) {\n if (!('binding' in v)) {\n return false;\n }\n const b = v['binding'];\n return isBinding(b) && 'read' in b && !('write' in b);\n}\n\nclass MonitorBindingController extends BindingController {\n exportState() {\n return exportBladeState(() => super.exportState(), {\n binding: {\n readonly: true,\n },\n });\n }\n}\nfunction isMonitorBindingController(bc) {\n return (isValueBladeController(bc) &&\n isMonitorBindingValue(bc.value));\n}\n\nclass ButtonApi extends BladeApi {\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get title() {\n var _a;\n return (_a = this.controller.buttonController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n }\n set title(title) {\n this.controller.buttonController.props.set('title', title);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n const emitter = this.controller.buttonController.emitter;\n emitter.on(eventName, (ev) => {\n bh(new TpMouseEvent(this, ev.nativeEvent));\n });\n return this;\n }\n off(eventName, handler) {\n const emitter = this.controller.buttonController.emitter;\n emitter.off(eventName, handler);\n return this;\n }\n}\n\nfunction applyClass(elem, className, active) {\n if (active) {\n elem.classList.add(className);\n }\n else {\n elem.classList.remove(className);\n }\n}\nfunction valueToClassName(elem, className) {\n return (value) => {\n applyClass(elem, className, value);\n };\n}\nfunction bindValueToTextContent(value, elem) {\n bindValue(value, (text) => {\n elem.textContent = text !== null && text !== void 0 ? text : '';\n });\n}\n\nconst cn$p = ClassName('btn');\nclass ButtonView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$p());\n config.viewProps.bindClassModifiers(this.element);\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$p('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn$p('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n }\n}\n\nclass ButtonController {\n constructor(doc, config) {\n this.emitter = new Emitter();\n this.onClick_ = this.onClick_.bind(this);\n this.props = config.props;\n this.viewProps = config.viewProps;\n this.view = new ButtonView(doc, {\n props: this.props,\n viewProps: this.viewProps,\n });\n this.view.buttonElement.addEventListener('click', this.onClick_);\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n title: p.optional.string,\n }), (result) => {\n this.props.set('title', result.title);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n title: this.props.get('title'),\n });\n }\n onClick_(ev) {\n this.emitter.emit('click', {\n nativeEvent: ev,\n sender: this,\n });\n }\n}\n\nclass ButtonBladeController extends BladeController {\n constructor(doc, config) {\n const bc = new ButtonController(doc, {\n props: config.buttonProps,\n viewProps: config.viewProps,\n });\n const lc = new LabelController(doc, {\n blade: config.blade,\n props: config.labelProps,\n valueController: bc,\n });\n super({\n blade: config.blade,\n view: lc.view,\n viewProps: config.viewProps,\n });\n this.buttonController = bc;\n this.labelController = lc;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s) &&\n this.buttonController.importProps(s) &&\n this.labelController.importProps(s), () => ({}), () => true);\n }\n exportState() {\n return exportBladeState(() => super.exportState(), Object.assign(Object.assign({}, this.buttonController.exportProps()), this.labelController.exportProps()));\n }\n}\n\nclass Semver {\n constructor(text) {\n const [core, prerelease] = text.split('-');\n const coreComps = core.split('.');\n this.major = parseInt(coreComps[0], 10);\n this.minor = parseInt(coreComps[1], 10);\n this.patch = parseInt(coreComps[2], 10);\n this.prerelease = prerelease !== null && prerelease !== void 0 ? prerelease : null;\n }\n toString() {\n const core = [this.major, this.minor, this.patch].join('.');\n return this.prerelease !== null ? [core, this.prerelease].join('-') : core;\n }\n}\n\nconst VERSION$1 = new Semver('2.0.5');\n\nfunction createPlugin(plugin) {\n return Object.assign({ core: VERSION$1 }, plugin);\n}\n\nconst ButtonBladePlugin = createPlugin({\n id: 'button',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n title: p.required.string,\n view: p.required.constant('button'),\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new ButtonBladeController(args.document, {\n blade: args.blade,\n buttonProps: ValueMap.fromObject({\n title: args.params.title,\n }),\n labelProps: ValueMap.fromObject({\n label: args.params.label,\n }),\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (args.controller instanceof ButtonBladeController) {\n return new ButtonApi(args.controller);\n }\n return null;\n },\n});\n\nfunction addButtonAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'button' }));\n}\nfunction addFolderAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'folder' }));\n}\nfunction addTabAsBlade(api, params) {\n return api.addBlade(Object.assign(Object.assign({}, params), { view: 'tab' }));\n}\n\nfunction isRefreshable(value) {\n if (!isObject$1(value)) {\n return false;\n }\n return 'refresh' in value && typeof value.refresh === 'function';\n}\n\nfunction createBindingTarget(obj, key) {\n if (!BindingTarget.isBindable(obj)) {\n throw TpError.notBindable();\n }\n return new BindingTarget(obj, key);\n}\nclass RackApi {\n constructor(controller, pool) {\n this.onRackValueChange_ = this.onRackValueChange_.bind(this);\n this.controller_ = controller;\n this.emitter_ = new Emitter();\n this.pool_ = pool;\n const rack = this.controller_.rack;\n rack.emitter.on('valuechange', this.onRackValueChange_);\n }\n get children() {\n return this.controller_.rack.children.map((bc) => this.pool_.createApi(bc));\n }\n addBinding(object, key, opt_params) {\n const params = opt_params !== null && opt_params !== void 0 ? opt_params : {};\n const doc = this.controller_.element.ownerDocument;\n const bc = this.pool_.createBinding(doc, createBindingTarget(object, key), params);\n const api = this.pool_.createBindingApi(bc);\n return this.add(api, params.index);\n }\n addFolder(params) {\n return addFolderAsBlade(this, params);\n }\n addButton(params) {\n return addButtonAsBlade(this, params);\n }\n addTab(params) {\n return addTabAsBlade(this, params);\n }\n add(api, opt_index) {\n const bc = api.controller;\n this.controller_.rack.add(bc, opt_index);\n return api;\n }\n remove(api) {\n this.controller_.rack.remove(api.controller);\n }\n addBlade(params) {\n const doc = this.controller_.element.ownerDocument;\n const bc = this.pool_.createBlade(doc, params);\n const api = this.pool_.createApi(bc);\n return this.add(api, params.index);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n refresh() {\n this.children.forEach((c) => {\n if (isRefreshable(c)) {\n c.refresh();\n }\n });\n }\n onRackValueChange_(ev) {\n const bc = ev.bladeController;\n const api = this.pool_.createApi(bc);\n const binding = isBindingValue(bc.value) ? bc.value.binding : null;\n this.emitter_.emit('change', new TpChangeEvent(api, binding ? binding.target.read() : bc.value.rawValue, ev.options.last));\n }\n}\n\nclass ContainerBladeApi extends BladeApi {\n constructor(controller, pool) {\n super(controller);\n this.rackApi_ = new RackApi(controller.rackController, pool);\n }\n refresh() {\n this.rackApi_.refresh();\n }\n}\n\nclass ContainerBladeController extends BladeController {\n constructor(config) {\n super({\n blade: config.blade,\n view: config.view,\n viewProps: config.rackController.viewProps,\n });\n this.rackController = config.rackController;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n children: p.required.array(p.required.raw),\n }), (result) => {\n return this.rackController.rack.children.every((c, index) => {\n return c.importState(result.children[index]);\n });\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n children: this.rackController.rack.children.map((c) => c.exportState()),\n });\n }\n}\nfunction isContainerBladeController(bc) {\n return 'rackController' in bc;\n}\n\nclass NestedOrderedSet {\n constructor(extract) {\n this.emitter = new Emitter();\n this.items_ = [];\n this.cache_ = new Set();\n this.onSubListAdd_ = this.onSubListAdd_.bind(this);\n this.onSubListRemove_ = this.onSubListRemove_.bind(this);\n this.extract_ = extract;\n }\n get items() {\n return this.items_;\n }\n allItems() {\n return Array.from(this.cache_);\n }\n find(callback) {\n for (const item of this.allItems()) {\n if (callback(item)) {\n return item;\n }\n }\n return null;\n }\n includes(item) {\n return this.cache_.has(item);\n }\n add(item, opt_index) {\n if (this.includes(item)) {\n throw TpError.shouldNeverHappen();\n }\n const index = opt_index !== undefined ? opt_index : this.items_.length;\n this.items_.splice(index, 0, item);\n this.cache_.add(item);\n const subList = this.extract_(item);\n if (subList) {\n subList.emitter.on('add', this.onSubListAdd_);\n subList.emitter.on('remove', this.onSubListRemove_);\n subList.allItems().forEach((i) => {\n this.cache_.add(i);\n });\n }\n this.emitter.emit('add', {\n index: index,\n item: item,\n root: this,\n target: this,\n });\n }\n remove(item) {\n const index = this.items_.indexOf(item);\n if (index < 0) {\n return;\n }\n this.items_.splice(index, 1);\n this.cache_.delete(item);\n const subList = this.extract_(item);\n if (subList) {\n subList.allItems().forEach((i) => {\n this.cache_.delete(i);\n });\n subList.emitter.off('add', this.onSubListAdd_);\n subList.emitter.off('remove', this.onSubListRemove_);\n }\n this.emitter.emit('remove', {\n index: index,\n item: item,\n root: this,\n target: this,\n });\n }\n onSubListAdd_(ev) {\n this.cache_.add(ev.item);\n this.emitter.emit('add', {\n index: ev.index,\n item: ev.item,\n root: this,\n target: ev.target,\n });\n }\n onSubListRemove_(ev) {\n this.cache_.delete(ev.item);\n this.emitter.emit('remove', {\n index: ev.index,\n item: ev.item,\n root: this,\n target: ev.target,\n });\n }\n}\n\nfunction findValueBladeController(bcs, v) {\n for (let i = 0; i < bcs.length; i++) {\n const bc = bcs[i];\n if (isValueBladeController(bc) && bc.value === v) {\n return bc;\n }\n }\n return null;\n}\nfunction findSubBladeControllerSet(bc) {\n return isContainerBladeController(bc)\n ? bc.rackController.rack['bcSet_']\n : null;\n}\nclass Rack {\n constructor(config) {\n var _a, _b;\n this.emitter = new Emitter();\n this.onBladePositionsChange_ = this.onBladePositionsChange_.bind(this);\n this.onSetAdd_ = this.onSetAdd_.bind(this);\n this.onSetRemove_ = this.onSetRemove_.bind(this);\n this.onChildDispose_ = this.onChildDispose_.bind(this);\n this.onChildPositionsChange_ = this.onChildPositionsChange_.bind(this);\n this.onChildValueChange_ = this.onChildValueChange_.bind(this);\n this.onChildViewPropsChange_ = this.onChildViewPropsChange_.bind(this);\n this.onRackLayout_ = this.onRackLayout_.bind(this);\n this.onRackValueChange_ = this.onRackValueChange_.bind(this);\n this.blade_ = (_a = config.blade) !== null && _a !== void 0 ? _a : null;\n (_b = this.blade_) === null || _b === void 0 ? void 0 : _b.value('positions').emitter.on('change', this.onBladePositionsChange_);\n this.viewProps = config.viewProps;\n this.bcSet_ = new NestedOrderedSet(findSubBladeControllerSet);\n this.bcSet_.emitter.on('add', this.onSetAdd_);\n this.bcSet_.emitter.on('remove', this.onSetRemove_);\n }\n get children() {\n return this.bcSet_.items;\n }\n add(bc, opt_index) {\n var _a;\n (_a = bc.parent) === null || _a === void 0 ? void 0 : _a.remove(bc);\n bc.parent = this;\n this.bcSet_.add(bc, opt_index);\n }\n remove(bc) {\n bc.parent = null;\n this.bcSet_.remove(bc);\n }\n find(finder) {\n return this.bcSet_.allItems().filter(finder);\n }\n onSetAdd_(ev) {\n this.updatePositions_();\n const root = ev.target === ev.root;\n this.emitter.emit('add', {\n bladeController: ev.item,\n index: ev.index,\n root: root,\n sender: this,\n });\n if (!root) {\n return;\n }\n const bc = ev.item;\n bc.viewProps.emitter.on('change', this.onChildViewPropsChange_);\n bc.blade\n .value('positions')\n .emitter.on('change', this.onChildPositionsChange_);\n bc.viewProps.handleDispose(this.onChildDispose_);\n if (isValueBladeController(bc)) {\n bc.value.emitter.on('change', this.onChildValueChange_);\n }\n else if (isContainerBladeController(bc)) {\n const rack = bc.rackController.rack;\n if (rack) {\n const emitter = rack.emitter;\n emitter.on('layout', this.onRackLayout_);\n emitter.on('valuechange', this.onRackValueChange_);\n }\n }\n }\n onSetRemove_(ev) {\n this.updatePositions_();\n const root = ev.target === ev.root;\n this.emitter.emit('remove', {\n bladeController: ev.item,\n root: root,\n sender: this,\n });\n if (!root) {\n return;\n }\n const bc = ev.item;\n if (isValueBladeController(bc)) {\n bc.value.emitter.off('change', this.onChildValueChange_);\n }\n else if (isContainerBladeController(bc)) {\n const rack = bc.rackController.rack;\n if (rack) {\n const emitter = rack.emitter;\n emitter.off('layout', this.onRackLayout_);\n emitter.off('valuechange', this.onRackValueChange_);\n }\n }\n }\n updatePositions_() {\n const visibleItems = this.bcSet_.items.filter((bc) => !bc.viewProps.get('hidden'));\n const firstVisibleItem = visibleItems[0];\n const lastVisibleItem = visibleItems[visibleItems.length - 1];\n this.bcSet_.items.forEach((bc) => {\n const ps = [];\n if (bc === firstVisibleItem) {\n ps.push('first');\n if (!this.blade_ ||\n this.blade_.get('positions').includes('veryfirst')) {\n ps.push('veryfirst');\n }\n }\n if (bc === lastVisibleItem) {\n ps.push('last');\n if (!this.blade_ || this.blade_.get('positions').includes('verylast')) {\n ps.push('verylast');\n }\n }\n bc.blade.set('positions', ps);\n });\n }\n onChildPositionsChange_() {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onChildViewPropsChange_(_ev) {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onChildDispose_() {\n const disposedUcs = this.bcSet_.items.filter((bc) => {\n return bc.viewProps.get('disposed');\n });\n disposedUcs.forEach((bc) => {\n this.bcSet_.remove(bc);\n });\n }\n onChildValueChange_(ev) {\n const bc = findValueBladeController(this.find(isValueBladeController), ev.sender);\n if (!bc) {\n throw TpError.alreadyDisposed();\n }\n this.emitter.emit('valuechange', {\n bladeController: bc,\n options: ev.options,\n sender: this,\n });\n }\n onRackLayout_(_) {\n this.updatePositions_();\n this.emitter.emit('layout', {\n sender: this,\n });\n }\n onRackValueChange_(ev) {\n this.emitter.emit('valuechange', {\n bladeController: ev.bladeController,\n options: ev.options,\n sender: this,\n });\n }\n onBladePositionsChange_() {\n this.updatePositions_();\n }\n}\n\nclass RackController {\n constructor(config) {\n this.onRackAdd_ = this.onRackAdd_.bind(this);\n this.onRackRemove_ = this.onRackRemove_.bind(this);\n this.element = config.element;\n this.viewProps = config.viewProps;\n const rack = new Rack({\n blade: config.root ? undefined : config.blade,\n viewProps: config.viewProps,\n });\n rack.emitter.on('add', this.onRackAdd_);\n rack.emitter.on('remove', this.onRackRemove_);\n this.rack = rack;\n this.viewProps.handleDispose(() => {\n for (let i = this.rack.children.length - 1; i >= 0; i--) {\n const bc = this.rack.children[i];\n bc.viewProps.set('disposed', true);\n }\n });\n }\n onRackAdd_(ev) {\n if (!ev.root) {\n return;\n }\n insertElementAt(this.element, ev.bladeController.view.element, ev.index);\n }\n onRackRemove_(ev) {\n if (!ev.root) {\n return;\n }\n removeElement(ev.bladeController.view.element);\n }\n}\n\nfunction createBlade() {\n return new ValueMap({\n positions: createValue([], {\n equals: deepEqualsArray,\n }),\n });\n}\n\nclass Foldable extends ValueMap {\n constructor(valueMap) {\n super(valueMap);\n }\n static create(expanded) {\n const coreObj = {\n completed: true,\n expanded: expanded,\n expandedHeight: null,\n shouldFixHeight: false,\n temporaryExpanded: null,\n };\n const core = ValueMap.createCore(coreObj);\n return new Foldable(core);\n }\n get styleExpanded() {\n var _a;\n return (_a = this.get('temporaryExpanded')) !== null && _a !== void 0 ? _a : this.get('expanded');\n }\n get styleHeight() {\n if (!this.styleExpanded) {\n return '0';\n }\n const exHeight = this.get('expandedHeight');\n if (this.get('shouldFixHeight') && !isEmpty(exHeight)) {\n return `${exHeight}px`;\n }\n return 'auto';\n }\n bindExpandedClass(elem, expandedClassName) {\n const onExpand = () => {\n const expanded = this.styleExpanded;\n if (expanded) {\n elem.classList.add(expandedClassName);\n }\n else {\n elem.classList.remove(expandedClassName);\n }\n };\n bindValueMap(this, 'expanded', onExpand);\n bindValueMap(this, 'temporaryExpanded', onExpand);\n }\n cleanUpTransition() {\n this.set('shouldFixHeight', false);\n this.set('expandedHeight', null);\n this.set('completed', true);\n }\n}\nfunction computeExpandedFolderHeight(folder, containerElement) {\n let height = 0;\n disableTransitionTemporarily(containerElement, () => {\n folder.set('expandedHeight', null);\n folder.set('temporaryExpanded', true);\n forceReflow(containerElement);\n height = containerElement.clientHeight;\n folder.set('temporaryExpanded', null);\n forceReflow(containerElement);\n });\n return height;\n}\nfunction applyHeight(foldable, elem) {\n elem.style.height = foldable.styleHeight;\n}\nfunction bindFoldable(foldable, elem) {\n foldable.value('expanded').emitter.on('beforechange', () => {\n foldable.set('completed', false);\n if (isEmpty(foldable.get('expandedHeight'))) {\n const h = computeExpandedFolderHeight(foldable, elem);\n if (h > 0) {\n foldable.set('expandedHeight', h);\n }\n }\n foldable.set('shouldFixHeight', true);\n forceReflow(elem);\n });\n foldable.emitter.on('change', () => {\n applyHeight(foldable, elem);\n });\n applyHeight(foldable, elem);\n elem.addEventListener('transitionend', (ev) => {\n if (ev.propertyName !== 'height') {\n return;\n }\n foldable.cleanUpTransition();\n });\n}\n\nclass FolderApi extends ContainerBladeApi {\n constructor(controller, pool) {\n super(controller, pool);\n this.emitter_ = new Emitter();\n this.controller.foldable\n .value('expanded')\n .emitter.on('change', (ev) => {\n this.emitter_.emit('fold', new TpFoldEvent(this, ev.sender.rawValue));\n });\n this.rackApi_.on('change', (ev) => {\n this.emitter_.emit('change', ev);\n });\n }\n get expanded() {\n return this.controller.foldable.get('expanded');\n }\n set expanded(expanded) {\n this.controller.foldable.set('expanded', expanded);\n }\n get title() {\n return this.controller.props.get('title');\n }\n set title(title) {\n this.controller.props.set('title', title);\n }\n get children() {\n return this.rackApi_.children;\n }\n addBinding(object, key, opt_params) {\n return this.rackApi_.addBinding(object, key, opt_params);\n }\n addFolder(params) {\n return this.rackApi_.addFolder(params);\n }\n addButton(params) {\n return this.rackApi_.addButton(params);\n }\n addTab(params) {\n return this.rackApi_.addTab(params);\n }\n add(api, opt_index) {\n return this.rackApi_.add(api, opt_index);\n }\n remove(api) {\n this.rackApi_.remove(api);\n }\n addBlade(params) {\n return this.rackApi_.addBlade(params);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nconst bladeContainerClassName = ClassName('cnt');\n\nclass FolderView {\n constructor(doc, config) {\n var _a;\n this.className_ = ClassName((_a = config.viewName) !== null && _a !== void 0 ? _a : 'fld');\n this.element = doc.createElement('div');\n this.element.classList.add(this.className_(), bladeContainerClassName());\n config.viewProps.bindClassModifiers(this.element);\n this.foldable_ = config.foldable;\n this.foldable_.bindExpandedClass(this.element, this.className_(undefined, 'expanded'));\n bindValueMap(this.foldable_, 'completed', valueToClassName(this.element, this.className_(undefined, 'cpl')));\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(this.className_('b'));\n bindValueMap(config.props, 'title', (title) => {\n if (isEmpty(title)) {\n this.element.classList.add(this.className_(undefined, 'not'));\n }\n else {\n this.element.classList.remove(this.className_(undefined, 'not'));\n }\n });\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const indentElem = doc.createElement('div');\n indentElem.classList.add(this.className_('i'));\n this.element.appendChild(indentElem);\n const titleElem = doc.createElement('div');\n titleElem.classList.add(this.className_('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n this.titleElement = titleElem;\n const markElem = doc.createElement('div');\n markElem.classList.add(this.className_('m'));\n this.buttonElement.appendChild(markElem);\n const containerElem = doc.createElement('div');\n containerElem.classList.add(this.className_('c'));\n this.element.appendChild(containerElem);\n this.containerElement = containerElem;\n }\n}\n\nclass FolderController extends ContainerBladeController {\n constructor(doc, config) {\n var _a;\n const foldable = Foldable.create((_a = config.expanded) !== null && _a !== void 0 ? _a : true);\n const view = new FolderView(doc, {\n foldable: foldable,\n props: config.props,\n viewName: config.root ? 'rot' : undefined,\n viewProps: config.viewProps,\n });\n super(Object.assign(Object.assign({}, config), { rackController: new RackController({\n blade: config.blade,\n element: view.containerElement,\n root: config.root,\n viewProps: config.viewProps,\n }), view: view }));\n this.onTitleClick_ = this.onTitleClick_.bind(this);\n this.props = config.props;\n this.foldable = foldable;\n bindFoldable(this.foldable, this.view.containerElement);\n this.rackController.rack.emitter.on('add', () => {\n this.foldable.cleanUpTransition();\n });\n this.rackController.rack.emitter.on('remove', () => {\n this.foldable.cleanUpTransition();\n });\n this.view.buttonElement.addEventListener('click', this.onTitleClick_);\n }\n get document() {\n return this.view.element.ownerDocument;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n expanded: p.required.boolean,\n title: p.optional.string,\n }), (result) => {\n this.foldable.set('expanded', result.expanded);\n this.props.set('title', result.title);\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n expanded: this.foldable.get('expanded'),\n title: this.props.get('title'),\n });\n }\n onTitleClick_() {\n this.foldable.set('expanded', !this.foldable.get('expanded'));\n }\n}\n\nconst FolderBladePlugin = createPlugin({\n id: 'folder',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n title: p.required.string,\n view: p.required.constant('folder'),\n expanded: p.optional.boolean,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new FolderController(args.document, {\n blade: args.blade,\n expanded: args.params.expanded,\n props: ValueMap.fromObject({\n title: args.params.title,\n }),\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (!(args.controller instanceof FolderController)) {\n return null;\n }\n return new FolderApi(args.controller, args.pool);\n },\n});\n\nconst cn$o = ClassName('');\nfunction valueToModifier(elem, modifier) {\n return valueToClassName(elem, cn$o(undefined, modifier));\n}\nclass ViewProps extends ValueMap {\n constructor(valueMap) {\n var _a;\n super(valueMap);\n this.onDisabledChange_ = this.onDisabledChange_.bind(this);\n this.onParentChange_ = this.onParentChange_.bind(this);\n this.onParentGlobalDisabledChange_ =\n this.onParentGlobalDisabledChange_.bind(this);\n [this.globalDisabled_, this.setGlobalDisabled_] = createReadonlyValue(createValue(this.getGlobalDisabled_()));\n this.value('disabled').emitter.on('change', this.onDisabledChange_);\n this.value('parent').emitter.on('change', this.onParentChange_);\n (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n }\n static create(opt_initialValue) {\n var _a, _b, _c;\n const initialValue = opt_initialValue !== null && opt_initialValue !== void 0 ? opt_initialValue : {};\n return new ViewProps(ValueMap.createCore({\n disabled: (_a = initialValue.disabled) !== null && _a !== void 0 ? _a : false,\n disposed: false,\n hidden: (_b = initialValue.hidden) !== null && _b !== void 0 ? _b : false,\n parent: (_c = initialValue.parent) !== null && _c !== void 0 ? _c : null,\n }));\n }\n get globalDisabled() {\n return this.globalDisabled_;\n }\n bindClassModifiers(elem) {\n bindValue(this.globalDisabled_, valueToModifier(elem, 'disabled'));\n bindValueMap(this, 'hidden', valueToModifier(elem, 'hidden'));\n }\n bindDisabled(target) {\n bindValue(this.globalDisabled_, (disabled) => {\n target.disabled = disabled;\n });\n }\n bindTabIndex(elem) {\n bindValue(this.globalDisabled_, (disabled) => {\n elem.tabIndex = disabled ? -1 : 0;\n });\n }\n handleDispose(callback) {\n this.value('disposed').emitter.on('change', (disposed) => {\n if (disposed) {\n callback();\n }\n });\n }\n importState(state) {\n this.set('disabled', state.disabled);\n this.set('hidden', state.hidden);\n }\n exportState() {\n return {\n disabled: this.get('disabled'),\n hidden: this.get('hidden'),\n };\n }\n getGlobalDisabled_() {\n const parent = this.get('parent');\n const parentDisabled = parent ? parent.globalDisabled.rawValue : false;\n return parentDisabled || this.get('disabled');\n }\n updateGlobalDisabled_() {\n this.setGlobalDisabled_(this.getGlobalDisabled_());\n }\n onDisabledChange_() {\n this.updateGlobalDisabled_();\n }\n onParentGlobalDisabledChange_() {\n this.updateGlobalDisabled_();\n }\n onParentChange_(ev) {\n var _a;\n const prevParent = ev.previousRawValue;\n prevParent === null || prevParent === void 0 ? void 0 : prevParent.globalDisabled.emitter.off('change', this.onParentGlobalDisabledChange_);\n (_a = this.get('parent')) === null || _a === void 0 ? void 0 : _a.globalDisabled.emitter.on('change', this.onParentGlobalDisabledChange_);\n this.updateGlobalDisabled_();\n }\n}\n\nconst cn$n = ClassName('tbp');\nclass TabPageView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$n());\n config.viewProps.bindClassModifiers(this.element);\n const containerElem = doc.createElement('div');\n containerElem.classList.add(cn$n('c'));\n this.element.appendChild(containerElem);\n this.containerElement = containerElem;\n }\n}\n\nconst cn$m = ClassName('tbi');\nclass TabItemView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$m());\n config.viewProps.bindClassModifiers(this.element);\n bindValueMap(config.props, 'selected', (selected) => {\n if (selected) {\n this.element.classList.add(cn$m(undefined, 'sel'));\n }\n else {\n this.element.classList.remove(cn$m(undefined, 'sel'));\n }\n });\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$m('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn$m('t'));\n bindValueToTextContent(config.props.value('title'), titleElem);\n this.buttonElement.appendChild(titleElem);\n this.titleElement = titleElem;\n }\n}\n\nclass TabItemController {\n constructor(doc, config) {\n this.emitter = new Emitter();\n this.onClick_ = this.onClick_.bind(this);\n this.props = config.props;\n this.viewProps = config.viewProps;\n this.view = new TabItemView(doc, {\n props: config.props,\n viewProps: config.viewProps,\n });\n this.view.buttonElement.addEventListener('click', this.onClick_);\n }\n onClick_() {\n this.emitter.emit('click', {\n sender: this,\n });\n }\n}\n\nclass TabPageController extends ContainerBladeController {\n constructor(doc, config) {\n const view = new TabPageView(doc, {\n viewProps: config.viewProps,\n });\n super(Object.assign(Object.assign({}, config), { rackController: new RackController({\n blade: config.blade,\n element: view.containerElement,\n viewProps: config.viewProps,\n }), view: view }));\n this.onItemClick_ = this.onItemClick_.bind(this);\n this.ic_ = new TabItemController(doc, {\n props: config.itemProps,\n viewProps: ViewProps.create(),\n });\n this.ic_.emitter.on('click', this.onItemClick_);\n this.props = config.props;\n bindValueMap(this.props, 'selected', (selected) => {\n this.itemController.props.set('selected', selected);\n this.viewProps.set('hidden', !selected);\n });\n }\n get itemController() {\n return this.ic_;\n }\n importState(state) {\n return importBladeState(state, (s) => super.importState(s), (p) => ({\n selected: p.required.boolean,\n title: p.required.string,\n }), (result) => {\n this.ic_.props.set('selected', result.selected);\n this.ic_.props.set('title', result.title);\n return true;\n });\n }\n exportState() {\n return exportBladeState(() => super.exportState(), {\n selected: this.ic_.props.get('selected'),\n title: this.ic_.props.get('title'),\n });\n }\n onItemClick_() {\n this.props.set('selected', true);\n }\n}\n\nclass TabApi extends ContainerBladeApi {\n constructor(controller, pool) {\n super(controller, pool);\n this.emitter_ = new Emitter();\n this.onSelect_ = this.onSelect_.bind(this);\n this.pool_ = pool;\n this.rackApi_.on('change', (ev) => {\n this.emitter_.emit('change', ev);\n });\n this.controller.tab.selectedIndex.emitter.on('change', this.onSelect_);\n }\n get pages() {\n return this.rackApi_.children;\n }\n addPage(params) {\n const doc = this.controller.view.element.ownerDocument;\n const pc = new TabPageController(doc, {\n blade: createBlade(),\n itemProps: ValueMap.fromObject({\n selected: false,\n title: params.title,\n }),\n props: ValueMap.fromObject({\n selected: false,\n }),\n viewProps: ViewProps.create(),\n });\n const papi = this.pool_.createApi(pc);\n return this.rackApi_.add(papi, params.index);\n }\n removePage(index) {\n this.rackApi_.remove(this.rackApi_.children[index]);\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n onSelect_(ev) {\n this.emitter_.emit('select', new TpTabSelectEvent(this, ev.rawValue));\n }\n}\n\nclass TabPageApi extends ContainerBladeApi {\n get title() {\n var _a;\n return (_a = this.controller.itemController.props.get('title')) !== null && _a !== void 0 ? _a : '';\n }\n set title(title) {\n this.controller.itemController.props.set('title', title);\n }\n get selected() {\n return this.controller.props.get('selected');\n }\n set selected(selected) {\n this.controller.props.set('selected', selected);\n }\n get children() {\n return this.rackApi_.children;\n }\n addButton(params) {\n return this.rackApi_.addButton(params);\n }\n addFolder(params) {\n return this.rackApi_.addFolder(params);\n }\n addTab(params) {\n return this.rackApi_.addTab(params);\n }\n add(api, opt_index) {\n this.rackApi_.add(api, opt_index);\n }\n remove(api) {\n this.rackApi_.remove(api);\n }\n addBinding(object, key, opt_params) {\n return this.rackApi_.addBinding(object, key, opt_params);\n }\n addBlade(params) {\n return this.rackApi_.addBlade(params);\n }\n}\n\nconst INDEX_NOT_SELECTED = -1;\nclass Tab {\n constructor() {\n this.onItemSelectedChange_ = this.onItemSelectedChange_.bind(this);\n this.empty = createValue(true);\n this.selectedIndex = createValue(INDEX_NOT_SELECTED);\n this.items_ = [];\n }\n add(item, opt_index) {\n const index = opt_index !== null && opt_index !== void 0 ? opt_index : this.items_.length;\n this.items_.splice(index, 0, item);\n item.emitter.on('change', this.onItemSelectedChange_);\n this.keepSelection_();\n }\n remove(item) {\n const index = this.items_.indexOf(item);\n if (index < 0) {\n return;\n }\n this.items_.splice(index, 1);\n item.emitter.off('change', this.onItemSelectedChange_);\n this.keepSelection_();\n }\n keepSelection_() {\n if (this.items_.length === 0) {\n this.selectedIndex.rawValue = INDEX_NOT_SELECTED;\n this.empty.rawValue = true;\n return;\n }\n const firstSelIndex = this.items_.findIndex((s) => s.rawValue);\n if (firstSelIndex < 0) {\n this.items_.forEach((s, i) => {\n s.rawValue = i === 0;\n });\n this.selectedIndex.rawValue = 0;\n }\n else {\n this.items_.forEach((s, i) => {\n s.rawValue = i === firstSelIndex;\n });\n this.selectedIndex.rawValue = firstSelIndex;\n }\n this.empty.rawValue = false;\n }\n onItemSelectedChange_(ev) {\n if (ev.rawValue) {\n const index = this.items_.findIndex((s) => s === ev.sender);\n this.items_.forEach((s, i) => {\n s.rawValue = i === index;\n });\n this.selectedIndex.rawValue = index;\n }\n else {\n this.keepSelection_();\n }\n }\n}\n\nconst cn$l = ClassName('tab');\nclass TabView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$l(), bladeContainerClassName());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.empty, valueToClassName(this.element, cn$l(undefined, 'nop')));\n const titleElem = doc.createElement('div');\n titleElem.classList.add(cn$l('t'));\n this.element.appendChild(titleElem);\n this.itemsElement = titleElem;\n const indentElem = doc.createElement('div');\n indentElem.classList.add(cn$l('i'));\n this.element.appendChild(indentElem);\n const contentsElem = doc.createElement('div');\n contentsElem.classList.add(cn$l('c'));\n this.element.appendChild(contentsElem);\n this.contentsElement = contentsElem;\n }\n}\n\nclass TabController extends ContainerBladeController {\n constructor(doc, config) {\n const tab = new Tab();\n const view = new TabView(doc, {\n empty: tab.empty,\n viewProps: config.viewProps,\n });\n super({\n blade: config.blade,\n rackController: new RackController({\n blade: config.blade,\n element: view.contentsElement,\n viewProps: config.viewProps,\n }),\n view: view,\n });\n this.onRackAdd_ = this.onRackAdd_.bind(this);\n this.onRackRemove_ = this.onRackRemove_.bind(this);\n const rack = this.rackController.rack;\n rack.emitter.on('add', this.onRackAdd_);\n rack.emitter.on('remove', this.onRackRemove_);\n this.tab = tab;\n }\n add(pc, opt_index) {\n this.rackController.rack.add(pc, opt_index);\n }\n remove(index) {\n this.rackController.rack.remove(this.rackController.rack.children[index]);\n }\n onRackAdd_(ev) {\n if (!ev.root) {\n return;\n }\n const pc = ev.bladeController;\n insertElementAt(this.view.itemsElement, pc.itemController.view.element, ev.index);\n pc.itemController.viewProps.set('parent', this.viewProps);\n this.tab.add(pc.props.value('selected'));\n }\n onRackRemove_(ev) {\n if (!ev.root) {\n return;\n }\n const pc = ev.bladeController;\n removeElement(pc.itemController.view.element);\n pc.itemController.viewProps.set('parent', null);\n this.tab.remove(pc.props.value('selected'));\n }\n}\n\nconst TabBladePlugin = createPlugin({\n id: 'tab',\n type: 'blade',\n accept(params) {\n const result = parseRecord(params, (p) => ({\n pages: p.required.array(p.required.object({ title: p.required.string })),\n view: p.required.constant('tab'),\n }));\n if (!result || result.pages.length === 0) {\n return null;\n }\n return { params: result };\n },\n controller(args) {\n const c = new TabController(args.document, {\n blade: args.blade,\n viewProps: args.viewProps,\n });\n args.params.pages.forEach((p) => {\n const pc = new TabPageController(args.document, {\n blade: createBlade(),\n itemProps: ValueMap.fromObject({\n selected: false,\n title: p.title,\n }),\n props: ValueMap.fromObject({\n selected: false,\n }),\n viewProps: ViewProps.create(),\n });\n c.add(pc);\n });\n return c;\n },\n api(args) {\n if (args.controller instanceof TabController) {\n return new TabApi(args.controller, args.pool);\n }\n if (args.controller instanceof TabPageController) {\n return new TabPageApi(args.controller, args.pool);\n }\n return null;\n },\n});\n\nfunction createBladeController(plugin, args) {\n const ac = plugin.accept(args.params);\n if (!ac) {\n return null;\n }\n const params = parseRecord(args.params, (p) => ({\n disabled: p.optional.boolean,\n hidden: p.optional.boolean,\n }));\n return plugin.controller({\n blade: createBlade(),\n document: args.document,\n params: forceCast(Object.assign(Object.assign({}, ac.params), { disabled: params === null || params === void 0 ? void 0 : params.disabled, hidden: params === null || params === void 0 ? void 0 : params.hidden })),\n viewProps: ViewProps.create({\n disabled: params === null || params === void 0 ? void 0 : params.disabled,\n hidden: params === null || params === void 0 ? void 0 : params.hidden,\n }),\n });\n}\n\nclass ListInputBindingApi extends BindingApi {\n get options() {\n return this.controller.valueController.props.get('options');\n }\n set options(options) {\n this.controller.valueController.props.set('options', options);\n }\n}\n\nclass ManualTicker {\n constructor() {\n this.disabled = false;\n this.emitter = new Emitter();\n }\n dispose() { }\n tick() {\n if (this.disabled) {\n return;\n }\n this.emitter.emit('tick', {\n sender: this,\n });\n }\n}\n\nclass IntervalTicker {\n constructor(doc, interval) {\n this.disabled_ = false;\n this.timerId_ = null;\n this.onTick_ = this.onTick_.bind(this);\n this.doc_ = doc;\n this.emitter = new Emitter();\n this.interval_ = interval;\n this.setTimer_();\n }\n get disabled() {\n return this.disabled_;\n }\n set disabled(inactive) {\n this.disabled_ = inactive;\n if (this.disabled_) {\n this.clearTimer_();\n }\n else {\n this.setTimer_();\n }\n }\n dispose() {\n this.clearTimer_();\n }\n clearTimer_() {\n if (this.timerId_ === null) {\n return;\n }\n const win = this.doc_.defaultView;\n if (win) {\n win.clearInterval(this.timerId_);\n }\n this.timerId_ = null;\n }\n setTimer_() {\n this.clearTimer_();\n if (this.interval_ <= 0) {\n return;\n }\n const win = this.doc_.defaultView;\n if (win) {\n this.timerId_ = win.setInterval(this.onTick_, this.interval_);\n }\n }\n onTick_() {\n if (this.disabled_) {\n return;\n }\n this.emitter.emit('tick', {\n sender: this,\n });\n }\n}\n\nclass CompositeConstraint {\n constructor(constraints) {\n this.constraints = constraints;\n }\n constrain(value) {\n return this.constraints.reduce((result, c) => {\n return c.constrain(result);\n }, value);\n }\n}\nfunction findConstraint(c, constraintClass) {\n if (c instanceof constraintClass) {\n return c;\n }\n if (c instanceof CompositeConstraint) {\n const result = c.constraints.reduce((tmpResult, sc) => {\n if (tmpResult) {\n return tmpResult;\n }\n return sc instanceof constraintClass ? sc : null;\n }, null);\n if (result) {\n return result;\n }\n }\n return null;\n}\n\nclass ListConstraint {\n constructor(options) {\n this.values = ValueMap.fromObject({\n options: options,\n });\n }\n constrain(value) {\n const opts = this.values.get('options');\n if (opts.length === 0) {\n return value;\n }\n const matched = opts.filter((item) => {\n return item.value === value;\n }).length > 0;\n return matched ? value : opts[0].value;\n }\n}\n\nfunction parseListOptions(value) {\n var _a;\n const p = MicroParsers;\n if (Array.isArray(value)) {\n return (_a = parseRecord({ items: value }, (p) => ({\n items: p.required.array(p.required.object({\n text: p.required.string,\n value: p.required.raw,\n })),\n }))) === null || _a === void 0 ? void 0 : _a.items;\n }\n if (typeof value === 'object') {\n return p.required.raw(value)\n .value;\n }\n return undefined;\n}\nfunction normalizeListOptions(options) {\n if (Array.isArray(options)) {\n return options;\n }\n const items = [];\n Object.keys(options).forEach((text) => {\n items.push({ text: text, value: options[text] });\n });\n return items;\n}\nfunction createListConstraint(options) {\n return !isEmpty(options)\n ? new ListConstraint(normalizeListOptions(forceCast(options)))\n : null;\n}\n\nconst cn$k = ClassName('lst');\nclass ListView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.props_ = config.props;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$k());\n config.viewProps.bindClassModifiers(this.element);\n const selectElem = doc.createElement('select');\n selectElem.classList.add(cn$k('s'));\n config.viewProps.bindDisabled(selectElem);\n this.element.appendChild(selectElem);\n this.selectElement = selectElem;\n const markElem = doc.createElement('div');\n markElem.classList.add(cn$k('m'));\n markElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n this.element.appendChild(markElem);\n config.value.emitter.on('change', this.onValueChange_);\n this.value_ = config.value;\n bindValueMap(this.props_, 'options', (opts) => {\n removeChildElements(this.selectElement);\n opts.forEach((item) => {\n const optionElem = doc.createElement('option');\n optionElem.textContent = item.text;\n this.selectElement.appendChild(optionElem);\n });\n this.update_();\n });\n }\n update_() {\n const values = this.props_.get('options').map((o) => o.value);\n this.selectElement.selectedIndex = values.indexOf(this.value_.rawValue);\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass ListController {\n constructor(doc, config) {\n this.onSelectChange_ = this.onSelectChange_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new ListView(doc, {\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.selectElement.addEventListener('change', this.onSelectChange_);\n }\n onSelectChange_(e) {\n const selectElem = forceCast(e.currentTarget);\n this.value.rawValue =\n this.props.get('options')[selectElem.selectedIndex].value;\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n options: p.required.custom(parseListOptions),\n }), (result) => {\n this.props.set('options', normalizeListOptions(result.options));\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n options: this.props.get('options'),\n });\n }\n}\n\nconst cn$j = ClassName('pop');\nclass PopupView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$j());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.shows, valueToClassName(this.element, cn$j(undefined, 'v')));\n }\n}\n\nclass PopupController {\n constructor(doc, config) {\n this.shows = createValue(false);\n this.viewProps = config.viewProps;\n this.view = new PopupView(doc, {\n shows: this.shows,\n viewProps: this.viewProps,\n });\n }\n}\n\nconst cn$i = ClassName('txt');\nclass TextView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$i());\n config.viewProps.bindClassModifiers(this.element);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$i('i'));\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n config.value.emitter.on('change', this.onChange_);\n this.value_ = config.value;\n this.refresh();\n }\n refresh() {\n const formatter = this.props_.get('formatter');\n this.inputElement.value = formatter(this.value_.rawValue);\n }\n onChange_() {\n this.refresh();\n }\n}\n\nclass TextController {\n constructor(doc, config) {\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.parser_ = config.parser;\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new TextView(doc, {\n props: config.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n }\n onInputChange_(e) {\n const inputElem = forceCast(e.currentTarget);\n const value = inputElem.value;\n const parsedValue = this.parser_(value);\n if (!isEmpty(parsedValue)) {\n this.value.rawValue = parsedValue;\n }\n this.view.refresh();\n }\n}\n\nfunction boolToString(value) {\n return String(value);\n}\nfunction boolFromUnknown(value) {\n if (value === 'false') {\n return false;\n }\n return !!value;\n}\nfunction BooleanFormatter(value) {\n return boolToString(value);\n}\n\nfunction composeParsers(parsers) {\n return (text) => {\n return parsers.reduce((result, parser) => {\n if (result !== null) {\n return result;\n }\n return parser(text);\n }, null);\n };\n}\n\nconst innerFormatter = createNumberFormatter(0);\nfunction formatPercentage(value) {\n return innerFormatter(value) + '%';\n}\n\nfunction stringFromUnknown(value) {\n return String(value);\n}\nfunction formatString(value) {\n return value;\n}\n\nfunction connectValues({ primary, secondary, forward, backward, }) {\n let changing = false;\n function preventFeedback(callback) {\n if (changing) {\n return;\n }\n changing = true;\n callback();\n changing = false;\n }\n primary.emitter.on('change', (ev) => {\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), ev.options);\n });\n });\n secondary.emitter.on('change', (ev) => {\n preventFeedback(() => {\n primary.setRawValue(backward(primary.rawValue, secondary.rawValue), ev.options);\n });\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), ev.options);\n });\n });\n preventFeedback(() => {\n secondary.setRawValue(forward(primary.rawValue, secondary.rawValue), {\n forceEmit: false,\n last: true,\n });\n });\n}\n\nfunction getStepForKey(keyScale, keys) {\n const step = keyScale * (keys.altKey ? 0.1 : 1) * (keys.shiftKey ? 10 : 1);\n if (keys.upKey) {\n return +step;\n }\n else if (keys.downKey) {\n return -step;\n }\n return 0;\n}\nfunction getVerticalStepKeys(ev) {\n return {\n altKey: ev.altKey,\n downKey: ev.key === 'ArrowDown',\n shiftKey: ev.shiftKey,\n upKey: ev.key === 'ArrowUp',\n };\n}\nfunction getHorizontalStepKeys(ev) {\n return {\n altKey: ev.altKey,\n downKey: ev.key === 'ArrowLeft',\n shiftKey: ev.shiftKey,\n upKey: ev.key === 'ArrowRight',\n };\n}\nfunction isVerticalArrowKey(key) {\n return key === 'ArrowUp' || key === 'ArrowDown';\n}\nfunction isArrowKey(key) {\n return isVerticalArrowKey(key) || key === 'ArrowLeft' || key === 'ArrowRight';\n}\n\nfunction computeOffset$1(ev, elem) {\n var _a, _b;\n const win = elem.ownerDocument.defaultView;\n const rect = elem.getBoundingClientRect();\n return {\n x: ev.pageX - (((_a = (win && win.scrollX)) !== null && _a !== void 0 ? _a : 0) + rect.left),\n y: ev.pageY - (((_b = (win && win.scrollY)) !== null && _b !== void 0 ? _b : 0) + rect.top),\n };\n}\nclass PointerHandler {\n constructor(element) {\n this.lastTouch_ = null;\n this.onDocumentMouseMove_ = this.onDocumentMouseMove_.bind(this);\n this.onDocumentMouseUp_ = this.onDocumentMouseUp_.bind(this);\n this.onMouseDown_ = this.onMouseDown_.bind(this);\n this.onTouchEnd_ = this.onTouchEnd_.bind(this);\n this.onTouchMove_ = this.onTouchMove_.bind(this);\n this.onTouchStart_ = this.onTouchStart_.bind(this);\n this.elem_ = element;\n this.emitter = new Emitter();\n element.addEventListener('touchstart', this.onTouchStart_, {\n passive: false,\n });\n element.addEventListener('touchmove', this.onTouchMove_, {\n passive: true,\n });\n element.addEventListener('touchend', this.onTouchEnd_);\n element.addEventListener('mousedown', this.onMouseDown_);\n }\n computePosition_(offset) {\n const rect = this.elem_.getBoundingClientRect();\n return {\n bounds: {\n width: rect.width,\n height: rect.height,\n },\n point: offset\n ? {\n x: offset.x,\n y: offset.y,\n }\n : null,\n };\n }\n onMouseDown_(ev) {\n var _a;\n ev.preventDefault();\n (_a = ev.currentTarget) === null || _a === void 0 ? void 0 : _a.focus();\n const doc = this.elem_.ownerDocument;\n doc.addEventListener('mousemove', this.onDocumentMouseMove_);\n doc.addEventListener('mouseup', this.onDocumentMouseUp_);\n this.emitter.emit('down', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onDocumentMouseMove_(ev) {\n this.emitter.emit('move', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onDocumentMouseUp_(ev) {\n const doc = this.elem_.ownerDocument;\n doc.removeEventListener('mousemove', this.onDocumentMouseMove_);\n doc.removeEventListener('mouseup', this.onDocumentMouseUp_);\n this.emitter.emit('up', {\n altKey: ev.altKey,\n data: this.computePosition_(computeOffset$1(ev, this.elem_)),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n onTouchStart_(ev) {\n ev.preventDefault();\n const touch = ev.targetTouches.item(0);\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('down', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n this.lastTouch_ = touch;\n }\n onTouchMove_(ev) {\n const touch = ev.targetTouches.item(0);\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('move', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n this.lastTouch_ = touch;\n }\n onTouchEnd_(ev) {\n var _a;\n const touch = (_a = ev.targetTouches.item(0)) !== null && _a !== void 0 ? _a : this.lastTouch_;\n const rect = this.elem_.getBoundingClientRect();\n this.emitter.emit('up', {\n altKey: ev.altKey,\n data: this.computePosition_(touch\n ? {\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n }\n : undefined),\n sender: this,\n shiftKey: ev.shiftKey,\n });\n }\n}\n\nconst cn$h = ClassName('txt');\nclass NumberTextView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$h(), cn$h(undefined, 'num'));\n if (config.arrayPosition) {\n this.element.classList.add(cn$h(undefined, config.arrayPosition));\n }\n config.viewProps.bindClassModifiers(this.element);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$h('i'));\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n this.onDraggingChange_ = this.onDraggingChange_.bind(this);\n this.dragging_ = config.dragging;\n this.dragging_.emitter.on('change', this.onDraggingChange_);\n this.element.classList.add(cn$h());\n this.inputElement.classList.add(cn$h('i'));\n const knobElem = doc.createElement('div');\n knobElem.classList.add(cn$h('k'));\n this.element.appendChild(knobElem);\n this.knobElement = knobElem;\n const guideElem = doc.createElementNS(SVG_NS, 'svg');\n guideElem.classList.add(cn$h('g'));\n this.knobElement.appendChild(guideElem);\n const bodyElem = doc.createElementNS(SVG_NS, 'path');\n bodyElem.classList.add(cn$h('gb'));\n guideElem.appendChild(bodyElem);\n this.guideBodyElem_ = bodyElem;\n const headElem = doc.createElementNS(SVG_NS, 'path');\n headElem.classList.add(cn$h('gh'));\n guideElem.appendChild(headElem);\n this.guideHeadElem_ = headElem;\n const tooltipElem = doc.createElement('div');\n tooltipElem.classList.add(ClassName('tt')());\n this.knobElement.appendChild(tooltipElem);\n this.tooltipElem_ = tooltipElem;\n config.value.emitter.on('change', this.onChange_);\n this.value = config.value;\n this.refresh();\n }\n onDraggingChange_(ev) {\n if (ev.rawValue === null) {\n this.element.classList.remove(cn$h(undefined, 'drg'));\n return;\n }\n this.element.classList.add(cn$h(undefined, 'drg'));\n const x = ev.rawValue / this.props_.get('pointerScale');\n const aox = x + (x > 0 ? -1 : x < 0 ? +1 : 0);\n const adx = constrainRange(-aox, -4, +4);\n this.guideHeadElem_.setAttributeNS(null, 'd', [`M ${aox + adx},0 L${aox},4 L${aox + adx},8`, `M ${x},-1 L${x},9`].join(' '));\n this.guideBodyElem_.setAttributeNS(null, 'd', `M 0,4 L${x},4`);\n const formatter = this.props_.get('formatter');\n this.tooltipElem_.textContent = formatter(this.value.rawValue);\n this.tooltipElem_.style.left = `${x}px`;\n }\n refresh() {\n const formatter = this.props_.get('formatter');\n this.inputElement.value = formatter(this.value.rawValue);\n }\n onChange_() {\n this.refresh();\n }\n}\n\nclass NumberTextController {\n constructor(doc, config) {\n var _a;\n this.originRawValue_ = 0;\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.onInputKeyDown_ = this.onInputKeyDown_.bind(this);\n this.onInputKeyUp_ = this.onInputKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.parser_ = config.parser;\n this.props = config.props;\n this.sliderProps_ = (_a = config.sliderProps) !== null && _a !== void 0 ? _a : null;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.dragging_ = createValue(null);\n this.view = new NumberTextView(doc, {\n arrayPosition: config.arrayPosition,\n dragging: this.dragging_,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n this.view.inputElement.addEventListener('keydown', this.onInputKeyDown_);\n this.view.inputElement.addEventListener('keyup', this.onInputKeyUp_);\n const ph = new PointerHandler(this.view.knobElement);\n ph.emitter.on('down', this.onPointerDown_);\n ph.emitter.on('move', this.onPointerMove_);\n ph.emitter.on('up', this.onPointerUp_);\n }\n constrainValue_(value) {\n var _a, _b;\n const min = (_a = this.sliderProps_) === null || _a === void 0 ? void 0 : _a.get('min');\n const max = (_b = this.sliderProps_) === null || _b === void 0 ? void 0 : _b.get('max');\n let v = value;\n if (min !== undefined) {\n v = Math.max(v, min);\n }\n if (max !== undefined) {\n v = Math.min(v, max);\n }\n return v;\n }\n onInputChange_(e) {\n const inputElem = forceCast(e.currentTarget);\n const value = inputElem.value;\n const parsedValue = this.parser_(value);\n if (!isEmpty(parsedValue)) {\n this.value.rawValue = this.constrainValue_(parsedValue);\n }\n this.view.refresh();\n }\n onInputKeyDown_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getVerticalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.constrainValue_(this.value.rawValue + step), {\n forceEmit: false,\n last: false,\n });\n }\n onInputKeyUp_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getVerticalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n onPointerDown_() {\n this.originRawValue_ = this.value.rawValue;\n this.dragging_.rawValue = 0;\n }\n computeDraggingValue_(data) {\n if (!data.point) {\n return null;\n }\n const dx = data.point.x - data.bounds.width / 2;\n return this.constrainValue_(this.originRawValue_ + dx * this.props.get('pointerScale'));\n }\n onPointerMove_(ev) {\n const v = this.computeDraggingValue_(ev.data);\n if (v === null) {\n return;\n }\n this.value.setRawValue(v, {\n forceEmit: false,\n last: false,\n });\n this.dragging_.rawValue = this.value.rawValue - this.originRawValue_;\n }\n onPointerUp_(ev) {\n const v = this.computeDraggingValue_(ev.data);\n if (v === null) {\n return;\n }\n this.value.setRawValue(v, {\n forceEmit: true,\n last: true,\n });\n this.dragging_.rawValue = null;\n }\n}\n\nconst cn$g = ClassName('sld');\nclass SliderView {\n constructor(doc, config) {\n this.onChange_ = this.onChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$g());\n config.viewProps.bindClassModifiers(this.element);\n const trackElem = doc.createElement('div');\n trackElem.classList.add(cn$g('t'));\n config.viewProps.bindTabIndex(trackElem);\n this.element.appendChild(trackElem);\n this.trackElement = trackElem;\n const knobElem = doc.createElement('div');\n knobElem.classList.add(cn$g('k'));\n this.trackElement.appendChild(knobElem);\n this.knobElement = knobElem;\n config.value.emitter.on('change', this.onChange_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const p = constrainRange(mapRange(this.value.rawValue, this.props_.get('min'), this.props_.get('max'), 0, 100), 0, 100);\n this.knobElement.style.width = `${p}%`;\n }\n onChange_() {\n this.update_();\n }\n}\n\nclass SliderController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDownOrMove_ = this.onPointerDownOrMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.props = config.props;\n this.view = new SliderView(doc, {\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.trackElement);\n this.ptHandler_.emitter.on('down', this.onPointerDownOrMove_);\n this.ptHandler_.emitter.on('move', this.onPointerDownOrMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.trackElement.addEventListener('keydown', this.onKeyDown_);\n this.view.trackElement.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n this.value.setRawValue(mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, this.props.get('min'), this.props.get('max')), opts);\n }\n onPointerDownOrMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue + step, {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(this.props.get('keyScale'), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nconst cn$f = ClassName('sldtxt');\nclass SliderTextView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$f());\n const sliderElem = doc.createElement('div');\n sliderElem.classList.add(cn$f('s'));\n this.sliderView_ = config.sliderView;\n sliderElem.appendChild(this.sliderView_.element);\n this.element.appendChild(sliderElem);\n const textElem = doc.createElement('div');\n textElem.classList.add(cn$f('t'));\n this.textView_ = config.textView;\n textElem.appendChild(this.textView_.element);\n this.element.appendChild(textElem);\n }\n}\n\nclass SliderTextController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.sliderC_ = new SliderController(doc, {\n props: config.sliderProps,\n value: config.value,\n viewProps: this.viewProps,\n });\n this.textC_ = new NumberTextController(doc, {\n parser: config.parser,\n props: config.textProps,\n sliderProps: config.sliderProps,\n value: config.value,\n viewProps: config.viewProps,\n });\n this.view = new SliderTextView(doc, {\n sliderView: this.sliderC_.view,\n textView: this.textC_.view,\n });\n }\n get sliderController() {\n return this.sliderC_;\n }\n get textController() {\n return this.textC_;\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n max: p.required.number,\n min: p.required.number,\n }), (result) => {\n const sliderProps = this.sliderC_.props;\n sliderProps.set('max', result.max);\n sliderProps.set('min', result.min);\n return true;\n });\n }\n exportProps() {\n const sliderProps = this.sliderC_.props;\n return exportBladeState(null, {\n max: sliderProps.get('max'),\n min: sliderProps.get('min'),\n });\n }\n}\nfunction createSliderTextProps(config) {\n return {\n sliderProps: new ValueMap({\n keyScale: config.keyScale,\n max: config.max,\n min: config.min,\n }),\n textProps: new ValueMap({\n formatter: createValue(config.formatter),\n keyScale: config.keyScale,\n pointerScale: createValue(config.pointerScale),\n }),\n };\n}\n\nconst CSS_VAR_MAP = {\n containerUnitSize: 'cnt-usz',\n};\nfunction getCssVar(key) {\n return `--${CSS_VAR_MAP[key]}`;\n}\n\nfunction createPointDimensionParser(p) {\n return createNumberTextInputParamsParser(p);\n}\nfunction parsePointDimensionParams(value) {\n if (!isRecord(value)) {\n return undefined;\n }\n return parseRecord(value, createPointDimensionParser);\n}\nfunction createDimensionConstraint(params, initialValue) {\n if (!params) {\n return undefined;\n }\n const constraints = [];\n const cs = createStepConstraint(params, initialValue);\n if (cs) {\n constraints.push(cs);\n }\n const rs = createRangeConstraint(params);\n if (rs) {\n constraints.push(rs);\n }\n return new CompositeConstraint(constraints);\n}\n\nfunction isCompatible(ver) {\n if (!ver) {\n return false;\n }\n return ver.major === VERSION$1.major;\n}\n\nfunction parsePickerLayout(value) {\n if (value === 'inline' || value === 'popup') {\n return value;\n }\n return undefined;\n}\n\nfunction writePrimitive(target, value) {\n target.write(value);\n}\n\nconst cn$e = ClassName('ckb');\nclass CheckboxView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$e());\n config.viewProps.bindClassModifiers(this.element);\n const labelElem = doc.createElement('label');\n labelElem.classList.add(cn$e('l'));\n this.element.appendChild(labelElem);\n this.labelElement = labelElem;\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$e('i'));\n inputElem.type = 'checkbox';\n this.labelElement.appendChild(inputElem);\n this.inputElement = inputElem;\n config.viewProps.bindDisabled(this.inputElement);\n const wrapperElem = doc.createElement('div');\n wrapperElem.classList.add(cn$e('w'));\n this.labelElement.appendChild(wrapperElem);\n const markElem = createSvgIconElement(doc, 'check');\n wrapperElem.appendChild(markElem);\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n this.inputElement.checked = this.value.rawValue;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass CheckboxController {\n constructor(doc, config) {\n this.onInputChange_ = this.onInputChange_.bind(this);\n this.onLabelMouseDown_ = this.onLabelMouseDown_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new CheckboxView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view.inputElement.addEventListener('change', this.onInputChange_);\n this.view.labelElement.addEventListener('mousedown', this.onLabelMouseDown_);\n }\n onInputChange_(ev) {\n const inputElem = forceCast(ev.currentTarget);\n this.value.rawValue = inputElem.checked;\n ev.preventDefault();\n ev.stopPropagation();\n }\n onLabelMouseDown_(ev) {\n ev.preventDefault();\n }\n}\n\nfunction createConstraint$6(params) {\n const constraints = [];\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\nconst BooleanInputPlugin = createPlugin({\n id: 'input-bool',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'boolean') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n options: p.optional.custom(parseListOptions),\n readonly: p.optional.constant(false),\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => boolFromUnknown,\n constraint: (args) => createConstraint$6(args.params),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(doc, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new CheckboxController(doc, {\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'boolean') {\n return null;\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n\nconst cn$d = ClassName('col');\nclass ColorView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$d());\n config.foldable.bindExpandedClass(this.element, cn$d(undefined, 'expanded'));\n bindValueMap(config.foldable, 'completed', valueToClassName(this.element, cn$d(undefined, 'cpl')));\n const headElem = doc.createElement('div');\n headElem.classList.add(cn$d('h'));\n this.element.appendChild(headElem);\n const swatchElem = doc.createElement('div');\n swatchElem.classList.add(cn$d('s'));\n headElem.appendChild(swatchElem);\n this.swatchElement = swatchElem;\n const textElem = doc.createElement('div');\n textElem.classList.add(cn$d('t'));\n headElem.appendChild(textElem);\n this.textElement = textElem;\n if (config.pickerLayout === 'inline') {\n const pickerElem = doc.createElement('div');\n pickerElem.classList.add(cn$d('p'));\n this.element.appendChild(pickerElem);\n this.pickerElement = pickerElem;\n }\n else {\n this.pickerElement = null;\n }\n }\n}\n\nfunction rgbToHslInt(r, g, b) {\n const rp = constrainRange(r / 255, 0, 1);\n const gp = constrainRange(g / 255, 0, 1);\n const bp = constrainRange(b / 255, 0, 1);\n const cmax = Math.max(rp, gp, bp);\n const cmin = Math.min(rp, gp, bp);\n const c = cmax - cmin;\n let h = 0;\n let s = 0;\n const l = (cmin + cmax) / 2;\n if (c !== 0) {\n s = c / (1 - Math.abs(cmax + cmin - 1));\n if (rp === cmax) {\n h = (gp - bp) / c;\n }\n else if (gp === cmax) {\n h = 2 + (bp - rp) / c;\n }\n else {\n h = 4 + (rp - gp) / c;\n }\n h = h / 6 + (h < 0 ? 1 : 0);\n }\n return [h * 360, s * 100, l * 100];\n}\nfunction hslToRgbInt(h, s, l) {\n const hp = ((h % 360) + 360) % 360;\n const sp = constrainRange(s / 100, 0, 1);\n const lp = constrainRange(l / 100, 0, 1);\n const c = (1 - Math.abs(2 * lp - 1)) * sp;\n const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n const m = lp - c / 2;\n let rp, gp, bp;\n if (hp >= 0 && hp < 60) {\n [rp, gp, bp] = [c, x, 0];\n }\n else if (hp >= 60 && hp < 120) {\n [rp, gp, bp] = [x, c, 0];\n }\n else if (hp >= 120 && hp < 180) {\n [rp, gp, bp] = [0, c, x];\n }\n else if (hp >= 180 && hp < 240) {\n [rp, gp, bp] = [0, x, c];\n }\n else if (hp >= 240 && hp < 300) {\n [rp, gp, bp] = [x, 0, c];\n }\n else {\n [rp, gp, bp] = [c, 0, x];\n }\n return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n}\nfunction rgbToHsvInt(r, g, b) {\n const rp = constrainRange(r / 255, 0, 1);\n const gp = constrainRange(g / 255, 0, 1);\n const bp = constrainRange(b / 255, 0, 1);\n const cmax = Math.max(rp, gp, bp);\n const cmin = Math.min(rp, gp, bp);\n const d = cmax - cmin;\n let h;\n if (d === 0) {\n h = 0;\n }\n else if (cmax === rp) {\n h = 60 * (((((gp - bp) / d) % 6) + 6) % 6);\n }\n else if (cmax === gp) {\n h = 60 * ((bp - rp) / d + 2);\n }\n else {\n h = 60 * ((rp - gp) / d + 4);\n }\n const s = cmax === 0 ? 0 : d / cmax;\n const v = cmax;\n return [h, s * 100, v * 100];\n}\nfunction hsvToRgbInt(h, s, v) {\n const hp = loopRange(h, 360);\n const sp = constrainRange(s / 100, 0, 1);\n const vp = constrainRange(v / 100, 0, 1);\n const c = vp * sp;\n const x = c * (1 - Math.abs(((hp / 60) % 2) - 1));\n const m = vp - c;\n let rp, gp, bp;\n if (hp >= 0 && hp < 60) {\n [rp, gp, bp] = [c, x, 0];\n }\n else if (hp >= 60 && hp < 120) {\n [rp, gp, bp] = [x, c, 0];\n }\n else if (hp >= 120 && hp < 180) {\n [rp, gp, bp] = [0, c, x];\n }\n else if (hp >= 180 && hp < 240) {\n [rp, gp, bp] = [0, x, c];\n }\n else if (hp >= 240 && hp < 300) {\n [rp, gp, bp] = [x, 0, c];\n }\n else {\n [rp, gp, bp] = [c, 0, x];\n }\n return [(rp + m) * 255, (gp + m) * 255, (bp + m) * 255];\n}\nfunction hslToHsvInt(h, s, l) {\n const sd = l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100);\n return [\n h,\n sd !== 0 ? (s * (100 - Math.abs(2 * l - 100))) / sd : 0,\n l + (s * (100 - Math.abs(2 * l - 100))) / (2 * 100),\n ];\n}\nfunction hsvToHslInt(h, s, v) {\n const sd = 100 - Math.abs((v * (200 - s)) / 100 - 100);\n return [h, sd !== 0 ? (s * v) / sd : 0, (v * (200 - s)) / (2 * 100)];\n}\nfunction removeAlphaComponent(comps) {\n return [comps[0], comps[1], comps[2]];\n}\nfunction appendAlphaComponent(comps, alpha) {\n return [comps[0], comps[1], comps[2], alpha];\n}\nconst MODE_CONVERTER_MAP = {\n hsl: {\n hsl: (h, s, l) => [h, s, l],\n hsv: hslToHsvInt,\n rgb: hslToRgbInt,\n },\n hsv: {\n hsl: hsvToHslInt,\n hsv: (h, s, v) => [h, s, v],\n rgb: hsvToRgbInt,\n },\n rgb: {\n hsl: rgbToHslInt,\n hsv: rgbToHsvInt,\n rgb: (r, g, b) => [r, g, b],\n },\n};\nfunction getColorMaxComponents(mode, type) {\n return [\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 360,\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n type === 'float' ? 1 : mode === 'rgb' ? 255 : 100,\n ];\n}\nfunction loopHueRange(hue, max) {\n return hue === max ? max : loopRange(hue, max);\n}\nfunction constrainColorComponents(components, mode, type) {\n var _a;\n const ms = getColorMaxComponents(mode, type);\n return [\n mode === 'rgb'\n ? constrainRange(components[0], 0, ms[0])\n : loopHueRange(components[0], ms[0]),\n constrainRange(components[1], 0, ms[1]),\n constrainRange(components[2], 0, ms[2]),\n constrainRange((_a = components[3]) !== null && _a !== void 0 ? _a : 1, 0, 1),\n ];\n}\nfunction convertColorType(comps, mode, from, to) {\n const fms = getColorMaxComponents(mode, from);\n const tms = getColorMaxComponents(mode, to);\n return comps.map((c, index) => (c / fms[index]) * tms[index]);\n}\nfunction convertColor(components, from, to) {\n const intComps = convertColorType(components, from.mode, from.type, 'int');\n const result = MODE_CONVERTER_MAP[from.mode][to.mode](...intComps);\n return convertColorType(result, to.mode, 'int', to.type);\n}\n\nclass IntColor {\n static black() {\n return new IntColor([0, 0, 0], 'rgb');\n }\n constructor(comps, mode) {\n this.type = 'int';\n this.mode = mode;\n this.comps_ = constrainColorComponents(comps, mode, this.type);\n }\n getComponents(opt_mode) {\n return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type: this.type }), this.comps_[3]);\n }\n toRgbaObject() {\n const rgbComps = this.getComponents('rgb');\n return {\n r: rgbComps[0],\n g: rgbComps[1],\n b: rgbComps[2],\n a: rgbComps[3],\n };\n }\n}\n\nconst cn$c = ClassName('colp');\nclass ColorPickerView {\n constructor(doc, config) {\n this.alphaViews_ = null;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$c());\n config.viewProps.bindClassModifiers(this.element);\n const hsvElem = doc.createElement('div');\n hsvElem.classList.add(cn$c('hsv'));\n const svElem = doc.createElement('div');\n svElem.classList.add(cn$c('sv'));\n this.svPaletteView_ = config.svPaletteView;\n svElem.appendChild(this.svPaletteView_.element);\n hsvElem.appendChild(svElem);\n const hElem = doc.createElement('div');\n hElem.classList.add(cn$c('h'));\n this.hPaletteView_ = config.hPaletteView;\n hElem.appendChild(this.hPaletteView_.element);\n hsvElem.appendChild(hElem);\n this.element.appendChild(hsvElem);\n const rgbElem = doc.createElement('div');\n rgbElem.classList.add(cn$c('rgb'));\n this.textsView_ = config.textsView;\n rgbElem.appendChild(this.textsView_.element);\n this.element.appendChild(rgbElem);\n if (config.alphaViews) {\n this.alphaViews_ = {\n palette: config.alphaViews.palette,\n text: config.alphaViews.text,\n };\n const aElem = doc.createElement('div');\n aElem.classList.add(cn$c('a'));\n const apElem = doc.createElement('div');\n apElem.classList.add(cn$c('ap'));\n apElem.appendChild(this.alphaViews_.palette.element);\n aElem.appendChild(apElem);\n const atElem = doc.createElement('div');\n atElem.classList.add(cn$c('at'));\n atElem.appendChild(this.alphaViews_.text.element);\n aElem.appendChild(atElem);\n this.element.appendChild(aElem);\n }\n }\n get allFocusableElements() {\n const elems = [\n this.svPaletteView_.element,\n this.hPaletteView_.element,\n this.textsView_.modeSelectElement,\n ...this.textsView_.inputViews.map((v) => v.inputElement),\n ];\n if (this.alphaViews_) {\n elems.push(this.alphaViews_.palette.element, this.alphaViews_.text.inputElement);\n }\n return elems;\n }\n}\n\nfunction parseColorType(value) {\n return value === 'int' ? 'int' : value === 'float' ? 'float' : undefined;\n}\nfunction parseColorInputParams(params) {\n return parseRecord(params, (p) => ({\n color: p.optional.object({\n alpha: p.optional.boolean,\n type: p.optional.custom(parseColorType),\n }),\n expanded: p.optional.boolean,\n picker: p.optional.custom(parsePickerLayout),\n readonly: p.optional.constant(false),\n }));\n}\nfunction getKeyScaleForColor(forAlpha) {\n return forAlpha ? 0.1 : 1;\n}\nfunction extractColorType(params) {\n var _a;\n return (_a = params.color) === null || _a === void 0 ? void 0 : _a.type;\n}\n\nclass FloatColor {\n constructor(comps, mode) {\n this.type = 'float';\n this.mode = mode;\n this.comps_ = constrainColorComponents(comps, mode, this.type);\n }\n getComponents(opt_mode) {\n return appendAlphaComponent(convertColor(removeAlphaComponent(this.comps_), { mode: this.mode, type: this.type }, { mode: opt_mode !== null && opt_mode !== void 0 ? opt_mode : this.mode, type: this.type }), this.comps_[3]);\n }\n toRgbaObject() {\n const rgbComps = this.getComponents('rgb');\n return {\n r: rgbComps[0],\n g: rgbComps[1],\n b: rgbComps[2],\n a: rgbComps[3],\n };\n }\n}\n\nconst TYPE_TO_CONSTRUCTOR_MAP = {\n int: (comps, mode) => new IntColor(comps, mode),\n float: (comps, mode) => new FloatColor(comps, mode),\n};\nfunction createColor(comps, mode, type) {\n return TYPE_TO_CONSTRUCTOR_MAP[type](comps, mode);\n}\nfunction isFloatColor(c) {\n return c.type === 'float';\n}\nfunction isIntColor(c) {\n return c.type === 'int';\n}\nfunction convertFloatToInt(cf) {\n const comps = cf.getComponents();\n const ms = getColorMaxComponents(cf.mode, 'int');\n return new IntColor([\n Math.round(mapRange(comps[0], 0, 1, 0, ms[0])),\n Math.round(mapRange(comps[1], 0, 1, 0, ms[1])),\n Math.round(mapRange(comps[2], 0, 1, 0, ms[2])),\n comps[3],\n ], cf.mode);\n}\nfunction convertIntToFloat(ci) {\n const comps = ci.getComponents();\n const ms = getColorMaxComponents(ci.mode, 'int');\n return new FloatColor([\n mapRange(comps[0], 0, ms[0], 0, 1),\n mapRange(comps[1], 0, ms[1], 0, 1),\n mapRange(comps[2], 0, ms[2], 0, 1),\n comps[3],\n ], ci.mode);\n}\nfunction mapColorType(c, type) {\n if (c.type === type) {\n return c;\n }\n if (isIntColor(c) && type === 'float') {\n return convertIntToFloat(c);\n }\n if (isFloatColor(c) && type === 'int') {\n return convertFloatToInt(c);\n }\n throw TpError.shouldNeverHappen();\n}\n\nfunction equalsStringColorFormat(f1, f2) {\n return (f1.alpha === f2.alpha &&\n f1.mode === f2.mode &&\n f1.notation === f2.notation &&\n f1.type === f2.type);\n}\nfunction parseCssNumberOrPercentage(text, max) {\n const m = text.match(/^(.+)%$/);\n if (!m) {\n return Math.min(parseFloat(text), max);\n }\n return Math.min(parseFloat(m[1]) * 0.01 * max, max);\n}\nconst ANGLE_TO_DEG_MAP = {\n deg: (angle) => angle,\n grad: (angle) => (angle * 360) / 400,\n rad: (angle) => (angle * 360) / (2 * Math.PI),\n turn: (angle) => angle * 360,\n};\nfunction parseCssNumberOrAngle(text) {\n const m = text.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);\n if (!m) {\n return parseFloat(text);\n }\n const angle = parseFloat(m[1]);\n const unit = m[2];\n return ANGLE_TO_DEG_MAP[unit](angle);\n}\nfunction parseFunctionalRgbColorComponents(text) {\n const m = text.match(/^rgb\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrPercentage(m[1], 255),\n parseCssNumberOrPercentage(m[2], 255),\n parseCssNumberOrPercentage(m[3], 255),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalRgbColor(text) {\n const comps = parseFunctionalRgbColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseFunctionalRgbaColorComponents(text) {\n const m = text.match(/^rgba\\(\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrPercentage(m[1], 255),\n parseCssNumberOrPercentage(m[2], 255),\n parseCssNumberOrPercentage(m[3], 255),\n parseCssNumberOrPercentage(m[4], 1),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalRgbaColor(text) {\n const comps = parseFunctionalRgbaColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseFunctionalHslColorComponents(text) {\n const m = text.match(/^hsl\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrAngle(m[1]),\n parseCssNumberOrPercentage(m[2], 100),\n parseCssNumberOrPercentage(m[3], 100),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalHslColor(text) {\n const comps = parseFunctionalHslColorComponents(text);\n return comps ? new IntColor(comps, 'hsl') : null;\n}\nfunction parseHslaColorComponents(text) {\n const m = text.match(/^hsla\\(\\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*([0-9A-Fa-f.]+%?)\\s*\\)$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseCssNumberOrAngle(m[1]),\n parseCssNumberOrPercentage(m[2], 100),\n parseCssNumberOrPercentage(m[3], 100),\n parseCssNumberOrPercentage(m[4], 1),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction parseFunctionalHslaColor(text) {\n const comps = parseHslaColorComponents(text);\n return comps ? new IntColor(comps, 'hsl') : null;\n}\nfunction parseHexRgbColorComponents(text) {\n const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n if (mRgb) {\n return [\n parseInt(mRgb[1] + mRgb[1], 16),\n parseInt(mRgb[2] + mRgb[2], 16),\n parseInt(mRgb[3] + mRgb[3], 16),\n ];\n }\n const mRrggbb = text.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n if (mRrggbb) {\n return [\n parseInt(mRrggbb[1], 16),\n parseInt(mRrggbb[2], 16),\n parseInt(mRrggbb[3], 16),\n ];\n }\n return null;\n}\nfunction parseHexRgbColor(text) {\n const comps = parseHexRgbColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseHexRgbaColorComponents(text) {\n const mRgb = text.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);\n if (mRgb) {\n return [\n parseInt(mRgb[1] + mRgb[1], 16),\n parseInt(mRgb[2] + mRgb[2], 16),\n parseInt(mRgb[3] + mRgb[3], 16),\n mapRange(parseInt(mRgb[4] + mRgb[4], 16), 0, 255, 0, 1),\n ];\n }\n const mRrggbb = text.match(/^(?:#|0x)?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);\n if (mRrggbb) {\n return [\n parseInt(mRrggbb[1], 16),\n parseInt(mRrggbb[2], 16),\n parseInt(mRrggbb[3], 16),\n mapRange(parseInt(mRrggbb[4], 16), 0, 255, 0, 1),\n ];\n }\n return null;\n}\nfunction parseHexRgbaColor(text) {\n const comps = parseHexRgbaColorComponents(text);\n return comps ? new IntColor(comps, 'rgb') : null;\n}\nfunction parseObjectRgbColorComponents(text) {\n const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseFloat(m[1]),\n parseFloat(m[2]),\n parseFloat(m[3]),\n ];\n if (isNaN(comps[0]) || isNaN(comps[1]) || isNaN(comps[2])) {\n return null;\n }\n return comps;\n}\nfunction createObjectRgbColorParser(type) {\n return (text) => {\n const comps = parseObjectRgbColorComponents(text);\n return comps ? createColor(comps, 'rgb', type) : null;\n };\n}\nfunction parseObjectRgbaColorComponents(text) {\n const m = text.match(/^\\{\\s*r\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*g\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*b\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*,\\s*a\\s*:\\s*([0-9A-Fa-f.]+%?)\\s*\\}$/);\n if (!m) {\n return null;\n }\n const comps = [\n parseFloat(m[1]),\n parseFloat(m[2]),\n parseFloat(m[3]),\n parseFloat(m[4]),\n ];\n if (isNaN(comps[0]) ||\n isNaN(comps[1]) ||\n isNaN(comps[2]) ||\n isNaN(comps[3])) {\n return null;\n }\n return comps;\n}\nfunction createObjectRgbaColorParser(type) {\n return (text) => {\n const comps = parseObjectRgbaColorComponents(text);\n return comps ? createColor(comps, 'rgb', type) : null;\n };\n}\nconst PARSER_AND_RESULT = [\n {\n parser: parseHexRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'hex',\n },\n },\n {\n parser: parseHexRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'hex',\n },\n },\n {\n parser: parseFunctionalRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'func',\n },\n },\n {\n parser: parseFunctionalRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'func',\n },\n },\n {\n parser: parseFunctionalHslColorComponents,\n result: {\n alpha: false,\n mode: 'hsl',\n notation: 'func',\n },\n },\n {\n parser: parseHslaColorComponents,\n result: {\n alpha: true,\n mode: 'hsl',\n notation: 'func',\n },\n },\n {\n parser: parseObjectRgbColorComponents,\n result: {\n alpha: false,\n mode: 'rgb',\n notation: 'object',\n },\n },\n {\n parser: parseObjectRgbaColorComponents,\n result: {\n alpha: true,\n mode: 'rgb',\n notation: 'object',\n },\n },\n];\nfunction detectStringColor(text) {\n return PARSER_AND_RESULT.reduce((prev, { parser, result: detection }) => {\n if (prev) {\n return prev;\n }\n return parser(text) ? detection : null;\n }, null);\n}\nfunction detectStringColorFormat(text, type = 'int') {\n const r = detectStringColor(text);\n if (!r) {\n return null;\n }\n if (r.notation === 'hex' && type !== 'float') {\n return Object.assign(Object.assign({}, r), { type: 'int' });\n }\n if (r.notation === 'func') {\n return Object.assign(Object.assign({}, r), { type: type });\n }\n return null;\n}\nfunction createColorStringParser(type) {\n const parsers = [\n parseHexRgbColor,\n parseHexRgbaColor,\n parseFunctionalRgbColor,\n parseFunctionalRgbaColor,\n parseFunctionalHslColor,\n parseFunctionalHslaColor,\n ];\n if (type === 'int') {\n parsers.push(createObjectRgbColorParser('int'), createObjectRgbaColorParser('int'));\n }\n if (type === 'float') {\n parsers.push(createObjectRgbColorParser('float'), createObjectRgbaColorParser('float'));\n }\n const parser = composeParsers(parsers);\n return (text) => {\n const result = parser(text);\n return result ? mapColorType(result, type) : null;\n };\n}\nfunction readIntColorString(value) {\n const parser = createColorStringParser('int');\n if (typeof value !== 'string') {\n return IntColor.black();\n }\n const result = parser(value);\n return result !== null && result !== void 0 ? result : IntColor.black();\n}\nfunction zerofill(comp) {\n const hex = constrainRange(Math.floor(comp), 0, 255).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\nfunction colorToHexRgbString(value, prefix = '#') {\n const hexes = removeAlphaComponent(value.getComponents('rgb'))\n .map(zerofill)\n .join('');\n return `${prefix}${hexes}`;\n}\nfunction colorToHexRgbaString(value, prefix = '#') {\n const rgbaComps = value.getComponents('rgb');\n const hexes = [rgbaComps[0], rgbaComps[1], rgbaComps[2], rgbaComps[3] * 255]\n .map(zerofill)\n .join('');\n return `${prefix}${hexes}`;\n}\nfunction colorToFunctionalRgbString(value) {\n const formatter = createNumberFormatter(0);\n const ci = mapColorType(value, 'int');\n const comps = removeAlphaComponent(ci.getComponents('rgb')).map((comp) => formatter(comp));\n return `rgb(${comps.join(', ')})`;\n}\nfunction colorToFunctionalRgbaString(value) {\n const aFormatter = createNumberFormatter(2);\n const rgbFormatter = createNumberFormatter(0);\n const ci = mapColorType(value, 'int');\n const comps = ci.getComponents('rgb').map((comp, index) => {\n const formatter = index === 3 ? aFormatter : rgbFormatter;\n return formatter(comp);\n });\n return `rgba(${comps.join(', ')})`;\n}\nfunction colorToFunctionalHslString(value) {\n const formatters = [\n createNumberFormatter(0),\n formatPercentage,\n formatPercentage,\n ];\n const ci = mapColorType(value, 'int');\n const comps = removeAlphaComponent(ci.getComponents('hsl')).map((comp, index) => formatters[index](comp));\n return `hsl(${comps.join(', ')})`;\n}\nfunction colorToFunctionalHslaString(value) {\n const formatters = [\n createNumberFormatter(0),\n formatPercentage,\n formatPercentage,\n createNumberFormatter(2),\n ];\n const ci = mapColorType(value, 'int');\n const comps = ci\n .getComponents('hsl')\n .map((comp, index) => formatters[index](comp));\n return `hsla(${comps.join(', ')})`;\n}\nfunction colorToObjectRgbString(value, type) {\n const formatter = createNumberFormatter(type === 'float' ? 2 : 0);\n const names = ['r', 'g', 'b'];\n const cc = mapColorType(value, type);\n const comps = removeAlphaComponent(cc.getComponents('rgb')).map((comp, index) => `${names[index]}: ${formatter(comp)}`);\n return `{${comps.join(', ')}}`;\n}\nfunction createObjectRgbColorFormatter(type) {\n return (value) => colorToObjectRgbString(value, type);\n}\nfunction colorToObjectRgbaString(value, type) {\n const aFormatter = createNumberFormatter(2);\n const rgbFormatter = createNumberFormatter(type === 'float' ? 2 : 0);\n const names = ['r', 'g', 'b', 'a'];\n const cc = mapColorType(value, type);\n const comps = cc.getComponents('rgb').map((comp, index) => {\n const formatter = index === 3 ? aFormatter : rgbFormatter;\n return `${names[index]}: ${formatter(comp)}`;\n });\n return `{${comps.join(', ')}}`;\n}\nfunction createObjectRgbaColorFormatter(type) {\n return (value) => colorToObjectRgbaString(value, type);\n}\nconst FORMAT_AND_STRINGIFIERS = [\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'hex',\n type: 'int',\n },\n stringifier: colorToHexRgbString,\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'hex',\n type: 'int',\n },\n stringifier: colorToHexRgbaString,\n },\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalRgbString,\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalRgbaString,\n },\n {\n format: {\n alpha: false,\n mode: 'hsl',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalHslString,\n },\n {\n format: {\n alpha: true,\n mode: 'hsl',\n notation: 'func',\n type: 'int',\n },\n stringifier: colorToFunctionalHslaString,\n },\n ...['int', 'float'].reduce((prev, type) => {\n return [\n ...prev,\n {\n format: {\n alpha: false,\n mode: 'rgb',\n notation: 'object',\n type: type,\n },\n stringifier: createObjectRgbColorFormatter(type),\n },\n {\n format: {\n alpha: true,\n mode: 'rgb',\n notation: 'object',\n type: type,\n },\n stringifier: createObjectRgbaColorFormatter(type),\n },\n ];\n }, []),\n];\nfunction findColorStringifier(format) {\n return FORMAT_AND_STRINGIFIERS.reduce((prev, fas) => {\n if (prev) {\n return prev;\n }\n return equalsStringColorFormat(fas.format, format)\n ? fas.stringifier\n : null;\n }, null);\n}\n\nconst cn$b = ClassName('apl');\nclass APaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$b());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const barElem = doc.createElement('div');\n barElem.classList.add(cn$b('b'));\n this.element.appendChild(barElem);\n const colorElem = doc.createElement('div');\n colorElem.classList.add(cn$b('c'));\n barElem.appendChild(colorElem);\n this.colorElem_ = colorElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$b('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n const previewElem = doc.createElement('div');\n previewElem.classList.add(cn$b('p'));\n this.markerElem_.appendChild(previewElem);\n this.previewElem_ = previewElem;\n this.update_();\n }\n update_() {\n const c = this.value.rawValue;\n const rgbaComps = c.getComponents('rgb');\n const leftColor = new IntColor([rgbaComps[0], rgbaComps[1], rgbaComps[2], 0], 'rgb');\n const rightColor = new IntColor([rgbaComps[0], rgbaComps[1], rgbaComps[2], 255], 'rgb');\n const gradientComps = [\n 'to right',\n colorToFunctionalRgbaString(leftColor),\n colorToFunctionalRgbaString(rightColor),\n ];\n this.colorElem_.style.background = `linear-gradient(${gradientComps.join(',')})`;\n this.previewElem_.style.backgroundColor = colorToFunctionalRgbaString(c);\n const left = mapRange(rgbaComps[3], 0, 1, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass APaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new APaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const alpha = d.point.x / d.bounds.width;\n const c = this.value.rawValue;\n const [h, s, v] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, s, v, alpha], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(getKeyScaleForColor(true), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n const c = this.value.rawValue;\n const [h, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, s, v, a + step], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(getKeyScaleForColor(true), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nconst cn$a = ClassName('coltxt');\nfunction createModeSelectElement(doc) {\n const selectElem = doc.createElement('select');\n const items = [\n { text: 'RGB', value: 'rgb' },\n { text: 'HSL', value: 'hsl' },\n { text: 'HSV', value: 'hsv' },\n { text: 'HEX', value: 'hex' },\n ];\n selectElem.appendChild(items.reduce((frag, item) => {\n const optElem = doc.createElement('option');\n optElem.textContent = item.text;\n optElem.value = item.value;\n frag.appendChild(optElem);\n return frag;\n }, doc.createDocumentFragment()));\n return selectElem;\n}\nclass ColorTextsView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$a());\n config.viewProps.bindClassModifiers(this.element);\n const modeElem = doc.createElement('div');\n modeElem.classList.add(cn$a('m'));\n this.modeElem_ = createModeSelectElement(doc);\n this.modeElem_.classList.add(cn$a('ms'));\n modeElem.appendChild(this.modeSelectElement);\n config.viewProps.bindDisabled(this.modeElem_);\n const modeMarkerElem = doc.createElement('div');\n modeMarkerElem.classList.add(cn$a('mm'));\n modeMarkerElem.appendChild(createSvgIconElement(doc, 'dropdown'));\n modeElem.appendChild(modeMarkerElem);\n this.element.appendChild(modeElem);\n const inputsElem = doc.createElement('div');\n inputsElem.classList.add(cn$a('w'));\n this.element.appendChild(inputsElem);\n this.inputsElem_ = inputsElem;\n this.inputViews_ = config.inputViews;\n this.applyInputViews_();\n bindValue(config.mode, (mode) => {\n this.modeElem_.value = mode;\n });\n }\n get modeSelectElement() {\n return this.modeElem_;\n }\n get inputViews() {\n return this.inputViews_;\n }\n set inputViews(inputViews) {\n this.inputViews_ = inputViews;\n this.applyInputViews_();\n }\n applyInputViews_() {\n removeChildElements(this.inputsElem_);\n const doc = this.element.ownerDocument;\n this.inputViews_.forEach((v) => {\n const compElem = doc.createElement('div');\n compElem.classList.add(cn$a('c'));\n compElem.appendChild(v.element);\n this.inputsElem_.appendChild(compElem);\n });\n }\n}\n\nfunction createFormatter$2(type) {\n return createNumberFormatter(type === 'float' ? 2 : 0);\n}\nfunction createConstraint$5(mode, type, index) {\n const max = getColorMaxComponents(mode, type)[index];\n return new DefiniteRangeConstraint({\n min: 0,\n max: max,\n });\n}\nfunction createComponentController(doc, config, index) {\n return new NumberTextController(doc, {\n arrayPosition: index === 0 ? 'fst' : index === 3 - 1 ? 'lst' : 'mid',\n parser: config.parser,\n props: ValueMap.fromObject({\n formatter: createFormatter$2(config.colorType),\n keyScale: getKeyScaleForColor(false),\n pointerScale: config.colorType === 'float' ? 0.01 : 1,\n }),\n value: createValue(0, {\n constraint: createConstraint$5(config.colorMode, config.colorType, index),\n }),\n viewProps: config.viewProps,\n });\n}\nfunction createComponentControllers(doc, config) {\n const cc = {\n colorMode: config.colorMode,\n colorType: config.colorType,\n parser: parseNumber,\n viewProps: config.viewProps,\n };\n return [0, 1, 2].map((i) => {\n const c = createComponentController(doc, cc, i);\n connectValues({\n primary: config.value,\n secondary: c.value,\n forward(p) {\n const mc = mapColorType(p, config.colorType);\n return mc.getComponents(config.colorMode)[i];\n },\n backward(p, s) {\n const pickedMode = config.colorMode;\n const mc = mapColorType(p, config.colorType);\n const comps = mc.getComponents(pickedMode);\n comps[i] = s;\n const c = createColor(appendAlphaComponent(removeAlphaComponent(comps), comps[3]), pickedMode, config.colorType);\n return mapColorType(c, 'int');\n },\n });\n return c;\n });\n}\nfunction createHexController(doc, config) {\n const c = new TextController(doc, {\n parser: createColorStringParser('int'),\n props: ValueMap.fromObject({\n formatter: colorToHexRgbString,\n }),\n value: createValue(IntColor.black()),\n viewProps: config.viewProps,\n });\n connectValues({\n primary: config.value,\n secondary: c.value,\n forward: (p) => new IntColor(removeAlphaComponent(p.getComponents()), p.mode),\n backward: (p, s) => new IntColor(appendAlphaComponent(removeAlphaComponent(s.getComponents(p.mode)), p.getComponents()[3]), p.mode),\n });\n return [c];\n}\nfunction isColorMode(mode) {\n return mode !== 'hex';\n}\nclass ColorTextsController {\n constructor(doc, config) {\n this.onModeSelectChange_ = this.onModeSelectChange_.bind(this);\n this.colorType_ = config.colorType;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.colorMode = createValue(this.value.rawValue.mode);\n this.ccs_ = this.createComponentControllers_(doc);\n this.view = new ColorTextsView(doc, {\n mode: this.colorMode,\n inputViews: [this.ccs_[0].view, this.ccs_[1].view, this.ccs_[2].view],\n viewProps: this.viewProps,\n });\n this.view.modeSelectElement.addEventListener('change', this.onModeSelectChange_);\n }\n createComponentControllers_(doc) {\n const mode = this.colorMode.rawValue;\n if (isColorMode(mode)) {\n return createComponentControllers(doc, {\n colorMode: mode,\n colorType: this.colorType_,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n return createHexController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n onModeSelectChange_(ev) {\n const selectElem = ev.currentTarget;\n this.colorMode.rawValue = selectElem.value;\n this.ccs_ = this.createComponentControllers_(this.view.element.ownerDocument);\n this.view.inputViews = this.ccs_.map((cc) => cc.view);\n }\n}\n\nconst cn$9 = ClassName('hpl');\nclass HPaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$9());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const colorElem = doc.createElement('div');\n colorElem.classList.add(cn$9('c'));\n this.element.appendChild(colorElem);\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$9('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n this.update_();\n }\n update_() {\n const c = this.value.rawValue;\n const [h] = c.getComponents('hsv');\n this.markerElem_.style.backgroundColor = colorToFunctionalRgbString(new IntColor([h, 100, 100], 'hsv'));\n const left = mapRange(h, 0, 360, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass HPaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new HPaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const hue = mapRange(constrainRange(d.point.x, 0, d.bounds.width), 0, d.bounds.width, 0, 360);\n const c = this.value.rawValue;\n const [, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([hue, s, v, a], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n const step = getStepForKey(getKeyScaleForColor(false), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n const c = this.value.rawValue;\n const [h, s, v, a] = c.getComponents('hsv');\n this.value.setRawValue(new IntColor([h + step, s, v, a], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const step = getStepForKey(getKeyScaleForColor(false), getHorizontalStepKeys(ev));\n if (step === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nconst cn$8 = ClassName('svp');\nconst CANVAS_RESOL = 64;\nclass SvPaletteView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.value = config.value;\n this.value.emitter.on('change', this.onValueChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$8());\n config.viewProps.bindClassModifiers(this.element);\n config.viewProps.bindTabIndex(this.element);\n const canvasElem = doc.createElement('canvas');\n canvasElem.height = CANVAS_RESOL;\n canvasElem.width = CANVAS_RESOL;\n canvasElem.classList.add(cn$8('c'));\n this.element.appendChild(canvasElem);\n this.canvasElement = canvasElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$8('m'));\n this.element.appendChild(markerElem);\n this.markerElem_ = markerElem;\n this.update_();\n }\n update_() {\n const ctx = getCanvasContext(this.canvasElement);\n if (!ctx) {\n return;\n }\n const c = this.value.rawValue;\n const hsvComps = c.getComponents('hsv');\n const width = this.canvasElement.width;\n const height = this.canvasElement.height;\n const imgData = ctx.getImageData(0, 0, width, height);\n const data = imgData.data;\n for (let iy = 0; iy < height; iy++) {\n for (let ix = 0; ix < width; ix++) {\n const s = mapRange(ix, 0, width, 0, 100);\n const v = mapRange(iy, 0, height, 100, 0);\n const rgbComps = hsvToRgbInt(hsvComps[0], s, v);\n const i = (iy * width + ix) * 4;\n data[i] = rgbComps[0];\n data[i + 1] = rgbComps[1];\n data[i + 2] = rgbComps[2];\n data[i + 3] = 255;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n const left = mapRange(hsvComps[1], 0, 100, 0, 100);\n this.markerElem_.style.left = `${left}%`;\n const top = mapRange(hsvComps[2], 0, 100, 100, 0);\n this.markerElem_.style.top = `${top}%`;\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass SvPaletteController {\n constructor(doc, config) {\n this.onKeyDown_ = this.onKeyDown_.bind(this);\n this.onKeyUp_ = this.onKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new SvPaletteView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.element);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.element.addEventListener('keydown', this.onKeyDown_);\n this.view.element.addEventListener('keyup', this.onKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const saturation = mapRange(d.point.x, 0, d.bounds.width, 0, 100);\n const value = mapRange(d.point.y, 0, d.bounds.height, 100, 0);\n const [h, , , a] = this.value.rawValue.getComponents('hsv');\n this.value.setRawValue(new IntColor([h, saturation, value, a], 'hsv'), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onKeyDown_(ev) {\n if (isArrowKey(ev.key)) {\n ev.preventDefault();\n }\n const [h, s, v, a] = this.value.rawValue.getComponents('hsv');\n const keyScale = getKeyScaleForColor(false);\n const ds = getStepForKey(keyScale, getHorizontalStepKeys(ev));\n const dv = getStepForKey(keyScale, getVerticalStepKeys(ev));\n if (ds === 0 && dv === 0) {\n return;\n }\n this.value.setRawValue(new IntColor([h, s + ds, v + dv, a], 'hsv'), {\n forceEmit: false,\n last: false,\n });\n }\n onKeyUp_(ev) {\n const keyScale = getKeyScaleForColor(false);\n const ds = getStepForKey(keyScale, getHorizontalStepKeys(ev));\n const dv = getStepForKey(keyScale, getVerticalStepKeys(ev));\n if (ds === 0 && dv === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nclass ColorPickerController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.hPaletteC_ = new HPaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.svPaletteC_ = new SvPaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n this.alphaIcs_ = config.supportsAlpha\n ? {\n palette: new APaletteController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n }),\n text: new NumberTextController(doc, {\n parser: parseNumber,\n props: ValueMap.fromObject({\n pointerScale: 0.01,\n keyScale: 0.1,\n formatter: createNumberFormatter(2),\n }),\n value: createValue(0, {\n constraint: new DefiniteRangeConstraint({ min: 0, max: 1 }),\n }),\n viewProps: this.viewProps,\n }),\n }\n : null;\n if (this.alphaIcs_) {\n connectValues({\n primary: this.value,\n secondary: this.alphaIcs_.text.value,\n forward: (p) => p.getComponents()[3],\n backward: (p, s) => {\n const comps = p.getComponents();\n comps[3] = s;\n return new IntColor(comps, p.mode);\n },\n });\n }\n this.textsC_ = new ColorTextsController(doc, {\n colorType: config.colorType,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new ColorPickerView(doc, {\n alphaViews: this.alphaIcs_\n ? {\n palette: this.alphaIcs_.palette.view,\n text: this.alphaIcs_.text.view,\n }\n : null,\n hPaletteView: this.hPaletteC_.view,\n supportsAlpha: config.supportsAlpha,\n svPaletteView: this.svPaletteC_.view,\n textsView: this.textsC_.view,\n viewProps: this.viewProps,\n });\n }\n get textsController() {\n return this.textsC_;\n }\n}\n\nconst cn$7 = ClassName('colsw');\nclass ColorSwatchView {\n constructor(doc, config) {\n this.onValueChange_ = this.onValueChange_.bind(this);\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$7());\n config.viewProps.bindClassModifiers(this.element);\n const swatchElem = doc.createElement('div');\n swatchElem.classList.add(cn$7('sw'));\n this.element.appendChild(swatchElem);\n this.swatchElem_ = swatchElem;\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$7('b'));\n config.viewProps.bindDisabled(buttonElem);\n this.element.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n this.update_();\n }\n update_() {\n const value = this.value.rawValue;\n this.swatchElem_.style.backgroundColor = colorToHexRgbaString(value);\n }\n onValueChange_() {\n this.update_();\n }\n}\n\nclass ColorSwatchController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new ColorSwatchView(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n\nclass ColorController {\n constructor(doc, config) {\n this.onButtonBlur_ = this.onButtonBlur_.bind(this);\n this.onButtonClick_ = this.onButtonClick_.bind(this);\n this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.foldable_ = Foldable.create(config.expanded);\n this.swatchC_ = new ColorSwatchController(doc, {\n value: this.value,\n viewProps: this.viewProps,\n });\n const buttonElem = this.swatchC_.view.buttonElement;\n buttonElem.addEventListener('blur', this.onButtonBlur_);\n buttonElem.addEventListener('click', this.onButtonClick_);\n this.textC_ = new TextController(doc, {\n parser: config.parser,\n props: ValueMap.fromObject({\n formatter: config.formatter,\n }),\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new ColorView(doc, {\n foldable: this.foldable_,\n pickerLayout: config.pickerLayout,\n });\n this.view.swatchElement.appendChild(this.swatchC_.view.element);\n this.view.textElement.appendChild(this.textC_.view.element);\n this.popC_ =\n config.pickerLayout === 'popup'\n ? new PopupController(doc, {\n viewProps: this.viewProps,\n })\n : null;\n const pickerC = new ColorPickerController(doc, {\n colorType: config.colorType,\n supportsAlpha: config.supportsAlpha,\n value: this.value,\n viewProps: this.viewProps,\n });\n pickerC.view.allFocusableElements.forEach((elem) => {\n elem.addEventListener('blur', this.onPopupChildBlur_);\n elem.addEventListener('keydown', this.onPopupChildKeydown_);\n });\n this.pickerC_ = pickerC;\n if (this.popC_) {\n this.view.element.appendChild(this.popC_.view.element);\n this.popC_.view.element.appendChild(pickerC.view.element);\n connectValues({\n primary: this.foldable_.value('expanded'),\n secondary: this.popC_.shows,\n forward: (p) => p,\n backward: (_, s) => s,\n });\n }\n else if (this.view.pickerElement) {\n this.view.pickerElement.appendChild(this.pickerC_.view.element);\n bindFoldable(this.foldable_, this.view.pickerElement);\n }\n }\n get textController() {\n return this.textC_;\n }\n onButtonBlur_(e) {\n if (!this.popC_) {\n return;\n }\n const elem = this.view.element;\n const nextTarget = forceCast(e.relatedTarget);\n if (!nextTarget || !elem.contains(nextTarget)) {\n this.popC_.shows.rawValue = false;\n }\n }\n onButtonClick_() {\n this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n if (this.foldable_.get('expanded')) {\n this.pickerC_.view.allFocusableElements[0].focus();\n }\n }\n onPopupChildBlur_(ev) {\n if (!this.popC_) {\n return;\n }\n const elem = this.popC_.view.element;\n const nextTarget = findNextTarget(ev);\n if (nextTarget && elem.contains(nextTarget)) {\n return;\n }\n if (nextTarget &&\n nextTarget === this.swatchC_.view.buttonElement &&\n !supportsTouch(elem.ownerDocument)) {\n return;\n }\n this.popC_.shows.rawValue = false;\n }\n onPopupChildKeydown_(ev) {\n if (this.popC_) {\n if (ev.key === 'Escape') {\n this.popC_.shows.rawValue = false;\n }\n }\n else if (this.view.pickerElement) {\n if (ev.key === 'Escape') {\n this.swatchC_.view.buttonElement.focus();\n }\n }\n }\n}\n\nfunction colorToRgbNumber(value) {\n return removeAlphaComponent(value.getComponents('rgb')).reduce((result, comp) => {\n return (result << 8) | (Math.floor(comp) & 0xff);\n }, 0);\n}\nfunction colorToRgbaNumber(value) {\n return (value.getComponents('rgb').reduce((result, comp, index) => {\n const hex = Math.floor(index === 3 ? comp * 255 : comp) & 0xff;\n return (result << 8) | hex;\n }, 0) >>> 0);\n}\nfunction numberToRgbColor(num) {\n return new IntColor([(num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff], 'rgb');\n}\nfunction numberToRgbaColor(num) {\n return new IntColor([\n (num >> 24) & 0xff,\n (num >> 16) & 0xff,\n (num >> 8) & 0xff,\n mapRange(num & 0xff, 0, 255, 0, 1),\n ], 'rgb');\n}\nfunction colorFromRgbNumber(value) {\n if (typeof value !== 'number') {\n return IntColor.black();\n }\n return numberToRgbColor(value);\n}\nfunction colorFromRgbaNumber(value) {\n if (typeof value !== 'number') {\n return IntColor.black();\n }\n return numberToRgbaColor(value);\n}\n\nfunction isRgbColorComponent(obj, key) {\n if (typeof obj !== 'object' || isEmpty(obj)) {\n return false;\n }\n return key in obj && typeof obj[key] === 'number';\n}\nfunction isRgbColorObject(obj) {\n return (isRgbColorComponent(obj, 'r') &&\n isRgbColorComponent(obj, 'g') &&\n isRgbColorComponent(obj, 'b'));\n}\nfunction isRgbaColorObject(obj) {\n return isRgbColorObject(obj) && isRgbColorComponent(obj, 'a');\n}\nfunction isColorObject(obj) {\n return isRgbColorObject(obj);\n}\nfunction equalsColor(v1, v2) {\n if (v1.mode !== v2.mode) {\n return false;\n }\n if (v1.type !== v2.type) {\n return false;\n }\n const comps1 = v1.getComponents();\n const comps2 = v2.getComponents();\n for (let i = 0; i < comps1.length; i++) {\n if (comps1[i] !== comps2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction createColorComponentsFromRgbObject(obj) {\n return 'a' in obj ? [obj.r, obj.g, obj.b, obj.a] : [obj.r, obj.g, obj.b];\n}\n\nfunction createColorStringWriter(format) {\n const stringify = findColorStringifier(format);\n return stringify\n ? (target, value) => {\n writePrimitive(target, stringify(value));\n }\n : null;\n}\nfunction createColorNumberWriter(supportsAlpha) {\n const colorToNumber = supportsAlpha ? colorToRgbaNumber : colorToRgbNumber;\n return (target, value) => {\n writePrimitive(target, colorToNumber(value));\n };\n}\nfunction writeRgbaColorObject(target, value, type) {\n const cc = mapColorType(value, type);\n const obj = cc.toRgbaObject();\n target.writeProperty('r', obj.r);\n target.writeProperty('g', obj.g);\n target.writeProperty('b', obj.b);\n target.writeProperty('a', obj.a);\n}\nfunction writeRgbColorObject(target, value, type) {\n const cc = mapColorType(value, type);\n const obj = cc.toRgbaObject();\n target.writeProperty('r', obj.r);\n target.writeProperty('g', obj.g);\n target.writeProperty('b', obj.b);\n}\nfunction createColorObjectWriter(supportsAlpha, type) {\n return (target, inValue) => {\n if (supportsAlpha) {\n writeRgbaColorObject(target, inValue, type);\n }\n else {\n writeRgbColorObject(target, inValue, type);\n }\n };\n}\n\nfunction shouldSupportAlpha$1(inputParams) {\n var _a;\n if ((_a = inputParams === null || inputParams === void 0 ? void 0 : inputParams.color) === null || _a === void 0 ? void 0 : _a.alpha) {\n return true;\n }\n return false;\n}\nfunction createFormatter$1(supportsAlpha) {\n return supportsAlpha\n ? (v) => colorToHexRgbaString(v, '0x')\n : (v) => colorToHexRgbString(v, '0x');\n}\nfunction isForColor(params) {\n if ('color' in params) {\n return true;\n }\n if (params.view === 'color') {\n return true;\n }\n return false;\n}\nconst NumberColorInputPlugin = createPlugin({\n id: 'input-color-number',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n if (!isForColor(params)) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { supportsAlpha: shouldSupportAlpha$1(params) }),\n }\n : null;\n },\n binding: {\n reader: (args) => {\n return args.params.supportsAlpha\n ? colorFromRgbaNumber\n : colorFromRgbNumber;\n },\n equals: equalsColor,\n writer: (args) => {\n return createColorNumberWriter(args.params.supportsAlpha);\n },\n },\n controller: (args) => {\n var _a, _b;\n return new ColorController(args.document, {\n colorType: 'int',\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: createFormatter$1(args.params.supportsAlpha),\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: args.params.supportsAlpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nfunction colorFromObject(value, type) {\n if (!isColorObject(value)) {\n return mapColorType(IntColor.black(), type);\n }\n if (type === 'int') {\n const comps = createColorComponentsFromRgbObject(value);\n return new IntColor(comps, 'rgb');\n }\n if (type === 'float') {\n const comps = createColorComponentsFromRgbObject(value);\n return new FloatColor(comps, 'rgb');\n }\n return mapColorType(IntColor.black(), 'int');\n}\n\nfunction shouldSupportAlpha(initialValue) {\n return isRgbaColorObject(initialValue);\n}\nfunction createColorObjectBindingReader(type) {\n return (value) => {\n const c = colorFromObject(value, type);\n return mapColorType(c, 'int');\n };\n}\nfunction createColorObjectFormatter(supportsAlpha, type) {\n return (value) => {\n if (supportsAlpha) {\n return colorToObjectRgbaString(value, type);\n }\n return colorToObjectRgbString(value, type);\n };\n}\nconst ObjectColorInputPlugin = createPlugin({\n id: 'input-color-object',\n type: 'input',\n accept: (value, params) => {\n var _a;\n if (!isColorObject(value)) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { colorType: (_a = extractColorType(params)) !== null && _a !== void 0 ? _a : 'int' }),\n }\n : null;\n },\n binding: {\n reader: (args) => createColorObjectBindingReader(args.params.colorType),\n equals: equalsColor,\n writer: (args) => createColorObjectWriter(shouldSupportAlpha(args.initialValue), args.params.colorType),\n },\n controller: (args) => {\n var _a, _b;\n const supportsAlpha = isRgbaColorObject(args.initialValue);\n return new ColorController(args.document, {\n colorType: args.params.colorType,\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: createColorObjectFormatter(supportsAlpha, args.params.colorType),\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: supportsAlpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nconst StringColorInputPlugin = createPlugin({\n id: 'input-color-string',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n if (params.view === 'text') {\n return null;\n }\n const format = detectStringColorFormat(value, extractColorType(params));\n if (!format) {\n return null;\n }\n const stringifier = findColorStringifier(format);\n if (!stringifier) {\n return null;\n }\n const result = parseColorInputParams(params);\n return result\n ? {\n initialValue: value,\n params: Object.assign(Object.assign({}, result), { format: format, stringifier: stringifier }),\n }\n : null;\n },\n binding: {\n reader: () => readIntColorString,\n equals: equalsColor,\n writer: (args) => {\n const writer = createColorStringWriter(args.params.format);\n if (!writer) {\n throw TpError.notBindable();\n }\n return writer;\n },\n },\n controller: (args) => {\n var _a, _b;\n return new ColorController(args.document, {\n colorType: args.params.format.type,\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n formatter: args.params.stringifier,\n parser: createColorStringParser('int'),\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n supportsAlpha: args.params.format.alpha,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass PointNdConstraint {\n constructor(config) {\n this.components = config.components;\n this.asm_ = config.assembly;\n }\n constrain(value) {\n const comps = this.asm_\n .toComponents(value)\n .map((comp, index) => { var _a, _b; return (_b = (_a = this.components[index]) === null || _a === void 0 ? void 0 : _a.constrain(comp)) !== null && _b !== void 0 ? _b : comp; });\n return this.asm_.fromComponents(comps);\n }\n}\n\nconst cn$6 = ClassName('pndtxt');\nclass PointNdTextView {\n constructor(doc, config) {\n this.textViews = config.textViews;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$6());\n this.textViews.forEach((v) => {\n const axisElem = doc.createElement('div');\n axisElem.classList.add(cn$6('a'));\n axisElem.appendChild(v.element);\n this.element.appendChild(axisElem);\n });\n }\n}\n\nfunction createAxisController(doc, config, index) {\n return new NumberTextController(doc, {\n arrayPosition: index === 0 ? 'fst' : index === config.axes.length - 1 ? 'lst' : 'mid',\n parser: config.parser,\n props: config.axes[index].textProps,\n value: createValue(0, {\n constraint: config.axes[index].constraint,\n }),\n viewProps: config.viewProps,\n });\n}\nclass PointNdTextController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.acs_ = config.axes.map((_, index) => createAxisController(doc, config, index));\n this.acs_.forEach((c, index) => {\n connectValues({\n primary: this.value,\n secondary: c.value,\n forward: (p) => config.assembly.toComponents(p)[index],\n backward: (p, s) => {\n const comps = config.assembly.toComponents(p);\n comps[index] = s;\n return config.assembly.fromComponents(comps);\n },\n });\n });\n this.view = new PointNdTextView(doc, {\n textViews: this.acs_.map((ac) => ac.view),\n });\n }\n get textControllers() {\n return this.acs_;\n }\n}\n\nclass SliderInputBindingApi extends BindingApi {\n get max() {\n return this.controller.valueController.sliderController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.sliderController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.sliderController.props.get('min');\n }\n set min(max) {\n this.controller.valueController.sliderController.props.set('min', max);\n }\n}\n\nfunction createConstraint$4(params, initialValue) {\n const constraints = [];\n const sc = createStepConstraint(params, initialValue);\n if (sc) {\n constraints.push(sc);\n }\n const rc = createRangeConstraint(params);\n if (rc) {\n constraints.push(rc);\n }\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\nconst NumberInputPlugin = createPlugin({\n id: 'input-number',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createNumberTextInputParamsParser(p)), { options: p.optional.custom(parseListOptions), readonly: p.optional.constant(false) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => numberFromUnknown,\n constraint: (args) => createConstraint$4(args.params, args.initialValue),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(args.document, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n const textPropsObj = createNumberTextPropsObject(args.params, value.rawValue);\n const drc = c && findConstraint(c, DefiniteRangeConstraint);\n if (drc) {\n return new SliderTextController(args.document, Object.assign(Object.assign({}, createSliderTextProps(Object.assign(Object.assign({}, textPropsObj), { keyScale: createValue(textPropsObj.keyScale), max: drc.values.value('max'), min: drc.values.value('min') }))), { parser: parseNumber, value: value, viewProps: args.viewProps }));\n }\n return new NumberTextController(args.document, {\n parser: parseNumber,\n props: ValueMap.fromObject(textPropsObj),\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'number') {\n return null;\n }\n if (args.controller.valueController instanceof SliderTextController) {\n return new SliderInputBindingApi(args.controller);\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n\nclass Point2d {\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n getComponents() {\n return [this.x, this.y];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n if (typeof x !== 'number' || typeof y !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n };\n }\n}\nconst Point2dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point2d(...comps),\n};\n\nconst cn$5 = ClassName('p2d');\nclass Point2dView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn$5());\n config.viewProps.bindClassModifiers(this.element);\n bindValue(config.expanded, valueToClassName(this.element, cn$5(undefined, 'expanded')));\n const headElem = doc.createElement('div');\n headElem.classList.add(cn$5('h'));\n this.element.appendChild(headElem);\n const buttonElem = doc.createElement('button');\n buttonElem.classList.add(cn$5('b'));\n buttonElem.appendChild(createSvgIconElement(doc, 'p2dpad'));\n config.viewProps.bindDisabled(buttonElem);\n headElem.appendChild(buttonElem);\n this.buttonElement = buttonElem;\n const textElem = doc.createElement('div');\n textElem.classList.add(cn$5('t'));\n headElem.appendChild(textElem);\n this.textElement = textElem;\n if (config.pickerLayout === 'inline') {\n const pickerElem = doc.createElement('div');\n pickerElem.classList.add(cn$5('p'));\n this.element.appendChild(pickerElem);\n this.pickerElement = pickerElem;\n }\n else {\n this.pickerElement = null;\n }\n }\n}\n\nconst cn$4 = ClassName('p2dp');\nclass Point2dPickerView {\n constructor(doc, config) {\n this.onFoldableChange_ = this.onFoldableChange_.bind(this);\n this.onPropsChange_ = this.onPropsChange_.bind(this);\n this.onValueChange_ = this.onValueChange_.bind(this);\n this.props_ = config.props;\n this.props_.emitter.on('change', this.onPropsChange_);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$4());\n if (config.layout === 'popup') {\n this.element.classList.add(cn$4(undefined, 'p'));\n }\n config.viewProps.bindClassModifiers(this.element);\n const padElem = doc.createElement('div');\n padElem.classList.add(cn$4('p'));\n config.viewProps.bindTabIndex(padElem);\n this.element.appendChild(padElem);\n this.padElement = padElem;\n const svgElem = doc.createElementNS(SVG_NS, 'svg');\n svgElem.classList.add(cn$4('g'));\n this.padElement.appendChild(svgElem);\n this.svgElem_ = svgElem;\n const xAxisElem = doc.createElementNS(SVG_NS, 'line');\n xAxisElem.classList.add(cn$4('ax'));\n xAxisElem.setAttributeNS(null, 'x1', '0');\n xAxisElem.setAttributeNS(null, 'y1', '50%');\n xAxisElem.setAttributeNS(null, 'x2', '100%');\n xAxisElem.setAttributeNS(null, 'y2', '50%');\n this.svgElem_.appendChild(xAxisElem);\n const yAxisElem = doc.createElementNS(SVG_NS, 'line');\n yAxisElem.classList.add(cn$4('ax'));\n yAxisElem.setAttributeNS(null, 'x1', '50%');\n yAxisElem.setAttributeNS(null, 'y1', '0');\n yAxisElem.setAttributeNS(null, 'x2', '50%');\n yAxisElem.setAttributeNS(null, 'y2', '100%');\n this.svgElem_.appendChild(yAxisElem);\n const lineElem = doc.createElementNS(SVG_NS, 'line');\n lineElem.classList.add(cn$4('l'));\n lineElem.setAttributeNS(null, 'x1', '50%');\n lineElem.setAttributeNS(null, 'y1', '50%');\n this.svgElem_.appendChild(lineElem);\n this.lineElem_ = lineElem;\n const markerElem = doc.createElement('div');\n markerElem.classList.add(cn$4('m'));\n this.padElement.appendChild(markerElem);\n this.markerElem_ = markerElem;\n config.value.emitter.on('change', this.onValueChange_);\n this.value = config.value;\n this.update_();\n }\n get allFocusableElements() {\n return [this.padElement];\n }\n update_() {\n const [x, y] = this.value.rawValue.getComponents();\n const max = this.props_.get('max');\n const px = mapRange(x, -max, +max, 0, 100);\n const py = mapRange(y, -max, +max, 0, 100);\n const ipy = this.props_.get('invertsY') ? 100 - py : py;\n this.lineElem_.setAttributeNS(null, 'x2', `${px}%`);\n this.lineElem_.setAttributeNS(null, 'y2', `${ipy}%`);\n this.markerElem_.style.left = `${px}%`;\n this.markerElem_.style.top = `${ipy}%`;\n }\n onValueChange_() {\n this.update_();\n }\n onPropsChange_() {\n this.update_();\n }\n onFoldableChange_() {\n this.update_();\n }\n}\n\nfunction computeOffset(ev, keyScales, invertsY) {\n return [\n getStepForKey(keyScales[0], getHorizontalStepKeys(ev)),\n getStepForKey(keyScales[1], getVerticalStepKeys(ev)) * (invertsY ? 1 : -1),\n ];\n}\nclass Point2dPickerController {\n constructor(doc, config) {\n this.onPadKeyDown_ = this.onPadKeyDown_.bind(this);\n this.onPadKeyUp_ = this.onPadKeyUp_.bind(this);\n this.onPointerDown_ = this.onPointerDown_.bind(this);\n this.onPointerMove_ = this.onPointerMove_.bind(this);\n this.onPointerUp_ = this.onPointerUp_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new Point2dPickerView(doc, {\n layout: config.layout,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.ptHandler_ = new PointerHandler(this.view.padElement);\n this.ptHandler_.emitter.on('down', this.onPointerDown_);\n this.ptHandler_.emitter.on('move', this.onPointerMove_);\n this.ptHandler_.emitter.on('up', this.onPointerUp_);\n this.view.padElement.addEventListener('keydown', this.onPadKeyDown_);\n this.view.padElement.addEventListener('keyup', this.onPadKeyUp_);\n }\n handlePointerEvent_(d, opts) {\n if (!d.point) {\n return;\n }\n const max = this.props.get('max');\n const px = mapRange(d.point.x, 0, d.bounds.width, -max, +max);\n const py = mapRange(this.props.get('invertsY') ? d.bounds.height - d.point.y : d.point.y, 0, d.bounds.height, -max, +max);\n this.value.setRawValue(new Point2d(px, py), opts);\n }\n onPointerDown_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerMove_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: false,\n last: false,\n });\n }\n onPointerUp_(ev) {\n this.handlePointerEvent_(ev.data, {\n forceEmit: true,\n last: true,\n });\n }\n onPadKeyDown_(ev) {\n if (isArrowKey(ev.key)) {\n ev.preventDefault();\n }\n const [dx, dy] = computeOffset(ev, [this.props.get('xKeyScale'), this.props.get('yKeyScale')], this.props.get('invertsY'));\n if (dx === 0 && dy === 0) {\n return;\n }\n this.value.setRawValue(new Point2d(this.value.rawValue.x + dx, this.value.rawValue.y + dy), {\n forceEmit: false,\n last: false,\n });\n }\n onPadKeyUp_(ev) {\n const [dx, dy] = computeOffset(ev, [this.props.get('xKeyScale'), this.props.get('yKeyScale')], this.props.get('invertsY'));\n if (dx === 0 && dy === 0) {\n return;\n }\n this.value.setRawValue(this.value.rawValue, {\n forceEmit: true,\n last: true,\n });\n }\n}\n\nclass Point2dController {\n constructor(doc, config) {\n var _a, _b;\n this.onPopupChildBlur_ = this.onPopupChildBlur_.bind(this);\n this.onPopupChildKeydown_ = this.onPopupChildKeydown_.bind(this);\n this.onPadButtonBlur_ = this.onPadButtonBlur_.bind(this);\n this.onPadButtonClick_ = this.onPadButtonClick_.bind(this);\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.foldable_ = Foldable.create(config.expanded);\n this.popC_ =\n config.pickerLayout === 'popup'\n ? new PopupController(doc, {\n viewProps: this.viewProps,\n })\n : null;\n const padC = new Point2dPickerController(doc, {\n layout: config.pickerLayout,\n props: new ValueMap({\n invertsY: createValue(config.invertsY),\n max: createValue(config.max),\n xKeyScale: config.axes[0].textProps.value('keyScale'),\n yKeyScale: config.axes[1].textProps.value('keyScale'),\n }),\n value: this.value,\n viewProps: this.viewProps,\n });\n padC.view.allFocusableElements.forEach((elem) => {\n elem.addEventListener('blur', this.onPopupChildBlur_);\n elem.addEventListener('keydown', this.onPopupChildKeydown_);\n });\n this.pickerC_ = padC;\n this.textC_ = new PointNdTextController(doc, {\n assembly: Point2dAssembly,\n axes: config.axes,\n parser: config.parser,\n value: this.value,\n viewProps: this.viewProps,\n });\n this.view = new Point2dView(doc, {\n expanded: this.foldable_.value('expanded'),\n pickerLayout: config.pickerLayout,\n viewProps: this.viewProps,\n });\n this.view.textElement.appendChild(this.textC_.view.element);\n (_a = this.view.buttonElement) === null || _a === void 0 ? void 0 : _a.addEventListener('blur', this.onPadButtonBlur_);\n (_b = this.view.buttonElement) === null || _b === void 0 ? void 0 : _b.addEventListener('click', this.onPadButtonClick_);\n if (this.popC_) {\n this.view.element.appendChild(this.popC_.view.element);\n this.popC_.view.element.appendChild(this.pickerC_.view.element);\n connectValues({\n primary: this.foldable_.value('expanded'),\n secondary: this.popC_.shows,\n forward: (p) => p,\n backward: (_, s) => s,\n });\n }\n else if (this.view.pickerElement) {\n this.view.pickerElement.appendChild(this.pickerC_.view.element);\n bindFoldable(this.foldable_, this.view.pickerElement);\n }\n }\n get textController() {\n return this.textC_;\n }\n onPadButtonBlur_(e) {\n if (!this.popC_) {\n return;\n }\n const elem = this.view.element;\n const nextTarget = forceCast(e.relatedTarget);\n if (!nextTarget || !elem.contains(nextTarget)) {\n this.popC_.shows.rawValue = false;\n }\n }\n onPadButtonClick_() {\n this.foldable_.set('expanded', !this.foldable_.get('expanded'));\n if (this.foldable_.get('expanded')) {\n this.pickerC_.view.allFocusableElements[0].focus();\n }\n }\n onPopupChildBlur_(ev) {\n if (!this.popC_) {\n return;\n }\n const elem = this.popC_.view.element;\n const nextTarget = findNextTarget(ev);\n if (nextTarget && elem.contains(nextTarget)) {\n return;\n }\n if (nextTarget &&\n nextTarget === this.view.buttonElement &&\n !supportsTouch(elem.ownerDocument)) {\n return;\n }\n this.popC_.shows.rawValue = false;\n }\n onPopupChildKeydown_(ev) {\n if (this.popC_) {\n if (ev.key === 'Escape') {\n this.popC_.shows.rawValue = false;\n }\n }\n else if (this.view.pickerElement) {\n if (ev.key === 'Escape') {\n this.view.buttonElement.focus();\n }\n }\n }\n}\n\nfunction point2dFromUnknown(value) {\n return Point2d.isObject(value)\n ? new Point2d(value.x, value.y)\n : new Point2d();\n}\nfunction writePoint2d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n}\n\nfunction createConstraint$3(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point2dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n ],\n });\n}\nfunction getSuitableMaxDimensionValue(params, rawValue) {\n var _a, _b;\n if (!isEmpty(params.min) || !isEmpty(params.max)) {\n return Math.max(Math.abs((_a = params.min) !== null && _a !== void 0 ? _a : 0), Math.abs((_b = params.max) !== null && _b !== void 0 ? _b : 0));\n }\n const step = getSuitableKeyScale(params);\n return Math.max(Math.abs(step) * 10, Math.abs(rawValue) * 10);\n}\nfunction getSuitableMax(params, initialValue) {\n var _a, _b;\n const xr = getSuitableMaxDimensionValue(deepMerge(params, ((_a = params.x) !== null && _a !== void 0 ? _a : {})), initialValue.x);\n const yr = getSuitableMaxDimensionValue(deepMerge(params, ((_b = params.y) !== null && _b !== void 0 ? _b : {})), initialValue.y);\n return Math.max(xr, yr);\n}\nfunction shouldInvertY(params) {\n if (!('y' in params)) {\n return false;\n }\n const yParams = params.y;\n if (!yParams) {\n return false;\n }\n return 'inverted' in yParams ? !!yParams.inverted : false;\n}\nconst Point2dInputPlugin = createPlugin({\n id: 'input-point2d',\n type: 'input',\n accept: (value, params) => {\n if (!Point2d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { expanded: p.optional.boolean, picker: p.optional.custom(parsePickerLayout), readonly: p.optional.constant(false), x: p.optional.custom(parsePointDimensionParams), y: p.optional.object(Object.assign(Object.assign({}, createPointDimensionParser(p)), { inverted: p.optional.boolean })) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: () => point2dFromUnknown,\n constraint: (args) => createConstraint$3(args.params, args.initialValue),\n equals: Point2d.equals,\n writer: () => writePoint2d,\n },\n controller: (args) => {\n var _a, _b;\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const dParams = [args.params.x, args.params.y];\n return new Point2dController(doc, {\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n expanded: (_a = args.params.expanded) !== null && _a !== void 0 ? _a : false,\n invertsY: shouldInvertY(args.params),\n max: getSuitableMax(args.params, value.rawValue),\n parser: parseNumber,\n pickerLayout: (_b = args.params.picker) !== null && _b !== void 0 ? _b : 'popup',\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass Point3d {\n constructor(x = 0, y = 0, z = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n getComponents() {\n return [this.x, this.y, this.z];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n const z = obj.z;\n if (typeof x !== 'number' ||\n typeof y !== 'number' ||\n typeof z !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n z: this.z,\n };\n }\n}\nconst Point3dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point3d(...comps),\n};\n\nfunction point3dFromUnknown(value) {\n return Point3d.isObject(value)\n ? new Point3d(value.x, value.y, value.z)\n : new Point3d();\n}\nfunction writePoint3d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n target.writeProperty('z', value.z);\n}\n\nfunction createConstraint$2(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point3dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.z), initialValue.z),\n ],\n });\n}\nconst Point3dInputPlugin = createPlugin({\n id: 'input-point3d',\n type: 'input',\n accept: (value, params) => {\n if (!Point3d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { readonly: p.optional.constant(false), x: p.optional.custom(parsePointDimensionParams), y: p.optional.custom(parsePointDimensionParams), z: p.optional.custom(parsePointDimensionParams) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => point3dFromUnknown,\n constraint: (args) => createConstraint$2(args.params, args.initialValue),\n equals: Point3d.equals,\n writer: (_args) => writePoint3d,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const dParams = [args.params.x, args.params.y, args.params.z];\n return new PointNdTextController(args.document, {\n assembly: Point3dAssembly,\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n parser: parseNumber,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass Point4d {\n constructor(x = 0, y = 0, z = 0, w = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n getComponents() {\n return [this.x, this.y, this.z, this.w];\n }\n static isObject(obj) {\n if (isEmpty(obj)) {\n return false;\n }\n const x = obj.x;\n const y = obj.y;\n const z = obj.z;\n const w = obj.w;\n if (typeof x !== 'number' ||\n typeof y !== 'number' ||\n typeof z !== 'number' ||\n typeof w !== 'number') {\n return false;\n }\n return true;\n }\n static equals(v1, v2) {\n return v1.x === v2.x && v1.y === v2.y && v1.z === v2.z && v1.w === v2.w;\n }\n toObject() {\n return {\n x: this.x,\n y: this.y,\n z: this.z,\n w: this.w,\n };\n }\n}\nconst Point4dAssembly = {\n toComponents: (p) => p.getComponents(),\n fromComponents: (comps) => new Point4d(...comps),\n};\n\nfunction point4dFromUnknown(value) {\n return Point4d.isObject(value)\n ? new Point4d(value.x, value.y, value.z, value.w)\n : new Point4d();\n}\nfunction writePoint4d(target, value) {\n target.writeProperty('x', value.x);\n target.writeProperty('y', value.y);\n target.writeProperty('z', value.z);\n target.writeProperty('w', value.w);\n}\n\nfunction createConstraint$1(params, initialValue) {\n return new PointNdConstraint({\n assembly: Point4dAssembly,\n components: [\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.x), initialValue.x),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.y), initialValue.y),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.z), initialValue.z),\n createDimensionConstraint(Object.assign(Object.assign({}, params), params.w), initialValue.w),\n ],\n });\n}\nconst Point4dInputPlugin = createPlugin({\n id: 'input-point4d',\n type: 'input',\n accept: (value, params) => {\n if (!Point4d.isObject(value)) {\n return null;\n }\n const result = parseRecord(params, (p) => (Object.assign(Object.assign({}, createPointDimensionParser(p)), { readonly: p.optional.constant(false), w: p.optional.custom(parsePointDimensionParams), x: p.optional.custom(parsePointDimensionParams), y: p.optional.custom(parsePointDimensionParams), z: p.optional.custom(parsePointDimensionParams) })));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => point4dFromUnknown,\n constraint: (args) => createConstraint$1(args.params, args.initialValue),\n equals: Point4d.equals,\n writer: (_args) => writePoint4d,\n },\n controller: (args) => {\n const value = args.value;\n const c = args.constraint;\n const dParams = [\n args.params.x,\n args.params.y,\n args.params.z,\n args.params.w,\n ];\n return new PointNdTextController(args.document, {\n assembly: Point4dAssembly,\n axes: value.rawValue.getComponents().map((comp, i) => {\n var _a;\n return createPointAxis({\n constraint: c.components[i],\n initialValue: comp,\n params: deepMerge(args.params, ((_a = dParams[i]) !== null && _a !== void 0 ? _a : {})),\n });\n }),\n parser: parseNumber,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nfunction createConstraint(params) {\n const constraints = [];\n const lc = createListConstraint(params.options);\n if (lc) {\n constraints.push(lc);\n }\n return new CompositeConstraint(constraints);\n}\nconst StringInputPlugin = createPlugin({\n id: 'input-string',\n type: 'input',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n readonly: p.optional.constant(false),\n options: p.optional.custom(parseListOptions),\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => stringFromUnknown,\n constraint: (args) => createConstraint(args.params),\n writer: (_args) => writePrimitive,\n },\n controller: (args) => {\n const doc = args.document;\n const value = args.value;\n const c = args.constraint;\n const lc = c && findConstraint(c, ListConstraint);\n if (lc) {\n return new ListController(doc, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new TextController(doc, {\n parser: (v) => v,\n props: ValueMap.fromObject({\n formatter: formatString,\n }),\n value: value,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (typeof args.controller.value.rawValue !== 'string') {\n return null;\n }\n if (args.controller.valueController instanceof ListController) {\n return new ListInputBindingApi(args.controller);\n }\n return null;\n },\n});\n\nconst Constants = {\n monitor: {\n defaultInterval: 200,\n defaultRows: 3,\n },\n};\n\nconst cn$3 = ClassName('mll');\nclass MultiLogView {\n constructor(doc, config) {\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.formatter_ = config.formatter;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$3());\n config.viewProps.bindClassModifiers(this.element);\n const textareaElem = doc.createElement('textarea');\n textareaElem.classList.add(cn$3('i'));\n textareaElem.style.height = `calc(var(${getCssVar('containerUnitSize')}) * ${config.rows})`;\n textareaElem.readOnly = true;\n config.viewProps.bindDisabled(textareaElem);\n this.element.appendChild(textareaElem);\n this.textareaElem_ = textareaElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const elem = this.textareaElem_;\n const shouldScroll = elem.scrollTop === elem.scrollHeight - elem.clientHeight;\n const lines = [];\n this.value.rawValue.forEach((value) => {\n if (value !== undefined) {\n lines.push(this.formatter_(value));\n }\n });\n elem.textContent = lines.join('\\n');\n if (shouldScroll) {\n elem.scrollTop = elem.scrollHeight;\n }\n }\n onValueUpdate_() {\n this.update_();\n }\n}\n\nclass MultiLogController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new MultiLogView(doc, {\n formatter: config.formatter,\n rows: config.rows,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n\nconst cn$2 = ClassName('sgl');\nclass SingleLogView {\n constructor(doc, config) {\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.formatter_ = config.formatter;\n this.element = doc.createElement('div');\n this.element.classList.add(cn$2());\n config.viewProps.bindClassModifiers(this.element);\n const inputElem = doc.createElement('input');\n inputElem.classList.add(cn$2('i'));\n inputElem.readOnly = true;\n inputElem.type = 'text';\n config.viewProps.bindDisabled(inputElem);\n this.element.appendChild(inputElem);\n this.inputElement = inputElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n update_() {\n const values = this.value.rawValue;\n const lastValue = values[values.length - 1];\n this.inputElement.value =\n lastValue !== undefined ? this.formatter_(lastValue) : '';\n }\n onValueUpdate_() {\n this.update_();\n }\n}\n\nclass SingleLogController {\n constructor(doc, config) {\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.view = new SingleLogView(doc, {\n formatter: config.formatter,\n value: this.value,\n viewProps: this.viewProps,\n });\n }\n}\n\nconst BooleanMonitorPlugin = createPlugin({\n id: 'monitor-bool',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'boolean') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n readonly: p.required.constant(true),\n rows: p.optional.number,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => boolFromUnknown,\n },\n controller: (args) => {\n var _a;\n if (args.value.rawValue.length === 1) {\n return new SingleLogController(args.document, {\n formatter: BooleanFormatter,\n value: args.value,\n viewProps: args.viewProps,\n });\n }\n return new MultiLogController(args.document, {\n formatter: BooleanFormatter,\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: args.value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass GraphLogMonitorBindingApi extends BindingApi {\n get max() {\n return this.controller.valueController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.props.get('min');\n }\n set min(min) {\n this.controller.valueController.props.set('min', min);\n }\n}\n\nconst cn$1 = ClassName('grl');\nclass GraphLogView {\n constructor(doc, config) {\n this.onCursorChange_ = this.onCursorChange_.bind(this);\n this.onValueUpdate_ = this.onValueUpdate_.bind(this);\n this.element = doc.createElement('div');\n this.element.classList.add(cn$1());\n config.viewProps.bindClassModifiers(this.element);\n this.formatter_ = config.formatter;\n this.props_ = config.props;\n this.cursor_ = config.cursor;\n this.cursor_.emitter.on('change', this.onCursorChange_);\n const svgElem = doc.createElementNS(SVG_NS, 'svg');\n svgElem.classList.add(cn$1('g'));\n svgElem.style.height = `calc(var(${getCssVar('containerUnitSize')}) * ${config.rows})`;\n this.element.appendChild(svgElem);\n this.svgElem_ = svgElem;\n const lineElem = doc.createElementNS(SVG_NS, 'polyline');\n this.svgElem_.appendChild(lineElem);\n this.lineElem_ = lineElem;\n const tooltipElem = doc.createElement('div');\n tooltipElem.classList.add(cn$1('t'), ClassName('tt')());\n this.element.appendChild(tooltipElem);\n this.tooltipElem_ = tooltipElem;\n config.value.emitter.on('change', this.onValueUpdate_);\n this.value = config.value;\n this.update_();\n }\n get graphElement() {\n return this.svgElem_;\n }\n update_() {\n const { clientWidth: w, clientHeight: h } = this.element;\n const maxIndex = this.value.rawValue.length - 1;\n const min = this.props_.get('min');\n const max = this.props_.get('max');\n const points = [];\n this.value.rawValue.forEach((v, index) => {\n if (v === undefined) {\n return;\n }\n const x = mapRange(index, 0, maxIndex, 0, w);\n const y = mapRange(v, min, max, h, 0);\n points.push([x, y].join(','));\n });\n this.lineElem_.setAttributeNS(null, 'points', points.join(' '));\n const tooltipElem = this.tooltipElem_;\n const value = this.value.rawValue[this.cursor_.rawValue];\n if (value === undefined) {\n tooltipElem.classList.remove(cn$1('t', 'a'));\n return;\n }\n const tx = mapRange(this.cursor_.rawValue, 0, maxIndex, 0, w);\n const ty = mapRange(value, min, max, h, 0);\n tooltipElem.style.left = `${tx}px`;\n tooltipElem.style.top = `${ty}px`;\n tooltipElem.textContent = `${this.formatter_(value)}`;\n if (!tooltipElem.classList.contains(cn$1('t', 'a'))) {\n tooltipElem.classList.add(cn$1('t', 'a'), cn$1('t', 'in'));\n forceReflow(tooltipElem);\n tooltipElem.classList.remove(cn$1('t', 'in'));\n }\n }\n onValueUpdate_() {\n this.update_();\n }\n onCursorChange_() {\n this.update_();\n }\n}\n\nclass GraphLogController {\n constructor(doc, config) {\n this.onGraphMouseMove_ = this.onGraphMouseMove_.bind(this);\n this.onGraphMouseLeave_ = this.onGraphMouseLeave_.bind(this);\n this.onGraphPointerDown_ = this.onGraphPointerDown_.bind(this);\n this.onGraphPointerMove_ = this.onGraphPointerMove_.bind(this);\n this.onGraphPointerUp_ = this.onGraphPointerUp_.bind(this);\n this.props = config.props;\n this.value = config.value;\n this.viewProps = config.viewProps;\n this.cursor_ = createValue(-1);\n this.view = new GraphLogView(doc, {\n cursor: this.cursor_,\n formatter: config.formatter,\n rows: config.rows,\n props: this.props,\n value: this.value,\n viewProps: this.viewProps,\n });\n if (!supportsTouch(doc)) {\n this.view.element.addEventListener('mousemove', this.onGraphMouseMove_);\n this.view.element.addEventListener('mouseleave', this.onGraphMouseLeave_);\n }\n else {\n const ph = new PointerHandler(this.view.element);\n ph.emitter.on('down', this.onGraphPointerDown_);\n ph.emitter.on('move', this.onGraphPointerMove_);\n ph.emitter.on('up', this.onGraphPointerUp_);\n }\n }\n importProps(state) {\n return importBladeState(state, null, (p) => ({\n max: p.required.number,\n min: p.required.number,\n }), (result) => {\n this.props.set('max', result.max);\n this.props.set('min', result.min);\n return true;\n });\n }\n exportProps() {\n return exportBladeState(null, {\n max: this.props.get('max'),\n min: this.props.get('min'),\n });\n }\n onGraphMouseLeave_() {\n this.cursor_.rawValue = -1;\n }\n onGraphMouseMove_(ev) {\n const { clientWidth: w } = this.view.element;\n this.cursor_.rawValue = Math.floor(mapRange(ev.offsetX, 0, w, 0, this.value.rawValue.length));\n }\n onGraphPointerDown_(ev) {\n this.onGraphPointerMove_(ev);\n }\n onGraphPointerMove_(ev) {\n if (!ev.data.point) {\n this.cursor_.rawValue = -1;\n return;\n }\n this.cursor_.rawValue = Math.floor(mapRange(ev.data.point.x, 0, ev.data.bounds.width, 0, this.value.rawValue.length));\n }\n onGraphPointerUp_() {\n this.cursor_.rawValue = -1;\n }\n}\n\nfunction createFormatter(params) {\n return !isEmpty(params.format) ? params.format : createNumberFormatter(2);\n}\nfunction createTextMonitor(args) {\n var _a;\n if (args.value.rawValue.length === 1) {\n return new SingleLogController(args.document, {\n formatter: createFormatter(args.params),\n value: args.value,\n viewProps: args.viewProps,\n });\n }\n return new MultiLogController(args.document, {\n formatter: createFormatter(args.params),\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: args.value,\n viewProps: args.viewProps,\n });\n}\nfunction createGraphMonitor(args) {\n var _a, _b, _c;\n return new GraphLogController(args.document, {\n formatter: createFormatter(args.params),\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n props: ValueMap.fromObject({\n max: (_b = args.params.max) !== null && _b !== void 0 ? _b : 100,\n min: (_c = args.params.min) !== null && _c !== void 0 ? _c : 0,\n }),\n value: args.value,\n viewProps: args.viewProps,\n });\n}\nfunction shouldShowGraph(params) {\n return params.view === 'graph';\n}\nconst NumberMonitorPlugin = createPlugin({\n id: 'monitor-number',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'number') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n format: p.optional.function,\n max: p.optional.number,\n min: p.optional.number,\n readonly: p.required.constant(true),\n rows: p.optional.number,\n view: p.optional.string,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n defaultBufferSize: (params) => (shouldShowGraph(params) ? 64 : 1),\n reader: (_args) => numberFromUnknown,\n },\n controller: (args) => {\n if (shouldShowGraph(args.params)) {\n return createGraphMonitor(args);\n }\n return createTextMonitor(args);\n },\n api: (args) => {\n if (args.controller.valueController instanceof GraphLogController) {\n return new GraphLogMonitorBindingApi(args.controller);\n }\n return null;\n },\n});\n\nconst StringMonitorPlugin = createPlugin({\n id: 'monitor-string',\n type: 'monitor',\n accept: (value, params) => {\n if (typeof value !== 'string') {\n return null;\n }\n const result = parseRecord(params, (p) => ({\n multiline: p.optional.boolean,\n readonly: p.required.constant(true),\n rows: p.optional.number,\n }));\n return result\n ? {\n initialValue: value,\n params: result,\n }\n : null;\n },\n binding: {\n reader: (_args) => stringFromUnknown,\n },\n controller: (args) => {\n var _a;\n const value = args.value;\n const multiline = value.rawValue.length > 1 || args.params.multiline;\n if (multiline) {\n return new MultiLogController(args.document, {\n formatter: formatString,\n rows: (_a = args.params.rows) !== null && _a !== void 0 ? _a : Constants.monitor.defaultRows,\n value: value,\n viewProps: args.viewProps,\n });\n }\n return new SingleLogController(args.document, {\n formatter: formatString,\n value: value,\n viewProps: args.viewProps,\n });\n },\n});\n\nclass BladeApiCache {\n constructor() {\n this.map_ = new Map();\n }\n get(bc) {\n var _a;\n return (_a = this.map_.get(bc)) !== null && _a !== void 0 ? _a : null;\n }\n has(bc) {\n return this.map_.has(bc);\n }\n add(bc, api) {\n this.map_.set(bc, api);\n bc.viewProps.handleDispose(() => {\n this.map_.delete(bc);\n });\n return api;\n }\n}\n\nclass ReadWriteBinding {\n constructor(config) {\n this.target = config.target;\n this.reader_ = config.reader;\n this.writer_ = config.writer;\n }\n read() {\n return this.reader_(this.target.read());\n }\n write(value) {\n this.writer_(this.target, value);\n }\n inject(value) {\n this.write(this.reader_(value));\n }\n}\n\nfunction createInputBindingController(plugin, args) {\n var _a;\n const result = plugin.accept(args.target.read(), args.params);\n if (isEmpty(result)) {\n return null;\n }\n const valueArgs = {\n target: args.target,\n initialValue: result.initialValue,\n params: result.params,\n };\n const params = parseRecord(args.params, (p) => ({\n disabled: p.optional.boolean,\n hidden: p.optional.boolean,\n label: p.optional.string,\n tag: p.optional.string,\n }));\n const reader = plugin.binding.reader(valueArgs);\n const constraint = plugin.binding.constraint\n ? plugin.binding.constraint(valueArgs)\n : undefined;\n const binding = new ReadWriteBinding({\n reader: reader,\n target: args.target,\n writer: plugin.binding.writer(valueArgs),\n });\n const value = new InputBindingValue(createValue(reader(result.initialValue), {\n constraint: constraint,\n equals: plugin.binding.equals,\n }), binding);\n const controller = plugin.controller({\n constraint: constraint,\n document: args.document,\n initialValue: result.initialValue,\n params: result.params,\n value: value,\n viewProps: ViewProps.create({\n disabled: params === null || params === void 0 ? void 0 : params.disabled,\n hidden: params === null || params === void 0 ? void 0 : params.hidden,\n }),\n });\n return new InputBindingController(args.document, {\n blade: createBlade(),\n props: ValueMap.fromObject({\n label: 'label' in args.params ? (_a = params === null || params === void 0 ? void 0 : params.label) !== null && _a !== void 0 ? _a : null : args.target.key,\n }),\n tag: params === null || params === void 0 ? void 0 : params.tag,\n value: value,\n valueController: controller,\n });\n}\n\nclass ReadonlyBinding {\n constructor(config) {\n this.target = config.target;\n this.reader_ = config.reader;\n }\n read() {\n return this.reader_(this.target.read());\n }\n}\n\nfunction createTicker(document, interval) {\n return interval === 0\n ? new ManualTicker()\n : new IntervalTicker(document, interval !== null && interval !== void 0 ? interval : Constants.monitor.defaultInterval);\n}\nfunction createMonitorBindingController(plugin, args) {\n var _a, _b, _c;\n const result = plugin.accept(args.target.read(), args.params);\n if (isEmpty(result)) {\n return null;\n }\n const bindingArgs = {\n target: args.target,\n initialValue: result.initialValue,\n params: result.params,\n };\n const params = parseRecord(args.params, (p) => ({\n bufferSize: p.optional.number,\n disabled: p.optional.boolean,\n hidden: p.optional.boolean,\n interval: p.optional.number,\n label: p.optional.string,\n }));\n const reader = plugin.binding.reader(bindingArgs);\n const bufferSize = (_b = (_a = params === null || params === void 0 ? void 0 : params.bufferSize) !== null && _a !== void 0 ? _a : (plugin.binding.defaultBufferSize &&\n plugin.binding.defaultBufferSize(result.params))) !== null && _b !== void 0 ? _b : 1;\n const value = new MonitorBindingValue({\n binding: new ReadonlyBinding({\n reader: reader,\n target: args.target,\n }),\n bufferSize: bufferSize,\n ticker: createTicker(args.document, params === null || params === void 0 ? void 0 : params.interval),\n });\n const controller = plugin.controller({\n document: args.document,\n params: result.params,\n value: value,\n viewProps: ViewProps.create({\n disabled: params === null || params === void 0 ? void 0 : params.disabled,\n hidden: params === null || params === void 0 ? void 0 : params.hidden,\n }),\n });\n controller.viewProps.bindDisabled(value.ticker);\n controller.viewProps.handleDispose(() => {\n value.ticker.dispose();\n });\n return new MonitorBindingController(args.document, {\n blade: createBlade(),\n props: ValueMap.fromObject({\n label: 'label' in args.params ? (_c = params === null || params === void 0 ? void 0 : params.label) !== null && _c !== void 0 ? _c : null : args.target.key,\n }),\n value: value,\n valueController: controller,\n });\n}\n\nclass PluginPool {\n constructor(apiCache) {\n this.pluginsMap_ = {\n blades: [],\n inputs: [],\n monitors: [],\n };\n this.apiCache_ = apiCache;\n }\n getAll() {\n return [\n ...this.pluginsMap_.blades,\n ...this.pluginsMap_.inputs,\n ...this.pluginsMap_.monitors,\n ];\n }\n register(bundleId, r) {\n if (!isCompatible(r.core)) {\n throw TpError.notCompatible(bundleId, r.id);\n }\n if (r.type === 'blade') {\n this.pluginsMap_.blades.unshift(r);\n }\n else if (r.type === 'input') {\n this.pluginsMap_.inputs.unshift(r);\n }\n else if (r.type === 'monitor') {\n this.pluginsMap_.monitors.unshift(r);\n }\n }\n createInput_(document, target, params) {\n return this.pluginsMap_.inputs.reduce((result, plugin) => result !== null && result !== void 0 ? result : createInputBindingController(plugin, {\n document: document,\n target: target,\n params: params,\n }), null);\n }\n createMonitor_(document, target, params) {\n return this.pluginsMap_.monitors.reduce((result, plugin) => result !== null && result !== void 0 ? result : createMonitorBindingController(plugin, {\n document: document,\n params: params,\n target: target,\n }), null);\n }\n createBinding(doc, target, params) {\n const initialValue = target.read();\n if (isEmpty(initialValue)) {\n throw new TpError({\n context: {\n key: target.key,\n },\n type: 'nomatchingcontroller',\n });\n }\n const ic = this.createInput_(doc, target, params);\n if (ic) {\n return ic;\n }\n const mc = this.createMonitor_(doc, target, params);\n if (mc) {\n return mc;\n }\n throw new TpError({\n context: {\n key: target.key,\n },\n type: 'nomatchingcontroller',\n });\n }\n createBlade(document, params) {\n const bc = this.pluginsMap_.blades.reduce((result, plugin) => result !== null && result !== void 0 ? result : createBladeController(plugin, {\n document: document,\n params: params,\n }), null);\n if (!bc) {\n throw new TpError({\n type: 'nomatchingview',\n context: {\n params: params,\n },\n });\n }\n return bc;\n }\n createInputBindingApi_(bc) {\n const api = this.pluginsMap_.inputs.reduce((result, plugin) => {\n var _a, _b;\n if (result) {\n return result;\n }\n return ((_b = (_a = plugin.api) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n controller: bc,\n })) !== null && _b !== void 0 ? _b : null);\n }, null);\n return this.apiCache_.add(bc, api !== null && api !== void 0 ? api : new BindingApi(bc));\n }\n createMonitorBindingApi_(bc) {\n const api = this.pluginsMap_.monitors.reduce((result, plugin) => {\n var _a, _b;\n if (result) {\n return result;\n }\n return ((_b = (_a = plugin.api) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n controller: bc,\n })) !== null && _b !== void 0 ? _b : null);\n }, null);\n return this.apiCache_.add(bc, api !== null && api !== void 0 ? api : new BindingApi(bc));\n }\n createBindingApi(bc) {\n if (this.apiCache_.has(bc)) {\n return this.apiCache_.get(bc);\n }\n if (isInputBindingController(bc)) {\n return this.createInputBindingApi_(bc);\n }\n if (isMonitorBindingController(bc)) {\n return this.createMonitorBindingApi_(bc);\n }\n throw TpError.shouldNeverHappen();\n }\n createApi(bc) {\n if (this.apiCache_.has(bc)) {\n return this.apiCache_.get(bc);\n }\n if (isBindingController(bc)) {\n return this.createBindingApi(bc);\n }\n const api = this.pluginsMap_.blades.reduce((result, plugin) => result !== null && result !== void 0 ? result : plugin.api({\n controller: bc,\n pool: this,\n }), null);\n if (!api) {\n throw TpError.shouldNeverHappen();\n }\n return this.apiCache_.add(bc, api);\n }\n}\n\nconst sharedCache = new BladeApiCache();\nfunction createDefaultPluginPool() {\n const pool = new PluginPool(sharedCache);\n [\n Point2dInputPlugin,\n Point3dInputPlugin,\n Point4dInputPlugin,\n StringInputPlugin,\n NumberInputPlugin,\n StringColorInputPlugin,\n ObjectColorInputPlugin,\n NumberColorInputPlugin,\n BooleanInputPlugin,\n BooleanMonitorPlugin,\n StringMonitorPlugin,\n NumberMonitorPlugin,\n ButtonBladePlugin,\n FolderBladePlugin,\n TabBladePlugin,\n ].forEach((p) => {\n pool.register('core', p);\n });\n return pool;\n}\n\nclass ListBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', (ev) => {\n this.emitter_.emit('change', new TpChangeEvent(this, ev.rawValue));\n });\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get options() {\n return this.controller.valueController.props.get('options');\n }\n set options(options) {\n this.controller.valueController.props.set('options', options);\n }\n get value() {\n return this.controller.value.rawValue;\n }\n set value(value) {\n this.controller.value.rawValue = value;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nclass SeparatorBladeApi extends BladeApi {\n}\n\nclass SliderBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', (ev) => {\n this.emitter_.emit('change', new TpChangeEvent(this, ev.rawValue));\n });\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get max() {\n return this.controller.valueController.sliderController.props.get('max');\n }\n set max(max) {\n this.controller.valueController.sliderController.props.set('max', max);\n }\n get min() {\n return this.controller.valueController.sliderController.props.get('min');\n }\n set min(min) {\n this.controller.valueController.sliderController.props.set('min', min);\n }\n get value() {\n return this.controller.value.rawValue;\n }\n set value(value) {\n this.controller.value.rawValue = value;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nclass TextBladeApi extends BladeApi {\n /**\n * @hidden\n */\n constructor(controller) {\n super(controller);\n this.emitter_ = new Emitter();\n this.controller.value.emitter.on('change', (ev) => {\n this.emitter_.emit('change', new TpChangeEvent(this, ev.rawValue));\n });\n }\n get label() {\n return this.controller.labelController.props.get('label');\n }\n set label(label) {\n this.controller.labelController.props.set('label', label);\n }\n get formatter() {\n return this.controller.valueController.props.get('formatter');\n }\n set formatter(formatter) {\n this.controller.valueController.props.set('formatter', formatter);\n }\n get value() {\n return this.controller.value.rawValue;\n }\n set value(value) {\n this.controller.value.rawValue = value;\n }\n on(eventName, handler) {\n const bh = handler.bind(this);\n this.emitter_.on(eventName, (ev) => {\n bh(ev);\n }, {\n key: handler,\n });\n return this;\n }\n off(eventName, handler) {\n this.emitter_.off(eventName, handler);\n return this;\n }\n}\n\nconst ListBladePlugin = (function () {\n return {\n id: 'list',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n options: p.required.custom(parseListOptions),\n value: p.required.raw,\n view: p.required.constant('list'),\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n const lc = new ListConstraint(normalizeListOptions(args.params.options));\n const value = createValue(args.params.value, {\n constraint: lc,\n });\n const ic = new ListController(args.document, {\n props: new ValueMap({\n options: lc.values.value('options'),\n }),\n value: value,\n viewProps: args.viewProps,\n });\n return new LabeledValueBladeController(args.document, {\n blade: args.blade,\n props: ValueMap.fromObject({\n label: args.params.label,\n }),\n value: value,\n valueController: ic,\n });\n },\n api(args) {\n if (!(args.controller instanceof LabeledValueBladeController)) {\n return null;\n }\n if (!(args.controller.valueController instanceof ListController)) {\n return null;\n }\n return new ListBladeApi(args.controller);\n },\n };\n})();\n\nclass RootApi extends FolderApi {\n /**\n * @hidden\n */\n constructor(controller, pool) {\n super(controller, pool);\n }\n get element() {\n return this.controller.view.element;\n }\n}\n\n/**\n * @hidden\n */\nclass RootController extends FolderController {\n constructor(doc, config) {\n super(doc, {\n expanded: config.expanded,\n blade: config.blade,\n props: config.props,\n root: true,\n viewProps: config.viewProps,\n });\n }\n}\n\nconst cn = ClassName('spr');\n/**\n * @hidden\n */\nclass SeparatorView {\n constructor(doc, config) {\n this.element = doc.createElement('div');\n this.element.classList.add(cn());\n config.viewProps.bindClassModifiers(this.element);\n const hrElem = doc.createElement('hr');\n hrElem.classList.add(cn('r'));\n this.element.appendChild(hrElem);\n }\n}\n\n/**\n * @hidden\n */\nclass SeparatorController extends BladeController {\n /**\n * @hidden\n */\n constructor(doc, config) {\n super(Object.assign(Object.assign({}, config), { view: new SeparatorView(doc, {\n viewProps: config.viewProps,\n }) }));\n }\n}\n\nconst SeparatorBladePlugin = {\n id: 'separator',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n view: p.required.constant('separator'),\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n return new SeparatorController(args.document, {\n blade: args.blade,\n viewProps: args.viewProps,\n });\n },\n api(args) {\n if (!(args.controller instanceof SeparatorController)) {\n return null;\n }\n return new SeparatorBladeApi(args.controller);\n },\n};\n\nconst SliderBladePlugin = {\n id: 'slider',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n max: p.required.number,\n min: p.required.number,\n view: p.required.constant('slider'),\n format: p.optional.function,\n label: p.optional.string,\n value: p.optional.number,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n var _a, _b;\n const initialValue = (_a = args.params.value) !== null && _a !== void 0 ? _a : 0;\n const drc = new DefiniteRangeConstraint({\n max: args.params.max,\n min: args.params.min,\n });\n const v = createValue(initialValue, {\n constraint: drc,\n });\n const vc = new SliderTextController(args.document, Object.assign(Object.assign({}, createSliderTextProps({\n formatter: (_b = args.params.format) !== null && _b !== void 0 ? _b : numberToString,\n keyScale: createValue(1),\n max: drc.values.value('max'),\n min: drc.values.value('min'),\n pointerScale: getSuitablePointerScale(args.params, initialValue),\n })), { parser: parseNumber, value: v, viewProps: args.viewProps }));\n return new LabeledValueBladeController(args.document, {\n blade: args.blade,\n props: ValueMap.fromObject({\n label: args.params.label,\n }),\n value: v,\n valueController: vc,\n });\n },\n api(args) {\n if (!(args.controller instanceof LabeledValueBladeController)) {\n return null;\n }\n if (!(args.controller.valueController instanceof SliderTextController)) {\n return null;\n }\n return new SliderBladeApi(args.controller);\n },\n};\n\nconst TextBladePlugin = (function () {\n return {\n id: 'text',\n type: 'blade',\n core: VERSION$1,\n accept(params) {\n const result = parseRecord(params, (p) => ({\n parse: p.required.function,\n value: p.required.raw,\n view: p.required.constant('text'),\n format: p.optional.function,\n label: p.optional.string,\n }));\n return result ? { params: result } : null;\n },\n controller(args) {\n var _a;\n const v = createValue(args.params.value);\n const ic = new TextController(args.document, {\n parser: args.params.parse,\n props: ValueMap.fromObject({\n formatter: (_a = args.params.format) !== null && _a !== void 0 ? _a : ((v) => String(v)),\n }),\n value: v,\n viewProps: args.viewProps,\n });\n return new LabeledValueBladeController(args.document, {\n blade: args.blade,\n props: ValueMap.fromObject({\n label: args.params.label,\n }),\n value: v,\n valueController: ic,\n });\n },\n api(args) {\n if (!(args.controller instanceof LabeledValueBladeController)) {\n return null;\n }\n if (!(args.controller.valueController instanceof TextController)) {\n return null;\n }\n return new TextBladeApi(args.controller);\n },\n };\n})();\n\nfunction createDefaultWrapperElement(doc) {\n const elem = doc.createElement('div');\n elem.classList.add(ClassName('dfw')());\n if (doc.body) {\n doc.body.appendChild(elem);\n }\n return elem;\n}\nfunction embedStyle(doc, id, css) {\n if (doc.querySelector(`style[data-tp-style=${id}]`)) {\n return;\n }\n const styleElem = doc.createElement('style');\n styleElem.dataset.tpStyle = id;\n styleElem.textContent = css;\n doc.head.appendChild(styleElem);\n}\n/**\n * The root pane of Tweakpane.\n */\nclass Pane extends RootApi {\n constructor(opt_config) {\n var _a, _b;\n const config = opt_config !== null && opt_config !== void 0 ? opt_config : {};\n const doc = (_a = config.document) !== null && _a !== void 0 ? _a : getWindowDocument();\n const pool = createDefaultPluginPool();\n const rootController = new RootController(doc, {\n expanded: config.expanded,\n blade: createBlade(),\n props: ValueMap.fromObject({\n title: config.title,\n }),\n viewProps: ViewProps.create(),\n });\n super(rootController, pool);\n this.pool_ = pool;\n this.containerElem_ = (_b = config.container) !== null && _b !== void 0 ? _b : createDefaultWrapperElement(doc);\n this.containerElem_.appendChild(this.element);\n this.doc_ = doc;\n this.usesDefaultWrapper_ = !config.container;\n this.setUpDefaultPlugins_();\n }\n get document() {\n if (!this.doc_) {\n throw TpError.alreadyDisposed();\n }\n return this.doc_;\n }\n dispose() {\n const containerElem = this.containerElem_;\n if (!containerElem) {\n throw TpError.alreadyDisposed();\n }\n if (this.usesDefaultWrapper_) {\n const parentElem = containerElem.parentElement;\n if (parentElem) {\n parentElem.removeChild(containerElem);\n }\n }\n this.containerElem_ = null;\n this.doc_ = null;\n super.dispose();\n }\n registerPlugin(bundle) {\n if (bundle.css) {\n embedStyle(this.document, `plugin-${bundle.id}`, bundle.css);\n }\n const plugins = 'plugin' in bundle\n ? [bundle.plugin]\n : 'plugins' in bundle\n ? bundle.plugins\n : [];\n plugins.forEach((p) => {\n this.pool_.register(bundle.id, p);\n });\n }\n setUpDefaultPlugins_() {\n this.registerPlugin({\n id: 'default',\n // NOTE: This string literal will be replaced with the default CSS by Rollup at the compilation time\n css: '.tp-tbiv_b,.tp-coltxtv_ms,.tp-colswv_b,.tp-ckbv_i,.tp-sglv_i,.tp-mllv_i,.tp-grlv_g,.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw,.tp-rotv_b,.tp-fldv_b,.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0}.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{background-color:var(--btn-bg);border-radius:var(--bld-br);color:var(--btn-fg);cursor:pointer;display:block;font-weight:bold;height:var(--cnt-usz);line-height:var(--cnt-usz);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tp-p2dv_b:hover,.tp-btnv_b:hover,.tp-lstv_s:hover{background-color:var(--btn-bg-h)}.tp-p2dv_b:focus,.tp-btnv_b:focus,.tp-lstv_s:focus{background-color:var(--btn-bg-f)}.tp-p2dv_b:active,.tp-btnv_b:active,.tp-lstv_s:active{background-color:var(--btn-bg-a)}.tp-p2dv_b:disabled,.tp-btnv_b:disabled,.tp-lstv_s:disabled{opacity:.5}.tp-rotv_c>.tp-cntv.tp-v-lst,.tp-tbpv_c>.tp-cntv.tp-v-lst,.tp-fldv_c>.tp-cntv.tp-v-lst{margin-bottom:calc(-1*var(--cnt-vp))}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-tbpv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_c{border-bottom-left-radius:0}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-tbpv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_b{border-bottom-left-radius:0}.tp-rotv_c>*:not(.tp-v-fst),.tp-tbpv_c>*:not(.tp-v-fst),.tp-fldv_c>*:not(.tp-v-fst){margin-top:var(--cnt-usp)}.tp-rotv_c>.tp-sprv:not(.tp-v-fst),.tp-tbpv_c>.tp-sprv:not(.tp-v-fst),.tp-fldv_c>.tp-sprv:not(.tp-v-fst),.tp-rotv_c>.tp-cntv:not(.tp-v-fst),.tp-tbpv_c>.tp-cntv:not(.tp-v-fst),.tp-fldv_c>.tp-cntv:not(.tp-v-fst){margin-top:var(--cnt-vp)}.tp-rotv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-tbpv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-tbpv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-cntv+*:not(.tp-v-hidden){margin-top:var(--cnt-vp)}.tp-rotv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-tbpv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-fldv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-rotv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-tbpv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-fldv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv{margin-top:0}.tp-tbpv_c>.tp-cntv,.tp-fldv_c>.tp-cntv{margin-left:4px}.tp-tbpv_c>.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-fldv>.tp-fldv_b{border-top-left-radius:var(--bld-br);border-bottom-left-radius:var(--bld-br)}.tp-tbpv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b{border-bottom-left-radius:0}.tp-tbpv_c .tp-fldv>.tp-fldv_c,.tp-fldv_c .tp-fldv>.tp-fldv_c{border-bottom-left-radius:var(--bld-br)}.tp-tbpv_c>.tp-cntv+.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-cntv+.tp-fldv>.tp-fldv_b{border-top-left-radius:0}.tp-tbpv_c>.tp-cntv+.tp-tabv>.tp-tabv_t,.tp-fldv_c>.tp-cntv+.tp-tabv>.tp-tabv_t{border-top-left-radius:0}.tp-tbpv_c>.tp-tabv>.tp-tabv_t,.tp-fldv_c>.tp-tabv>.tp-tabv_t{border-top-left-radius:var(--bld-br)}.tp-tbpv_c .tp-tabv>.tp-tabv_c,.tp-fldv_c .tp-tabv>.tp-tabv_c{border-bottom-left-radius:var(--bld-br)}.tp-rotv_b,.tp-fldv_b{background-color:var(--cnt-bg);color:var(--cnt-fg);cursor:pointer;display:block;height:calc(var(--cnt-usz) + 4px);line-height:calc(var(--cnt-usz) + 4px);overflow:hidden;padding-left:var(--cnt-hp);padding-right:calc(4px + var(--cnt-usz) + var(--cnt-hp));position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%;transition:border-radius .2s ease-in-out .2s}.tp-rotv_b:hover,.tp-fldv_b:hover{background-color:var(--cnt-bg-h)}.tp-rotv_b:focus,.tp-fldv_b:focus{background-color:var(--cnt-bg-f)}.tp-rotv_b:active,.tp-fldv_b:active{background-color:var(--cnt-bg-a)}.tp-rotv_b:disabled,.tp-fldv_b:disabled{opacity:.5}.tp-rotv_m,.tp-fldv_m{background:linear-gradient(to left, var(--cnt-fg), var(--cnt-fg) 2px, transparent 2px, transparent 4px, var(--cnt-fg) 4px);border-radius:2px;bottom:0;content:\"\";display:block;height:6px;right:calc(var(--cnt-hp) + (var(--cnt-usz) + 4px - 6px)/2 - 2px);margin:auto;opacity:.5;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_m,.tp-fldv.tp-fldv-expanded>.tp-fldv_b>.tp-fldv_m{transform:none}.tp-rotv_c,.tp-fldv_c{box-sizing:border-box;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0;position:relative;transition:height .2s ease-in-out,opacity .2s linear,padding .2s ease-in-out}.tp-rotv.tp-rotv-cpl:not(.tp-rotv-expanded) .tp-rotv_c,.tp-fldv.tp-fldv-cpl:not(.tp-fldv-expanded)>.tp-fldv_c{display:none}.tp-rotv.tp-rotv-expanded .tp-rotv_c,.tp-fldv.tp-fldv-expanded>.tp-fldv_c{opacity:1;padding-bottom:var(--cnt-vp);padding-top:var(--cnt-vp);transform:none;overflow:visible;transition:height .2s ease-in-out,opacity .2s linear .2s,padding .2s ease-in-out}.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw{background-color:var(--in-bg);border-radius:var(--bld-br);box-sizing:border-box;color:var(--in-fg);font-family:inherit;height:var(--cnt-usz);line-height:var(--cnt-usz);min-width:0;width:100%}.tp-txtv_i:hover,.tp-p2dpv_p:hover,.tp-colswv_sw:hover{background-color:var(--in-bg-h)}.tp-txtv_i:focus,.tp-p2dpv_p:focus,.tp-colswv_sw:focus{background-color:var(--in-bg-f)}.tp-txtv_i:active,.tp-p2dpv_p:active,.tp-colswv_sw:active{background-color:var(--in-bg-a)}.tp-txtv_i:disabled,.tp-p2dpv_p:disabled,.tp-colswv_sw:disabled{opacity:.5}.tp-lstv,.tp-coltxtv_m{position:relative}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m,.tp-coltxtv_mm{bottom:0;margin:auto;pointer-events:none;position:absolute;right:2px;top:0}.tp-lstv_m svg,.tp-coltxtv_mm svg{bottom:0;height:16px;margin:auto;position:absolute;right:0;top:0;width:16px}.tp-lstv_m svg path,.tp-coltxtv_mm svg path{fill:currentColor}.tp-sglv_i,.tp-mllv_i,.tp-grlv_g{background-color:var(--mo-bg);border-radius:var(--bld-br);box-sizing:border-box;color:var(--mo-fg);height:var(--cnt-usz);scrollbar-color:currentColor rgba(0,0,0,0);scrollbar-width:thin;width:100%}.tp-sglv_i::-webkit-scrollbar,.tp-mllv_i::-webkit-scrollbar,.tp-grlv_g::-webkit-scrollbar{height:8px;width:8px}.tp-sglv_i::-webkit-scrollbar-corner,.tp-mllv_i::-webkit-scrollbar-corner,.tp-grlv_g::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.tp-sglv_i::-webkit-scrollbar-thumb,.tp-mllv_i::-webkit-scrollbar-thumb,.tp-grlv_g::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:currentColor;border:rgba(0,0,0,0) solid 2px;border-radius:4px}.tp-pndtxtv,.tp-coltxtv_w{display:flex}.tp-pndtxtv_a,.tp-coltxtv_c{width:100%}.tp-pndtxtv_a+.tp-pndtxtv_a,.tp-coltxtv_c+.tp-pndtxtv_a,.tp-pndtxtv_a+.tp-coltxtv_c,.tp-coltxtv_c+.tp-coltxtv_c{margin-left:2px}.tp-rotv{--bs-bg: var(--tp-base-background-color, hsl(230, 7%, 17%));--bs-br: var(--tp-base-border-radius, 6px);--bs-ff: var(--tp-base-font-family, Roboto Mono, Source Code Pro, Menlo, Courier, monospace);--bs-sh: var(--tp-base-shadow-color, rgba(0, 0, 0, 0.2));--bld-br: var(--tp-blade-border-radius, 2px);--bld-hp: var(--tp-blade-horizontal-padding, 4px);--bld-vw: var(--tp-blade-value-width, 160px);--btn-bg: var(--tp-button-background-color, hsl(230, 7%, 70%));--btn-bg-a: var(--tp-button-background-color-active, #d6d7db);--btn-bg-f: var(--tp-button-background-color-focus, #c8cad0);--btn-bg-h: var(--tp-button-background-color-hover, #bbbcc4);--btn-fg: var(--tp-button-foreground-color, hsl(230, 7%, 17%));--cnt-bg: var(--tp-container-background-color, rgba(187, 188, 196, 0.1));--cnt-bg-a: var(--tp-container-background-color-active, rgba(187, 188, 196, 0.25));--cnt-bg-f: var(--tp-container-background-color-focus, rgba(187, 188, 196, 0.2));--cnt-bg-h: var(--tp-container-background-color-hover, rgba(187, 188, 196, 0.15));--cnt-fg: var(--tp-container-foreground-color, hsl(230, 7%, 75%));--cnt-hp: var(--tp-container-horizontal-padding, 4px);--cnt-vp: var(--tp-container-vertical-padding, 4px);--cnt-usp: var(--tp-container-unit-spacing, 4px);--cnt-usz: var(--tp-container-unit-size, 20px);--in-bg: var(--tp-input-background-color, rgba(187, 188, 196, 0.1));--in-bg-a: var(--tp-input-background-color-active, rgba(187, 188, 196, 0.25));--in-bg-f: var(--tp-input-background-color-focus, rgba(187, 188, 196, 0.2));--in-bg-h: var(--tp-input-background-color-hover, rgba(187, 188, 196, 0.15));--in-fg: var(--tp-input-foreground-color, hsl(230, 7%, 75%));--lbl-fg: var(--tp-label-foreground-color, rgba(187, 188, 196, 0.7));--mo-bg: var(--tp-monitor-background-color, rgba(0, 0, 0, 0.2));--mo-fg: var(--tp-monitor-foreground-color, rgba(187, 188, 196, 0.7));--grv-fg: var(--tp-groove-foreground-color, rgba(187, 188, 196, 0.1))}.tp-btnv_b{width:100%}.tp-btnv_t{text-align:center}.tp-ckbv_l{display:block;position:relative}.tp-ckbv_i{left:0;opacity:0;position:absolute;top:0}.tp-ckbv_w{background-color:var(--in-bg);border-radius:var(--bld-br);cursor:pointer;display:block;height:var(--cnt-usz);position:relative;width:var(--cnt-usz)}.tp-ckbv_w svg{display:block;height:16px;inset:0;margin:auto;opacity:0;position:absolute;width:16px}.tp-ckbv_w svg path{fill:none;stroke:var(--in-fg);stroke-width:2}.tp-ckbv_i:hover+.tp-ckbv_w{background-color:var(--in-bg-h)}.tp-ckbv_i:focus+.tp-ckbv_w{background-color:var(--in-bg-f)}.tp-ckbv_i:active+.tp-ckbv_w{background-color:var(--in-bg-a)}.tp-ckbv_i:checked+.tp-ckbv_w svg{opacity:1}.tp-ckbv.tp-v-disabled .tp-ckbv_w{opacity:.5}.tp-colv{position:relative}.tp-colv_h{display:flex}.tp-colv_s{flex-grow:0;flex-shrink:0;width:var(--cnt-usz)}.tp-colv_t{flex:1;margin-left:4px}.tp-colv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-colv.tp-colv-expanded.tp-colv-cpl .tp-colv_p{overflow:visible}.tp-colv.tp-colv-expanded .tp-colv_p{margin-top:var(--cnt-usp);opacity:1}.tp-colv .tp-popv{left:calc(-1*var(--cnt-hp));right:calc(-1*var(--cnt-hp));top:var(--cnt-usz)}.tp-colpv_h,.tp-colpv_ap{margin-left:6px;margin-right:6px}.tp-colpv_h{margin-top:var(--cnt-usp)}.tp-colpv_rgb{display:flex;margin-top:var(--cnt-usp);width:100%}.tp-colpv_a{display:flex;margin-top:var(--cnt-vp);padding-top:calc(var(--cnt-vp) + 2px);position:relative}.tp-colpv_a::before{background-color:var(--grv-fg);content:\"\";height:2px;left:calc(-1*var(--cnt-hp));position:absolute;right:calc(-1*var(--cnt-hp));top:0}.tp-colpv.tp-v-disabled .tp-colpv_a::before{opacity:.5}.tp-colpv_ap{align-items:center;display:flex;flex:3}.tp-colpv_at{flex:1;margin-left:4px}.tp-svpv{border-radius:var(--bld-br);outline:none;overflow:hidden;position:relative}.tp-svpv.tp-v-disabled{opacity:.5}.tp-svpv_c{cursor:crosshair;display:block;height:calc(var(--cnt-usz)*4);width:100%}.tp-svpv_m{border-radius:100%;border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;filter:drop-shadow(0 0 1px rgba(0, 0, 0, 0.3));height:12px;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;width:12px}.tp-svpv:focus .tp-svpv_m{border-color:#fff}.tp-hplv{cursor:pointer;height:var(--cnt-usz);outline:none;position:relative}.tp-hplv.tp-v-disabled{opacity:.5}.tp-hplv_c{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAABCAYAAABubagXAAAAQ0lEQVQoU2P8z8Dwn0GCgQEDi2OK/RBgYHjBgIpfovFh8j8YBIgzFGQxuqEgPhaDOT5gOhPkdCxOZeBg+IDFZZiGAgCaSSMYtcRHLgAAAABJRU5ErkJggg==);background-position:left top;background-repeat:no-repeat;background-size:100% 100%;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;position:absolute;top:50%;width:100%}.tp-hplv_m{border-radius:var(--bld-br);border:rgba(255,255,255,.75) solid 2px;box-shadow:0 0 2px rgba(0,0,0,.1);box-sizing:border-box;height:12px;left:50%;margin-left:-6px;margin-top:-6px;position:absolute;top:50%;width:12px}.tp-hplv:focus .tp-hplv_m{border-color:#fff}.tp-aplv{cursor:pointer;height:var(--cnt-usz);outline:none;position:relative;width:100%}.tp-aplv.tp-v-disabled{opacity:.5}.tp-aplv_b{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:4px 4px;background-position:0 0,2px 2px;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;overflow:hidden;position:absolute;top:50%;width:100%}.tp-aplv_c{inset:0;position:absolute}.tp-aplv_m{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:12px 12px;background-position:0 0,6px 6px;border-radius:var(--bld-br);box-shadow:0 0 2px rgba(0,0,0,.1);height:12px;left:50%;margin-left:-6px;margin-top:-6px;overflow:hidden;position:absolute;top:50%;width:12px}.tp-aplv_p{border-radius:var(--bld-br);border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;inset:0;position:absolute}.tp-aplv:focus .tp-aplv_p{border-color:#fff}.tp-colswv{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:10px 10px;background-position:0 0,5px 5px;border-radius:var(--bld-br);overflow:hidden}.tp-colswv.tp-v-disabled{opacity:.5}.tp-colswv_sw{border-radius:0}.tp-colswv_b{cursor:pointer;display:block;height:var(--cnt-usz);left:0;position:absolute;top:0;width:var(--cnt-usz)}.tp-colswv_b:focus::after{border:rgba(255,255,255,.75) solid 2px;border-radius:var(--bld-br);content:\"\";display:block;inset:0;position:absolute}.tp-coltxtv{display:flex;width:100%}.tp-coltxtv_m{margin-right:4px}.tp-coltxtv_ms{border-radius:var(--bld-br);color:var(--lbl-fg);cursor:pointer;height:var(--cnt-usz);line-height:var(--cnt-usz);padding:0 18px 0 4px}.tp-coltxtv_ms:hover{background-color:var(--in-bg-h)}.tp-coltxtv_ms:focus{background-color:var(--in-bg-f)}.tp-coltxtv_ms:active{background-color:var(--in-bg-a)}.tp-coltxtv_mm{color:var(--lbl-fg)}.tp-coltxtv.tp-v-disabled .tp-coltxtv_mm{opacity:.5}.tp-coltxtv_w{flex:1}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv{position:relative}.tp-fldv_t{padding-left:4px}.tp-fldv_b:disabled .tp-fldv_m{display:none}.tp-fldv_c{padding-left:4px}.tp-fldv_i{bottom:0;color:var(--cnt-bg);left:0;overflow:hidden;position:absolute;top:calc(var(--cnt-usz) + 4px);width:max(var(--bs-br),4px)}.tp-fldv_i::before{background-color:currentColor;bottom:0;content:\"\";left:0;position:absolute;top:0;width:4px}.tp-fldv_b:hover+.tp-fldv_i{color:var(--cnt-bg-h)}.tp-fldv_b:focus+.tp-fldv_i{color:var(--cnt-bg-f)}.tp-fldv_b:active+.tp-fldv_i{color:var(--cnt-bg-a)}.tp-fldv.tp-v-disabled>.tp-fldv_i{opacity:.5}.tp-grlv{position:relative}.tp-grlv_g{display:block;height:calc(var(--cnt-usz)*3)}.tp-grlv_g polyline{fill:none;stroke:var(--mo-fg);stroke-linejoin:round}.tp-grlv_t{margin-top:-4px;transition:left .05s,top .05s;visibility:hidden}.tp-grlv_t.tp-grlv_t-a{visibility:visible}.tp-grlv_t.tp-grlv_t-in{transition:none}.tp-grlv.tp-v-disabled .tp-grlv_g{opacity:.5}.tp-grlv .tp-ttv{background-color:var(--mo-fg)}.tp-grlv .tp-ttv::before{border-top-color:var(--mo-fg)}.tp-lblv{align-items:center;display:flex;line-height:1.3;padding-left:var(--cnt-hp);padding-right:var(--cnt-hp)}.tp-lblv.tp-lblv-nol{display:block}.tp-lblv_l{color:var(--lbl-fg);flex:1;-webkit-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv.tp-v-disabled .tp-lblv_l{opacity:.5}.tp-lblv.tp-lblv-nol .tp-lblv_l{display:none}.tp-lblv_v{align-self:flex-start;flex-grow:0;flex-shrink:0;width:var(--bld-vw)}.tp-lblv.tp-lblv-nol .tp-lblv_v{width:100%}.tp-lstv_s{padding:0 20px 0 var(--bld-hp);width:100%}.tp-lstv_m{color:var(--btn-fg)}.tp-sglv_i{padding-left:var(--bld-hp);padding-right:var(--bld-hp)}.tp-sglv.tp-v-disabled .tp-sglv_i{opacity:.5}.tp-mllv_i{display:block;height:calc(var(--cnt-usz)*3);line-height:var(--cnt-usz);padding-left:var(--bld-hp);padding-right:var(--bld-hp);resize:none;white-space:pre}.tp-mllv.tp-v-disabled .tp-mllv_i{opacity:.5}.tp-p2dv{position:relative}.tp-p2dv_h{display:flex}.tp-p2dv_b{height:var(--cnt-usz);margin-right:4px;position:relative;width:var(--cnt-usz)}.tp-p2dv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dv_b svg path{stroke:currentColor;stroke-width:2}.tp-p2dv_b svg circle{fill:currentColor}.tp-p2dv_t{flex:1}.tp-p2dv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-p2dv.tp-p2dv-expanded .tp-p2dv_p{margin-top:var(--cnt-usp);opacity:1}.tp-p2dv .tp-popv{left:calc(-1*var(--cnt-hp));right:calc(-1*var(--cnt-hp));top:var(--cnt-usz)}.tp-p2dpv{padding-left:calc(var(--cnt-usz) + 4px)}.tp-p2dpv_p{cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpv.tp-v-disabled .tp-p2dpv_p{opacity:.5}.tp-p2dpv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpv_ax{opacity:.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_l{opacity:.5;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_m{border:var(--in-fg) solid 1px;border-radius:50%;box-sizing:border-box;height:4px;margin-left:-2px;margin-top:-2px;position:absolute;width:4px}.tp-p2dpv_p:focus .tp-p2dpv_m{background-color:var(--in-fg);border-width:0}.tp-popv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);display:none;max-width:var(--bld-vw);padding:var(--cnt-vp) var(--cnt-hp);position:absolute;visibility:hidden;z-index:1000}.tp-popv.tp-popv-v{display:block;visibility:visible}.tp-sldv.tp-v-disabled{opacity:.5}.tp-sldv_t{box-sizing:border-box;cursor:pointer;height:var(--cnt-usz);margin:0 6px;outline:none;position:relative}.tp-sldv_t::before{background-color:var(--in-bg);border-radius:1px;content:\"\";display:block;height:2px;inset:0;margin:auto;position:absolute}.tp-sldv_k{height:100%;left:0;position:absolute;top:0}.tp-sldv_k::before{background-color:var(--in-fg);border-radius:1px;content:\"\";display:block;height:2px;inset:0;margin-bottom:auto;margin-top:auto;position:absolute}.tp-sldv_k::after{background-color:var(--btn-bg);border-radius:var(--bld-br);bottom:0;content:\"\";display:block;height:12px;margin-bottom:auto;margin-top:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldv_t:hover .tp-sldv_k::after{background-color:var(--btn-bg-h)}.tp-sldv_t:focus .tp-sldv_k::after{background-color:var(--btn-bg-f)}.tp-sldv_t:active .tp-sldv_k::after{background-color:var(--btn-bg-a)}.tp-sldtxtv{display:flex}.tp-sldtxtv_s{flex:2}.tp-sldtxtv_t{flex:1;margin-left:4px}.tp-tabv{position:relative}.tp-tabv_t{align-items:flex-end;color:var(--cnt-bg);display:flex;overflow:hidden;position:relative}.tp-tabv_t:hover{color:var(--cnt-bg-h)}.tp-tabv_t:has(*:focus){color:var(--cnt-bg-f)}.tp-tabv_t:has(*:active){color:var(--cnt-bg-a)}.tp-tabv_t::before{background-color:currentColor;bottom:0;content:\"\";height:2px;left:0;pointer-events:none;position:absolute;right:0}.tp-tabv.tp-v-disabled .tp-tabv_t::before{opacity:.5}.tp-tabv.tp-tabv-nop .tp-tabv_t{height:calc(var(--cnt-usz) + 4px);position:relative}.tp-tabv.tp-tabv-nop .tp-tabv_t::before{background-color:var(--cnt-bg);bottom:0;content:\"\";height:2px;left:0;position:absolute;right:0}.tp-tabv_i{bottom:0;color:var(--cnt-bg);left:0;overflow:hidden;position:absolute;top:calc(var(--cnt-usz) + 4px);width:max(var(--bs-br),4px)}.tp-tabv_i::before{background-color:currentColor;bottom:0;content:\"\";left:0;position:absolute;top:0;width:4px}.tp-tabv_t:hover+.tp-tabv_i{color:var(--cnt-bg-h)}.tp-tabv_t:has(*:focus)+.tp-tabv_i{color:var(--cnt-bg-f)}.tp-tabv_t:has(*:active)+.tp-tabv_i{color:var(--cnt-bg-a)}.tp-tabv.tp-v-disabled>.tp-tabv_i{opacity:.5}.tp-tbiv{flex:1;min-width:0;position:relative}.tp-tbiv+.tp-tbiv{margin-left:2px}.tp-tbiv+.tp-tbiv.tp-v-disabled::before{opacity:.5}.tp-tbiv_b{display:block;padding-left:calc(var(--cnt-hp) + 4px);padding-right:calc(var(--cnt-hp) + 4px);position:relative;width:100%}.tp-tbiv_b:disabled{opacity:.5}.tp-tbiv_b::before{background-color:var(--cnt-bg);content:\"\";inset:0 0 2px;pointer-events:none;position:absolute}.tp-tbiv_b:hover::before{background-color:var(--cnt-bg-h)}.tp-tbiv_b:focus::before{background-color:var(--cnt-bg-f)}.tp-tbiv_b:active::before{background-color:var(--cnt-bg-a)}.tp-tbiv_t{color:var(--cnt-fg);height:calc(var(--cnt-usz) + 4px);line-height:calc(var(--cnt-usz) + 4px);opacity:.5;overflow:hidden;position:relative;text-overflow:ellipsis}.tp-tbiv.tp-tbiv-sel .tp-tbiv_t{opacity:1}.tp-tbpv_c{padding-bottom:var(--cnt-vp);padding-left:4px;padding-top:var(--cnt-vp)}.tp-txtv{position:relative}.tp-txtv_i{padding-left:var(--bld-hp);padding-right:var(--bld-hp)}.tp-txtv.tp-txtv-fst .tp-txtv_i{border-bottom-right-radius:0;border-top-right-radius:0}.tp-txtv.tp-txtv-mid .tp-txtv_i{border-radius:0}.tp-txtv.tp-txtv-lst .tp-txtv_i{border-bottom-left-radius:0;border-top-left-radius:0}.tp-txtv.tp-txtv-num .tp-txtv_i{text-align:right}.tp-txtv.tp-txtv-drg .tp-txtv_i{opacity:.3}.tp-txtv_k{cursor:pointer;height:100%;left:calc(var(--bld-hp) - 5px);position:absolute;top:0;width:12px}.tp-txtv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:\"\";height:calc(var(--cnt-usz) - 4px);left:50%;margin-bottom:auto;margin-left:-1px;margin-top:auto;opacity:.1;position:absolute;top:0;transition:border-radius .1s,height .1s,transform .1s,width .1s;width:2px}.tp-txtv_k:hover::before,.tp-txtv.tp-txtv-drg .tp-txtv_k::before{opacity:1}.tp-txtv.tp-txtv-drg .tp-txtv_k::before{border-radius:50%;height:4px;transform:translateX(-1px);width:4px}.tp-txtv_g{bottom:0;display:block;height:8px;left:50%;margin:auto;overflow:visible;pointer-events:none;position:absolute;top:0;visibility:hidden;width:100%}.tp-txtv.tp-txtv-drg .tp-txtv_g{visibility:visible}.tp-txtv_gb{fill:none;stroke:var(--in-fg);stroke-dasharray:1}.tp-txtv_gh{fill:none;stroke:var(--in-fg)}.tp-txtv .tp-ttv{margin-left:6px;visibility:hidden}.tp-txtv.tp-txtv-drg .tp-ttv{visibility:visible}.tp-ttv{background-color:var(--in-fg);border-radius:var(--bld-br);color:var(--bs-bg);padding:2px 4px;pointer-events:none;position:absolute;transform:translate(-50%, -100%)}.tp-ttv::before{border-color:var(--in-fg) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);border-style:solid;border-width:2px;box-sizing:border-box;content:\"\";font-size:.9em;height:4px;left:50%;margin-left:-2px;position:absolute;top:100%;width:4px}.tp-rotv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);font-family:var(--bs-ff);font-size:11px;font-weight:500;line-height:1;text-align:left}.tp-rotv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br);border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br);padding-left:calc(4px + var(--cnt-usz) + var(--cnt-hp));text-align:center}.tp-rotv.tp-rotv-expanded .tp-rotv_b{border-bottom-left-radius:0;border-bottom-right-radius:0;transition-delay:0s;transition-duration:0s}.tp-rotv.tp-rotv-not>.tp-rotv_b{display:none}.tp-rotv_b:disabled .tp-rotv_m{display:none}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_i{border-bottom-left-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst.tp-fldv-expanded>.tp-fldv_b{transition-delay:0s;transition-duration:0s}.tp-rotv_c .tp-fldv.tp-v-vlst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst{margin-top:calc(-1*var(--cnt-vp))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst>.tp-fldv_b{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_i{border-bottom-left-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst{margin-top:calc(-1*var(--cnt-vp))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst>.tp-tabv_t{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-v-disabled,.tp-rotv .tp-v-disabled{pointer-events:none}.tp-rotv.tp-v-hidden,.tp-rotv .tp-v-hidden{display:none}.tp-sprv_r{background-color:var(--grv-fg);border-width:0;display:block;height:2px;margin:0;width:100%}.tp-sprv.tp-v-disabled .tp-sprv_r{opacity:.5}',\n plugins: [\n ListBladePlugin,\n SeparatorBladePlugin,\n SliderBladePlugin,\n TabBladePlugin,\n TextBladePlugin,\n ],\n });\n }\n}\n\nconst VERSION = new Semver('4.0.5');\n\nexport { BladeApi, ButtonApi, FolderApi, ListBladeApi, ListInputBindingApi, Pane, Semver, SeparatorBladeApi, SliderBladeApi, SliderInputBindingApi, TabApi, TabPageApi, TextBladeApi, TpChangeEvent, VERSION };\n","import { Pane } from 'tweakpane';\nimport type { SoundPlugin } from './SoundPlugin';\nimport type { SoundChannel } from './SoundPlugin.types';\n\n/**\n * Debug GUI for SoundPlugin using Tweakpane.\n * Provides visual controls for testing sound playback, channels, and stop methods.\n *\n * @example\n * ```typescript\n * import { SoundTestGUI } from './SoundTestGUI';\n *\n * // After soundPlugin is initialized:\n * if (isDevelopment) {\n * new SoundTestGUI(soundPlugin);\n * }\n * ```\n */\nexport class SoundTestGUI {\n // Using 'any' because Tweakpane's Pane extends RootApi which extends FolderApi,\n // but TypeScript doesn't properly infer the inherited methods\n private pane: any;\n private plugin: SoundPlugin;\n private playingFolder: any = null;\n private soundsFolder: any = null;\n private updateInterval: ReturnType<typeof setInterval> | null = null;\n private lastSoundCount: number = 0;\n\n private params = {\n masterVolume: 1.0,\n groupName: '',\n channelToStop: 'music' as SoundChannel,\n };\n\n private channelParams: Record<SoundChannel, { volume: number; muted: boolean }> = {\n music: { volume: 1.0, muted: false },\n sfx: { volume: 1.0, muted: false },\n voice: { volume: 1.0, muted: false },\n ui: { volume: 1.0, muted: false },\n };\n\n constructor(soundPlugin: SoundPlugin) {\n this.plugin = soundPlugin;\n this.pane = new Pane({ title: 'SoundPlugin Debug', expanded: true });\n\n // Set wider width for the pane and fix positioning\n const paneElement = this.pane.element;\n paneElement.style.width = '400px';\n paneElement.style.position = 'fixed';\n paneElement.style.top = '10px';\n paneElement.style.right = '8px';\n\n // Increase font size for better readability\n this.applyCustomStyles();\n\n // Expose to window for console access\n (window as any).soundPlugin = soundPlugin;\n (window as any).soundTestGUI = this;\n\n this.initMasterControls();\n this.initChannelControls();\n this.initSoundsFolder();\n this.initPlayingFolder();\n this.initGroupControls();\n\n // Start auto-refresh for currently playing and sounds list\n this.startAutoRefresh();\n }\n\n private applyCustomStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n /* Base font sizes - larger for readability */\n .tp-dfwv {\n font-size: 15px !important;\n }\n .tp-lblv_l {\n font-size: 14px !important;\n }\n .tp-btnv_b {\n font-size: 14px !important;\n }\n .tp-fldv_t {\n font-size: 15px !important;\n }\n .tp-rotv_t {\n font-size: 18px !important;\n font-weight: bold !important;\n }\n \n /* Input fields */\n .tp-txtv_i {\n font-size: 14px !important;\n }\n\n /* Larger emoji icons */\n .tp-fldv_t .emoji {\n font-size: 20px !important;\n vertical-align: middle;\n margin-right: 2px;\n }\n `;\n document.head.appendChild(style);\n }\n\n private initMasterControls(): void {\n const folder = this.pane.addFolder({ title: 'Master Controls' });\n\n // Master volume\n this.params.masterVolume = this.plugin.masterVolume;\n folder.addBinding(this.params, 'masterVolume', { min: 0, max: 1, step: 0.01 })\n .on('change', (ev: { value: number }) => {\n this.plugin.masterVolume = ev.value;\n });\n\n // Stop All button\n folder.addButton({ title: 'Stop All' }).on('click', () => {\n this.plugin.stopAll();\n });\n\n // Refresh sounds list button\n folder.addButton({ title: 'Refresh Sound List' }).on('click', () => {\n this.refreshSoundsList();\n });\n }\n\n private initChannelControls(): void {\n const folder = this.pane.addFolder({ title: 'Channels' });\n\n const channels: SoundChannel[] = ['music', 'sfx'/*, 'voice', 'ui'*/];\n const channelIcons: Record<SoundChannel, string> = {\n music: '🎵',\n sfx: '💥',\n voice: '🗣️',\n ui: '🔔',\n };\n\n for (const channel of channels) {\n const channelFolder = folder.addFolder({ title: '...' });\n const titleEl = channelFolder.element.querySelector('.tp-fldv_t') as HTMLElement;\n if (titleEl) {\n titleEl.innerHTML = `<span class=\"emoji\">${channelIcons[channel]}</span> ${channel}`;\n }\n\n // Get current values from plugin\n this.channelParams[channel].volume = this.plugin.getChannelVolume(channel);\n this.channelParams[channel].muted = this.plugin.isChannelMuted(channel);\n\n // Volume slider\n channelFolder.addBinding(this.channelParams[channel], 'volume', { min: 0, max: 1, step: 0.01 })\n .on('change', (ev: { value: number }) => {\n this.plugin.setChannelVolume(channel, ev.value);\n });\n\n // Muted checkbox\n channelFolder.addBinding(this.channelParams[channel], 'muted')\n .on('change', (ev: { value: boolean }) => {\n if (ev.value) {\n this.plugin.muteChannel(channel);\n } else {\n this.plugin.unmuteChannel(channel);\n }\n });\n\n // Stop channel button\n channelFolder.addButton({ title: 'Stop Channel' }).on('click', () => {\n this.plugin.stopChannel(channel);\n });\n }\n }\n\n private initSoundsFolder(): void {\n this.soundsFolder = this.pane.addFolder({ title: 'Loaded Sounds', expanded: false });\n this.refreshSoundsList();\n }\n\n private refreshSoundsList(): void {\n if (!this.soundsFolder) return;\n\n // Clear existing children\n const children = [...this.soundsFolder.children];\n children.forEach((child) => child.dispose());\n\n // Get sound channel mappings from plugin (using any to access private)\n const soundChannelMap = (this.plugin as any).soundChannelMap as Map<string, SoundChannel>;\n const spriteRegistry = (this.plugin as any).spriteRegistry as Map<string, { soundAlias: string; spriteKey: string; channel?: SoundChannel }>;\n\n // Collect all sound aliases\n const allAliases = new Set<string>();\n\n soundChannelMap.forEach((_, alias) => allAliases.add(alias));\n spriteRegistry.forEach((_, alias) => allAliases.add(alias));\n\n // Channel icons for visual distinction\n const channelIcons: Record<string, string> = {\n music: '🎵',\n sfx: '💥',\n voice: '🗣️',\n ui: '🔔',\n };\n\n // Sort aliases\n const sortedAliases = Array.from(allAliases).sort();\n\n for (const alias of sortedAliases) {\n const channel = soundChannelMap.get(alias) ?? spriteRegistry.get(alias)?.channel ?? 'unknown';\n const channelIcon = channelIcons[channel as string] ?? '❓';\n const soundFolder = this.soundsFolder.addFolder({ title: '...', expanded: false });\n const titleEl = soundFolder.element.querySelector('.tp-fldv_t') as HTMLElement;\n if (titleEl) {\n titleEl.innerHTML = `<span class=\"emoji\">${channelIcon}</span> ${alias}`;\n }\n\n // Play button\n soundFolder.addButton({ title: 'Play' }).on('click', () => {\n this.plugin.play(alias);\n });\n\n // Loop button\n soundFolder.addButton({ title: 'Loop' }).on('click', () => {\n this.plugin.play(alias, { loop: true });\n });\n\n // Queue In (Crossfade) - fades out and in simultaneously\n soundFolder.addButton({ title: 'QueueIn (Cross)' }).on('click', () => {\n this.plugin.queueIn(alias, 1, { loop: true, type: 'crossfade' });\n });\n\n // Queue In (Sequential) - fades out first, then fades in\n soundFolder.addButton({ title: 'QueueIn (Seq)' }).on('click', () => {\n this.plugin.queueIn(alias, 1, { loop: true, type: 'sequential' });\n });\n\n // Stop button\n soundFolder.addButton({ title: 'Stop' }).on('click', () => {\n this.plugin.stopAlias(alias);\n });\n }\n\n if (sortedAliases.length === 0) {\n const infoParams = { info: 'No sounds loaded yet' };\n this.soundsFolder.addBinding(infoParams, 'info', { readonly: true });\n }\n }\n\n private initPlayingFolder(): void {\n this.playingFolder = this.pane.addFolder({ title: 'Currently Playing', expanded: true });\n this.updatePlayingList();\n }\n\n private expandedAliases: Set<string> = new Set();\n\n private updatePlayingList(): void {\n if (!this.playingFolder) return;\n\n // Save expanded state before clearing\n const children = [...this.playingFolder.children];\n children.forEach((child: any) => {\n // Extract alias from the folder - stored in data attribute or title\n const alias = child._alias;\n if (alias && child.expanded) {\n this.expandedAliases.add(alias);\n } else if (alias && !child.expanded) {\n this.expandedAliases.delete(alias);\n }\n });\n\n // Clear existing children\n children.forEach((child) => child.dispose());\n\n // Get playing instances and mappings from plugin\n const playingInstances = (this.plugin as any).playingInstances as Map<string, any[]>;\n const soundChannelMap = (this.plugin as any).soundChannelMap as Map<string, SoundChannel>;\n const spriteRegistry = (this.plugin as any).spriteRegistry as Map<string, { soundAlias: string; spriteKey: string; channel?: SoundChannel }>;\n const groupInstances = (this.plugin as any).groupInstances as Map<string, any[]>;\n const activeLoopInstances = (this.plugin as any).activeLoopInstances as Map<string, any>;\n const intervalTimers = (this.plugin as any).intervalTimers as Map<string, any>;\n\n // Build reverse lookup: find which groups contain this alias\n const aliasToGroups = new Map<string, string[]>();\n groupInstances.forEach((instances, groupName) => {\n playingInstances.forEach((aliasInstances, alias) => {\n const hasCommon = aliasInstances.some(inst => instances.includes(inst));\n if (hasCommon) {\n if (!aliasToGroups.has(alias)) {\n aliasToGroups.set(alias, []);\n }\n aliasToGroups.get(alias)!.push(groupName);\n }\n });\n });\n\n // Channel icons for visual distinction\n const channelIcons: Record<string, string> = {\n music: '🎵',\n sfx: '💥',\n voice: '🗣️',\n ui: '🔔',\n };\n\n // Collect all aliases that are either playing or waiting for interval\n const allActiveAliases = new Set<string>();\n playingInstances.forEach((instances, alias) => {\n if (instances.length > 0) {\n allActiveAliases.add(alias);\n }\n });\n // Also add aliases that are waiting for interval (not currently playing but will play)\n intervalTimers.forEach((_, alias) => {\n allActiveAliases.add(alias);\n });\n\n let hasPlaying = false;\n allActiveAliases.forEach((alias) => {\n hasPlaying = true;\n const instances = playingInstances.get(alias) ?? [];\n\n // Get channel info\n const channel = soundChannelMap.get(alias) ?? spriteRegistry.get(alias)?.channel ?? '?';\n const channelIcon = channelIcons[channel as string] ?? '❓';\n // Get group info\n const groups = aliasToGroups.get(alias) ?? [];\n const groupStr = groups.length > 0 ? ` 📁${groups.join(',')}` : '';\n\n // Get volume and loop status of first instance\n const firstInstance = instances[0];\n const vol = firstInstance?.volume ?? 0;\n const volStr = instances.length > 0 ? vol.toFixed(2) : '-';\n const isLoop = firstInstance?.loop ?? false;\n const loopIcon = isLoop ? '🔁' : '';\n\n // Check if this is an interval loop (loopInterval)\n const isIntervalLoop = activeLoopInstances.has(alias);\n const isWaiting = intervalTimers.has(alias) && instances.length === 0;\n const intervalIcon = isIntervalLoop ? '⏱️' : '';\n // If waiting for next interval play, show hourglass\n const waitingIcon = isWaiting ? '⏳' : '';\n\n const countStr = isWaiting ? 'waiting' : `${instances.length}`;\n\n // Build icons HTML with emoji class for larger size\n const icons = [channelIcon, loopIcon, intervalIcon, waitingIcon].filter(Boolean);\n const iconsHtml = icons.map(i => `<span class=\"emoji\">${i}</span>`).join('');\n const groupHtml = groupStr ? `<span class=\"emoji\">📁</span>${groups.join(',')}` : '';\n\n // Create folder with placeholder title, restore expanded state\n const wasExpanded = this.expandedAliases.has(alias);\n const itemFolder = this.playingFolder!.addFolder({ title: '...', expanded: wasExpanded });\n (itemFolder as any)._alias = alias; // Store alias for state tracking\n\n const titleEl = itemFolder.element.querySelector('.tp-fldv_t') as HTMLElement;\n if (titleEl) {\n titleEl.innerHTML = `${iconsHtml} ${alias} (${countStr}) v:${volStr}${groupHtml}`;\n }\n\n // Add Trigger button for interval loop sounds\n if (isIntervalLoop) {\n itemFolder.addButton({ title: 'Trigger' }).on('click', () => {\n this.plugin.triggerIntervalLoop(alias);\n });\n }\n\n itemFolder.addButton({ title: 'Stop' }).on('click', () => {\n this.plugin.stopAlias(alias);\n });\n });\n\n if (!hasPlaying) {\n const statusParams = { status: 'Nothing playing' };\n this.playingFolder.addBinding(statusParams, 'status', { readonly: true });\n }\n }\n\n private initGroupControls(): void {\n const folder = this.pane.addFolder({ title: 'Group Controls' });\n\n // Group name input\n folder.addBinding(this.params, 'groupName', { label: 'Group Name' });\n\n // Stop group button\n folder.addButton({ title: 'Stop Group' }).on('click', () => {\n if (this.params.groupName) {\n this.plugin.stopGroup(this.params.groupName);\n }\n });\n }\n\n private startAutoRefresh(): void {\n // Update playing list and sounds list every 500ms\n this.updateInterval = setInterval(() => {\n this.updatePlayingList();\n this.syncChannelParams();\n\n // Also refresh sounds list if it was empty (sounds may have loaded)\n const soundChannelMap = (this.plugin as any).soundChannelMap as Map<string, SoundChannel>;\n const currentCount = soundChannelMap.size;\n if (currentCount > 0 && this.lastSoundCount === 0) {\n this.refreshSoundsList();\n }\n this.lastSoundCount = currentCount;\n }, 500);\n }\n\n private syncChannelParams(): void {\n // Sync channel params with plugin state (for external changes)\n const channels: SoundChannel[] = ['music', 'sfx', 'voice', 'ui'];\n let needsRefresh = false;\n\n for (const channel of channels) {\n const pluginVolume = this.plugin.getChannelVolume(channel);\n const pluginMuted = this.plugin.isChannelMuted(channel);\n\n if (this.channelParams[channel].volume !== pluginVolume) {\n this.channelParams[channel].volume = pluginVolume;\n needsRefresh = true;\n }\n if (this.channelParams[channel].muted !== pluginMuted) {\n this.channelParams[channel].muted = pluginMuted;\n needsRefresh = true;\n }\n }\n\n // Sync master volume\n if (this.params.masterVolume !== this.plugin.masterVolume) {\n this.params.masterVolume = this.plugin.masterVolume;\n needsRefresh = true;\n }\n\n if (needsRefresh) {\n this.pane.refresh();\n }\n }\n\n /**\n * Dispose the GUI and clean up resources.\n */\n public dispose(): void {\n if (this.updateInterval) {\n clearInterval(this.updateInterval);\n this.updateInterval = null;\n }\n this.pane.dispose();\n delete (window as any).soundPlugin;\n delete (window as any).soundTestGUI;\n }\n}\n"]}