{"version":3,"sources":["jsdelivr-header.js","/npm/media-chrome@4.16.1/dist/constants.js","/npm/media-chrome@4.16.1/dist/utils/utils.js","/npm/media-chrome@4.16.1/dist/utils/time.js","/npm/media-chrome@4.16.1/dist/utils/i18n.js","/npm/media-chrome@4.16.1/dist/lang/en.js","/npm/media-chrome@4.16.1/dist/utils/server-safe-globals.js","/npm/media-chrome@4.16.1/dist/utils/resize-observer.js","/npm/media-chrome@4.16.1/dist/utils/element-utils.js","/npm/media-chrome@4.16.1/dist/media-gesture-receiver.js","/npm/media-chrome@4.16.1/dist/media-container.js","/npm/media-chrome@4.16.1/dist/utils/attribute-token-list.js","/npm/media-chrome@4.16.1/dist/utils/captions.js","/npm/media-chrome@4.16.1/dist/utils/fullscreen-api.js","/npm/media-chrome@4.16.1/dist/utils/platform-tests.js","/npm/media-chrome@4.16.1/dist/media-store/util.js","/npm/media-chrome@4.16.1/dist/media-store/state-mediator.js","/npm/media-chrome@4.16.1/dist/media-store/request-map.js","/npm/media-chrome@4.16.1/dist/media-store/media-store.js","/npm/media-chrome@4.16.1/dist/media-controller.js","/npm/media-chrome@4.16.1/dist/media-tooltip.js","/npm/media-chrome@4.16.1/dist/media-chrome-button.js","/npm/media-chrome@4.16.1/dist/media-airplay-button.js","/npm/media-chrome@4.16.1/dist/media-captions-button.js","/npm/media-chrome@4.16.1/dist/media-cast-button.js","/npm/media-chrome@4.16.1/dist/media-chrome-dialog.js","/npm/media-chrome@4.16.1/dist/media-chrome-range.js","/npm/media-chrome@4.16.1/dist/media-control-bar.js","/npm/media-chrome@4.16.1/dist/media-text-display.js","/npm/media-chrome@4.16.1/dist/media-duration-display.js","/npm/media-chrome@4.16.1/dist/labels/labels.js","/npm/media-chrome@4.16.1/dist/media-error-dialog.js","/npm/media-chrome@4.16.1/dist/media-keyboard-shortcuts-dialog.js","/npm/media-chrome@4.16.1/dist/media-fullscreen-button.js","/npm/media-chrome@4.16.1/dist/media-live-button.js","/npm/media-chrome@4.16.1/dist/media-loading-indicator.js","/npm/media-chrome@4.16.1/dist/media-mute-button.js","/npm/media-chrome@4.16.1/dist/media-pip-button.js","/npm/media-chrome@4.16.1/dist/media-playback-rate-button.js","/npm/media-chrome@4.16.1/dist/media-play-button.js","/npm/media-chrome@4.16.1/dist/media-poster-image.js","/npm/media-chrome@4.16.1/dist/media-preview-chapter-display.js","/npm/media-chrome@4.16.1/dist/media-preview-thumbnail.js","/npm/media-chrome@4.16.1/dist/media-preview-time-display.js","/npm/media-chrome@4.16.1/dist/media-seek-backward-button.js","/npm/media-chrome@4.16.1/dist/media-seek-forward-button.js","/npm/media-chrome@4.16.1/dist/media-time-display.js","/npm/media-chrome@4.16.1/dist/utils/range-animation.js","/npm/media-chrome@4.16.1/dist/media-time-range.js","/npm/media-chrome@4.16.1/dist/media-volume-range.js","/npm/media-chrome@4.16.1/dist/media-loop-button.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,EAAgB,CACpB,mBAAoB,mBACpB,oBAAqB,oBACrB,mBAAoB,mBACpB,qBAAsB,qBACtB,mBAAoB,mBACpB,qBAAsB,qBACtB,mBAAoB,mBACpB,sBAAuB,sBACvB,+BAAgC,8BAChC,8BAA+B,6BAC/B,sBAAuB,sBACvB,wBAAyB,uBACzB,uBAAwB,sBACxB,yBAA0B,wBAC1B,wBAAyB,uBACzB,+BAAgC,6BAChC,+BAAgC,6BAChC,6BAA8B,4BAC9B,gCAAiC,+BACjC,+BAAgC,8BAChC,4BAA6B,2BAC7B,wBAAyB,wBACzB,0BAA2B,yBAC3B,2BAA4B,yBAC5B,8BAA+B,6BAC/B,gCAAiC,gCAE7B,EAA+B,CACnC,wBAAyB,wBACzB,iBAAkB,mBAEd,EAAe,CACnB,0BAA2B,0BAC3B,0BAA2B,yBAC3B,uBAAwB,sBACxB,8BAA+B,6BAC/B,eAAgB,gBAChB,uBAAwB,uBACxB,oBAAqB,oBACrB,mBAAoB,mBACpB,eAAgB,gBAChB,YAAa,aACb,YAAa,aACb,iBAAkB,iBAClB,oBAAqB,oBACrB,6BAA8B,6BAC9B,iBAAkB,iBAClB,aAAc,cACd,oBAAqB,oBACrB,iBAAkB,iBAClB,oBAAqB,oBACrB,aAAc,aACd,cAAe,eACf,YAAa,aACb,WAAY,YACZ,aAAc,cACd,sBAAuB,sBACvB,oBAAqB,oBACrB,sBAAuB,sBACvB,qBAAsB,qBACtB,oBAAqB,oBACrB,mBAAoB,mBACpB,qBAAsB,qBACtB,yBAA0B,yBAC1B,4BAA6B,4BAC7B,eAAgB,gBAChB,kBAAmB,kBACnB,qBAAsB,qBACtB,wBAAyB,wBACzB,yBAA0B,wBAC1B,mBAAoB,kBACpB,aAAc,cACd,mBAAoB,mBACpB,yBAA0B,yBAC1B,WAAY,YACZ,YAAa,cAET,EAAsB,OAAO,QACjC,GAEI,EAAoB,EAAoB,QAC5C,CAAC,GAAU,EAAK,MACd,EAAQ,GAAO,EAAS,cACjB,IAET,IAOI,EAAyB,EAAoB,QACjD,CAAC,GAAU,EAAK,MACd,EAAQ,GAAO,EAAS,cACjB,IAET,CATA,qBAAsB,qBACtB,mBAAoB,mBACpB,qBAAsB,wBASlB,EAAiC,OAAO,QAC5C,GACA,QACA,CAAC,GAAS,EAAK,MACb,MAAM,EAAW,EAAkB,GAInC,OAHI,IACF,EAAO,GAAa,GAEf,CAAM,GAEf,CAAE,mBAAoB,iBAElB,EAAiC,OAAO,QAC5C,GACA,QACA,CAAC,GAAS,EAAK,MACb,MAAM,EAAU,EAAuB,GAIvC,OAHI,IACF,EAAO,GAAY,GAEd,CAAM,GAEf,CAAE,aAAc,uBAEZ,EAAiB,CACrB,UAAW,YACX,SAAU,WACV,aAAc,eACd,SAAU,WACV,SAAU,YAEN,EAAiB,CACrB,SAAU,WACV,OAAQ,SACR,QAAS,WASL,EAAe,CACnB,MAAO,QACP,IAAK,MACL,MAAO,SAEH,EAAqB,CACzB,YAAa,cACb,YAAa,eAET,EAAc,CAClB,KAAM,OACN,UAAW,YACX,QAAS,WAQL,EAA0B,CAC9B,OAAQ,SACR,WAAY,aACZ,mBAAoB,sB,gOA9BF,CAClB,aAAc,EACd,cAAe,EACf,kBAAmB,EACnB,iBAAkB,EAClB,iBAAkB,G,8FAgBC,CACnB,KAAM,OACN,OAAQ,SACR,IAAK,MACL,IAAK,O,4BC3JP,SAAS,EAAmB,GAC1B,GAAI,EAAW,CACb,MAAM,GAAE,EAAE,MAAE,EAAK,OAAE,GAAW,EAC9B,MAAO,CAAC,EAAI,EAAO,GAAQ,QAAQ,GAAW,MAAL,IAAW,KAAK,IAC7D,CACA,CAaA,SAAS,EAAoB,GAC3B,GAAI,EAAY,CACd,MAAM,GAAE,EAAE,KAAE,EAAI,SAAE,EAAQ,MAAE,GAAU,EACtC,MAAO,CAAC,EAAI,EAAM,EAAU,GAAO,QAAQ,GAAW,MAAL,IAAW,KAAK,IACrE,CACA,CAyBA,SAAS,EAAc,GACrB,MAAoB,iBAAN,IAAmB,OAAO,MAAM,IAAM,OAAO,SAAS,EACtE,CAMA,MAAM,EAAS,GAAO,IAAI,SAAS,GAAY,WAAW,EAAS,KC7D7D,EAAa,CACjB,CACE,SAAU,OACV,OAAQ,SAEV,CACE,SAAU,SACV,OAAQ,WAEV,CACE,SAAU,SACV,OAAQ,YAON,EAAsB,IAC1B,IAAK,EAAc,GACjB,MAAO,GACT,MAAM,EAAkB,KAAK,IAAI,GAC3B,EAAW,IAAoB,EAC/B,EAAkB,IAAI,KAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAiB,GAUjE,MAAO,GATW,CAChB,EAAgB,WAChB,EAAgB,aAChB,EAAgB,cAEW,KAC3B,CAAC,EAAe,IAAU,GAhBL,EAAC,EAAe,IAEhC,GAAG,KAD0B,IAAlB,EAAsB,EAAW,GAAW,SAAW,EAAW,GAAW,SAelD,CAAiB,EAAe,KAC3E,QAAQ,GAAM,IAAG,KAAK,QACD,EAAW,aAAe,IACV,EAEzC,SAAS,EAAW,EAAS,GAC3B,IAAI,GAAW,EACX,EAAU,IACZ,GAAW,EACX,EAAU,EAAI,GAEhB,EAAU,EAAU,EAAI,EAAI,EAC5B,IAAI,EAAI,KAAK,MAAM,EAAU,IACzB,EAAI,KAAK,MAAM,EAAU,GAAK,IAC9B,EAAI,KAAK,MAAM,EAAU,MAC7B,MAAM,EAAK,KAAK,MAAM,EAAQ,GAAK,IAC7B,EAAK,KAAK,MAAM,EAAQ,MAO9B,OANI,MAAM,IAAY,IAAY,OAChC,EAAI,EAAI,EAAI,KAEd,EAAI,EAAI,GAAK,EAAK,EAAI,EAAI,IAAM,GAChC,IAAM,GAAK,GAAM,KAAO,EAAI,GAAK,IAAM,EAAI,GAAK,IAChD,EAAI,EAAI,GAAK,IAAM,EAAI,GACf,EAAW,IAAM,IAAM,EAAI,EAAI,CACzC,CACA,MAAM,EAAkB,OAAO,OAAO,CACpC,OAAQ,EACR,KAAA,CAAM,GACJ,MAAM,EAAc,IAAU,EAC9B,GAAI,GAAe,KAAK,OACtB,MAAM,IAAI,aACR,kEAAkE,qDAA+D,KAAK,YAG1I,OAAO,CACX,EACE,GAAA,CAAI,GACF,MAAM,EAAc,IAAU,EAC9B,GAAI,GAAe,KAAK,OACtB,MAAM,IAAI,aACR,gEAAgE,qDAA+D,KAAK,YAGxI,OAAO,CACX,I,4GAEA,SAA6B,EAAa,GACxC,OAAO,MAAM,KAAK,GAAY,KAC5B,CAAC,EAAG,IAAM,CACR,OAAO,EAAW,MAAM,GAAG,QAAQ,IACnC,OAAO,EAAW,IAAI,GAAG,QAAQ,KACjC,KAAK,OACP,KAAK,IACT,ICpFA,IAAI,EAEJ,MAAM,EAAe,CACnB,GCHS,CACT,gBAAiB,gBACjB,eAAgB,eAChB,MAAO,QACP,SAAU,WACV,kBAAmB,kBACnB,mBAAoB,mBACpB,gBAAiB,gBACjB,eAAgB,eAChB,wBAAyB,wBACzB,uBAAwB,uBACxB,KAAM,OACN,OAAQ,SACR,KAAM,OACN,gCAAiC,gCACjC,+BAAgC,+BAChC,KAAM,OACN,MAAO,QACP,gBAAiB,gBACjB,+BAAgC,+BAChC,QAAS,UACT,gBAAiB,gBACjB,eAAgB,eAChB,SAAU,WACV,KAAM,OACN,eAAgB,eAChB,eAAgB,eAChB,OAAQ,SACR,KAAM,OACN,kBAAmB,kBACnB,wBAAyB,wBACzB,gBAAiB,gBACjB,gBAAiB,gBACjB,SAAU,WACV,eAAgB,eAChB,QAAS,UACT,KAAM,OACN,MAAO,QACP,KAAM,OACN,OAAQ,SACR,yBAA0B,yBAC1B,KAAM,OACN,IAAK,MACL,gBAAiB,gBACjB,eAAgB,eAChB,gBAAiB,gBACjB,eAAgB,eAChB,wBAAyB,wBACzB,uBAAwB,uBACxB,gCAAiC,gCACjC,+BAAgC,+BAChC,eAAgB,eAChB,eAAgB,eAChB,iCAAkC,iCAClC,oCAAqC,oCACrC,gBAAiB,gBACjB,eAAgB,eAChB,uBAAwB,uBACxB,mBAAoB,mBACpB,qDAAsD,qDACtD,wHAAyH,wHACzH,6GAA8G,6GAC9G,8DAA+D,gEDzDjE,IAAI,GAA8C,OAA9B,EAAK,WAAW,gBAAqB,EAAS,EAAG,WAAa,KAClF,MAWM,EAAI,CAAC,EAAK,EAAO,KALI,CAAC,IAC1B,IAAI,EAAK,EAAI,EACb,MAAO,GAAQ,EAAY,MAAM,KACjC,OAA6C,OAApC,EAAM,EAAa,SAAwB,EAAS,EAAI,MAAuC,OAA5B,EAAK,EAAa,SAAiB,EAAS,EAAG,MAAoC,OAAzB,EAAK,EAAa,SAAc,EAAS,EAAG,KAAS,CAAG,EAElK,CAAmB,GAAK,QACpD,cACA,CAAC,EAAG,IAAM,KAAK,EAAO,OAAO,EAAK,IAAM,IAAI,OEnB9C,MAAM,EACJ,gBAAA,GACF,CACE,mBAAA,GACF,CACE,aAAA,GACE,OAAO,CACX,EAEA,MAAM,UAAa,GAEnB,MAAM,UAAgB,EACpB,WAAA,GACE,SAAS,WACT,KAAK,KAAO,IAChB,EAUA,MAAM,EAAe,CACnB,cAAe,WACb,OAAO,IAAI,EAAe,WAC9B,EACE,gBAAiB,WACf,OAAO,IAAI,EAAe,WAC9B,EACE,gBAAA,GACF,EACE,mBAAA,GACF,EACE,cAAc,IACL,GAGL,EAAiB,CACrB,eAxBF,MACE,OAAA,GACF,CACE,SAAA,GACF,CACE,UAAA,GACF,GAmBE,SAAU,EACV,OACA,UACA,YAAa,cAA0B,EACrC,WAAA,GACE,SAAS,WACT,KAAK,UAAY,EACvB,CACI,WAAI,GACF,OAAO,IAAI,EAAe,gBAChC,GAEE,iBAAkB,cAA+B,IAEjD,eAAgB,CACd,IAAK,WACT,EACI,OAAQ,WACZ,EACI,YAAa,WACjB,GAEE,aAAc,CACZ,QAAQ,GACC,KAET,OAAA,CAAQ,EAAM,GAClB,EACI,UAAA,CAAW,GACf,GAEE,YAAa,WACf,EACE,iBAAkB,WACpB,EACE,UAAW,CACT,UAAW,GACX,aAAI,GACF,MAAO,EACb,GAEE,WAAW,IACF,CACL,SAAS,EACT,UAGJ,UAAW,MACT,eAAA,CAAgB,EAAQ,GACtB,MAAO,CACL,KAAM,CACJ,YAAa,GAGvB,IAGM,EAAW,WAAY,aAA6B,MAAd,gBAAqB,EAAS,WAAW,UAAY,YAC/E,oBAAX,aAA2D,IAA1B,OAAO,eACzC,EAAY,OAAO,KAAK,GAAgB,OAAO,GAAQ,KAAO,aAC9D,EAAa,IAAa,EAAY,EAAiB,WACvD,EAAW,IAAa,EAAY,EAAe,WAAW,SCtG9D,EAA+B,IAAI,QACnC,EAAgB,IACpB,IAAI,EAAY,EAAa,IAAI,GAGjC,OAFK,GACH,EAAa,IAAI,EAAS,EAA4B,IAAI,KACrD,CAAS,EAEZ,EAAW,IAAI,EAAW,gBAC7B,IACC,IAAK,MAAM,KAAS,EAClB,IAAK,MAAM,KAAY,EAAa,EAAM,QACxC,EAAS,EAEjB,IAGA,SAAS,EAAc,EAAS,GAC9B,EAAa,GAAS,IAAI,GAC1B,EAAS,QAAQ,EACnB,CACA,SAAS,EAAgB,EAAS,GAChC,MAAM,EAAY,EAAa,GAC/B,EAAU,OAAO,GACZ,EAAU,MACb,EAAS,UAAU,EAEvB,CC1BA,SAAS,EAAqB,GAC5B,MAAM,EAAM,GACZ,IAAK,MAAM,KAAQ,EACjB,EAAI,EAAK,MAAQ,EAAK,MAExB,OAAO,CACT,CACA,SAAS,EAAmB,GAC1B,IAAI,EACJ,OAAmD,OAA3C,EAEV,SAAqC,GACnC,IAAI,EACJ,MAAM,iBAAE,GAAqB,EACvB,EAAoB,EAAK,aAAa,GAC5C,GAAI,EACF,OAA+C,OAAvC,EA+CZ,SAAiC,GAC/B,IAAI,EACJ,MAAM,EAA8D,OAAlD,EAAa,MAAR,OAAe,EAAS,EAAK,kBAAuB,EAAS,EAAG,KAAK,GAC5F,GAAI,aAAoB,YAAc,aAAoB,SACxD,OAAO,EAET,OAAO,IACT,CAtDiB,CAAwB,SAAiB,EAAS,EAAG,eAChE,EAGN,CAXe,CAA4B,IAAiB,EAAK,EAAoB,EAAM,mBAC3F,CAWA,MAAM,EAAiB,CAAC,EAAK,EAAO,EAAW,YAC7C,MAAM,EAAO,EAAI,cAAc,GAC1B,IAEL,EAAK,YAAc,EAAK,EASpB,EAAa,CAAC,EAAI,IAPF,EAAC,EAAI,KACzB,MAAM,EAAe,cAAc,MAC7B,EAAO,EAAG,WAAW,cAAc,GACzC,OAAK,EAEE,EAAK,SADH,EACW,EAEW,CAAc,EAAI,GAAM,GACnD,EAAuB,CAAC,EAAU,OACjC,IAAa,QAEF,MAAZ,OAAmB,EAAS,EAAS,SAAS,KAE3C,EACL,EACA,EAAU,cAAc,OAGtB,EAAsB,CAAC,EAAW,KACtC,IAAK,EACH,OAAO,KACT,MAAM,EAAU,EAAU,QAAQ,GAClC,OAAI,GAEG,EACL,EAAU,cAAc,KACxB,EACD,EAEH,SAAS,EAAiB,EAAO,UAC/B,IAAI,EACJ,MAAM,EAAmB,MAAR,OAAe,EAAS,EAAK,cAC9C,OAAK,EAEkD,OAA/C,EAAK,EAAiB,EAAS,aAAuB,EAAK,EAD1D,IAEX,CASA,SAAS,EAAiB,GAAS,MAAE,EAAQ,EAAC,aAAE,GAAe,EAAI,mBAAE,GAAqB,GAAS,IACjG,GAAI,EAAQ,gBACV,OAAO,EAAQ,gBAAgB,CAC7B,eACA,uBAGJ,IAAI,EAAK,EACT,KAAO,GAAM,EAAQ,GAAG,CACtB,MAAM,EAAQ,iBAAiB,GAC/B,GAAI,GAAkC,MAAlB,EAAM,SAAmB,GAA2C,WAArB,EAAM,YAA6C,SAAlB,EAAM,QACxG,OAAO,EAET,EAAK,EAAG,cACR,GACJ,CACE,OAAO,CACT,CAaA,SAAS,EAAmB,EAAa,GACvC,MAAM,EAKR,SAAoB,EAAa,GAC/B,IAAI,EAAI,EACR,IAAI,EACJ,IAAK,KAAsE,OAA5D,EAAK,EAAY,iBAAiB,uBAAiC,EAAK,GAAI,CACzF,IAAI,EACJ,IACE,EAAiC,OAArB,EAAK,EAAM,YAAiB,EAAS,EAAG,QAC1D,CAAM,MACA,QACN,CACI,IAAK,MAAM,KAAoB,MAAZ,EAAmB,EAAW,GAC/C,GAAI,EAAU,EAAK,cACjB,OAAO,CAEf,CACA,CApBkB,CAAW,GAAc,GAAO,IAAO,IACvD,OAAI,GAEG,EAAc,EAAa,EACpC,CAiBA,SAAS,EAAc,EAAa,GAClC,IAAI,EAAI,EACR,MAAM,EAAsE,OAA5D,EAAK,EAAY,iBAAiB,uBAAiC,EAAK,GAClF,EAAkB,MAAV,OAAiB,EAAS,EAAO,EAAO,OAAS,GAC/D,OAAe,MAAT,OAAgB,EAAS,EAAM,QAe5B,MAAT,GAAyB,EAAM,MAAM,WAAW,GAAG,MAAkB,EAAM,MAAM,SAAS,QAGzD,OAA9B,EAAK,EAAM,MAAM,eAAoB,EAAS,EAAG,EAAM,MAAM,SAAS,OAAS,KAjBhF,QAAQ,KACN,qDACA,GAEK,CAEL,MAAO,CACL,YAAa,OAEb,eAAgB,IAAM,GACtB,iBAAkB,IAAM,KAShC,CACA,SAAS,EAAe,EAAI,EAAU,EAAe,OAAO,KAC1D,MAAM,EAAU,EAAG,aAAa,GAChC,OAAkB,MAAX,GAAmB,EAAU,CACtC,CACA,SAAS,EAAe,EAAI,EAAU,GACpC,MAAM,GAAoB,EACb,MAAT,GAAiB,OAAO,MAAM,GAC5B,EAAG,aAAa,IAClB,EAAG,gBAAgB,GAInB,EAAe,EAAI,OAAU,KAAY,GAE7C,EAAG,aAAa,EAAU,GAAG,IAC/B,CACA,SAAS,GAAe,EAAI,GAC1B,OAAO,EAAG,aAAa,EACzB,CACA,SAAS,GAAe,EAAI,EAAU,GACvB,MAAT,EAMA,GAAe,EAAI,IAAa,GAEpC,EAAG,gBAAgB,EAAU,GAPvB,EAAG,aAAa,IAClB,EAAG,gBAAgB,EAOzB,CACA,SAAS,GAAc,EAAI,EAAU,EAAe,MAClD,IAAI,EACJ,OAA2C,OAAnC,EAAK,EAAG,aAAa,IAAqB,EAAK,CACzD,CACA,SAAS,GAAc,EAAI,EAAU,GACnC,GAAa,MAAT,EAIF,YAHI,EAAG,aAAa,IAClB,EAAG,gBAAgB,IAIvB,MAAM,EAAY,GAAG,IACjB,GAAc,EAAI,OAAU,KAAY,GAE5C,EAAG,aAAa,EAAU,EAC5B,CClMA,IAkBI,GAlBA,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAO5C,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GA6BT,MAAM,WAA6B,EAAW,YAC5C,WAAA,GAGE,GAFA,QAvCe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAqClE,CAAa,KAAM,QAAkB,IAChC,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CACA,CAGE,6BAAW,GACT,MAAO,CACL,EAA6B,iBAC7B,EAAkB,aAExB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,IAAa,EAA6B,mBACxC,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAGjI,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EAAI,EAChB,KAAK,UAAY,EACjB,KAAK,aAAa,cAAe,QACjC,GAAa,KAAM,GAyEvB,SAA8B,GAC5B,IAAI,EACJ,MAAM,EAAoB,EAAU,aAClC,EAA6B,kBAE/B,GAAI,EACF,OAAyC,OAAjC,EAAK,EAAU,oBAAyB,EAAS,EAAG,eAAe,GAE7E,OAAO,EAAoB,EAAW,mBACxC,CAlFyC,CAAqB,OACtD,KAAK,aAAa,EAA6B,oBAC4C,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAE5E,OAA9C,EAAK,GAAa,KAAM,MAAsC,EAAG,iBAAiB,cAAe,MACnD,OAA9C,EAAK,GAAa,KAAM,MAAsC,EAAG,iBAAiB,QAAS,KAChG,CACE,oBAAA,GACE,IAAI,EAAI,EAAI,EAAI,EACZ,KAAK,aAAa,EAA6B,oBAC8C,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,OAE9E,OAA9C,EAAK,GAAa,KAAM,MAAsC,EAAG,oBAAoB,cAAe,MACtD,OAA9C,EAAK,GAAa,KAAM,MAAsC,EAAG,oBAAoB,QAAS,MAC/F,GAAa,KAAM,GAAkB,KACzC,CACE,WAAA,CAAY,GACV,IAAI,EACJ,MAAM,EAAgD,OAA9B,EAAK,EAAM,qBAA0B,EAAS,EAAG,GAEzE,GADkB,CAAC,QAAS,oBACb,SAA2B,MAAlB,OAAyB,EAAS,EAAe,WAEzE,GAAmB,gBAAf,EAAM,KACR,KAAK,aAAe,EAAM,iBACrB,GAAmB,UAAf,EAAM,KAAkB,CACjC,MAAM,QAAE,EAAO,QAAE,GAAY,GACvB,KAAE,EAAI,IAAE,EAAG,MAAE,EAAK,OAAE,GAAW,KAAK,wBACpC,EAAI,EAAU,EACd,EAAI,EAAU,EACpB,GAAI,EAAI,GAAK,EAAI,GAAK,EAAI,GAAS,EAAI,GAC7B,IAAV,GAA0B,IAAX,EACb,OAEF,MAAM,EAAc,KAAK,cAAgB,QAEzC,GADA,KAAK,kBAAe,EAChB,IAAgB,EAAa,MAE/B,YADA,KAAK,UAAU,GAEV,GAAI,IAAgB,EAAa,OAAS,IAAgB,EAAa,IAE5E,YADA,KAAK,iBAAiB,EAG9B,CACA,CAIE,eAAI,GACF,OAAO,GAAe,KAAM,EAAkB,aAClD,CACE,eAAI,CAAY,GACd,GAAe,KAAM,EAAkB,aAAc,EACzD,CAOE,SAAA,CAAU,GACZ,CAGE,gBAAA,CAAiB,GACf,MAAM,EAAY,KAAK,YAAc,EAAc,mBAAqB,EAAc,oBACtF,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CAAE,UAAU,EAAM,SAAS,IAEvE,EAEA,GAAmB,IAAI,QACvB,GAAqB,kBAAoB,CAAE,KAAM,QACjD,GAAqB,gBAxHrB,SAAyB,GACvB,MAEE,+LASJ,EAuHK,EAAW,eAAe,IAAI,2BACjC,EAAW,eAAe,OACxB,yBACA,IAGD,ICnJC,GAAuB,GAAe,GAAkB,GAAW,GAAmB,GAAiB,GAAmB,GAAkB,GAAe,GAAoB,GAAsB,GAAkB,GAAoB,GAAc,GAAgB,GAAY,GAAc,GAAmB,GDmJtT,GAAiC,GCzKjC,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAEL,GAAkB,CAAC,EAAK,EAAQ,KAClC,GAAc,EAAK,EAAQ,yBACpB,GAgBT,MAAM,GAAa,CACjB,MAAO,QACP,SAAU,WACV,YAAa,cACb,kBAAmB,mBACnB,iBAAkB,kBAClB,YAAa,aACb,cAAe,eACf,uBAAwB,wBAyL1B,MAAM,GAA2B,OAAO,OAAO,GAK/C,SAAS,GAAe,EAAW,GACjC,IAAI,EACJ,IAAK,EAAU,YACb,OACF,MACM,EAgCR,SAA6B,GAC3B,MAAM,EAAQ,EAAY,MAAM,OAChC,OAAO,OAAO,YAAY,EAAM,KAAK,GAAS,EAAK,MAAM,OAC3D,CAnCiB,CAD8D,OAAxD,EAAK,EAAU,aAAa,GAAW,cAAwB,EAR3D,+BAUnB,EAmCR,SAAwB,EAAa,GACnC,OAAO,OAAO,KAAK,GAAa,QAAQ,GAC/B,GAAS,SAAS,EAAY,KAEzC,CAvC4B,CAAe,EAAQ,GACjD,IAAI,GAAU,EAcd,GAbA,OAAO,KAAK,GAAQ,SAAS,IACvB,EAAkB,SAAS,GACxB,EAAU,aAAa,aAAa,OACvC,EAAU,aAAa,aAAa,IAAQ,IAC5C,GAAU,GAIV,EAAU,aAAa,aAAa,OACtC,EAAU,gBAAgB,aAAa,KACvC,GAAU,EAChB,IAEM,EAAS,CACX,MAAM,EAAM,IAAI,YAAY,EAAuB,mBAAoB,CACrE,OAAQ,IAEV,EAAU,cAAc,EAC5B,CACO,EAAU,sBACb,EAAU,qBAAsB,EAChC,EAAU,cACR,IAAI,YAAY,EAAuB,qBAAsB,CAC3D,SAAS,EACT,UAAU,KAIlB,CAUA,MAAM,WAAuB,EAAW,YACtC,WAAA,GAwBE,GAvBA,QACA,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,GAAuB,GAC1C,GAAa,KAAM,GAAe,MAClC,GAAa,KAAM,GAAkB,MACrC,GAAa,KAAM,QAAW,GAC9B,KAAK,qBAAsB,EAC3B,GAAa,KAAM,GAAmB,IAAI,iBAAiB,GAAgB,KAAM,GAAiB,IAAmB,KAAK,QAC1H,GAAa,KAAM,IAAkB,GACrC,GAAa,KAAM,IAAgB,IAC7B,GAAa,KAAM,MAEvB,YAAW,MApEjB,SAAwB,GACtB,GAAe,EAAM,OAAQ,EAAM,YAAY,MACjD,CAmEQ,CAAe,GACf,GAAa,KAAM,IAAkB,EAAM,GAC1C,GACH,GAAa,KAAM,IAAkB,GAAK,KAEvC,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YAClC,EAAO,KAAK,YAAY,gBAAgB,GAC9C,KAAK,WAAW,cAAgB,KAAK,WAAW,cAAc,GAAQ,KAAK,WAAW,UAAY,CACxG,CACI,MAAM,EAAc,KAAK,cACvB,6BAEE,GACF,EAAY,iBAAiB,cAAc,KACzB,EAAY,iBAAiB,CAAE,SAAS,IAC3C,OAMb,KAAK,mBAAmB,KAAK,OALvB,GAAa,KAAM,KACrB,KAAK,mBAAmB,GAAa,KAAM,IAIZ,GAG3C,CACE,6BAAW,GACT,MAAO,CAAC,GAAW,SAAU,GAAW,mBAAmB,OAAO,IAA0B,QACzF,IAAU,CACT,EAAkB,qBAClB,EAAkB,uBAClB,EAAkB,oBAClB,EAAkB,YAClB,EAAkB,aAClB,EAAkB,YAClB,EAAkB,qBAClB,SAAS,IAEjB,CAEE,wBAAA,CAAyB,EAAU,EAAW,GACxC,EAAS,eAAiB,GAAW,WACvC,KAAK,SAAW,EAEtB,CAEE,SAAI,GACF,IAAI,EAAQ,KAAK,cAAc,yBAG/B,MAFiD,SAAnC,MAAT,OAAgB,EAAS,EAAM,YAClC,EAAQ,EAAM,iBAAiB,CAAE,SAAS,IAAQ,IAC7C,CACX,CACE,wBAAM,CAAmB,GAClB,IAEL,GAAa,KAAM,GAAe,GAC9B,EAAM,UAAU,SAAS,YACrB,EAAW,eAAe,YAAY,EAAM,WAEpD,KAAK,iBAAiB,GAC1B,CACE,iBAAA,GACE,IAAI,EACJ,GAAa,KAAM,IAAmB,QAAQ,KAAM,CAAE,WAAW,EAAM,SAAS,IAChF,EAAc,KAAM,GAAa,KAAM,KACvC,MAAM,EAAuD,MAAvC,KAAK,aAAa,GAAW,OAC7C,EAAwB,EAAhB,EAAkB,eAAoB,gBACpD,KAAK,aAAa,OAAQ,UAC1B,KAAK,aAAa,aAAc,GAChC,KAAK,mBAAmB,KAAK,OAC7B,KAAK,aAAa,GAAW,cAAe,IAC5C,GAAe,KAAM,KAAK,wBAAwB,OAClD,KAAK,iBAAiB,cAAe,MACrC,KAAK,iBAAiB,cAAe,MACrC,KAAK,iBAAiB,YAAa,MACnC,KAAK,iBAAiB,aAAc,MACpC,KAAK,iBAAiB,QAAS,MACH,OAA3B,EAAK,EAAW,SAA2B,EAAG,iBAAiB,UAAW,KAC/E,CACE,oBAAA,GACE,IAAI,EACJ,GAAa,KAAM,IAAmB,aACtC,EAAgB,KAAM,GAAa,KAAM,KACrC,KAAK,OACP,KAAK,mBAAmB,KAAK,OAEH,OAA3B,EAAK,EAAW,SAA2B,EAAG,oBAAoB,UAAW,KAClF,CAIE,gBAAA,CAAiB,GACnB,CACE,kBAAA,CAAmB,GACjB,GAAa,KAAM,GAAe,KACtC,CACE,WAAA,CAAY,GACV,OAAQ,EAAM,MACZ,IAAK,cACH,GAAa,KAAM,GAAuB,EAAM,WAChD,MACF,IAAK,cACH,GAAgB,KAAM,GAAoB,IAAsB,KAAK,KAAM,GAC3E,MACF,IAAK,YACH,GAAgB,KAAM,GAAkB,IAAoB,KAAK,KAAM,GACvE,MACF,IAAK,aACH,GAAgB,KAAM,GAAc,IAAgB,KAAK,MACzD,MACF,IAAK,UACH,KAAK,gBAAgB,GAAW,kBAChC,MACF,IAAK,QACH,GAAgB,KAAM,GAAmB,IAAqB,KAAK,MACnE,KAAK,aAAa,GAAW,iBAAkB,IAGvD,CACE,YAAI,CAAS,GACX,MAAM,EAAgB,OAAO,GAC7B,GAAa,KAAM,GAAW,MAAM,GAAiB,EAAI,EAC7D,CACE,YAAI,GACF,YAA0C,IAAlC,GAAa,KAAM,IAAwB,EAAI,GAAa,KAAM,KAAY,UAC1F,CACE,eAAI,GACF,OAAO,GAAc,KAAM,GAAW,YAC1C,CACE,eAAI,CAAY,GACd,GAAc,KAAM,GAAW,YAAa,EAChD,CACE,SAAI,GACF,OAAO,GAAe,KAAM,GAAW,MAC3C,CACE,SAAI,CAAM,GACR,GAAe,KAAM,GAAW,MAAO,EAC3C,CACE,oBAAI,GACF,OAAO,GAAe,KAAM,GAAW,kBAC3C,CACE,oBAAI,CAAiB,GACnB,GAAe,KAAM,GAAW,kBAAmB,EACvD,CACE,mBAAI,GACF,OAAO,GAAe,KAAM,GAAW,iBAC3C,CACE,mBAAI,CAAgB,GAClB,GAAe,KAAM,GAAW,iBAAkB,EACtD,CACE,cAAI,GACF,OAAO,GAAe,KAAM,GAAW,YAC3C,CACE,cAAI,CAAW,GACb,GAAe,KAAM,GAAW,YAAa,EACjD,CACE,wBAAI,GACF,OAAO,GAAe,KAAM,GAAW,uBAC3C,CACE,wBAAI,CAAqB,GACvB,GAAe,KAAM,GAAW,uBAAwB,EAC5D,CACE,mBAAI,GACF,OAAO,GAAe,KAAM,GAAW,cAC3C,CACE,mBAAI,CAAgB,GAClB,GAAe,KAAM,GAAW,cAAe,EACnD,EAEA,GAAwB,IAAI,QAC5B,GAAgB,IAAI,QACpB,GAAmB,IAAI,QACvB,GAAY,IAAI,QAChB,GAAoB,IAAI,QACxB,GAAkB,IAAI,QACtB,GAAoB,SAAS,GAC3B,MAAM,EAAQ,KAAK,MACnB,IAAK,MAAM,KAAY,EAAe,CACpC,GAAsB,cAAlB,EAAS,KACX,SACF,MAAM,EAAe,EAAS,aAC9B,IAAK,MAAM,KAAQ,EAAc,CAC/B,GAAiB,SAAb,EAAK,MAAmB,EAAS,QAAU,KAC7C,SACF,IAAI,EAAkB,EAAS,iBAAmB,EAAS,gBAAgB,uBAC3E,GAAK,GAAoB,EAElB,CACL,IAAI,EAAoC,UAAzB,EAAgB,KAC/B,KAA+D,QAAvD,EAAkB,EAAgB,kBACZ,SAAxB,EAAgB,OAClB,GAAW,GAEX,GACF,KAAK,mBAAmB,EAClC,MATQ,KAAK,mBAAmB,EAUhC,CACI,GAAI,EACF,IAAK,MAAM,KAAQ,EAAS,WACtB,IAAS,GACX,KAAK,mBAAmB,EAGlC,CACA,EACA,GAAmB,IAAI,QACvB,GAAgB,IAAI,QACpB,GAAqB,IAAI,QACzB,GAAuB,SAAS,GAC9B,GAA0B,UAAtB,EAAM,YAAyB,CACjC,MAAM,EAAmB,IACzB,GAAI,EAAM,UAAY,GAAa,KAAM,IAAyB,EAChE,MACN,CACE,GAAgB,KAAM,GAAY,IAAc,KAAK,MACrD,aAAa,GAAa,KAAM,KAChC,MAAM,EAAuB,KAAK,aAChC,GAAW,yBAET,CAAC,KAAM,KAAK,OAAO,SAAS,EAAM,SAAW,IAC/C,GAAgB,KAAM,GAAmB,IAAqB,KAAK,KAEvE,EACA,GAAmB,IAAI,QACvB,GAAqB,SAAS,GAC5B,GAA0B,UAAtB,EAAM,YAAyB,CACjC,MAAM,GAAmB,KAAK,aAAa,GAAW,eAClD,CAAC,KAAM,KAAK,OAAO,SAAS,EAAM,SAAW,EAC/C,GAAgB,KAAM,GAAc,IAAgB,KAAK,MAEzD,GAAgB,KAAM,GAAmB,IAAqB,KAAK,KAEzE,MAAa,EAAM,eAAe,MAC7B,GAAO,CAAC,oBAAqB,2BAA2B,SACjD,MAAN,OAAa,EAAS,EAAG,cAG3B,GAAgB,KAAM,GAAmB,IAAqB,KAAK,KAEvE,EACA,GAAe,IAAI,QACnB,GAAiB,WACf,GAAI,GAAa,KAAM,IAAa,EAClC,OACF,GAAI,KAAK,aAAa,GAAW,eAC/B,OACF,KAAK,aAAa,GAAW,cAAe,IAC5C,MAAM,EAAM,IAAI,EAAW,YACzB,EAAuB,qBACvB,CAAE,UAAU,EAAM,SAAS,EAAM,QAAQ,IAE3C,KAAK,cAAc,EACrB,EACA,GAAa,IAAI,QACjB,GAAe,WACb,IAAK,KAAK,aAAa,GAAW,eAChC,OACF,KAAK,gBAAgB,GAAW,eAChC,MAAM,EAAM,IAAI,EAAW,YACzB,EAAuB,qBACvB,CAAE,UAAU,EAAM,SAAS,EAAM,QAAQ,IAE3C,KAAK,cAAc,EACrB,EACA,GAAoB,IAAI,QACxB,GAAsB,WACpB,GAAgB,KAAM,GAAY,IAAc,KAAK,MACrD,aAAa,GAAa,KAAM,KAChC,MAAM,EAAW,SAAS,KAAK,UAC3B,EAAW,GAEf,GAAa,KAAM,GAAkB,YAAW,KAC9C,GAAgB,KAAM,GAAc,IAAgB,KAAK,KAAK,GAClD,IAAX,GACL,EACA,GAAe,kBAAoB,CAAE,KAAM,QAC3C,GAAe,gBAnhBf,SAAyB,GACvB,6CAUa,EAAkB,qVAab,GAAW,2aAqBhB,GAAW,kHAQX,GAAW,mIASN,GAAW,WAAW,GAAW,iFAC7B,GAAW,WAAW,GAAW,sSAarC,GAAW,iJAKX,GAAW,wFACX,GAAW,gbAsBX,GAAW,iQAe8B,GAAW,mLAOzD,GAAW,uBAAuB,EAAkB,uBAAuB,EAAkB,8BAA8B,EAAkB,2BAA2B,GAAW,iEAAiE,GAAW,2JAK/P,GAAW,uBAAuB,GAAW,sBAAsB,EAAkB,uBAAuB,EAAkB,2BAA2B,GAAW,sFAIpK,GAAW,kBAAkB,GAAW,gCAAgC,GAAW,sBAAsB,EAAkB,uBAAuB,EAAkB,2BAA2B,GAAW,8LAYrM,GAAW,WAAW,EAAkB,miBAmBxB,GAAqB,kBAAkB,qBAC/D,GAAqB,gBAAgB,qcAejD,EA8VK,EAAW,eAAe,IAAI,oBACjC,EAAW,eAAe,OAAO,kBAAmB,IAEnD,ICnjBC,GAAK,GAAO,GAAa,GAAW,GAAS,GDmjB7C,GAA0B,GCrkB1B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAGT,MAAM,GACJ,WAAA,CAAY,EAAI,GAAM,aAAE,GAAiB,CAAE,kBAAc,IACvD,GAAa,KAAM,IACnB,GAAa,KAAM,QAAK,GACxB,GAAa,KAAM,QAAO,GAC1B,GAAa,KAAM,QAAa,GAChC,GAAa,KAAM,GAA2B,IAAI,KAClD,GAAa,KAAM,GAAK,GACxB,GAAa,KAAM,GAAO,GAC1B,GAAa,KAAM,GAAa,IAAI,IAAI,GAC5C,CACE,CAAC,OAAO,YACN,OAAO,GAAa,KAAM,GAAS,IAAY,QACnD,CACE,UAAI,GACF,OAAO,GAAa,KAAM,GAAS,IAAY,IACnD,CACE,SAAI,GACF,IAAI,EACJ,OAAwE,OAAhE,EAAK,IAAI,GAAa,KAAM,GAAS,KAAa,KAAK,MAAgB,EAAK,EACxF,CACE,SAAI,CAAM,GACR,IAAI,EACA,IAAQ,KAAK,QAEjB,GAAa,KAAM,GAA2B,IAAI,KAClD,KAAK,OAAuD,OAA/C,EAAY,MAAP,OAAc,EAAS,EAAI,MAAM,MAAgB,EAAK,IAC5E,CACE,QAAA,GACE,OAAO,KAAK,KAChB,CACE,IAAA,CAAK,GACH,MAAO,IAAI,GAAa,KAAM,GAAS,KAAa,EACxD,CACE,MAAA,GACE,OAAO,GAAa,KAAM,GAAS,IAAY,QACnD,CACE,OAAA,CAAQ,EAAU,GAChB,GAAa,KAAM,GAAS,IAAY,QAAQ,EAAU,EAC9D,CACE,GAAA,IAAO,GACL,IAAI,EAAI,EACR,EAAO,SAAS,GAAM,GAAa,KAAM,IAAW,IAAI,MACrC,KAAf,KAAK,QAAoD,OAAjC,EAAK,GAAa,KAAM,UAAgB,EAAS,EAAG,aAAa,GAAG,GAAa,KAAM,WAGjF,OAAjC,EAAK,GAAa,KAAM,MAAyB,EAAG,aAAa,GAAG,GAAa,KAAM,MAAU,GAAG,KAAK,SAC9G,CACE,MAAA,IAAU,GACR,IAAI,EACJ,EAAO,SAAS,GAAM,GAAa,KAAM,IAAW,OAAO,KACzB,OAAjC,EAAK,GAAa,KAAM,MAAyB,EAAG,aAAa,GAAG,GAAa,KAAM,MAAU,GAAG,KAAK,QAC9G,CACE,QAAA,CAAS,GACP,OAAO,GAAa,KAAM,GAAS,IAAY,IAAI,EACvD,CACE,MAAA,CAAO,EAAO,GACZ,YAAqB,IAAV,EACL,GACF,KAAK,IAAI,IACF,IAEP,KAAK,OAAO,IACL,GAGP,KAAK,SAAS,IAChB,KAAK,OAAO,IACL,IAET,KAAK,IAAI,IACF,EACX,CACE,OAAA,CAAQ,EAAU,GAGhB,OAFA,KAAK,OAAO,GACZ,KAAK,IAAI,GACF,IAAa,CACxB,EAEA,GAAM,IAAI,QACV,GAAQ,IAAI,QACZ,GAAc,IAAI,QAClB,GAAY,IAAI,QAChB,GAAU,IAAI,QACd,GAAa,WACX,OAAO,GAAa,KAAM,IAAW,KAAO,GAAa,KAAM,IAAa,GAAa,KAAM,GACjG,ECxGA,MACM,GAAoB,CAAC,EAAe,MACxC,MAAO,EAAM,EAAU,GAAgB,EAAa,MAAM,KACpD,EAAQ,EAAe,mBAAmB,QAAgB,EAChE,MAAO,CACL,KAAe,OAAT,EAAgB,EAAe,SAAW,EAAe,UAC/D,WACA,QACD,EAEG,GAAqB,CAAC,EAAgB,GAAI,EAAmB,KAVxC,EAAC,EAAgB,KAAO,EAAc,MAAM,OAW9D,CAAmB,GAAe,KAAK,IAC5C,MAAM,EAAe,GAAkB,GACvC,MAAO,IACF,KACA,EACJ,IAGC,GAAe,GACd,EAED,MAAM,QAAQ,GACT,EAAc,KAAK,GACK,iBAAlB,EACF,GAAkB,GAEpB,IAGkB,iBAAlB,EACF,GAAmB,GAErB,CAAC,GAZC,GAcL,GAAqB,EAAG,OAAM,QAAO,YAAa,CAAE,KAAM,eACzD,EAEE,GAAY,aAAT,EAAsB,KAAO,QAAQ,KAAY,mBACzD,KAFO,EAKL,GAAyB,CAAC,EAAa,KACpC,MAAM,UAAU,IAAI,KAAK,EAAY,IAAoB,KAAK,KAGjE,GAAsB,IAC1B,MAAM,EAAQ,OAAO,QAAQ,GAAW,KAAI,EAAE,EAAK,KAF5B,EAAC,EAAK,IAAW,GAAQ,EAAI,KAAS,EAGpD,CAAiB,EAAK,KAE/B,OAAQ,GAAc,EAAM,OAAO,GAAS,EAAK,IAAW,EAExD,GAAqB,CAAC,EAAM,EAAS,GAAI,EAAiB,MAC9D,MAAM,EAAQ,GAAY,GAAgB,IAAI,IAI9C,MAAM,KAAK,GAAQ,QAHM,GAChB,EAAM,MAAM,GAAS,EAAK,OAEQ,SAAS,IAClD,EAAU,KAAO,CAAI,GACrB,EAEE,GAAoB,CAAC,EAAO,EAAkB,KAAM,KACxD,KAAe,MAAT,OAAgB,EAAS,EAAM,YACnC,MAAO,GACT,MAAM,EAAwC,mBAApB,EAAiC,EAAkB,GAAmB,GAChG,OAAO,MAAM,KAAK,EAAM,YAAY,OAAO,EAAW,EC3ClD,GAAoB,mBAAoB,EAAW,iBAAmB,yBAA0B,EAAW,uBAAyB,2BAA4B,EAAW,8BAA2B,EAYtM,GAAuB,sBAAuB,EAAW,oBAAsB,4BAA6B,EAAW,+BAA4B,EASnJ,GAAgB,IACpB,IAAI,EACJ,MAAM,MAAE,EAAK,gBAAE,EAAe,kBAAE,EAAoB,GAAU,EAC9D,IAAK,IAAU,EACb,OAAO,EACT,MAAM,EAbqB,CAAC,IAC5B,MAAM,gBAAE,EAAe,MAAE,GAAU,EAC7B,EAA0C,MAAnB,OAA0B,EAAS,EAAgB,IAChF,OAAK,GAAwB,+BAAgC,GAAS,2BAA4B,GAAS,EAAM,4BAA8B,EAAM,yBAA2B,EAAwB,WAC/L,EAEF,CAAoB,EAOM,CAAqB,GACtD,IAAK,EACH,OAAO,EACT,GAAI,IAA6B,GAAqB,IAA6B,EACjF,OAAO,EAET,GAAI,EAAyB,UAAU,SAAS,KAAM,CACpD,IAAI,EAAc,EAAyB,WAC3C,KAAM,MAAwB,GAC5B,OAAO,EACL,EAGA,GAGJ,KAAsB,MAAf,OAAsB,EAAS,EAAY,KAAuB,CACvE,GAAI,EAAY,MAA0B,EACxC,OAAO,EACT,EAA0D,OAA3C,EAAK,EAAY,UAAiC,EAAS,EAAG,UACnF,CACA,CACE,OAAO,CAAK,EAER,GAAuB,sBAAuB,EAAW,oBAAsB,4BAA6B,EAAW,+BAA4B,ECtEzJ,IAAI,GACJ,MAAM,GAAiB,KACrB,IAAI,EAAI,EACR,OAAI,KAEJ,GAA4E,OAA7D,EAAwB,OAAlB,EAAK,QAAoB,EAAS,EAAG,oBAAyB,EAAS,EAAG,KAAK,EAAI,SACjG,GAAW,EAed,GAAyB,CAAC,EAAS,IAChC,IAAI,SAAS,IAClB,EAAQ,iBAAiB,gBAAgB,IAAM,GAAQ,IAAO,CAAE,UAAS,IAGvE,GAAgB,MAAO,EAAS,KACpC,IAAK,IAAI,EAAI,EAAG,EAAI,GAAI,IAAK,CAC3B,GAAI,EAAQ,SAAW,EACrB,OAAO,QACH,EAAM,GAChB,CACE,OAAO,EAAQ,SAAW,CAAU,EAEhC,GAAW,0BAA0B,KACzC,EAAW,UAAU,WAEjB,GAAgB,CAAC,EAAU,SAC3B,EAAW,WAAW,8BAA8B,UAAW,KAEY,mBAArD,MAAX,OAAkB,EAAS,EAAQ,yBAE9C,GAAuB,CAAC,EAAU,OD6BZ,CAAC,IAC3B,MAAM,gBAAE,EAAe,MAAE,GAAU,EACnC,SAA6B,MAAnB,OAA0B,EAAS,EAAgB,MAA0B,GAAS,6BAA8B,CAAK,EC9B5H,CAAoB,CAAE,gBAAiB,EAAU,MAAO,IAE3D,GAAsB,KACtB,GAAe,KACf,KAAqB,EAAW,sCAChC,KAAkB,EAAW,OCjD7B,GAAqB,GAClB,GAAkB,EAAY,OAAQ,GACpC,CAAC,EAAe,UAAW,EAAe,UAAU,SACzD,EAAU,QAEX,MAAK,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAO,GAAK,IAEtC,GAA4B,GACzB,GAAkB,EAAY,OAAQ,GACpC,EAAU,OAAS,EAAe,SAAW,CAAC,EAAe,UAAW,EAAe,UAAU,SACtG,EAAU,QAIV,GAAuB,CAAC,EAAa,KACzC,MAAM,EAAS,GAAkB,GAC3B,EAAuB,GAAyB,GAChD,IAAqB,EAAqB,OAChD,GAAK,EAAO,OAEZ,IAAc,IAAV,GAAmB,IAA8B,IAAV,EACzC,GAAmB,EAAe,SAAU,EAAQ,QAC/C,IAAc,IAAV,IAAmB,IAA8B,IAAV,EAAiB,CACjE,IAAI,EAAW,EAAO,GACtB,MAAM,QAAE,GAAY,EACpB,KAAiB,MAAX,OAAkB,EAAS,EAAQ,qBAAsB,CAC7D,MAAM,EAAgB,WAAW,aAAa,QAC5C,oCAEI,EAAgB,EAAgB,CAAC,KAAkB,WAAW,UAAU,WAAa,WAAW,UAAU,UAC1G,EAAyB,EAAO,QAAQ,GACrC,EAAc,MAClB,GAAS,EAAU,SAAS,cAAc,WAAW,EAAK,MAAM,KAAK,QAEvE,MAAK,CAAC,EAAY,IACN,EAAc,WACxB,GAAS,EAAW,SAAS,cAAc,WAAW,EAAK,MAAM,KAAK,MAE5D,EAAc,WACxB,GAAS,EAAW,SAAS,cAAc,WAAW,EAAK,MAAM,KAAK,QAIvE,EAAuB,KACzB,EAAW,EAAuB,GAE1C,CACI,MAAM,SAAE,EAAQ,MAAE,EAAK,KAAE,GAAS,EAClC,GAAmB,EAAe,SAAU,EAAQ,GACpD,GAAmB,EAAe,QAAS,EAAQ,CACjD,CAAE,WAAU,QAAO,SAEzB,GAEM,GAAc,CAAC,EAAG,IAClB,IAAM,GAED,MAAL,GAAkB,MAAL,WAEN,UAAa,MAEP,iBAAN,IAAkB,OAAO,MAAM,KAAM,OAAO,MAAM,KAE5C,iBAAN,IAEP,MAAM,QAAQ,GACT,GAAY,EAAG,GACjB,OAAO,QAAQ,GAAG,OAEvB,EAAE,EAAK,KAAW,KAAO,GAAK,GAAY,EAAO,EAAE,SAGjD,GAAc,CAAC,EAAI,KACvB,MAAM,EAAW,MAAM,QAAQ,GACzB,EAAW,MAAM,QAAQ,GAC/B,OAAI,IAAa,KAEX,IAAY,GAEd,EAAG,SAAW,EAAG,QAEd,EAAG,OAAM,CAAC,EAAG,IAAM,GAAY,EAAG,EAAG,MAAI,ECvD5C,GAAmB,OAAO,OAAO,GACvC,IAAI,GACJ,MAAM,GFnBwB,OAAO,EAAU,QAC7C,IAAK,EACH,OAAO,EACT,MAAM,EAAa,EAAQ,OAC3B,EAAQ,OAAS,EAAa,EAAI,GAClC,MAAM,EAAkB,IAAI,gBACtB,QAAwB,QAAQ,KAAK,CACzC,GAAuB,EAAS,EAAgB,QAChD,GAAc,EAAS,KAGzB,OADA,EAAgB,QACT,CAAe,EEQK,GAAwB,MAAM,IACzD,GAAkB,EACX,MAmBH,GAAY,IAAI,EAAW,UAC3B,GAAmB,GAAS,GAAO,GAAU,gBAAgB,EAAM,aAAa,KAAK,aAAsB,EAC3G,GAAgB,CACpB,WAAY,CACV,GAAA,CAAI,EAAa,GACf,MAAM,MAAE,GAAU,EAClB,GAA8C,aAAhC,MAAT,OAAgB,EAAS,EAAM,MAEpC,OAAgB,MAAT,OAAgB,EAAS,EAAM,KAC5C,EACI,YAAa,CAAC,UAAW,QAAS,YAEpC,eAAgB,CACd,GAAA,CAAI,EAAa,GACf,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,GAA8C,aAAhC,MAAT,OAAgB,EAAS,EAAM,MAEpC,OAAsD,OAA9C,EAAc,MAAT,OAAgB,EAAS,EAAM,YAAiB,EAAS,EAAG,IAC/E,EACI,YAAa,CAAC,UAAW,QAAS,YAEpC,kBAAmB,CACjB,GAAA,CAAI,EAAa,GACf,IAAI,EAAI,EACR,MAAM,MAAE,GAAU,EAClB,GAA8C,aAAhC,MAAT,OAAgB,EAAS,EAAM,MAEpC,OAA2F,OAAnF,EAAoD,OAA9C,EAAc,MAAT,OAAgB,EAAS,EAAM,YAAiB,EAAS,EAAG,SAAmB,EAAK,EAC7G,EACI,YAAa,CAAC,UAAW,QAAS,YAEpC,WAAY,CACV,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAA2D,OAAnD,EAAc,MAAT,OAAgB,EAAS,EAAM,YAAsB,EAAK,CAC7E,EACI,YAAa,CAAC,WAEhB,YAAa,CACX,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAA4D,OAApD,EAAc,MAAT,OAAgB,EAAS,EAAM,aAAuB,EAAK,CAC9E,EACI,YAAa,CAAC,WAEhB,YAAa,CACX,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAAuD,OAA/C,EAAc,MAAT,OAAgB,EAAS,EAAM,SAAkB,CACpE,EACI,GAAA,CAAI,EAAO,GACT,IAAI,EACJ,MAAM,MAAE,GAAU,EACb,IAED,EACF,EAAM,QAEiB,OAAtB,EAAK,EAAM,SAA2B,EAAG,OAAM,SAGxD,EACI,YAAa,CAAC,OAAQ,UAAW,QAAS,YAE5C,eAAgB,CAId,GAAA,CAAI,EAAa,GACf,MAAM,MAAE,GAAU,EAClB,QAAK,IAEA,EAEiB,YAAf,EAAM,MADH,EAAM,OAEtB,EACI,YAAa,CAAC,UAAW,YAE3B,WAAY,CACV,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAAsD,OAA9C,EAAc,MAAT,OAAgB,EAAS,EAAM,QAAiB,CACnE,EACI,YAAa,CAAC,SAAU,QAAS,YAEnC,kBAAmB,CACjB,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAA6D,OAArD,EAAc,MAAT,OAAgB,EAAS,EAAM,cAAwB,EAAK,CAC/E,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,GAAU,EACb,GAEA,OAAO,UAAU,KAEtB,EAAM,cAAgB,EAC5B,EACI,YAAa,CAAC,aAAc,cAE9B,WAAY,CACV,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAAsD,OAA9C,EAAc,MAAT,OAAgB,EAAS,EAAM,QAAiB,CACnE,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,EAAO,SAAS,YAAE,GAAgB,IAAO,EACjD,GAAK,EAAL,CAEA,EAAM,MAAQ,EACd,IACE,MAAM,EAA0F,OAA/D,EAAW,aAAa,QAAQ,2BAC3D,EAAoB,EAAM,aAAa,SAC7C,GAAI,EAGF,YAFI,GACF,EAAW,aAAa,WAAW,4BAGvC,GAAI,IAAsB,EACxB,OAEF,EAAW,aAAa,QACtB,0BACA,EAAQ,OAAS,QAE3B,CAAQ,MAAO,GACP,QAAQ,MAAM,2BAA4B,EAClD,CAnBQ,CAoBR,EACI,YAAa,CAAC,gBACd,0BAA2B,CACzB,CAAC,EAAS,KACR,MACE,SAAS,YAAE,IACT,GACE,MAAE,GAAU,EAClB,GAAK,IAAS,EAAM,QAAS,EAE7B,IACE,MAAM,EAA2E,SAA/D,EAAW,aAAa,QAAQ,2BAClD,GAAc,WAAW,IAAI,EAAW,GACxC,EAAQ,EAClB,CAAU,MAAO,GACP,QAAQ,MAAM,2BAA4B,EACpD,KAIE,UAAW,CACT,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,OAAgB,MAAT,OAAgB,EAAS,EAAM,IAC5C,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,GAAU,EACb,IAEL,EAAM,KAAO,EACnB,EACI,YAAa,CAAC,qBAEhB,YAAa,CACX,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAAuD,OAA/C,EAAc,MAAT,OAAgB,EAAS,EAAM,QAAkB,EAAK,CACzE,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,EAAO,SAAS,aAAE,GAAiB,IAAO,EAClD,GAAK,EAAL,CAEA,IACe,MAAT,EACF,EAAW,aAAa,WAAW,4BACzB,EAAM,aAAa,UAAa,GAC1C,EAAW,aAAa,QACtB,2BACA,EAAM,WAGlB,CAAQ,MAAO,GACP,QAAQ,MAAM,4BAA6B,EACnD,CACW,OAAO,UAAU,KAEtB,EAAM,QAAU,EAfd,CAgBR,EACI,YAAa,CAAC,gBACd,0BAA2B,CACzB,CAAC,EAAS,KACR,MACE,SAAS,aAAE,IACT,EACJ,IAAI,EAEJ,IACE,MAAM,MAAE,GAAU,EAClB,IAAK,EACH,OACF,MAAM,EAAa,EAAW,aAAa,QACzC,4BAEF,GAAkB,MAAd,EACF,OACF,GAAc,YAAY,KAAK,EAAY,GAC3C,GAAS,EACnB,CAAU,MAAO,GACP,QAAQ,MAAM,4BAA6B,EACrD,KAOE,iBAAkB,CAChB,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,YAAsD,KAAjC,MAAT,OAAgB,EAAS,EAAM,QAClC,OACL,EAAM,OAA0B,IAAjB,EAAM,OAChB,MACL,EAAM,OAAS,GACV,MACL,EAAM,OAAS,IACV,SACF,MACb,EACI,YAAa,CAAC,iBAEhB,iBAAkB,CAChB,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAA4D,OAApD,EAAc,MAAT,OAAgB,EAAS,EAAM,aAAuB,EAAK,CAC9E,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,GAAU,EACb,GAAU,EAAc,KAE7B,EAAM,YAAc,EAC1B,EACI,YAAa,CAAC,aAAc,mBAE9B,cAAe,CACb,GAAA,CAAI,GACF,MAAM,MAAE,EAAO,SAAS,gBAAE,GAAoB,IAAO,EACrD,OAAI,GAAqB,GAAU,EAAM,WAAY,OAAO,MAAM,EAAM,WAAc,OAAO,SAAS,EAAM,UAGrG,OAAO,SAAkB,MAAT,OAAgB,EAAS,EAAM,UAAY,EAAM,SAAW,OAAO,IAFjF,CAGf,EACI,YAAa,CAAC,iBAAkB,iBAAkB,YAEpD,aAAc,CACZ,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,OAAiB,MAAT,OAAgB,EAAS,EAAM,YAAc,CAC3D,EACI,YAAa,CAAC,UAAW,UAAW,YAEtC,cAAe,CACb,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,KAAwD,OAAjD,EAAc,MAAT,OAAgB,EAAS,EAAM,eAAoB,EAAS,EAAG,QACzE,OACF,MAAM,EAAQ,EAAM,SAAS,MAAM,GAC7B,EAAM,EAAM,SAAS,IAAI,EAAM,SAAS,OAAS,GACvD,OAAK,GAAU,EAER,CAAC,OAAO,EAAM,QAAQ,IAAK,OAAO,EAAI,QAAQ,UAFrD,CAGN,EACI,YAAa,CAAC,iBAAkB,UAAW,WAAY,mBAEzD,cAAe,CACb,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EACZ,EAA+D,OAAjD,EAAc,MAAT,OAAgB,EAAS,EAAM,UAAoB,EAAK,GACjF,OAAO,MAAM,KAAK,GAAY,KAAI,CAAC,EAAG,IAAM,CAC1C,OAAO,EAAW,MAAM,GAAG,QAAQ,IACnC,OAAO,EAAW,IAAI,GAAG,QAAQ,MAEzC,EACI,YAAa,CAAC,WAAY,YAE5B,gBAAiB,CACf,GAAA,CAAI,GACF,MAAM,MAAE,EAAO,SAAS,kBAAE,GAAsB,IAAO,EACjD,EAAwB,CAC5B,EAAY,KACZ,EAAY,WACZ,SAAS,GAAqB,OAAoB,EACpD,IAAK,EACH,OAAO,EACT,MAAM,WAAE,GAAe,EACvB,GAAI,GAAiB,SAAS,GAC5B,OAAI,IAAe,EAAY,QACtB,EAEF,EAET,MAAM,EAAW,EAAM,SACvB,OAAI,IAAa,IACR,EAAY,KACV,OAAO,SAAS,GAClB,EAAY,UAEd,CACb,EACI,YAAa,CACX,UACA,iBACA,iBACA,qBAGJ,sBAAuB,CACrB,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,IAAK,EACH,OAAO,OAAO,IAChB,MAAM,iBAAE,GAAqB,EACvB,EAAa,GAAc,gBAAgB,IAAI,GACrD,OAAyB,MAApB,IAA4B,OAAO,MAAM,IAAsB,IAAe,EAAY,KAGxF,EAFE,CAGf,EACI,YAAa,CACX,UACA,iBACA,iBACA,mBACA,2BAGJ,gBAAiB,CACf,GAAA,CAAI,GACF,MAAM,MACJ,EAEA,SAAS,eAAE,EAAiB,IAAO,IACjC,EACJ,IAAK,EACH,OAAO,EACT,GAAmC,iBAAxB,EAAM,cACf,OAAI,OAAO,MAAM,EAAM,gBAEhB,EAAM,aAAe,EAAM,cAGpC,KADa,GAAc,gBAAgB,IAAI,KAAiB,EAAY,MAE1E,OAAO,EACT,MAAM,EAAW,EAAM,SACvB,IAAK,EACH,OAAO,EACT,IAAK,EAAS,OACZ,OAAO,EACT,MAAM,EAAgB,EAAS,IAAI,EAAS,OAAS,GAAK,EAC1D,OAAO,EAAM,aAAe,CAClC,EACI,YAAa,CAAC,UAAW,aAAc,WAAY,UAAW,YAGhE,mBAAoB,CAClB,IAAI,GACK,GAAkB,GAAa,KACpC,EAAG,OAAM,QAAO,eAAU,CAAQ,OAAM,QAAO,eAGnD,YAAa,CAAC,aACd,iBAAkB,CAAC,WAAY,gBAEjC,sBAAuB,CACrB,IAAI,GACK,GAAyB,GAAa,KAC3C,EAAG,OAAM,QAAO,eAAU,CAAQ,OAAM,QAAO,eAGnD,YAAa,CAAC,aACd,iBAAkB,CAAC,WAAY,cAAe,UAC9C,0BAA2B,CACzB,CAAC,EAAU,KACT,IAAI,EAAI,EACR,MAAM,MAAE,EAAK,QAAE,GAAY,EAC3B,IAAK,EACH,OACF,MAAM,EAAkC,IACtC,IAAI,EACJ,IAAK,EAAQ,iBACX,OACmB,IAAU,CAAC,EAAe,SAAU,EAAe,WAAW,SAEjC,OAA/C,EAAe,MAAT,OAAgB,EAAS,EAAM,YAAiB,EAAS,EAAI,OAItE,GAAqB,GAAa,EAAK,EAczC,OAZA,EAAM,iBACJ,YACA,GAEyB,OAA1B,EAAK,EAAM,aAA+B,EAAG,iBAC5C,WACA,GAEyB,OAA1B,EAAK,EAAM,aAA+B,EAAG,iBAC5C,cACA,GAEK,KACL,IAAI,EAAK,EACT,EAAM,oBACJ,YACA,GAE0B,OAA3B,EAAM,EAAM,aAA+B,EAAI,oBAC9C,WACA,GAE0B,OAA3B,EAAM,EAAM,aAA+B,EAAI,oBAC9C,cACA,EACD,CACF,IAIP,kBAAmB,CACjB,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,IAAK,EACH,MAAO,GACT,MAAO,GAAiB,GAAkB,EAAO,CAC/C,KAAM,EAAe,WAEvB,OAAO,MAAM,KAAmE,OAA7D,EAAsB,MAAjB,OAAwB,EAAS,EAAc,MAAgB,EAAK,IAAI,KAC9F,EAAG,OAAM,YAAW,cAAS,CAC3B,KAAM,GAAgB,GACtB,YACA,aAGV,EACI,YAAa,CAAC,YAAa,kBAC3B,iBAAkB,CAAC,WAAY,cAAe,UAC9C,0BAA2B,CACzB,CAAC,EAAS,KACR,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,IAAK,EACH,OACF,MAAM,EAAgB,EAAM,cAC1B,wCAEI,EAAiD,OAA1B,EAAK,EAAM,iBAAsB,EAAS,EAAG,cACxE,2DAIF,OAFiB,MAAjB,GAAiC,EAAc,iBAAiB,OAAQ,GACjD,MAAvB,GAAuC,EAAoB,iBAAiB,OAAQ,GAC7E,KACY,MAAjB,GAAiC,EAAc,oBAAoB,OAAQ,GACpD,MAAvB,GAAuC,EAAoB,oBAAoB,OAAQ,EAAQ,CAChG,IAKP,WAAY,CACV,GAAA,CAAI,GACF,IAAI,EAAI,EACR,MAAM,MAAE,EAAK,gBAAE,GAAoB,EACnC,IAAK,IAAU,EACb,OAAO,EACT,IAAK,EAAgB,wBACnB,OAAO,EACT,GAAI,EAAgB,0BAA4B,EAC9C,OAAO,EACT,GAAI,EAAgB,mCAAmC,iBACrD,SAAgC,OAAzB,EAAK,EAAM,gBAAqB,EAAS,EAAG,SAAS,OAErD,EACL,EACA,EAAgB,yBAGpB,GAAI,EAAgB,wBAAwB,UAAU,SAAS,KAAM,CACnE,IAAI,EAAc,EAAgB,wBAAwB,WAC1D,KAAsB,MAAf,OAAsB,EAAS,EAAY,yBAAyB,CACzE,GAAI,EAAY,0BAA4B,EAC1C,OAAO,EACT,EAA4D,OAA7C,EAAK,EAAY,8BAAmC,EAAS,EAAG,UACzF,CACA,CACM,OAAO,CACb,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,GAAU,EAClB,GAAK,EAEL,GAAI,EAAO,CACT,IAAK,EAAS,wBAEZ,YADA,QAAQ,KAAK,kDAGf,IAAK,EAAM,wBAIT,YAHA,QAAQ,KACN,sEAIJ,MAAM,EAAe,KACnB,QAAQ,KACN,6FACD,EAEH,EAAM,0BAA0B,OAAO,IACrC,GAAiB,KAAb,EAAI,KA2BN,MAAM,EA1BN,GAAK,EAAM,IAAX,CAMA,GAAyB,IAArB,EAAM,YAAsC,SAAlB,EAAM,QAiBlC,MAAM,EAjBgD,CACtD,MAAM,EAAU,KACd,EAAM,oBAAoB,iBAAkB,GAC5C,EAAM,QAAU,MAAM,EAElB,EAAS,KACb,EAAM,0BAA0B,MAAM,GACtC,GAAS,EAEX,EAAM,iBAAiB,iBAAkB,GACzC,EAAM,QAAU,WAChB,YAAW,KACgB,IAArB,EAAM,YACR,IACF,GAAS,GACR,IACjB,CAjBA,MAJc,QAAQ,KACN,sFAyBhB,GAEA,MAAiB,EAAS,yBAClB,EAAS,sBAEjB,EACI,YAAa,CAAC,wBAAyB,0BAEzC,mBAAoB,CAClB,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,MAAO,IAA6D,OAAxD,EAAc,MAAT,OAAgB,EAAS,EAAM,iBAA2B,EAAK,IAAI,KAAK,IAAc,IAClG,KAEX,EACI,YAAa,CAAC,UAAW,aACzB,sBAAuB,CAAC,eAAgB,oBAG1C,uBAAwB,CACtB,GAAA,CAAI,GACF,IAAI,EAAI,EAAI,EACZ,MAAM,MAAE,GAAU,EAClB,OAA+J,OAAvJ,EAA8D,OAAxD,EAAc,MAAT,OAAgB,EAAS,EAAM,sBAA2B,EAAS,EAAmC,OAA/B,EAAK,EAAM,sBAA2B,EAAS,EAAG,qBAA0B,EAAS,EAAG,EACxL,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,GAAU,EAClB,KAAe,MAAT,OAAgB,EAAS,EAAM,iBAInC,YAHA,QAAQ,KACN,qEAIJ,MAAM,EAAc,EACd,EAAQ,MAAM,UAAU,UAAU,KACtC,EAAM,iBACL,GAAM,EAAE,IAAM,IAEb,EAAM,gBAAgB,eAAiB,IACzC,EAAM,gBAAgB,cAAgB,EAE9C,EACI,YAAa,CAAC,WACd,sBAAuB,CAAC,eAAgB,kBAAmB,WAE7D,oBAAqB,CACnB,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,MAAO,IAAyD,OAApD,EAAc,MAAT,OAAgB,EAAS,EAAM,aAAuB,EAAK,GAClF,EACI,YAAa,CAAC,UAAW,aACzB,kBAAmB,CAAC,WAAY,gBAElC,uBAAwB,CACtB,GAAA,CAAI,GACF,IAAI,EAAI,EACR,MAAM,MAAE,GAAU,EAClB,OAEM,OAFE,EAAK,IAAyD,OAApD,EAAc,MAAT,OAAgB,EAAS,EAAM,aAAuB,EAAK,IAAI,MACnF,GAAe,EAAW,gBAChB,EAAS,EAAG,EAC/B,EACI,GAAA,CAAI,EAAO,GACT,MAAM,MAAE,GAAU,EAClB,KAAe,MAAT,OAAgB,EAAS,EAAM,aAInC,YAHA,QAAQ,KACN,mEAIJ,MAAM,EAAe,EACrB,IAAK,MAAM,KAAS,EAAM,YACxB,EAAM,QAAU,GAAgB,EAAM,EAE9C,EACI,YAAa,CAAC,WACd,kBAAmB,CAAC,WAAY,cAAe,WAEjD,kBAAmB,CACjB,IAAI,GACK,GAAa,GAEtB,GAAA,CAAI,EAAO,EAAa,GACtB,IAAI,EACJ,GAAK,EAEE,CHnrBW,CAAC,IACvB,IAAI,EACJ,MAAM,MAAE,EAAK,kBAAE,GAAsB,EACrC,IACE,MAAM,EAAqB,GAAqB,sBAAuB,EAAoB,oBAAsB,GAAqB,4BAA6B,EAAoB,+BAA4B,EACnN,GAAI,EAAoB,CACtB,MAAM,EAA+D,OAA/C,EAAK,EAAkB,SAA+B,EAAS,EAAG,KAAK,GAC7F,GAAI,aAAwB,QAC1B,OAAO,EAAa,OAAM,QAGlC,MAAwB,MAAT,OAAgB,EAAS,EAAM,uBACxC,EAAM,yBACY,MAAT,OAAgB,EAAS,EAAM,oBACxC,EAAM,mBAEZ,CAAI,MAAO,GACP,QAAQ,MAAM,EAClB,GGkqBQ,CAAgB,GACE,EAAM,SAEM,OAA3B,EAAK,EAAY,QAA0B,EAAG,QACzD,KHnqBuB,CAAC,IACtB,IAAI,EACJ,MAAM,gBAAE,GAAoB,EAC5B,GAAI,GAAmB,CACrB,MAAM,EAA+F,OAA/E,EAAwB,MAAnB,OAA0B,EAAS,EAAgB,UAA8B,EAAS,EAAG,KAAK,GAC7H,GAAI,aAAwB,QACnB,EAAa,OAAM,QAGhC,GGopBQ,CAAe,EAOvB,EAEI,WAAY,CAAC,mBAAoB,0BAEjC,YAAa,CACX,wBACA,sBACA,kCAGJ,eAAgB,CAEd,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,UAAe,MAAT,OAAgB,EAAS,EAAM,SAAiE,kBAA9B,OAAtB,EAAK,EAAM,aAAkB,EAAS,EAAG,WAElF,EAAM,OAAO,KAC5B,EACI,GAAA,CAAI,EAAO,GACT,IAAI,EAAI,EACR,MAAM,MAAE,GAAU,EACb,IAED,GAA+D,kBAA9B,OAAtB,EAAK,EAAM,aAAkB,EAAS,EAAG,SAEnD,GAA+D,eAA9B,OAAtB,EAAK,EAAM,aAAkB,EAAS,EAAG,UAEtB,mBAAxB,EAAM,OAAO,OAMxB,EAAM,OAAO,SAAS,OAAM,SAL1B,QAAQ,KACN,8DAMV,EACI,aAAc,CAAC,UAAW,aAAc,eAG1C,kBAAmB,CAEjB,IAAG,KACM,EAET,GAAA,CAAI,EAAQ,GACV,MAAM,MAAE,GAAU,EACb,IAEC,EAAM,gCAAkC,EAAW,sCAMzD,EAAM,iCALJ,QAAQ,MACN,sGAKV,EACI,YAAa,CAAC,iDAEhB,2BAA4B,CAC1B,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,IAAK,KAAwB,GAAqB,GAChD,OAAO,EAAmB,WAElC,GAEE,oBAAqB,CACnB,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,OAAK,IAAiB,GAAc,IAElB,MAAT,OAAgB,EAAS,EAAM,yBAC/B,EAAmB,iBADvB,EADI,EAAmB,WAIlC,GAEE,uBAAwB,CACtB,GAAA,CAAI,GACF,MAAM,MAAE,GAAU,EAClB,IAAwB,IAApB,IAAwE,OAAjC,MAAT,OAAgB,EAAS,EAAM,QAC/D,OAAO,EAAmB,WAGlC,EAII,0BAA2B,CACxB,IACwB,MAAnB,IACF,GAAqB,MAClB,GAAc,EAAQ,OAAY,EAAS,EAAmB,cAE3E,IAIE,qBAAsB,CAEpB,GAAA,CAAI,GAAa,aAAE,EAAe,iBAAoB,IACpD,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAAK,KAAmE,OAA/C,EAAc,MAAT,OAAgB,EAAS,EAAM,aAAkB,EAAS,EAAG,OAGvE,MAAhB,GAAyC,cAAjB,EAErB,EAAmB,iBAF1B,EAFS,EAAmB,WAKlC,EACI,0BAA2B,CACzB,CAAC,EAAS,KACR,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,IAAK,EACH,OAcF,OAb+B,EAAM,uBAAyB,EAAM,aAAa,0BAE/B,OAA/C,EAAc,MAAT,OAAgB,EAAS,EAAM,SAA2B,EAAG,mBAAmB,IAEpF,EAAQ,CAAE,aADW,EAAmB,YAAc,iBAC7B,IACxB,OAAO,IACW,sBAAf,EAAM,KACR,EAAQ,CAAE,aAAc,OAExB,EAAQ,CAAE,aAAc,iBACtC,IAGe,KACL,IAAI,EAC6C,OAAhD,EAAe,MAAT,OAAgB,EAAS,EAAM,SAA2B,EAAI,0BAA0B,OAAM,QACnG,CACH,IAIP,wBAAyB,CACvB,IAAG,CAAC,EAAc,IACX,GAEiD,mBAAxC,MAAT,OAAgB,EAAS,EAAM,cAC3B,EAAmB,iBAD5B,EADS,EAAmB,YAS9B,YAAa,CAAC,2CACd,0BAA2B,CACzB,CAAC,EAAS,KACR,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,IAAK,EACH,OAcF,OAb+B,EAAM,uBAAyB,EAAM,aAAa,0BAE/B,OAA/C,EAAc,MAAT,OAAgB,EAAS,EAAM,SAA2B,EAAG,mBAAmB,IAEpF,EAAQ,CAAE,aADW,EAAmB,YAAc,iBAC7B,IACxB,OAAO,IACW,sBAAf,EAAM,KACR,EAAQ,CAAE,aAAc,OAExB,EAAQ,CAAE,aAAc,iBACtC,IAGe,KACL,IAAI,EAC6C,OAAhD,EAAe,MAAT,OAAgB,EAAS,EAAM,SAA2B,EAAI,0BAA0B,OAAM,QACnG,CACH,IAIP,0BAA2B,CACzB,GAAA,CAAI,GACF,IAAI,EACJ,MAAM,MAAE,GAAU,EAClB,OAAe,MAAT,OAAgB,EAAS,EAAM,kBAGC,OAA/B,EAAK,EAAM,sBAA2B,EAAS,EAAG,aAAzD,EACS,EAAmB,YAHnB,EAAmB,WAMlC,EACI,YAAa,CAAC,UAAW,aACzB,sBAAuB,CAAC,eAAgB,oBAE1C,2BAA4B,CAC1B,GAAA,CAAI,GACF,IAAI,EAAI,EACR,MAAM,MAAE,GAAU,EAClB,OAAe,MAAT,OAAgB,EAAS,EAAM,cAGgC,OAA/D,EAAiC,OAA3B,EAAK,EAAM,kBAAuB,EAAS,EAAG,QAAkB,EAAK,IAAM,EAC9E,EAAmB,iBAD5B,EAFS,EAAmB,WAMlC,EACI,YAAa,CAAC,UAAW,aACzB,kBAAmB,CAAC,WAAY,gBAElC,UAAW,CACT,GAAA,CAAI,GACF,MAAQ,SAAS,UAAE,GAAc,IAAO,EACxC,OAAoB,MAAb,EAAoB,EAAY,IAC7C,ICl4BM,GAAa,CAIjB,CAAC,EAAc,uBAAuB,EAAe,GAAa,OAAE,IAClE,IAAI,EAAI,EAAI,EACZ,MAAM,MAAE,GAAU,EACZ,EAA6B,MAAV,EAAiB,OAAS,EACnD,IAAI,EACA,EACJ,GAAI,GAA6B,MAApB,EAA0B,CACrC,MAAO,GAAS,GAAkB,EAAO,CACvC,KAAM,EAAe,SACrB,MAAO,eAEH,EAAM,MAAM,UAAU,KAAK,KAAmD,OAA7C,EAAc,MAAT,OAAgB,EAAS,EAAM,MAAgB,EAAK,IAAI,CAAC,EAAG,EAAG,IAC/F,IAAN,EACK,EAAE,QAAU,EACjB,IAAM,EAAG,OAAS,EACb,EAAE,WAAa,EACjB,EAAE,WAAa,GAAoB,EAAE,QAAU,IAExD,GAAI,EAAK,CACP,MAAM,EAAQ,sBAAsB,KAAK,EAAI,OAEvC,OAFgD,EAAc,MAAT,OAAgB,EAAS,EAAM,cACxF,mCAC6B,EAAT,EAAG,IACnB,EAAM,IAAI,IAAI,EAAI,KAAM,GAE9B,EADyB,IAAI,gBAAgB,EAAI,MAAM,IAAI,SACrB,MAAM,KAAK,KAAK,IAAY,IAClE,EAAoB,EAAI,IAChC,CACA,CACI,MAAM,EAAgB,EAAc,cAAc,IAAI,GAEtD,IAAI,EAKG,OALoB,EADD,EAAc,kBAAkB,IAAI,GACZ,MAAK,CAAC,EAAG,EAAG,IACxD,IAAM,EAAG,OAAS,GAAK,IAAkB,EAAE,QACtC,EAAE,WAAa,GAAoB,EAAE,SAAW,EAElD,EAAE,WAAa,GAAoB,EAAE,QAAU,UAC1C,EAAS,EAAG,KAI1B,OAHc,MAAV,GAAyC,MAAvB,IACpB,EAAsB,IAEjB,CACL,mBACA,oBACA,qBACA,sBAEN,EACE,CAAC,EAAc,qBAAqB,EAAe,GAGjD,EAAiB,YAAE,KADL,EACgB,EAClC,EACE,CAAC,EAAc,oBAAoB,EAAe,GAChD,IAAI,EAAI,EAAI,EAAI,EAChB,MAEM,EAAS,EAAc,gBAAgB,IAAI,KAAiB,EAAY,KACxE,IAAoD,OAA7B,EAAK,EAAY,cAAmB,EAAS,EAAG,kBACvE,EAAQ,EAAc,sBAAsB,IAAI,GAAe,EACrE,GAAI,GAAU,IAAsB,EAAO,CACzC,MAAM,EAAqE,OAAtD,EAAK,EAAc,cAAc,IAAI,SAAwB,EAAS,EAAG,GAC9F,GAAI,EAAa,CACf,MACM,EAAe,GADgF,OAA3E,EAAmC,OAA7B,EAAK,EAAY,cAAmB,EAAS,EAAG,kBAA4B,EAAK,GAEjH,EAAc,iBAAiB,IAAI,EAAc,EACzD,CACA,CACI,EAAiB,YAAE,KAZL,EAYgB,EAClC,EACE,CAAC,EAAc,6BAA6B,EAAe,GAAa,OAAE,IACxE,MACM,EAAQ,EACd,EAAiB,kBAAE,IAAI,EAAO,EAClC,EACE,CAAC,EAAc,oBAAoB,EAAe,GAGhD,EAAiB,WAAE,KADL,EACgB,EAClC,EACE,CAAC,EAAc,sBAAsB,EAAe,GAG7C,EAAc,YAAY,IAAI,IACjC,EAAc,YAAY,IAAI,IAAM,GAEtC,EAAiB,WAAE,KAJL,EAIgB,EAClC,EACE,CAAC,EAAc,oBAAoB,EAAe,GAAa,OAAE,IAC/D,MACM,IAAU,EAEhB,OADA,EAAiB,UAAE,IAAI,EAAO,GACvB,CAAE,UAAW,EACxB,EACE,CAAC,EAAc,sBAAsB,EAAe,GAAa,OAAE,IACjE,MACM,EAAQ,EACV,GAAS,EAAc,WAAW,IAAI,IACxC,EAAc,WAAW,KAAI,EAAO,GAEtC,EAAiB,YAAE,IAAI,EAAO,EAClC,EACE,CAAC,EAAc,oBAAoB,EAAe,GAAa,OAAE,IAC/D,MACM,EAAQ,EACd,EAAiB,iBAAE,IAAI,EAAO,EAClC,EACE,CAAC,EAAc,4BAA4B,EAAe,GACxD,IAAI,EAAI,EAAI,EACZ,MACM,EAAqE,OAAtD,EAAK,EAAc,cAAc,IAAI,SAAwB,EAAS,EAAG,GAC9F,GAAI,OAAO,MAAM,OAAO,IACtB,OACF,MACM,EAAQ,GADuF,OAA3E,EAAmC,OAA7B,EAAK,EAAY,cAAmB,EAAS,EAAG,kBAA4B,EAAK,GAEjH,EAAiB,iBAAE,IAAI,EAAO,EAClC,EAEE,CAAC,EAAc,8BAA8B,EAAgB,GAAa,OAAE,IAC1E,IAAI,EACJ,MAAM,QAAE,GAAY,EACd,EAAS,GAAkB,GAC3B,EAAiB,GAAY,GAC7B,EAAgD,OAA3B,EAAK,EAAe,SAAc,EAAS,EAAG,SACrE,IAAsB,EAAQ,qBAChC,EAAW,aAAa,QACtB,mCACA,GAGJ,GAAmB,EAAe,QAAS,EAAQ,EACvD,EACE,CAAC,EAAc,iCAAiC,EAAgB,GAAa,OAAE,IAC7E,MAAM,EAAS,GAAkB,GAEjC,GAAmB,EAAe,SAAU,EADX,MAAV,EAAiB,EAAS,GAErD,EACE,CAAC,EAAc,gCAAgC,EAAgB,GAAa,OAAE,IAC5E,GAAqB,EAAa,EACtC,EAEE,CAAC,EAAc,yBAAyB,EAAe,GAAa,OAAE,IACpE,MACM,EAAQ,EACd,EAAiB,uBAAE,IAAI,EAAO,EAClC,EACE,CAAC,EAAc,2BAA2B,EAAe,GAAa,OAAE,IACtE,MACM,EAAQ,EACd,EAAiB,uBAAE,IAAI,EAAO,EAClC,EAEE,CAAC,EAAc,yBAAyB,EAAe,GAGjD,EAAc,kBAAkB,IAAI,IACtC,EAAc,kBAAkB,KAAI,EAAO,GAE7C,EAAiB,WAAE,KAJL,EAIgB,EAClC,EACE,CAAC,EAAc,wBAAwB,EAAe,GAGpD,EAAiB,WAAE,KADL,EACgB,EAClC,EACE,CAAC,EAAc,gCAAgC,EAAe,EAAa,GAGrE,EAAc,WAAW,IAAI,IAC/B,EAAc,WAAW,KAAI,EAAO,GAEtC,EAAiB,kBAAE,KAJL,EAIgB,EAAa,EAC/C,EACE,CAAC,EAAc,+BAA+B,EAAe,GAG3D,EAAiB,kBAAE,KADL,EACgB,EAClC,EACE,CAAC,EAAc,0BAA0B,EAAe,GAGlD,EAAc,kBAAkB,IAAI,IACtC,EAAc,kBAAkB,KAAI,EAAO,GAE7C,EAAiB,eAAE,KAJL,EAIgB,EAClC,EACE,CAAC,EAAc,yBAAyB,EAAe,GAGrD,EAAiB,eAAE,KADL,EACgB,EAClC,EACE,CAAC,EAAc,uBAAuB,EAAe,GAGnD,EAAiB,kBAAE,KADL,EACgB,EAClC,GC5MM,GAAmB,EACvB,QACA,oBACA,kBACF,cAAE,EAAgB,GAClB,WAAE,EAAa,GACb,UAAU,GACV,2CAA0C,MAE1C,MAAM,EAAY,GACZ,EAAc,CAGlB,QAAS,IAAK,IAEhB,IAAI,EAAQ,OAAO,OAAO,CACxB,sBAAkB,EAClB,uBAAmB,EACnB,wBAAoB,EACpB,yBAAqB,IAEvB,MAAM,EAAe,IACG,MAAlB,IAEA,GAAY,EAAgB,KAGhC,EAAQ,OAAO,OAAO,IACjB,KACA,IAEL,EAAU,SAAS,GAAO,EAAG,MAAO,EAEhC,EAAwB,KAC5B,MAAM,EAAY,OAAO,QAAQ,GAAe,QAC9C,CAAC,GAAa,GAAa,WACzB,EAAW,GAAa,EAAI,GACrB,IAET,IAEF,EAAY,EAAU,EAElB,EAAsB,GAC5B,IAAI,EACJ,MAAM,EAAoB,MAAO,EAAsB,KACrD,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAChE,MAAM,IAAkB,EAMxB,GALA,EAAkB,IACb,KACmB,MAAnB,EAA0B,EAAkB,MAC5C,GAED,EACF,YF1BqB,UAAU,WAC7B,QAAQ,IACZ,EAAY,QAAQ,GAAM,IAAG,KAAI,MAAO,IACtC,KAAM,cAAe,GAAc,aAAsB,EAAW,aAClE,OAEF,MAAM,EAAO,EAAW,UACxB,IAAK,EAAK,SAAS,KACjB,OACF,MAAM,EAAW,EAAW,eAAe,IAAI,GAC3C,GAAY,aAAsB,UAEhC,EAAW,eAAe,YAAY,GAC5C,EAAW,eAAe,QAAQ,GAAW,IAEhD,EEYO,IAAsB,OAAO,OAAO,IAC1C,MAAM,EAAoC,EAAU,OAAS,GAA6B,IAAxB,GAA6B,EACzF,EAAe,EAAY,QAAU,EAAgB,MACrD,GAAiD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,eAAiD,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,YACxI,GAAsD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,oBAAsD,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,iBAClJ,GAAkD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,gBAAkD,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,aAC1I,GAA6C,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,WAA6C,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,QAChI,EAAkB,EAAY,kBAAoB,EAAgB,gBAClE,IAAkB,EAAY,QAAU,GAAgB,GACxD,KAAoD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,cAAgB,GAAqB,GAC5G,KAAyD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,mBAAqB,GAA0B,GAC3H,KAAqD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,eAAiB,GAAsB,GAC/G,KAAgD,OAA3B,EAAK,EAAY,YAAiB,EAAS,EAAG,UAAY,GAAiB,GAChG,IAAqB,EAAY,kBAAoB,GAAmB,GACxE,EAAoB,GAAiB,GAAsB,GAA2B,GAAuB,GAAkB,EAC/H,EAAsD,IAArB,EAAU,QAAwC,IAAxB,GAA6B,EACxF,IAAe,EAAgB,QAAU,GAAgB,GACzD,KAAqD,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,cAAgB,GAAqB,GAC7G,KAA0D,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,mBAAqB,GAA0B,GAC5H,KAAsD,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,eAAiB,GAAsB,GAChH,KAAiD,OAA/B,EAAK,EAAgB,YAAiB,EAAS,EAAG,UAAY,GAAiB,GACjG,IAAkB,EAAgB,kBAAoB,GAAmB,GACzE,EAAiB,GAAc,GAAmB,GAAwB,GAAoB,GAAe,EAEnH,KADsB,GAAqB,GASzC,OAPA,OAAO,QAAQ,GAAiB,SAC9B,EAAE,EAAgB,MAChB,EAAY,GAAkB,CAAU,IAG5C,SACA,OAAkB,GAGpB,OAAO,QAAQ,GAAe,SAC5B,EACE,GAEE,MACA,cAAc,GACd,mBAAmB,GACnB,wBAAwB,GACxB,oBAAoB,GACpB,eAAe,GACf,aAAa,GACb,4BAA4B,QAGzB,EAAoB,KACvB,EAAoB,GAAa,IAEnC,MAAM,EAAW,IACf,MAAM,EAAY,EAAI,EAAa,GACnC,EAAY,CAAE,CAAC,GAAY,GAAY,EAEzC,IAAI,EACJ,EAAc,EAAoB,GAAW,YAC7C,EAAY,SAAS,IACf,GAAe,IACjB,EAAY,MAAM,oBAAoB,EAAW,GACjD,EAAoB,GAAW,iBAAc,GAE3C,IACF,EAAgB,MAAM,iBAAiB,EAAW,GAClD,EAAoB,GAAW,YAAc,EACzD,IAEQ,EAAc,EAAoB,GAAW,iBAC7C,EAAiB,SAAS,IACxB,IAAI,EAAK,EACL,GAAe,IACuB,OAAvC,EAAM,EAAY,MAAM,aAA+B,EAAI,oBAC1D,EACA,GAEF,EAAoB,GAAW,sBAAmB,GAEhD,IAC0C,OAA3C,EAAM,EAAgB,MAAM,aAA+B,EAAI,iBAC9D,EACA,GAEF,EAAoB,GAAW,iBAAmB,EAC9D,IAEQ,EAAc,EAAoB,GAAW,sBAC7C,EAAsB,SAAS,IAC7B,IAAI,EAAK,EACL,GAAe,IAC4B,OAA5C,EAAM,EAAY,MAAM,kBAAoC,EAAI,oBAC/D,EACA,GAEF,EAAoB,GAAW,2BAAwB,GAErD,IAC+C,OAAhD,EAAM,EAAgB,MAAM,kBAAoC,EAAI,iBACnE,EACA,GAEF,EAAoB,GAAW,sBAAwB,EACnE,IAEQ,EAAc,EAAoB,GAAW,kBAC7C,EAAkB,SAAS,IACzB,IAAI,EAAK,EACL,GAAe,IACwB,OAAxC,EAAM,EAAY,MAAM,cAAgC,EAAI,oBAC3D,EACA,GAEF,EAAoB,GAAW,uBAAoB,GAEjD,IAC2C,OAA5C,EAAM,EAAgB,MAAM,cAAgC,EAAI,iBAC/D,EACA,GAEF,EAAoB,GAAW,kBAAoB,EAC/D,IAEQ,EAAc,EAAoB,GAAW,aAC7C,EAAa,SAAS,IACpB,IAAI,EAAK,EACL,GAAe,IACmB,OAAnC,EAAM,EAAY,MAAM,SAA2B,EAAI,oBACtD,EACA,GAEF,EAAoB,GAAW,kBAAe,GAE5C,IACsC,OAAvC,EAAM,EAAgB,MAAM,SAA2B,EAAI,iBAAiB,EAAW,GACxF,EAAoB,GAAW,aAAe,EAC1D,IAEQ,EAAc,EAAoB,GAAW,WAC7C,EAAW,SAAS,IACd,GAAe,IACjB,EAAY,gBAAgB,oBAC1B,EACA,GAEF,EAAoB,GAAW,gBAAa,GAE1C,IACF,EAAgB,gBAAgB,iBAC9B,EACA,GAEF,EAAoB,GAAW,WAAa,EACxD,IAEQ,MAAM,EAAuB,EAAoB,GAAW,0BAC5D,GAAI,GAAwB,EAAmB,EAC3B,MAAM,QAAQ,GAAwB,EAAuB,CAAC,IACtE,SAAS,IACO,mBAAb,GACT,GACd,GAEA,CACQ,GAAI,EAAgB,CAClB,MAAM,EAAe,EAA0B,KAAK,GAAO,EAAG,EAAS,KAAkB,QAAQ,GAAiC,mBAAb,IACrH,EAAoB,GAAW,0BAAoD,IAAxB,EAAa,OAAe,EAAa,GAAK,CACnH,MAAmB,IACT,EAAoB,GAAW,+BAA4B,EACrE,IAGI,OAAO,QAAQ,GAAiB,SAAQ,EAAE,EAAgB,MACxD,EAAY,GAAkB,CAAU,IAE1C,IACA,OAAkB,CAAM,EAG1B,OADA,EAAkB,CAAE,QAAO,oBAAmB,kBAAiB,YACxD,CAML,QAAA,CAAS,GACP,MAAM,KAAE,EAAI,OAAE,GAAW,EACrB,EAAW,IAAiC,MAAxB,EAAM,eAC5B,EAAY,EAAW,GAAM,EAAe,EAAa,IAG9C,8BAAT,EACF,EAAkB,CAAE,MAAO,IACT,mCAAT,EACT,EAAkB,CAAE,kBAAmB,IACrB,iCAAT,EACT,EAAkB,CAAE,gBAAiB,IACnB,yBAAT,IACT,OAAO,QAAkB,MAAV,EAAiB,EAAS,IAAI,SAAQ,EAAE,EAAY,MACjE,EAAY,QAAQ,GAAc,CAAW,IAE/C,IAER,EACI,SAAQ,IACC,EAET,UAAU,IACR,EAAkB,GAAI,EAAU,OAAS,GACzC,EAAU,KAAK,GACf,EAAS,GACF,KACL,MAAM,EAAM,EAAU,QAAQ,GAC1B,GAAO,IACT,EAAkB,GAAI,EAAU,OAAS,GACzC,EAAU,OAAO,EAAK,GAChC,GAGG,ECtRH,IAsBI,GAAU,GAAoB,GAAa,GAA0B,GAAqB,GAAwB,GAAyB,GAAoB,GAAsB,GAAe,GAAiB,GAAiB,GAAmB,GAA8B,GAtBvR,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAEL,GAAkB,CAAC,EAAK,EAAQ,KAClC,GAAc,EAAK,EAAQ,yBACpB,GA6BT,MAAM,GAAoB,CACxB,YACA,aACA,UACA,YACA,QACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAOI,GACe,mBADf,GAEiB,oBAFjB,GAGc,kBAHd,GAIgB,oBAJhB,GAKK,UALL,GAM2B,6BAN3B,GAO0B,4BAP1B,GAQuB,yBARvB,GASqB,uBATrB,GAUO,WAVP,GAWE,OAXF,GAYE,OAZF,GAac,iBAbd,GAckB,mBAdlB,GAec,iBAfd,GAgBQ,YAhBR,GAiBW,cAjBX,GAkBoB,sBAlBpB,GAmBY,eAnBZ,GAoBiB,mBAEvB,MAAM,WAAwB,GAC5B,WAAA,GACE,QACA,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,KAAK,oBAAsB,GAC3B,KAAK,+BAAiD,IAAI,IAC1D,GAAa,KAAM,GAAU,IAAI,GAAmB,KAAM,KAC1D,GAAa,KAAM,QAAoB,GACvC,GAAa,KAAM,QAAa,GAChC,GAAa,KAAM,GAA0B,MAC7C,GAAa,KAAM,QAAqB,GACxC,GAAa,KAAM,QAAwB,GAC3C,GAAa,KAAM,IAA0B,IAC3C,IAAI,EACsC,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,EAAM,IAE9E,KAAK,iBAAiB,MACtB,IAAI,EAAY,GAChB,GAAa,KAAM,IAAsB,IACvC,OAAO,QAAQ,GAAW,SAAQ,EAAE,EAAW,MAC7C,GAAI,KAAa,GAAa,EAAU,KAAe,EACrD,OACF,KAAK,oBAAoB,EAAW,GACpC,MAAM,EAAW,EAAU,cACrB,EAAM,IAAI,EAAW,YACzB,EAA+B,GAC/B,CAAE,UAAU,EAAM,OAAQ,IAE5B,KAAK,cAAc,EAAI,IAEzB,EAAY,CAAS,IAEvB,KAAK,aAAa,IAAyB,KAAK,iBAAmB,KAAK,eAC5E,CACE,6BAAW,GACT,OAAO,MAAM,mBAAmB,OAC9B,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GAEN,CACE,cAAI,GACF,OAAO,GAAa,KAAM,GAC9B,CACE,cAAI,CAAW,GACb,IAAI,EAAI,EACJ,GAAa,KAAM,MACgC,OAApD,EAAK,GAAa,KAAM,MAA4C,EAAG,KAAK,MAC7E,GAAa,KAAM,QAAwB,IAE7C,GAAa,KAAM,GAAa,GAC3B,GAAa,KAAM,KAAiB,KAAK,aAAa,IAI3D,GAAa,KAAM,GAAkE,OAAzC,EAAK,GAAa,KAAM,UAAwB,EAAS,EAAG,UACtG,GAAa,KAAM,MAJnB,GAAgB,KAAM,GAAoB,IAAsB,KAAK,KAM3E,CACE,qBAAI,GACF,IAAI,EACJ,OAAwD,OAAhD,EAAK,GAAa,KAAM,KAA+B,EAAK,IACxE,CACE,qBAAI,CAAkB,GACpB,IAAI,EACA,KAAK,aAAa,KACpB,KAAK,gBAAgB,IAEvB,GAAa,KAAM,GAAoB,GACG,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,iCACN,OAAQ,KAAK,mBAEnB,CACE,oBAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,oBAAI,CAAiB,GACnB,GAAe,KAAM,GAA8B,EACvD,CACE,qBAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,qBAAI,CAAkB,GACpB,GAAc,KAAM,GAAgC,EACxD,CACE,mBAAI,GACF,OAAO,EAAe,KAAM,GAChC,CACE,mBAAI,CAAgB,GAClB,EAAe,KAAM,GAA6B,EACtD,CACE,aAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,aAAI,CAAU,GACZ,GAAe,KAAM,GAAuB,EAChD,CACE,YAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,YAAI,CAAS,GACX,GAAc,KAAM,GAAsB,EAC9C,CACE,kBAAI,GACF,OAAO,EAAe,KAAM,GAChC,CACE,kBAAI,CAAe,GACjB,EAAe,KAAM,GAA6B,EACtD,CACE,oBAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,oBAAI,CAAiB,GACnB,GAAe,KAAM,GAAiC,EAC1D,CACE,gBAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,gBAAI,CAAa,GACf,GAAe,KAAM,GAA2B,EACpD,CACE,eAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,eAAI,CAAY,GACd,GAAe,KAAM,GAA0B,EACnD,CACE,uBAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,uBAAI,CAAoB,GACtB,GAAe,KAAM,GAAmC,EAC5D,CACE,kBAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,kBAAI,CAAe,GACjB,GAAe,KAAM,GAA6B,EACtD,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAEhD,GADA,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,GACX,IAAa,GAAyB,KAAb,GACvB,KAAK,aAAa,KACpB,QAAQ,KACN,6FAGJ,KAAK,kBACI,IAAa,GAAyB,OAAb,GAClC,KAAK,qBAEF,GAAI,IAAa,GACtB,GAAa,KAAM,IAAU,MAAQ,OAChC,GAAI,IAAa,IAAgC,IAAa,EACzB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,iBAAkB,KAAK,aAAa,YAGnC,GAAI,IAAa,GACoB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,kBAA+E,OAA3D,EAAK,KAAK,aAAa,KAA2C,OAAK,UAG1F,GAAI,IAAa,GACoB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,eAAgB,KAAK,aAAa,KAAgC,KAAK,aAAa,SAA+B,EACnH,iBAAmB,KAAK,aAAa,SAAoF,GAAjD,KAAK,aAAa,YAGzF,GAAI,IAAa,GACoB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,iBAAkB,KAAK,aAAa,KAAmC,KAAK,aAAa,SAAkC,UAG1H,GAAI,IAAa,GACoB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,iBAAkB,KAAK,aAAa,YAGnC,GAAI,IAAa,GAA+B,CACrD,MAAM,EAAK,EAAwC,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,QAAY,EACjG,GAAa,KAAM,GAAoB,GACG,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,iCACN,OAAQ,KAAK,mBAErB,MAAe,IAAa,IAAmB,IAAa,GftS1D,EeuSgB,EAC8B,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,UAAW,MAGN,IAAa,IAAmB,IAAa,EACZ,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,EAAc,mBACpB,OAAoB,MAAZ,IAED,IAAa,IAA6B,IAAa,EACtB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,aAAc,KAAK,aAAa,OAG3B,IAAa,IAA4B,IAAa,IACrB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,uBACN,OAAQ,CACN,YAAa,KAAK,aAAa,OAIzC,CACE,iBAAA,GACE,IAAI,EAAI,EACH,GAAa,KAAM,KAAiB,KAAK,aAAa,KACzD,GAAgB,KAAM,GAAoB,IAAsB,KAAK,MAE7B,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,+BACN,OAAQ,IAEV,MAAM,oBACF,GAAa,KAAM,MAAiB,GAAa,KAAM,KACzD,GAAa,KAAM,GAAkE,OAAzC,EAAK,GAAa,KAAM,UAAwB,EAAS,EAAG,UACtG,GAAa,KAAM,MAGvB,KAAK,aAAa,IAAyB,KAAK,iBAAmB,KAAK,eAC5E,CACE,oBAAA,GACE,IAAI,EAAI,EAAI,EAAI,EACqB,OAApC,EAAK,MAAM,uBAAyC,EAAG,KAAK,MACzD,GAAa,KAAM,MACqB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,+BACN,YAAQ,IAEgC,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,EAAc,+BACpB,QAAQ,KAGR,GAAa,KAAM,MACgC,OAApD,EAAK,GAAa,KAAM,MAA4C,EAAG,KAAK,MAC7E,GAAa,KAAM,QAAwB,GAEjD,CAKE,gBAAA,CAAiB,GACf,IAAI,EACJ,MAAM,iBAAiB,GACmB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,4BACN,OAAQ,IAEL,EAAM,aAAa,cACtB,EAAM,UAAY,EAExB,CAKE,kBAAA,CAAmB,GACjB,IAAI,EACJ,MAAM,mBAAmB,GACiB,OAAzC,EAAK,GAAa,KAAM,MAAiC,EAAG,SAAS,CACpE,KAAM,4BACN,YAAQ,GAEd,CACE,mBAAA,CAAoB,EAAW,GAC7B,GAAoB,KAAK,oBAAqB,EAAW,EAC7D,CACE,gBAAA,CAAiB,GACf,IAAK,EACH,OACF,MAAM,+BAAE,GAAmC,KAC3C,GAAI,EAA+B,IAAI,GACrC,OACF,MAAM,EAA6B,KAAK,2BAA2B,KAAK,MAClE,EAA+B,KAAK,6BAA6B,KAAK,MACtE,EAAc,GAClB,EACA,EACA,GAEF,OAAO,OAAO,GAAe,SAAS,IACpC,EAAQ,iBAAiB,EAAW,GAAa,KAAM,IAAyB,IAElF,EAA+B,IAAI,EAAS,EAChD,CACE,kBAAA,CAAmB,GACjB,IAAK,EACH,OACF,MAAM,+BAAE,GAAmC,KAC3C,IAAK,EAA+B,IAAI,GACtC,OACkB,EAA+B,IAAI,EACvD,GACA,EAA+B,OAAO,GACtC,OAAO,OAAO,GAAe,SAAS,IACpC,EAAQ,oBAAoB,EAAW,GAAa,KAAM,IAAyB,GAEzF,CACE,0BAAA,CAA2B,GACzB,IAAK,EACH,OACF,MAAM,EAAM,KAAK,oBACH,EAAI,QAAQ,IACb,IAEb,EAAI,KAAK,GACL,GAAa,KAAM,KACrB,OAAO,QAAQ,GAAa,KAAM,IAAa,YAAY,SACzD,EAAE,EAAW,MACX,GAAoB,CAAC,GAAK,EAAW,EAAW,IAI1D,CACE,4BAAA,CAA6B,GAC3B,MAAM,EAAM,KAAK,oBACX,EAAQ,EAAI,QAAQ,GACtB,EAAQ,GAEZ,EAAI,OAAO,EAAO,EACtB,CACE,aAAA,GACE,KAAK,iBAAiB,UAAW,GAAgB,KAAM,GAAiB,IAC5E,CACE,cAAA,GACE,KAAK,oBAAoB,UAAW,GAAgB,KAAM,GAAiB,KAC3E,KAAK,oBAAoB,QAAS,GAAgB,KAAM,GAAe,IAC3E,CACE,WAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,WAAI,CAAQ,GACV,GAAc,KAAM,GAAoB,EAC5C,CACE,uBAAA,CAAwB,GACtB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpC,MAAM,EAAS,EAAE,OAEjB,IAD8K,OAA3J,EAAiG,OAA3F,EAAyD,OAAnD,EAAK,EAAO,aAAa,UAAiC,EAAS,EAAG,MAAM,MAAgB,EAAe,MAAV,OAAiB,EAAS,EAAO,UAAoB,EAAK,IAAI,KAAK,GAAgB,UAAR,EAAkB,IAAM,IAAK,OAAO,SAClO,SAAS,EAAE,KACtB,OAEF,IAAI,EAAW,EAAQ,EACvB,GAAI,GAAa,KAAM,IAAU,SAAS,KAAK,EAAE,IAAI,iBACnD,OACF,GAAc,MAAV,EAAE,KAAe,GAAa,KAAM,IAAU,SAAS,WACzD,OAEF,KADqB,EAAE,WAAuB,MAAV,EAAE,KAAyB,MAAV,EAAE,QACnC,GAAa,KAAM,IAAU,SAAS,aAE1D,OAAQ,EAAE,KACR,IAAK,IACL,IAAK,IACH,EAAY,GAAa,KAAM,IAAa,WAAW,YAAc,EAAc,mBAAqB,EAAc,oBACtH,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CACpC,UAAU,EACV,SAAS,KAGb,MACF,IAAK,IACH,EAA4D,QAAhD,KAAK,WAAW,WAAW,iBAA6B,EAAc,qBAAuB,EAAc,mBACvH,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CACpC,UAAU,EACV,SAAS,KAGb,MACF,IAAK,IACH,EAAY,KAAK,WAAW,WAAW,kBAAoB,EAAc,8BAAgC,EAAc,+BACvH,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CACpC,UAAU,EACV,SAAS,KAGb,MACF,IAAK,IACH,KAAK,cACH,IAAI,EAAW,YACb,EAAc,+BACd,CAAE,UAAU,EAAM,SAAS,KAG/B,MACF,IAAK,YACL,IAAK,IAAK,CACR,MAAM,EAAc,KAAK,aACvB,KACG,KAAK,aAAa,IApcH,GAqcpB,EAAS,KAAK,KAC2C,OAArD,EAAK,KAAK,WAAW,WAAW,kBAA4B,EAAK,GAAK,EACxE,GAEF,EAAM,IAAI,EAAW,YAAY,EAAc,mBAAoB,CACjE,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,GACnB,KACR,CACM,IAAK,aACL,IAAK,IAAK,CACR,MAAM,EAAc,KAAK,aACvB,KACG,KAAK,aAAa,IArdH,GAsdpB,EAAS,KAAK,KAC2C,OAArD,EAAK,KAAK,WAAW,WAAW,kBAA4B,EAAK,GAAK,EACxE,GAEF,EAAM,IAAI,EAAW,YAAY,EAAc,mBAAoB,CACjE,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,GACnB,KACR,CACM,IAAK,UAAW,CACd,MAAM,EAAO,KAAK,aAAa,KAAuC,KAAK,aAAa,IAlepE,KAmepB,EAAS,KAAK,KACsC,OAAhD,EAAK,KAAK,WAAW,WAAW,aAAuB,EAAK,GAAK,EACnE,GAEF,EAAM,IAAI,EAAW,YAAY,EAAc,qBAAsB,CACnE,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,GACnB,KACR,CACM,IAAK,YAAa,CAChB,MAAM,EAAO,KAAK,aAAa,KAAyC,KAAK,aAAa,IAhftE,KAifpB,EAAS,KAAK,KACsC,OAAhD,EAAK,KAAK,WAAW,WAAW,aAAuB,EAAK,GAAK,EACnE,GAEF,EAAM,IAAI,EAAW,YAAY,EAAc,qBAAsB,CACnE,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,GACnB,KACR,CACM,IAAK,IAAK,CACR,MAAM,EAAsE,OAAtD,EAAK,KAAK,WAAW,WAAW,mBAA6B,EAAK,EACxF,EAAS,KAAK,IACZ,EA/fyB,IACT,KAggBhB,QAAQ,GACV,EAAM,IAAI,EAAW,YAAY,EAAc,4BAA6B,CAC1E,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,GACnB,KACR,CACM,IAAK,IAAK,CACR,MAAM,EAAsE,OAAtD,EAAK,KAAK,WAAW,WAAW,mBAA6B,EAAK,EACxF,EAAS,KAAK,IACZ,EA7gByB,IAET,GA6gBhB,QAAQ,GACV,EAAM,IAAI,EAAW,YAAY,EAAc,4BAA6B,CAC1E,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,GACnB,KACR,CACM,IAAK,IACL,IAAK,IACC,EAAE,UACJ,GAAgB,KAAM,GAA8B,IAAgC,KAAK,MAE3F,MAEF,IAAK,IACH,EAAY,KAAK,WAAW,WAAW,WAAa,EAAc,uBAAyB,EAAc,wBACzG,EAAM,IAAI,EAAW,YAAY,EAAW,CAC1C,UAAU,EACV,SAAS,IAEX,KAAK,cAAc,GAM3B,EAEA,GAAW,IAAI,QACf,GAAqB,IAAI,QACzB,GAAc,IAAI,QAClB,GAA2B,IAAI,QAC/B,GAAsB,IAAI,QAC1B,GAAyB,IAAI,QAC7B,GAA0B,IAAI,QAC9B,GAAqB,IAAI,QACzB,GAAuB,WACrB,IAAI,EACJ,KAAK,WAAa,GAAiB,CACjC,MAAO,KAAK,MACZ,kBAAmB,KAAK,kBACxB,QAAS,CACP,iBAAkB,KAAK,aAAa,IACpC,gBAAiB,KAAK,aAAa,KAAgC,KAAK,aAAa,SAA+B,EACpH,kBAIQ,OAFL,EAAK,KAAK,aACT,KACW,OAAK,EAEpB,eAAgB,KAAK,aAAa,KAAgC,KAAK,aAAa,SAA+B,EACnH,iBAAkB,KAAK,aAAa,KAAmC,KAAK,aAAa,IAAkC,KAAK,aAAa,KAAgC,KAAK,aAAa,SAA+B,EAC9N,iBAAkB,KAAK,aAAa,IAEpC,aAAc,KAAK,aAAa,IAChC,YAAa,KAAK,aAAa,IAC/B,oBAAqB,KAAK,aACxB,MAIR,EACA,GAAgB,IAAI,QACpB,GAAkB,SAAS,GACzB,MAAM,IAAE,EAAG,SAAE,GAAa,EACL,IAAqB,MAAR,GAAuB,MAAR,IACZ,GAAkB,SAAS,GAKhE,KAAK,wBAAwB,GAH3B,KAAK,oBAAoB,QAAS,GAAgB,KAAM,GAAe,IAI3E,EACA,GAAkB,IAAI,QACtB,GAAoB,SAAS,GAC3B,IAAI,EACJ,MAAM,QAAE,EAAO,OAAE,EAAM,IAAE,EAAG,SAAE,GAAa,EACrC,EAAe,IAAqB,MAAR,GAAuB,MAAR,GACjD,GAAI,IAAwE,OAAtD,EAAK,GAAa,KAAM,UAAqC,EAAS,EAAG,MAE7F,YADA,KAAK,oBAAoB,QAAS,GAAgB,KAAM,GAAe,KAGzE,GAAI,GAAW,IAAW,IAAiB,GAAkB,SAAS,GAEpE,YADA,KAAK,oBAAoB,QAAS,GAAgB,KAAM,GAAe,KAGzE,MAAM,EAAS,EAAE,OACX,EAAe,aAAkB,cAAiD,uBAAjC,EAAO,QAAQ,eAA2E,qBAAjC,EAAO,QAAQ,gBAC3H,CAAC,IAAK,YAAa,aAAc,UAAW,aAAa,SAAS,IAAU,GAAa,KAAM,IAAU,SAAS,KAAK,EAAI,kBAA4B,MAAR,GAAe,GAAa,KAAM,IAAU,SAAS,YAAgB,GACtN,EAAE,iBAEJ,KAAK,iBAAiB,QAAS,GAAgB,KAAM,GAAe,IAAkB,CAAE,MAAM,GAChG,EACA,GAA+B,IAAI,QACnC,GAAiC,WAC1B,GAAa,KAAM,MACtB,GAAa,KAAM,GAA0B,EAAS,cACpD,oCAEF,KAAK,YAAY,GAAa,KAAM,MAEtC,GAAa,KAAM,IAA0B,MAAO,CACtD,EACA,MAAM,GAA2B,OAAO,OAAO,GACzC,GAAsB,OAAO,OAAO,GACpC,GAA4B,IAChC,IAAI,EAAI,EAAI,EAAI,EAChB,IAAI,mBAAE,GAAuB,EAAM,aAC9B,IAAgD,OAAxB,EAAK,EAAM,eAAoB,EAAS,EAAG,SAAS,QAC/E,EAAW,eAAe,QAAQ,KAC/B,sBAAuB,EAAM,cAElC,MAAM,EAAoN,OAAvL,EAA0J,OAApJ,EAA2D,OAArD,EAAc,MAAT,OAAgB,EAAS,EAAM,mBAAwB,EAAS,EAAG,KAAK,EAAO,EAA6B,+BAAoC,EAAS,EAAG,YAAiB,EAAS,EAAG,KAAK,EAAI,OACtP,OAAK,MAAM,QAAQ,GAAsB,IAEjC,GAAsB,GAA2B,QACtD,GAAa,GAAyB,SAAS,KAFzC,EAGR,EAeG,GAAwB,GAbN,CAAC,IACvB,IAAI,EAAI,EAQR,QAPoD,OAA9C,EAAK,EAA4B,eAAoB,EAAS,EAAG,SAAS,QAAW,EAAW,eAAe,IACpE,OAA9C,EAAK,EAA4B,eAAoB,EAAS,EAAG,gBAC7D,aAAuC,EAAW,eAAe,IACtE,EAA4B,SAAS,gBAErC,EAAW,eAAe,QAAQ,GAE7B,GAAoB,MACxB,GAAa,KAAY,GAC3B,EAGM,CAAgB,MAAY,GAAyB,GAAO,OAE/D,GAAkB,IACtB,IAAI,EACJ,OAAqD,OAA7C,EAAc,MAAT,OAAgB,EAAS,EAAM,WAAgB,EAAS,EAAG,KAAK,EAAO,IAAI,EAEpF,GAAuB,CAC3B,CAAC,EAAkB,sBAAuB,GAC1C,CAAC,EAAkB,yBAA0B,GAC7C,CAAC,EAAkB,gBAAiB,GACpC,CAAC,EAAkB,gBAAkB,GAAqB,MAAV,OAAiB,EAAS,EAAO,IAAI,IAAgB,KAAK,KAC1G,CAAC,EAAkB,sBAAwB,GAAqB,MAAV,OAAiB,EAAS,EAAO,KAAK,KAC5F,CAAC,EAAkB,sBjBtuBrB,SAAgC,GAC9B,OAAqB,MAAd,OAAqB,EAAS,EAAW,IAAI,GAAoB,KAAK,IAC/E,EiBquBE,CAAC,EAAkB,wBjBrtBrB,SAAiC,GAC/B,OAAsB,MAAf,OAAsB,EAAS,EAAY,IAAI,GAAqB,KAAK,IAClF,GiB6uBM,GAAiC,CAAC,EAAU,KAChD,GALmC,CAAC,IACpC,IAAI,EACJ,SAA+B,OAApB,EAAK,EAAG,cAAmB,EAAS,EAAG,KAAK,EAAI,mBAAmB,EAG1E,CAA6B,GAC/B,OAEF,MAAM,EAAqC,CAAC,EAAW,KACrD,IAAI,EAAI,EACJ,GAAqB,IACvB,EAA4B,GAE9B,MAAM,SAAE,EAAW,IAAoB,MAAb,EAAoB,EAAY,GAEtC,IAAI,KADiG,OAAjG,EAAiE,OAA3D,EAAkB,MAAb,OAAoB,EAAS,EAAU,iBAAsB,EAAS,EAAG,UAAoB,EAAK,IAEzH,SACT,GAAU,GACT,EACA,IAEH,EAEG,EAAmB,MAAZ,OAAmB,EAAS,EAAS,SAAS,eACvD,EAAK,SAAS,MAAS,GAAqB,GAMhD,EAAmC,EAAU,GAL3C,EAAW,eAAe,YAAY,GAAM,MAAK,KAC/C,EAAmC,EAAU,EAA2B,GAIJ,EAEpE,GAAsB,CAAC,EAAK,EAAW,KAC3C,EAAI,SAAS,IACX,GAAI,KAAa,EAEf,YADA,EAAG,GAAa,GAGlB,MAAM,EAAgB,GAAyB,GACzC,EAAW,EAAU,cACtB,EAAc,SAAS,IA5DhB,OAAO,EAAO,EAAU,KACtC,IAAI,EAAI,EAIR,GAHK,EAAM,mBACH,EAAM,GAEW,kBAAd,GAAwC,MAAb,EACpC,OAAO,GAAe,EAAO,EAAU,GAEzC,GAAyB,iBAAd,EACT,OAAO,EAAe,EAAO,EAAU,GAEzC,GAAyB,iBAAd,EACT,OAAO,GAAc,EAAO,EAAU,GAExC,GAAI,MAAM,QAAQ,KAAe,EAAU,OACzC,OAAO,EAAM,gBAAgB,GAE/B,MAAM,EAAkH,OAA3G,EAA8C,OAAxC,EAAK,GAAqB,SAAqB,EAAS,EAAG,KAAK,GAAsB,IAAsB,EAAK,EAC7H,EAAM,aAAa,EAAU,EAAI,EA4CtC,CAAQ,EAAI,EAAU,EAAI,GAC1B,EAEE,GAAgC,CAAC,EAAU,EAA4B,KAC3E,GAA+B,EAAU,GACzC,MAAM,EAAqC,IACzC,IAAI,EACJ,MAAM,EAA4D,OAAtD,EAAY,MAAP,OAAc,EAAS,EAAI,eAAe,IAAc,EAAK,EAAI,OAClF,EAA2B,EAAG,EAE1B,EAAuC,IAC3C,IAAI,EACJ,MAAM,EAA4D,OAAtD,EAAY,MAAP,OAAc,EAAS,EAAI,eAAe,IAAc,EAAK,EAAI,OAClF,EAA6B,EAAG,EAElC,EAAS,iBACP,EAAc,8BACd,GAEF,EAAS,iBACP,EAAc,gCACd,GAmCF,IAAI,EAAc,GAClB,MAAM,EAAqB,IACzB,MAAM,EAAS,EAAM,OACD,UAAhB,EAAO,OAEX,EAAY,SACT,GAAS,GAA+B,EAAM,KAEjD,EAAc,IACT,EAAO,iBAAiB,CAAE,SAAS,KAExC,EAAY,SACT,GAAS,GAA+B,EAAM,KAChD,EAEH,EAAS,iBAAiB,aAAc,GACxC,MAAM,EAAW,IAAI,kBAjDK,IACxB,EAAc,SAAS,IACrB,MAAM,WACJ,EAAa,GAAE,aACf,EAAe,GAAE,KACjB,EAAI,OACJ,EAAM,cACN,GACE,EACS,cAAT,GACF,MAAM,UAAU,QAAQ,KACtB,GACC,GAAS,GACR,EACA,KAGJ,MAAM,UAAU,QAAQ,KACtB,GACC,GAAS,GACR,EACA,MAGc,eAAT,GAAyB,IAAkB,EAA6B,0BAC7E,GAAqB,GACvB,EAA2B,GAE3B,EAA6B,GAEvC,GACM,IAmBJ,EAAS,QAAQ,EAAU,CACzB,WAAW,EACX,YAAY,EACZ,SAAS,IAeX,MAboB,KAClB,GAA+B,EAAU,GACzC,EAAS,oBAAoB,aAAc,GAC3C,EAAS,aACT,EAAS,oBACP,EAAc,8BACd,GAEF,EAAS,oBACP,EAAc,gCACd,EACD,CAEe,EAEf,EAAW,eAAe,IAAI,qBACjC,EAAW,eAAe,OAAO,mBAAoB,IAEpD,IAAC,GAA2B,GC93B/B,MAAM,GACO,YADP,GAEI,SAqHV,MAAM,WAAqB,EAAW,YACpC,WAAA,GA0CE,GAzCA,QAIA,KAAK,cAAgB,KACnB,IAAI,EACJ,IAAK,EAAiB,KAAM,CAAE,cAAc,EAAO,oBAAoB,IACrE,OACF,MAAM,EAAY,KAAK,UACvB,GAAkB,SAAd,GAAsC,UAAd,EAE1B,YADA,KAAK,MAAM,eAAe,4BAG5B,MAAM,EAAe,iBAAiB,MAChC,EAAsE,OAAtD,EAAK,EAAoB,KAAM,IAAM,KAAK,SAAmB,EAAK,EAAmB,MAC3G,IAAK,EACH,OACF,MAAQ,EAAG,EAAY,MAAO,GAAmB,EAAa,yBACtD,EAAG,EAAU,MAAO,GAAiB,KAAK,wBAC5C,EAAe,EAAW,EAC1B,EAAiB,EAAa,EAC9B,EAAa,EAAa,iBAC9B,4BAEI,EAAc,EAAa,WAAW,EAAW,QAAQ,KAAM,KAAO,EACtE,EAAY,EAAa,iBAC7B,oCAEI,EAAa,EAAY,WAAW,EAAU,QAAQ,KAAM,KAAO,EACnE,EAAW,EAAW,EAAa,EAAc,EACjD,EAAY,EAAe,EAAiB,EAAc,EAC5D,EAAW,EACb,KAAK,MAAM,YAAY,2BAA4B,GAAG,OAGpD,EAAY,EACd,KAAK,MAAM,YAAY,2BAA4B,GAAG,OAGxD,KAAK,MAAM,eAAe,2BAA2B,GAElD,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CAEI,GADA,KAAK,QAAU,KAAK,WAAW,cAAc,UACzC,OAAO,UAAU,eAAe,KAAK,KAAM,aAAc,CAC3D,MAAM,EAAY,KAAK,iBAChB,KAAK,UACZ,KAAK,UAAY,CACvB,CACA,CACE,6BAAW,GACT,MAAO,CAAC,GAAsB,GAClC,CAIE,aAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,aAAI,CAAU,GACZ,GAAc,KAAM,GAAsB,EAC9C,CAKE,UAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,UAAI,CAAO,GACT,GAAc,KAAM,GAAmB,EAC3C,EAEA,GAAa,kBAAoB,CAAE,KAAM,QACzC,GAAa,gBAlMb,SAAyB,GACvB,MAEE,61IA+GJ,EAiFK,EAAW,eAAe,IAAI,kBACjC,EAAW,eAAe,OAAO,gBAAiB,IAEjD,IC7LC,GAAkB,GAAgB,GAAkB,GAAgB,GAAkB,GAAe,GD6LrG,GAAwB,GCnNxB,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAqBT,MAAM,GACe,mBADf,GAEM,WAFN,GAGQ,YA6Gd,MAAM,WAA0B,EAAW,YACzC,WAAA,GAqCE,GApCA,QAEA,GAAa,KAAM,IACnB,GAAa,KAAM,QAAkB,GACrC,KAAK,cAAe,EACpB,KAAK,UAAY,KACjB,GAAa,KAAM,IAAiB,IAC7B,KAAK,cACR,KAAK,YAAY,GAEnB,WAAW,GAAa,KAAM,IAAmB,EAAE,IAErD,GAAa,KAAM,IAAkB,KACnC,IAAI,EAAI,EAC4D,OAAnE,EAA8B,OAAxB,EAAK,KAAK,gBAAqB,EAAS,EAAG,gBAAkC,EAAG,KAAK,EAAG,IAIjG,GAAa,KAAM,IAAiB,IAClC,MAAM,IAAE,GAAQ,EACX,KAAK,SAAS,SAAS,GAIvB,KAAK,cACR,KAAK,YAAY,GAJjB,KAAK,oBAAoB,QAAS,GAAa,KAAM,IAK7D,IAEI,GAAa,KAAM,IAAmB,IACpC,MAAM,QAAE,EAAO,OAAE,EAAM,IAAE,GAAQ,EAC7B,GAAW,IAAW,KAAK,SAAS,SAAS,GAC/C,KAAK,oBAAoB,QAAS,GAAa,KAAM,KAGvD,KAAK,iBAAiB,QAAS,GAAa,KAAM,IAAiB,CAAE,MAAM,GAAO,KAE/E,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YAClC,EAAO,KAAK,YAAY,gBAAgB,GAC9C,KAAK,WAAW,cAAgB,KAAK,WAAW,cAAc,GAAQ,KAAK,WAAW,UAAY,CACxG,CACI,KAAK,UAAY,KAAK,WAAW,cAAc,gBACnD,CACE,6BAAW,GACT,MAAO,CACL,WACA,GACA,EAA6B,iBAC7B,EAAkB,WAExB,CACE,MAAA,GACE,KAAK,iBAAiB,QAAS,GAAa,KAAM,KAClD,KAAK,iBAAiB,UAAW,GAAa,KAAM,KACpD,KAAK,SAAW,CACpB,CACE,OAAA,GACE,KAAK,oBAAoB,QAAS,GAAa,KAAM,KACrD,KAAK,oBAAoB,UAAW,GAAa,KAAM,KACvD,KAAK,oBAAoB,QAAS,GAAa,KAAM,KACrD,KAAK,UAAY,CACrB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,IAAa,EAA6B,kBACxC,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,QAErG,aAAb,GAA2B,IAAa,EACjC,MAAZ,EACF,KAAK,SAEL,KAAK,UAEE,IAAa,IAAgC,KAAK,WAAa,IAAa,EACrF,KAAK,UAAU,UAAY,EAClB,IAAa,EAAkB,aACxC,KAAK,WAAW,cAAc,gCAAgC,UAAY,KAAK,YAAY,yBAE7F,GAAa,KAAM,IAAkB,KAAK,KAC9C,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EACZ,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,YACJ,UACA,sCAAsC,KAAK,oCAExC,KAAK,aAAa,YAGrB,KAAK,UAFL,KAAK,SAIP,KAAK,aAAa,OAAQ,UAC1B,MAAM,EAAoB,KAAK,aAC7B,EAA6B,kBAE3B,IACF,GACE,KACA,GAE6B,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IAE4B,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAE3H,EAAW,eAAe,YAAY,iBAAiB,MAAK,KAAM,OArP/C,EAqP+D,KArP1D,EAqPgE,GArPxD,EAqPuE,GApPzG,GAAc,EAAK,EAAQ,yBACpB,GAmPmH,KAAK,MArP3G,IAAC,EAAK,EAAQ,CAqPkG,GACtI,CACE,oBAAA,GACE,IAAI,EAAI,EACR,KAAK,UAC0F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,MACrC,KAAK,oBAAoB,aAAc,GAAa,KAAM,KAC1D,KAAK,oBAAoB,QAAS,GAAa,KAAM,KACrD,KAAK,oBAAoB,QAAS,GAAa,KAAM,IACzD,CACE,YAAI,GACF,MAAO,CAAC,QAAS,IACrB,CAIE,oBAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,oBAAI,CAAiB,GACnB,GAAc,KAAM,GAA8B,EACtD,CACE,mBAAI,GACF,OAAO,GAAc,KAAM,EAA6B,iBAC5D,CACE,mBAAI,CAAgB,GAClB,GAAc,KAAM,EAA6B,iBAAkB,EACvE,CACE,YAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,YAAI,CAAS,GACX,GAAe,KAAM,GAAqB,EAC9C,CACE,aAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,aAAI,CAAU,GACZ,GAAe,KAAM,GAAuB,EAChD,CAKE,WAAA,CAAY,GACd,EAGA,GAAmB,IAAI,QACvB,GAAiB,IAAI,QACrB,GAAmB,IAAI,QACvB,GAAiB,IAAI,QACrB,GAAmB,IAAI,QACvB,GAAgB,IAAI,QACpB,GAAkB,WAChB,KAAK,iBAAiB,aAAc,GAAa,KAAM,KACvD,KAAK,iBAAiB,QAAS,GAAa,KAAM,KAClD,KAAK,iBAAiB,QAAS,GAAa,KAAM,KAClD,MAAM,EAAmB,KAAK,iBAC1B,GAAoB,KAAK,YAC3B,KAAK,UAAU,UAAY,EAE/B,EACA,GAAkB,kBAAoB,CAAE,KAAM,QAC9C,GAAkB,gBA9RlB,SAAyB,EAAQ,EAAS,IACxC,4xEAgFI,KAAK,oBAAoB,EAAQ,+HAIH,GAAa,kBAAkB,qBACvD,GAAa,gBAAgB,8EAG7B,KAAK,sBAAsB,8DAMvC,EAgMA,GAAkB,oBA/LlB,SAA6B,EAAQ,GACnC,MAEE,yBAIJ,EAyLA,GAAkB,sBAxLlB,WACE,MAAO,EACT,EAuLK,EAAW,eAAe,IAAI,wBACjC,EAAW,eAAe,OAAO,sBAAuB,IAEvD,IAAC,GAA8B,GCpUlC,MAAM,GAAc,uTAyCpB,MAAM,GAAmB,IACvB,MAAM,EAAQ,EAAG,kBAAoB,EAAE,gBAAkB,EAAE,iBAC3D,EAAG,aAAa,aAAc,EAAM,EAEtC,MAAM,WAA2B,GAC/B,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,oBAClB,EAAkB,0BAExB,CACE,iBAAA,GACE,MAAM,oBACN,GAAgB,KACpB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,qBACjC,GAAgB,KAEtB,CAIE,qBAAI,GACF,OAAO,GAAe,KAAM,EAAkB,oBAClD,CACE,qBAAI,CAAkB,GACpB,GAAe,KAAM,EAAkB,oBAAqB,EAChE,CAIE,2BAAI,GACF,OAAO,GAAc,KAAM,EAAkB,0BACjD,CACE,2BAAI,CAAwB,GAC1B,GAAc,KAAM,EAAkB,0BAA2B,EACrE,CACE,WAAA,GACE,MAAM,EAAM,IAAI,EAAW,YACzB,EAAc,sBACd,CACE,UAAU,EACV,SAAS,IAGb,KAAK,cAAc,EACvB,EAEA,GAAmB,oBAxFnB,SAA6B,GAC3B,qCAIa,EAAkB,0IAMb,EAAkB,+HAIvB,EAAkB,sEACb,EAAkB,uJAMX,sCACD,4BAI1B,EA8DA,GAAmB,sBA7DnB,WACE,0CAG+B,EAAE,0DACH,EAAE,4BAGlC,EAsDK,EAAW,eAAe,IAAI,yBACjC,EAAW,eAAe,OAAO,uBAAwB,IAExD,IAAC,GAA+B,GCvDnC,MAAM,GAAqB,IACzB,EAAG,aAAa,eXeA,CAAC,IACjB,IAAI,EAEJ,SAD+D,OAAlC,EAAK,EAAG,4BAAiC,EAAS,EAAG,SAAW,EAAG,aAAa,EAAkB,wBACxG,EWlBS,CAAU,GAAI,WAAW,EAE3D,MAAM,WAA4B,GAChC,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,qBAClB,EAAkB,wBAExB,CACE,iBAAA,GACE,MAAM,oBACN,KAAK,aAAa,OAAQ,UAC1B,KAAK,aAAa,aAAc,EAAE,oBAClC,GAAkB,KACtB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,yBACjC,GAAkB,KAExB,CAKE,sBAAI,GACF,OAAO,GAAqB,KAAM,EAAkB,qBACxD,CACE,sBAAI,CAAmB,GACrB,GAAqB,KAAM,EAAkB,qBAAsB,EACvE,CAKE,yBAAI,GACF,OAAO,GACL,KACA,EAAkB,wBAExB,CACE,yBAAI,CAAsB,GACxB,GAAqB,KAAM,EAAkB,wBAAyB,EAC1E,CACE,WAAA,GACE,KAAK,cACH,IAAI,EAAW,YAAY,EAAc,+BAAgC,CACvE,UAAU,EACV,SAAS,IAGjB,EAEA,GAAoB,oBA5FpB,SAA6B,GAC3B,MAEE,+0FAwBJ,EAkEA,GAAoB,sBAjEpB,WACE,2CAGgC,EAAE,+DACD,EAAE,gCAGrC,EA0DA,MAAM,GAAuB,CAAC,EAAI,KAChC,MAAM,EAAU,EAAG,aAAa,GAChC,OAAO,EAAU,GAAmB,GAAW,EAAE,EAE7C,GAAuB,CAAC,EAAI,EAAU,KAC1C,KAAc,MAAR,OAAe,EAAS,EAAK,QAEjC,YADA,EAAG,gBAAgB,GAGrB,MAAM,EAAY,GAAuB,GAC1B,EAAG,aAAa,KAChB,GAEf,EAAG,aAAa,EAAU,EAAU,EAEjC,EAAW,eAAe,IAAI,0BACjC,EAAW,eAAe,OACxB,wBACA,IAGD,IAAC,GAAgC,GCjFpC,MAAM,GAAmB,IACvB,MAAM,EAAQ,EAAG,eAAiB,EAAE,gBAAkB,EAAE,iBACxD,EAAG,aAAa,aAAc,EAAM,EAEtC,MAAM,WAAwB,GAC5B,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,iBAClB,EAAkB,uBAExB,CACE,iBAAA,GACE,MAAM,oBACN,GAAgB,KACpB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,kBACjC,GAAgB,KAEtB,CAIE,kBAAI,GACF,OAAO,GAAe,KAAM,EAAkB,iBAClD,CACE,kBAAI,CAAe,GACjB,GAAe,KAAM,EAAkB,iBAAkB,EAC7D,CAIE,wBAAI,GACF,OAAO,GAAc,KAAM,EAAkB,uBACjD,CACE,wBAAI,CAAqB,GACvB,GAAc,KAAM,EAAkB,uBAAwB,EAClE,CACE,WAAA,GACE,MAAM,EAAY,KAAK,eAAiB,EAAc,wBAA0B,EAAc,yBAC9F,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CAAE,UAAU,EAAM,SAAS,IAEvE,EAEA,GAAgB,oBApFhB,SAA6B,GAC3B,qCAIa,EAAkB,uIAMb,EAAkB,4HAIvB,EAAkB,mEACb,EAAkB,s1CAWtC,EA0DA,GAAgB,sBAzDhB,WACE,0CAG+B,EAAE,0DACH,EAAE,4BAGlC,EAkDK,EAAW,eAAe,IAAI,sBACjC,EAAW,eAAe,OAAO,oBAAqB,IAErD,IC/EC,GAAS,GAAoB,GAAiB,GAAO,GAAS,GAAa,GAAe,GAAe,GAAiB,GAAe,GAAiB,GAAiB,GAAmB,GAAgB,GD+E9M,GAA4B,GCrG5B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAEL,GAAkB,CAAC,EAAK,EAAQ,KAClC,GAAc,EAAK,EAAQ,yBACpB,GAoET,MAAM,GACE,OADF,GAEI,SAEV,MAAM,WAA0B,EAAW,YACzC,WAAA,GACE,QACA,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IAAS,GAC5B,GAAa,KAAM,GAAoB,MACvC,GAAa,KAAM,GAAiB,MACpC,KAAK,iBAAiB,SAAU,MAChC,KAAK,iBAAiB,WAAY,MAClC,KAAK,iBAAiB,UAAW,KACrC,CACE,6BAAW,GACT,MAAO,CAAC,GAAiB,GAC7B,CACE,QAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,QAAI,CAAK,GACP,GAAe,KAAM,GAAiB,EAC1C,CACE,WAAA,CAAY,GACV,OAAQ,EAAM,MACZ,IAAK,SACH,GAAgB,KAAM,GAAe,IAAiB,KAAK,KAAM,GACjE,MACF,IAAK,WACH,GAAgB,KAAM,GAAiB,IAAmB,KAAK,KAAM,GACrE,MACF,IAAK,UACH,GAAgB,KAAM,GAAgB,IAAkB,KAAK,KAAM,GAG3E,CACE,iBAAA,GACE,GAAgB,KAAM,GAAO,IAAS,KAAK,MACtC,KAAK,OACR,KAAK,KAAO,SAElB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,GAAgB,KAAM,GAAO,IAAS,KAAK,MACvC,IAAa,IAAmB,IAAa,IAC3C,KAAK,KACP,GAAgB,KAAM,GAAa,IAAe,KAAK,MAEvD,GAAgB,KAAM,GAAe,IAAiB,KAAK,MAGnE,CACE,KAAA,GACE,GAAa,KAAM,GAAoB,KACvC,MAAM,GAAkB,KAAK,cAAc,IAAI,MAAM,QAAS,CAAE,UAAU,EAAM,YAAY,KACtF,GAAoB,KAAK,cAAc,IAAI,MAAM,UAAW,CAAE,UAAU,EAAM,SAAS,EAAM,YAAY,KAC/G,GAAI,GAAkB,EACpB,OACF,MAAM,EAAY,KAAK,cACrB,+DAEW,MAAb,GAA6B,EAAU,OAC3C,CACE,YAAI,GACF,MAAO,CAAC,SAAU,MACtB,EAEA,GAAU,IAAI,QACd,GAAqB,IAAI,QACzB,GAAkB,IAAI,QACtB,GAAQ,IAAI,QACZ,GAAU,WACR,IAAI,GAAa,KAAM,MAEvB,GAAa,KAAM,IAAS,IACvB,KAAK,YAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,GAC7D,gBAAe,KACb,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,YACJ,aACA,8EACD,GAEP,CACA,EACA,GAAc,IAAI,QAClB,GAAgB,WACd,IAAI,EAC0C,OAA7C,EAAK,GAAa,KAAM,MAAqC,EAAG,aAAa,gBAAiB,QAC/F,KAAK,cAAc,IAAI,MAAM,OAAQ,CAAE,UAAU,EAAM,SAAS,KAChE,KAAK,iBAAiB,iBAAiB,IAAM,KAAK,SAAS,CAAE,MAAM,GACrE,EACA,GAAgB,IAAI,QACpB,GAAkB,WAChB,IAAI,EAC0C,OAA7C,EAAK,GAAa,KAAM,MAAqC,EAAG,aAAa,gBAAiB,SAC/F,KAAK,cAAc,IAAI,MAAM,QAAS,CAAE,UAAU,EAAM,SAAS,IACnE,EACA,GAAgB,IAAI,QACpB,GAAkB,SAAS,GACzB,GAAa,KAAM,GAAiB,EAAM,eACrC,EAAqB,KAAM,EAAM,iBACpC,KAAK,MAAQ,KAAK,KAEtB,EACA,GAAkB,IAAI,QACtB,GAAoB,SAAS,GAC3B,IAAI,EACC,EAAqB,KAAM,EAAM,iBACa,OAAhD,EAAK,GAAa,KAAM,MAAwC,EAAG,QAChE,GAAa,KAAM,KAAoB,GAAa,KAAM,MAAqB,EAAM,eAAiB,KAAK,OAC7G,KAAK,MAAO,GAGlB,EACA,GAAiB,IAAI,QACrB,GAAmB,SAAS,GAC1B,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,IAAE,EAAG,QAAE,EAAO,OAAE,EAAM,QAAE,GAAY,EACtC,GAAW,GAAU,GAGpB,KAAK,SAAS,SAAS,KAG5B,EAAM,iBACN,EAAM,kBACM,QAAR,GACE,EAAM,SACiE,OAAxE,EAA2C,OAArC,EAAK,KAAK,6BAAkC,EAAS,EAAG,QAA0B,EAAG,KAAK,GAE5B,OAApE,EAAuC,OAAjC,EAAK,KAAK,yBAA8B,EAAS,EAAG,QAA0B,EAAG,KAAK,GAE/F,KAAK,QACY,WAAR,IACwC,OAAhD,EAAK,GAAa,KAAM,MAAwC,EAAG,QACpE,KAAK,MAAO,GAEhB,EACA,GAAkB,kBAAoB,CAAE,KAAM,QAC9C,GAAkB,gBA7MlB,SAAyB,GACvB,gxCA2CI,KAAK,oBAAoB,QAG/B,EA+JA,GAAkB,oBA9JlB,SAA6B,GAC3B,MAEE,sCAIJ,EAwJK,EAAW,eAAe,IAAI,wBACjC,EAAW,eAAe,OAAO,sBAAuB,IAEvD,IC5NC,GAAkB,GAAgB,GAAa,GAAW,GAAW,GAAW,GAAY,GAAa,GAAuB,GAAsB,GAAwB,GAAmB,GAAqB,GAAoB,GAAsB,GAAoB,GAAsB,GAAqB,GAAuB,GAAkB,GAAoB,GAAqB,GAAuB,GAAoB,GD4N5b,GAA8B,GClP9B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAEL,GAAkB,CAAC,EAAK,EAAQ,KAClC,GAAc,EAAK,EAAQ,yBACpB,GAiQT,MAAM,WAAyB,EAAW,YACxC,WAAA,GAkCE,GAjCA,QACA,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,QAAkB,GACrC,GAAa,KAAM,QAAgB,GACnC,GAAa,KAAM,QAAa,GAChC,GAAa,KAAM,QAAW,GAC9B,GAAa,KAAM,GAAW,IAC9B,GAAa,KAAM,GAAW,IAC9B,GAAa,KAAM,IAAY,KAC7B,GAAI,KAAK,MAAM,QAAQ,kBAAmB,CACxC,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,YACJ,8BACA,2BAEV,KAEI,GAAa,KAAM,IAAa,KAC9B,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,eAAe,8BAA8B,IAErD,GAAa,KAAM,IAAuB,KACxC,MAAM,EAAW,KAAK,WAAW,cAAc,sBAC3C,GACF,EAAS,WAAW,OAAO,EAAS,KAEnC,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YAClC,EAAO,KAAK,YAAY,gBAAgB,GAC9C,KAAK,WAAW,cAAgB,KAAK,WAAW,cAAc,GAAQ,KAAK,WAAW,UAAY,CACxG,CACI,KAAK,UAAY,KAAK,WAAW,cAAc,cAC/C,GAAa,KAAM,GAAa,KAAK,WAAW,cAAc,gBAC9D,GAAa,KAAM,GAAW,KAAK,WAAW,cAAc,cAC5D,KAAK,MAAQ,KAAK,WAAW,cAAc,UAC3C,KAAK,WAAa,KAAK,WAAW,cAAc,cACpD,CACE,6BAAW,GACT,MAAO,CACL,WACA,gBACA,EAA6B,iBAEnC,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,IAAa,EAA6B,kBACxC,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,SAErG,aAAb,GAAwC,kBAAb,GAAgC,IAAa,KACjE,MAAZ,GACF,KAAK,MAAM,gBAAgB,GAC3B,GAAgB,KAAM,GAAmB,IAAqB,KAAK,QAEnE,KAAK,MAAM,aAAa,EAAU,GAClC,GAAgB,KAAM,GAAoB,IAAsB,KAAK,OAG7E,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EACZ,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,YACJ,UACA,sCAAsC,KAAK,oCAE7C,GAAa,KAAM,IAAW,QAAU,EAAmB,KAAK,WAAY,YAC5E,GAAa,KAAM,IAAW,SAAW,EAAmB,KAAK,WAAY,aAC7E,GAAa,KAAM,IAAW,MAAQ,EACpC,KAAK,WACL,qCAEF,GAAa,KAAM,IAAW,cAAgB,EAC5C,KAAK,WACL,wCAEF,MAAM,EAAoB,KAAK,aAC7B,EAA6B,kBAE3B,IACF,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eACnF,IAE2F,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAE3H,KAAK,YACL,KAAK,WAAW,iBAAiB,UAAW,GAAa,KAAM,KAC/D,KAAK,WAAW,iBAAiB,WAAY,GAAa,KAAM,KAChE,GAAgB,KAAM,GAAmB,IAAqB,KAAK,MACnE,EAAc,KAAK,UAAW,GAAa,KAAM,IACrD,CACE,oBAAA,GACE,IAAI,EAAI,EACR,GAAgB,KAAM,GAAoB,IAAsB,KAAK,MAC0B,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,MACrC,KAAK,WAAW,oBAAoB,UAAW,GAAa,KAAM,KAClE,KAAK,WAAW,oBAAoB,WAAY,GAAa,KAAM,KACnE,EAAgB,KAAK,UAAW,GAAa,KAAM,IACvD,CACE,gBAAA,CAAiB,GACf,IAAI,EAC4C,OAA/C,EAAK,GAAa,KAAM,IAAW,UAA4B,EAAG,MAAM,YACvE,QAC+B,IAA5B,KAAK,gBAAgB,GAAxB,IAEN,CACE,SAAA,GACE,IAAI,EAAI,EACR,MAAM,EAA0C,IAA3B,KAAK,MAAM,cACiB,OAAhD,EAAK,GAAa,KAAM,IAAW,WAA6B,EAAG,MAAM,YAAY,QAAS,GAAG,MACpD,OAA7C,EAAK,GAAa,KAAM,IAAW,QAA0B,EAAG,MAAM,YAAY,OAAQ,GAAG,KAClG,CACE,cAAA,CAAe,GACb,MAAM,EAAW,KAAK,WAAW,cAAc,sBAG/C,GAFA,EAAS,YAAc,GACvB,KAAK,UAAU,UAAU,OAAO,cAA2B,MAAZ,OAAmB,EAAS,EAAS,WAClE,MAAZ,OAAmB,EAAS,EAAS,QACzC,OACF,MAAM,EAAa,IACE,IAAI,IAAI,EACxB,KAAK,MAAM,OACT,EAAS,SAAS,GAAM,CAAC,EAAE,MAAO,EAAE,QACtC,KAAK,MAAM,OAGhB,GAAa,KAAM,GAAW,IAAI,IAClC,MAAM,EAAa,EAAW,MAC9B,IAAK,MAAO,EAAG,KAAW,EAAW,UAAW,CAC9C,MAAO,EAAS,GAAU,CAAO,IAAN,EAAS,IAAM,EAAW,OAAS,GACxD,EAAI,EAAU,iCAA+C,IAAT,EAAH,IAEjD,EAAQ,QAAwB,MAD3B,EAAS,EAAa,EAAW,EAAI,IACpB,MAAiB,GAAW,EAAS,GAAK,4BAChE,EAAY,EAAS,gBACzB,6BACA,QAEI,EAAU,EACd,KAAK,WACL,qCAAqC,EAAI,MAE3C,EAAQ,MAAM,YAAY,IAAK,GAC/B,EAAQ,MAAM,YAAY,QAAS,GACnC,EAAS,OAAO,EACtB,CACA,CACE,eAAA,CAAgB,GACd,OlB9VJ,SAAgC,EAAG,EAAG,EAAI,GACxC,MAAM,EAAK,EAAG,EAAI,EAAG,EACf,EAAK,EAAG,EAAI,EAAG,EACf,EAAgB,EAAK,EAAK,EAAK,EACrC,GAAsB,IAAlB,EACF,OAAO,EACT,MAAM,IAAe,EAAI,EAAG,GAAK,GAAM,EAAI,EAAG,GAAK,GAAM,EACzD,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,GACjC,CkBsVW,CACL,EAAI,QACJ,EAAI,QACJ,GAAa,KAAM,IAAa,wBAChC,GAAa,KAAM,IAAW,wBAEpC,CACE,YAAI,GACF,OAAO,KAAK,aAAa,WAC7B,CACE,WAAA,CAAY,GACV,OAAQ,EAAI,MACV,IAAK,cACH,GAAgB,KAAM,GAAoB,IAAsB,KAAK,KAAM,GAC3E,MACF,IAAK,QACH,KAAK,YACL,MACF,IAAK,eACH,GAAgB,KAAM,GAAqB,IAAuB,KAAK,KAAM,GAC7E,MACF,IAAK,cACH,GAAgB,KAAM,GAAoB,IAAsB,KAAK,KAAM,GAC3E,MACF,IAAK,YACH,GAAgB,KAAM,GAAkB,IAAoB,KAAK,MACjE,MACF,IAAK,eACH,GAAgB,KAAM,GAAqB,IAAuB,KAAK,MAG/E,CACE,YAAI,GACF,MAAO,CAAC,UAAW,aAAc,YAAa,YAClD,EAEA,GAAmB,IAAI,QACvB,GAAiB,IAAI,QACrB,GAAc,IAAI,QAClB,GAAY,IAAI,QAChB,GAAY,IAAI,QAChB,GAAY,IAAI,QAChB,GAAa,IAAI,QACjB,GAAc,IAAI,QAClB,GAAwB,IAAI,QAC5B,GAAuB,IAAI,QAC3B,GAAyB,SAAS,GAChC,MAAM,EAAO,GAAa,KAAM,IAAW,cAC3C,IAAK,EACH,OACF,MAAM,EAAe,KAAK,gBAAgB,GAKpC,EAAe,qCAJA,GAAa,KAAM,IAAW,WAAU,CAAC,EAAO,EAAG,KACtE,MAAM,EAAM,EAAI,EAAI,GACpB,OAAc,MAAP,GAAe,GAAgB,GAAS,GAAgB,CAAG,IAEK,KACrE,EAAK,cAAgB,GAAiB,EAAK,MAAM,YACnD,EAAK,aAAe,EACpB,EAAK,MAAM,YACT,YACA,yDAGN,EACA,GAAoB,IAAI,QACxB,GAAsB,WAChB,KAAK,aAAa,cAEtB,KAAK,iBAAiB,QAAS,MAC/B,KAAK,iBAAiB,cAAe,MACrC,KAAK,iBAAiB,eAAgB,MACxC,EACA,GAAqB,IAAI,QACzB,GAAuB,WACrB,IAAI,EAAI,EACR,KAAK,oBAAoB,QAAS,MAClC,KAAK,oBAAoB,cAAe,MACxC,KAAK,oBAAoB,eAAgB,MACb,OAA3B,EAAK,EAAW,SAA2B,EAAG,oBAAoB,YAAa,MACpD,OAA3B,EAAK,EAAW,SAA2B,EAAG,oBAAoB,cAAe,KACpF,EACA,GAAqB,IAAI,QACzB,GAAuB,SAAS,GAC9B,IAAI,EACJ,GAAa,KAAM,GAAgB,EAAI,eAAe,SAAS,KAAK,QACxC,OAA3B,EAAK,EAAW,SAA2B,EAAG,iBAAiB,YAAa,KAC/E,EACA,GAAsB,IAAI,QAC1B,GAAwB,SAAS,GAC/B,IAAI,EACoB,UAApB,EAAI,aACN,GAAgB,KAAM,GAAoB,IAAsB,KAAK,KAAM,GAC7E,KAAK,iBAAiB,eAAgB,MACV,OAA3B,EAAK,EAAW,SAA2B,EAAG,iBAAiB,cAAe,KACjF,EACA,GAAmB,IAAI,QACvB,GAAqB,WACnB,IAAI,EACwB,OAA3B,EAAK,EAAW,SAA2B,EAAG,oBAAoB,YAAa,MAChF,KAAK,gBAAgB,YAAY,GACjC,KAAK,MAAM,SAAW,KAAK,aAAa,WAC1C,EACA,GAAsB,IAAI,QAC1B,GAAwB,WACtB,IAAI,EAAI,EACR,KAAK,oBAAoB,eAAgB,MACb,OAA3B,EAAK,EAAW,SAA2B,EAAG,oBAAoB,cAAe,MAClF,KAAK,gBAAgB,YAAY,GACjC,KAAK,MAAM,SAAW,KAAK,aAAa,YACc,OAArD,EAAK,GAAa,KAAM,IAAW,gBAAkC,EAAG,MAAM,eAAe,YAChG,EACA,GAAqB,IAAI,QACzB,GAAuB,SAAS,GACN,QAApB,EAAI,aAAyC,IAAhB,EAAI,UAGrC,KAAK,gBACH,WACgB,IAAhB,EAAI,SAAqC,UAApB,EAAI,aAE3B,KAAK,iBAAiB,GACtB,GAAgB,KAAM,GAAsB,IAAwB,KAAK,KAAM,IAC3E,KAAK,UAAiC,UAApB,EAAI,aAA4B,GAAa,KAAM,MACvE,KAAK,MAAM,UAAW,EACtB,KAAK,MAAM,cAAgB,KAAK,gBAAgB,GAChD,KAAK,MAAM,cACT,IAAI,MAAM,QAAS,CAAE,SAAS,EAAM,UAAU,MAGpD,EACA,GAAiB,kBAAoB,CAAE,KAAM,QAC7C,GAAiB,gBA3hBjB,SAAyB,GACvB,MAEE,w1NAiPJ,EAwSK,EAAW,eAAe,IAAI,uBACjC,EAAW,eAAe,OAAO,qBAAsB,IAEtD,IC7iBC,GD6iBA,GAA6B,GC/jB7B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAO5C,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAuCT,MAAM,WAAwB,EAAW,YACvC,WAAA,GAGE,GAFA,QAjDe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EA+ClE,CAAa,KAAM,QAAkB,IAChC,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CACA,CACE,6BAAW,GACT,MAAO,CAAC,EAA6B,iBACzC,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,IAAa,EAA6B,mBACxC,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAGjI,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EACZ,MAAM,EAAoB,KAAK,aAC7B,EAA6B,kBAE3B,IACF,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eACnF,IAE2F,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,MAE/H,CACE,oBAAA,GACE,IAAI,EAAI,EACuF,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,KACzC,EAEA,GAAmB,IAAI,QACvB,GAAgB,kBAAoB,CAAE,KAAM,QAC5C,GAAgB,gBA/EhB,SAAyB,GACvB,MAEE,8oBA6BJ,EAgDK,EAAW,eAAe,IAAI,sBACjC,EAAW,eAAe,OAAO,oBAAqB,IAErD,ICvFC,GDuFA,GAA4B,GCzG5B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAO5C,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GA6DT,MAAM,WAAyB,EAAW,YACxC,WAAA,GAGE,GAFA,QAvEe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAqElE,CAAa,KAAM,QAAkB,IAChC,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CACA,CACE,6BAAW,GACT,MAAO,CAAC,EAA6B,iBACzC,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,IAAa,EAA6B,mBACxC,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAGjI,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EACZ,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,YACJ,UACA,sCAAsC,KAAK,oCAE7C,MAAM,EAAoB,KAAK,aAC7B,EAA6B,kBAE3B,IACF,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eACnF,IAE2F,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,MAE/H,CACE,oBAAA,GACE,IAAI,EAAI,EACuF,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,KACzC,EAEA,GAAmB,IAAI,QACvB,GAAiB,kBAAoB,CAAE,KAAM,QAC7C,GAAiB,gBA1GjB,SAAyB,EAAQ,EAAS,IACxC,yjCA0CI,KAAK,oBAAoB,EAAQ,QAGvC,EA6DA,GAAiB,oBA5DjB,SAA6B,EAAQ,GACnC,MAEE,yBAIJ,EAsDK,EAAW,eAAe,IAAI,uBACjC,EAAW,eAAe,OAAO,qBAAsB,IAEtD,ICnHC,GDmHA,GAA6B,GCrI7B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IA0BhD,MAAM,WAA6B,GACjC,WAAA,GACE,IAAI,EArBY,EAAK,EAAQ,EAAO,EAsBpC,QA3Be,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAyBlE,CAAa,KAAM,QAAO,GAvBV,EAwBH,KAxBQ,EAwBF,GAxBU,EAwBH,KAAK,WAAW,cAAc,QAvB1D,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAuBjD,GAAa,KAAM,IAAO,YAAc,EAAwC,OAA5B,EAAK,KAAK,eAAyB,EAAK,EAChG,CACE,6BAAW,GACT,MAAO,IAAI,MAAM,mBAAoB,EAAkB,eAC3D,CACE,wBAAA,CAAyB,EAAU,EAAU,GACvC,IAAa,EAAkB,iBACjC,GAAa,KAAM,IAAO,YAAc,GAAY,IAEtD,MAAM,yBAAyB,EAAU,EAAU,EACvD,CAIE,iBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,eAClD,CACE,iBAAI,CAAc,GAChB,EAAe,KAAM,EAAkB,eAAgB,EAC3D,EAEA,GAAQ,IAAI,QACZ,GAAqB,oBApCrB,SAA6B,EAAQ,GACnC,qBAGU,EAAW,EAAM,2BAG7B,EA8BK,EAAW,eAAe,IAAI,2BACjC,EAAW,eAAe,OACxB,yBACA,IAGD,IAAC,GAAiC,GClErC,MAAM,GAAqB,CACzB,EAAG,EAAE,iBACL,EAAG,EAAE,gBACL,EAAG,EAAE,wBACL,EAAG,EAAE,qBAED,GAAuB,CAC3B,EAAG,EAAE,sDACL,EAAG,EACD,yHAEF,EAAG,EACD,8GAEF,EAAG,EAAE,gEAED,GAAe,IACnB,IAAI,EAAI,EACR,OAAmB,IAAf,EAAM,KACD,KACF,CACL,MAAgD,OAAxC,EAAK,GAAmB,EAAM,OAAiB,EAAK,SAAS,EAAM,OAC3E,QAAoD,OAA1C,EAAK,GAAqB,EAAM,OAAiB,EAAK,EAAM,QACvE,ECxBH,IAkBI,GAlBA,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAuDpC,SAAS,GAAmB,GAC1B,IAAI,EACJ,MAAM,MAAE,EAAK,QAAE,GAAyC,OAA5B,EAAK,GAAY,IAAkB,EAAK,GACpE,IAAI,EAAO,GAKX,OAJI,IACF,GAAQ,qBAAqB,EAAM,mBAAmB,iBACpD,IACF,GAAQ,qBAAqB,EAAM,oBAAoB,gBAClD,CACT,CACA,MAAM,GAAqB,CACzB,EAAkB,iBAClB,EAAkB,qBAEpB,MAAM,WAAyB,GAC7B,WAAA,GACE,SAAS,WAjEM,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EA+DlE,CAAa,KAAM,GAAa,KACpC,CACE,6BAAW,GACT,MAAO,IAAI,MAAM,sBAAuB,GAC5C,CACE,kBAAA,CAAmB,GACjB,OAAO,KAAK,YAAY,mBAAmB,EAC/C,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAEJ,GADA,MAAM,yBAAyB,EAAU,EAAU,IAC9C,GAAmB,SAAS,GAC/B,OACF,MAAM,EAAuC,OAAzB,EAAK,KAAK,YAAsB,EAAK,CACvD,KAAM,KAAK,eACX,QAAS,KAAK,mBAnCpB,IAA+B,EAqC3B,KAAK,MArCsB,EAqCO,GApCvB,MAA+B,OAAvB,GAAY,GAqC3B,KAAK,OACP,KAAK,WAAW,cAAc,QAAQ,KAAO,SAAS,KAAK,iBAC3D,KAAK,WAAW,cAAc,YAAY,UAAY,KAAK,mBAAmB,GAEpF,CACE,cAAI,GACF,OA7FF,GADkB,EA8FI,KA9FC,EA8FK,GA7FD,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,GAF7B,IAAC,EAAK,EAAQ,CA+FjC,CACE,cAAI,CAAW,GAvFE,EAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,EACvC,EAqFV,CAAa,KAAM,GAAa,EACpC,CACE,kBAAI,GACF,OAAO,EAAe,KAAM,iBAChC,CACE,kBAAI,CAAe,GACjB,EAAe,KAAM,iBAAkB,EAC3C,CACE,qBAAI,GACF,OAAO,GAAc,KAAM,oBAC/B,CACE,qBAAI,CAAkB,GACpB,GAAc,KAAM,oBAAqB,EAC7C,EAEA,GAAc,IAAI,QAClB,GAAiB,oBAxFjB,SAA6B,GAC3B,kRAkBsB,EAAM,wCACtB,GAAmB,CAAE,MAAO,EAAM,eAAgB,QAAS,EAAM,sCAIzE,EAiEA,GAAiB,mBAAqB,GACjC,EAAW,eAAe,IAAI,uBACjC,EAAW,eAAe,OAAO,qBAAsB,IAEtD,IC7GC,GAAe,GD6Gf,GAA6B,GCtH7B,GAAe,CAAC,EAAK,EAAQ,KAJb,EAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAGlC,CAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAkItE,MAAM,WAAqC,GACzC,WAAA,GACE,SAAS,WACT,GAAa,KAAM,IAAgB,IACjC,IAAI,EACJ,IAAK,KAAK,KACR,OACF,MAAM,EAAoC,OAAzB,EAAK,KAAK,iBAAsB,EAAS,EAAG,cAAc,YAC3E,IAAK,EACH,OACF,MAAM,EAAO,EAAE,eACT,EAAgB,EAAK,KAAO,MAAQ,EAAK,SAAS,MAClD,EAAuB,EAAK,SAAS,GACvC,IAAkB,IACpB,KAAK,MAAO,EACpB,IAEI,GAAa,KAAM,IAAkB,IACnC,IAAK,KAAK,KACR,OACF,MAAM,EAAe,EAAE,WAAuB,MAAV,EAAE,KAAyB,MAAV,EAAE,KACxC,WAAV,EAAE,MAAoB,GAAkB,EAAE,SAAY,EAAE,QAAW,EAAE,UACxE,KAAK,MAAO,EACZ,EAAE,iBACF,EAAE,kBACV,GAEA,CACE,iBAAA,GACE,MAAM,oBACF,KAAK,OACP,KAAK,iBAAiB,QAAS,GAAa,KAAM,KAClD,SAAS,iBAAiB,UAAW,GAAa,KAAM,KAE9D,CACE,oBAAA,GACE,KAAK,oBAAoB,QAAS,GAAa,KAAM,KACrD,SAAS,oBAAoB,UAAW,GAAa,KAAM,IAC/D,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAClC,SAAb,IACE,KAAK,MACP,KAAK,iBAAiB,QAAS,GAAa,KAAM,KAClD,SAAS,iBAAiB,UAAW,GAAa,KAAM,OAExD,KAAK,oBAAoB,QAAS,GAAa,KAAM,KACrD,SAAS,oBAAoB,UAAW,GAAa,KAAM,MAGnE,EAEA,GAAgB,IAAI,QACpB,GAAkB,IAAI,QACtB,GAA6B,oBAnL7B,SAA6B,GAC3B,26DA6FkB,CAChB,CAAE,KAAM,CAAC,QAAS,KAAM,YAAa,mBACrC,CAAE,KAAM,CAAC,KAAM,YAAa,eAC5B,CAAE,KAAM,CAAC,KAAM,YAAa,qBAC5B,CAAE,KAAM,CAAC,KAAM,YAAa,8CAC5B,CAAE,KAAM,CAAC,KAAM,YAAa,6BAC5B,CAAE,KAAM,CAAC,IAAU,KAAM,YAAa,iBACtC,CAAE,KAAM,CAAC,IAAU,KAAM,YAAa,oBACtC,CAAE,KAAM,CAAC,KAAW,YAAa,kBACjC,CAAE,KAAM,CAAC,KAAW,YAAa,oBACjC,CAAE,KAAM,CAAC,eAAgB,YAAa,0BACtC,CAAE,KAAM,CAAC,eAAgB,YAAa,2BAEjB,KAAI,EAAG,OAAM,iBAI3B,gEAHU,EAAK,KACpB,CAAC,EAAK,IAAU,EAAQ,EAAI,0DAA0D,WAAe,qBAAqB,aAC1H,KAAK,6DAMuB,8BAG7B,KAAK,kCA3BV,EAwFK,EAAW,eAAe,IAAI,oCACjC,EAAW,eAAe,OAAO,kCAAmC,IAEnE,ICrLC,GDqLA,GAA0C,GCvM1C,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAsEpC,MAAM,GAAmB,IACvB,MAAM,EAAQ,EAAG,kBAAoB,EAAE,wBAA0B,EAAE,yBACnE,EAAG,aAAa,aAAc,EAAM,EAEtC,MAAM,WAA8B,GAClC,WAAA,GACE,SAAS,WAtEM,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAoElE,CAAa,KAAM,GAAkB,KACzC,CACE,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,oBAClB,EAAkB,6BAExB,CACE,iBAAA,GACE,MAAM,oBACN,GAAgB,KACpB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,qBACjC,GAAgB,KAEtB,CAIE,8BAAI,GACF,OAAO,GAAc,KAAM,EAAkB,6BACjD,CACE,8BAAI,CAA2B,GAC7B,GAAc,KAAM,EAAkB,6BAA8B,EACxE,CAIE,qBAAI,GACF,OAAO,GAAe,KAAM,EAAkB,oBAClD,CACE,qBAAI,CAAkB,GACpB,GAAe,KAAM,EAAkB,oBAAqB,EAChE,CACE,WAAA,CAAY,GAvGK,IAAC,EAAK,EAAQ,EAAO,EAAP,EAwGQ,EAvGvC,GADkB,EAwGH,KAxGQ,EAwGF,GAvGM,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAuGjD,MAAM,EAlHS,EAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAgHrB,CAAa,KAAM,cAA6B,aACjE,EAAQ,KAAK,kBAAoB,IAAI,EAAW,YACpD,EAAc,8BACd,CAAE,UAAU,EAAM,SAAS,IACzB,IAAI,EAAW,YACjB,EAAc,+BACd,CAAE,UAAU,EAAM,SAAS,EAAM,OAAQ,IAE3C,KAAK,cAAc,EACvB,EAEA,GAAmB,IAAI,QACvB,GAAsB,oBA/FtB,SAA6B,GAC3B,qCAIa,EAAkB,0IAMb,EAAkB,+HAIvB,EAAkB,sEACb,EAAkB,uiBAWtC,EAqEA,GAAsB,sBApEtB,WACE,0CAG+B,EAAE,kEACH,EAAE,oCAGlC,EA6DK,EAAW,eAAe,IAAI,4BACjC,EAAW,eAAe,OACxB,0BACA,IAGD,IAAC,GAAkC,GCrItC,MAAM,mBAAE,GAAkB,aAAE,IAAiB,GACvC,2BAAE,GAA0B,mBAAE,IAAuB,EA4C3D,MAAM,GAAwB,IAC5B,IAAI,EACJ,MAAM,EAAoB,EAAG,cAAgB,EAAG,gBAC1C,EAA4B,EAApB,EAAsB,eAAoB,gBACxD,EAAG,aAAa,aAAc,GAC9B,MAAM,EAAmC,OAAvB,EAAK,EAAG,iBAAsB,EAAS,EAAG,cAAc,qBACtE,IACF,EAAS,YAAc,EAAE,SAC3B,EAAoB,EAAG,gBAAgB,iBAAmB,EAAG,aAAa,gBAAiB,OAAO,EAEpG,MAAM,WAAwB,GAC5B,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,GACA,GAEN,CACE,iBAAA,GACE,MAAM,oBACN,GAAqB,KACzB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GACnD,GAAqB,KACzB,CAIE,eAAI,GACF,OAAO,GAAe,KAAM,EAAkB,aAClD,CACE,eAAI,CAAY,GACd,GAAe,KAAM,EAAkB,aAAc,EACzD,CAIE,mBAAI,GACF,OAAO,GAAe,KAAM,EAAkB,mBAClD,CACE,mBAAI,CAAgB,GAClB,GAAe,KAAM,EAAkB,mBAAoB,EAC/D,CACE,WAAA,IACO,KAAK,aAAe,KAAK,kBAE9B,KAAK,cACH,IAAI,EAAW,YAAY,GAA4B,CACrD,UAAU,EACV,SAAS,KAGT,KAAK,aAAa,KACpB,KAAK,cACH,IAAI,EAAW,YAAY,GAAoB,CAC7C,UAAU,EACV,SAAS,KAInB,EAEA,GAAgB,oBAzGhB,SAA6B,GAC3B,yWAea,YAA4B,iDAC5B,YAA4B,mNAK5B,YAA4B,qUAgBc,EAAE,oBAG3D,EAiEK,EAAW,eAAe,IAAI,sBACjC,EAAW,eAAe,OAAO,oBAAqB,IAErD,ICnGC,GAAkB,GDmGlB,GAA4B,GCrH5B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAiBT,MAAM,GACW,eADX,GAES,aAsEf,MAAM,WAA8B,EAAW,YAC7C,WAAA,GAIE,GAHA,QACA,GAAa,KAAM,QAAkB,GACrC,GAAa,KAAM,GAxEO,MAyErB,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CACA,CACE,6BAAW,GACT,MAAO,CACL,EAA6B,iBAC7B,EAAkB,aAClB,EAAkB,cAClB,GAEN,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,IAAa,IAA4B,IAAa,EACxD,KAAK,aAAe,OAAO,GAClB,IAAa,EAA6B,mBAC/C,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAGjI,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EACZ,MAAM,EAAoB,KAAK,aAC7B,EAA6B,kBAE3B,IACF,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eACnF,IAE2F,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,MAE/H,CACE,oBAAA,GACE,IAAI,EAAI,EACuF,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,KACzC,CAIE,gBAAI,GACF,OAAO,GAAa,KAAM,GAC9B,CACE,gBAAI,CAAa,GACf,GAAa,KAAM,GAAQ,GAC3B,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,SACtD,EAAM,YACJ,6BACA,mDAAmD,OAEzD,CAIE,eAAI,GACF,OAAO,GAAe,KAAM,EAAkB,aAClD,CACE,eAAI,CAAY,GACd,GAAe,KAAM,EAAkB,aAAc,EACzD,CAIE,gBAAI,GACF,OAAO,GAAe,KAAM,EAAkB,cAClD,CACE,gBAAI,CAAa,GACf,GAAe,KAAM,EAAkB,cAAe,EAC1D,CACE,mBAAI,GACF,OAAO,GAAc,KAAM,EAA6B,iBAC5D,CACE,mBAAI,CAAgB,GAClB,GAAc,KAAM,EAA6B,iBAAkB,EACvE,CACE,cAAI,GACF,OAAO,GAAe,KAAM,GAChC,CACE,cAAI,CAAW,GACb,GAAe,KAAM,GAAwB,EACjD,EAEA,GAAmB,IAAI,QACvB,GAAS,IAAI,QACb,GAAsB,kBAAoB,CAAE,KAAM,QAClD,GAAsB,gBAxJtB,SAAyB,GACvB,8lBAuBa,EAAkB,uBAAuB,EAAkB,sDAC3D,EAAkB,uBAAuB,EAAkB,oVAU3D,EAAkB,uBAAuB,EAAkB,48BAclB,EAAE,4BAG1D,EAqGK,EAAW,eAAe,IAAI,4BACjC,EAAW,eAAe,OACxB,0BACA,IAGD,IAAC,GAAkC,GC9MtC,MAGM,GAAU,+IAoDhB,MAAM,GAAmB,IACvB,MAAM,EAAgC,QAAxB,EAAG,iBACX,EAAgB,EAAR,EAAU,SAAc,QACtC,EAAG,aAAa,aAAc,EAAM,EAEtC,MAAM,WAAwB,GAC5B,6BAAW,GACT,MAAO,IAAI,MAAM,mBAAoB,EAAkB,mBAC3D,CACE,iBAAA,GACE,MAAM,oBACN,GAAgB,KACpB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,oBACjC,GAAgB,KAEtB,CAIE,oBAAI,GACF,OAAO,GAAc,KAAM,EAAkB,mBACjD,CACE,oBAAI,CAAiB,GACnB,GAAc,KAAM,EAAkB,mBAAoB,EAC9D,CACE,WAAA,GACE,MAAM,EAAsC,QAA1B,KAAK,iBAA6B,EAAc,qBAAuB,EAAc,mBACvG,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CAAE,UAAU,EAAM,SAAS,IAEvE,EAEA,GAAgB,oBAjFhB,SAA6B,GAC3B,0CAIkB,EAAkB,8EACvB,EAAkB,iIAIlB,EAAkB,+HAIlB,EAAkB,+HAIlB,EAAkB,0IAIb,EAAkB,sEACvB,EAAkB,ujBAOR,wCACG,gQAK5B,EA8CA,GAAgB,sBA7ChB,WACE,yCAG8B,EAAE,mDACA,EAAE,sBAGpC,EAsCK,EAAW,eAAe,IAAI,sBACjC,EAAW,eAAe,OAAO,oBAAqB,IAErD,IAAC,GAA4B,GC1FhC,MAAM,GAAU,gLAsChB,MAAM,GAAmB,IACvB,MAAM,EAAQ,EAAG,WAAa,EAAE,gCAAkC,EAAE,iCACpE,EAAG,aAAa,aAAc,EAAM,EAEtC,MAAM,WAAuB,GAC3B,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,aAClB,EAAkB,sBAExB,CACE,iBAAA,GACE,MAAM,oBACN,GAAgB,KACpB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,cACjC,GAAgB,KAEtB,CAIE,uBAAI,GACF,OAAO,GAAc,KAAM,EAAkB,sBACjD,CACE,uBAAI,CAAoB,GACtB,GAAc,KAAM,EAAkB,sBAAuB,EACjE,CAIE,cAAI,GACF,OAAO,GAAe,KAAM,EAAkB,aAClD,CACE,cAAI,CAAW,GACb,GAAe,KAAM,EAAkB,aAAc,EACzD,CACE,WAAA,GACE,MAAM,EAAY,KAAK,WAAa,EAAc,uBAAyB,EAAc,wBACzF,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CAAE,UAAU,EAAM,SAAS,IAEvE,EAEA,GAAe,oBAlFf,SAA6B,GAC3B,qCAIa,EAAkB,2HAIb,EAAkB,wHAIvB,EAAkB,+DACb,EAAkB,gJAMX,sCACD,4BAI1B,EA0DA,GAAe,sBAzDf,WACE,0CAG+B,EAAE,0EACH,EAAE,4CAGlC,EAkDK,EAAW,eAAe,IAAI,qBACjC,EAAW,eAAe,OAAO,mBAAoB,IAEpD,ICvFC,GDuFA,GAA2B,GChG3B,GAAe,CAAC,EAAK,EAAQ,KAJb,EAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAGlC,CAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAchD,MAAM,GACG,QAEH,GAAgB,CAAC,EAAG,IAAK,IAAK,IAAK,GAmBzC,MAAM,WAAgC,GACpC,WAAA,GACE,IAAI,EACJ,QArCe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAmClE,CAAa,KAAM,GAAQ,IAAI,GAAmB,KAAM,GAAkB,CACxE,aAAc,MAEhB,KAAK,UAAY,KAAK,WAAW,cAAc,qBAC/C,KAAK,UAAU,UAAY,GAAoC,OAAhC,EAAK,KAAK,mBAA6B,EA1BrD,IA2BrB,CACE,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,oBAClB,GAEN,CACE,wBAAA,CAAyB,EAAU,EAAU,GAK3C,GAJA,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,KACf,GAAa,KAAM,IAAQ,MAAQ,GAEjC,IAAa,EAAkB,oBAAqB,CACtD,MAAM,EAAkB,GAAY,EAAW,OAAO,IAChD,EAAgB,OAAO,MAAM,GA1CpB,EA0CuC,EACtD,KAAK,UAAU,UAAY,GAAG,KAC9B,KAAK,aACH,aACA,EAAE,+BAAgC,CAAE,iBAE5C,CACA,CAIE,SAAI,GACF,OAAO,GAAa,KAAM,GAC9B,CAKE,SAAI,CAAM,GACH,EAEM,MAAM,QAAQ,GACvB,GAAa,KAAM,IAAQ,MAAQ,EAAM,KAAK,KACpB,iBAAV,IAChB,GAAa,KAAM,IAAQ,MAAQ,GAJnC,GAAa,KAAM,IAAQ,MAAQ,EAMzC,CAIE,qBAAI,GACF,OAAO,EACL,KACA,EAAkB,oBA3EH,EA8ErB,CACE,qBAAI,CAAkB,GACpB,EAAe,KAAM,EAAkB,oBAAqB,EAChE,CACE,WAAA,GACE,IAAI,EAAI,EACR,MAAM,EAAiB,MAAM,KAAK,GAAa,KAAM,IAAQ,UAAW,IAAS,IAAK,MACpF,CAAC,EAAG,IAAM,EAAI,IAEV,EAAkH,OAAxG,EAAsE,OAAhE,EAAK,EAAe,MAAM,GAAM,EAAI,KAAK,qBAA8B,EAAK,EAAe,IAAc,EAvF9G,EAwFX,EAAM,IAAI,EAAW,YACzB,EAAc,4BACd,CAAE,UAAU,EAAM,SAAS,EAAM,WAEnC,KAAK,cAAc,EACvB,EAEA,GAAS,IAAI,QACb,GAAwB,oBA/FxB,SAA6B,GAC3B,oMASsB,EAAyB,mBAX5B,eAcrB,EAmFA,GAAwB,sBAlFxB,WACE,OAAO,EAAE,gBACX,EAiFK,EAAW,eAAe,IAAI,+BACjC,EAAW,eAAe,OACxB,6BACA,IAGD,IAAC,GAAqC,GCrFzC,MAAM,GAAmB,IACvB,MAAM,EAAQ,EAAG,YAAc,EAAE,QAAU,EAAE,SAC7C,EAAG,aAAa,aAAc,EAAM,EAEtC,MAAM,WAAwB,GAC5B,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,aAClB,EAAkB,YAExB,CACE,iBAAA,GACE,MAAM,oBACN,GAAgB,KACpB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,cAAgB,IAAa,EAAkB,YAChF,GAAgB,KAEtB,CAIE,eAAI,GACF,OAAO,GAAe,KAAM,EAAkB,aAClD,CACE,eAAI,CAAY,GACd,GAAe,KAAM,EAAkB,aAAc,EACzD,CACE,WAAA,GACE,MAAM,EAAY,KAAK,YAAc,EAAc,mBAAqB,EAAc,oBACtF,KAAK,cACH,IAAI,EAAW,YAAY,EAAW,CAAE,UAAU,EAAM,SAAS,IAEvE,EAEA,GAAgB,oBAtEhB,SAA6B,GAC3B,qCAIa,EAAkB,uDACb,EAAkB,iGAIvB,EAAkB,+DACb,EAAkB,iYAWtC,EAiDA,GAAgB,sBAhDhB,WACE,yCAG8B,EAAE,kDACD,EAAE,qBAGnC,EAyCK,EAAW,eAAe,IAAI,sBACjC,EAAW,eAAe,OAAO,oBAAqB,IAErD,IAAC,GAA4B,GCpFhC,MAAM,GACa,iBADb,GAEC,MAoCP,MAAM,WAAyB,EAAW,YACxC,6BAAW,GACT,MAAO,CAAC,GAA4B,GACxC,CACE,WAAA,GAEE,GADA,SACK,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CACI,KAAK,MAAQ,KAAK,WAAW,cAAc,SAC/C,CACE,wBAAA,CAAyB,EAAU,EAAU,GACvC,IAAa,KACC,MAAZ,EACF,KAAK,MAAM,gBAAgB,IAE3B,KAAK,MAAM,aAAa,GAAgB,IAGxC,IAAa,KACC,MAAZ,EACmB,KAAK,MA5B7B,MAAM,eAAe,oBAEC,EAAC,EAAI,KAC9B,EAAG,MAAM,oBAAsB,QAAQ,KAAS,EA2B1C,CAAmB,KAAK,MAAO,GAGvC,CAIE,kBAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,kBAAI,CAAe,GACjB,GAAc,KAAM,GAAgB,EACxC,CAIE,OAAI,GACF,OAAO,GAAc,KAAM,GAC/B,CACE,OAAI,CAAI,GACN,GAAc,KAAM,GAAgB,EACxC,EAEA,GAAiB,kBAAoB,CAAE,KAAM,QAC7C,GAAiB,gBAnFjB,SAAyB,GACvB,MAEE,ovBAwBJ,EAyDK,EAAW,eAAe,IAAI,uBACjC,EAAW,eAAe,OAAO,qBAAsB,IAEtD,IC3EC,GD2EA,GAA6B,GC7F7B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAsBpC,MAAM,WAAmC,GACvC,WAAA,GAZiB,IAAC,EAAK,EAAQ,EAAO,EAapC,QAlBe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAgBlE,CAAa,KAAM,QAAO,GAdV,EAeH,KAfQ,EAeF,GAfU,EAeH,KAAK,WAAW,cAAc,QAd1D,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,EAcrD,CACE,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,sBAClB,EAAkB,WAExB,CACE,wBAAA,CAAyB,EAAU,EAAU,GAE3C,GADA,MAAM,yBAAyB,EAAU,EAAU,IAC/C,IAAa,EAAkB,uBAAyB,IAAa,EAAkB,aACrF,IAAa,GAAwB,MAAZ,EAE3B,IAtCY,EAqCC,KArCI,EAqCE,GApCzB,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAmCd,YAAc,EACvB,KAAb,EAAiB,CACnB,MAAM,EAAgB,EAAE,yBAA0B,CAChD,YAAa,IAEf,KAAK,aAAa,iBAAkB,EAC9C,MACU,KAAK,gBAAgB,kBA5CZ,IAAC,EAAK,EAAQ,CAgDjC,CAIE,uBAAI,GACF,OAAO,GAAc,KAAM,EAAkB,sBACjD,CACE,uBAAI,CAAoB,GACtB,GAAc,KAAM,EAAkB,sBAAuB,EACjE,EAEA,GAAQ,IAAI,QACP,EAAW,eAAe,IAAI,kCACjC,EAAW,eAAe,OACxB,gCACA,IAGD,ICpDC,GDoDA,GAAwC,GCtExC,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAO5C,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAkCT,MAAM,WAA8B,EAAW,YAC7C,WAAA,GAGE,GAFA,QA5Ce,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EA0ClE,CAAa,KAAM,QAAkB,IAChC,KAAK,WAAY,CACpB,KAAK,aAAa,KAAK,YAAY,mBACnC,MAAM,EAAQ,EAAqB,KAAK,YACxC,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgB,EACnE,CACA,CACE,6BAAW,GACT,MAAO,CACL,EAA6B,iBAC7B,EAAkB,oBAClB,EAAkB,qBAExB,CACE,iBAAA,GACE,IAAI,EAAI,EAAI,EACZ,MAAM,EAAoB,KAAK,aAC7B,EAA6B,kBAE3B,IACF,GACE,KACA,GAE6B,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IAE4B,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,MAE/H,CACE,oBAAA,GACE,IAAI,EAAI,EACuF,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,KACzC,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EAChB,CACF,EAAkB,oBAClB,EAAkB,sBAClB,SAAS,IACT,KAAK,SAEH,IAAa,EAA6B,mBACxC,IAC6F,OAA9F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,qBAAuC,EAAG,KAAK,EAAI,MAC3H,GAAa,KAAM,GAAkB,OAEnC,GAAY,KAAK,cACnB,GAAa,KAAM,GAA+C,OAA5B,EAAK,KAAK,oBAAyB,EAAS,EAAG,eAAe,IACP,OAA5F,EAAoD,OAA9C,EAAK,GAAa,KAAM,UAA6B,EAAS,EAAG,mBAAqC,EAAG,KAAK,EAAI,OAGjI,CAIE,qBAAI,GACF,OAAO,GAAc,KAAM,EAAkB,oBACjD,CACE,qBAAI,CAAkB,GACpB,GAAc,KAAM,EAAkB,oBAAqB,EAC/D,CAIE,sBAAI,GACF,MAAM,EAAU,KAAK,aAAa,EAAkB,sBACpD,GAAK,EAEL,OAAO,EAAQ,MAAM,OAAO,KAAK,IAAW,GAChD,CACE,sBAAI,CAAmB,GAChB,EAIL,KAAK,aAAa,EAAkB,qBAAsB,EAAM,KAAK,MAHnE,KAAK,gBAAgB,EAAkB,qBAI7C,CACE,MAAA,GACE,MAAM,EAAS,KAAK,mBACd,EAAe,KAAK,kBAC1B,IAAM,IAAU,EACd,OACF,MAAO,EAAG,EAAG,EAAG,GAAK,EACf,EAAM,EAAa,MAAM,KAAK,GAC9B,EAAgB,iBAAiB,OACjC,SAAE,EAAQ,UAAE,EAAS,SAAE,EAAQ,UAAE,GAAc,EAC/C,EAAW,KAAK,IAAI,SAAS,GAAY,EAAG,SAAS,GAAa,GAClE,EAAW,KAAK,IAAI,SAAS,GAAY,EAAG,SAAS,GAAa,GAClE,EAAgB,EAAW,EAC3B,EAAQ,EAAgB,EAAW,EAAW,EAAI,EAAW,GAC7D,MAAE,GAAU,EAAmB,KAAK,WAAY,SAChD,EAAW,EAAmB,KAAK,WAAY,OAAO,MACtD,EAAM,KAAK,WAAW,cAAc,OACpC,EAAW,EAAgB,MAAQ,MACzC,EAAM,YAAY,GAAG,UAAkB,UAAW,aAClD,EAAM,YAAY,GAAG,WAAmB,UAAW,aACnD,EAAM,MAAW,EAAI,EAAP,KACd,EAAM,OAAY,EAAI,EAAP,KACf,MAAM,EAAS,KACb,EAAS,MAAW,KAAK,SAAW,EAAnB,KACjB,EAAS,OAAY,KAAK,UAAY,EAApB,KAClB,EAAS,QAAU,OAAO,EAExB,EAAI,MAAQ,IACd,EAAI,OAAS,KACX,KAAK,SAAW,EAAI,aACpB,KAAK,UAAY,EAAI,cACrB,GAAQ,EAEV,EAAI,IAAM,EACV,KAEF,IACA,EAAS,UAAY,cAAc,EAAI,SAAa,EAAI,MAC5D,EAEA,GAAmB,IAAI,QACvB,GAAsB,kBAAoB,CAAE,KAAM,QAClD,GAAsB,gBA9ItB,SAAyB,GACvB,MAEE,gWAgBJ,EA4HK,EAAW,eAAe,IAAI,4BACjC,EAAW,eAAe,OACxB,0BACA,IAGD,ICjKC,GDiKA,GAAkC,GCnLlC,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAkBhD,MAAM,WAAgC,GACpC,WAAA,GAZiB,IAAC,EAAK,EAAQ,EAAO,EAapC,QAlBe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAgBlE,CAAa,KAAM,QAAO,GAdV,EAeH,KAfQ,EAeF,GAfU,EAeH,KAAK,WAAW,cAAc,QAd1D,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAcjD,GAAa,KAAM,IAAO,YAAc,EAAW,EACvD,CACE,6BAAW,GACT,MAAO,IAAI,MAAM,mBAAoB,EAAkB,mBAC3D,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,oBAAkC,MAAZ,IACvD,GAAa,KAAM,IAAO,YAAc,EAAW,WAAW,IAEpE,CAIE,oBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,mBAClD,CACE,oBAAI,CAAiB,GACnB,EAAe,KAAM,EAAkB,mBAAoB,EAC/D,EAEA,GAAQ,IAAI,QACP,EAAW,eAAe,IAAI,+BACjC,EAAW,eAAe,OACxB,6BACA,IAGD,IAAC,GAAqC,GCpDzC,MAAM,GACS,aAuBf,MAAM,WAAgC,GACpC,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,mBAClB,GAEN,CACE,iBAAA,GACE,MAAM,oBACN,KAAK,WAAa,EAChB,KACA,GAjCsB,GAoC5B,CACE,wBAAA,CAAyB,EAAU,EAAW,GAC5C,MAAM,yBAAyB,EAAU,EAAW,GAChD,IAAa,KACf,KAAK,WAAa,EAChB,KACA,GA1CoB,IA8C5B,CAKE,cAAI,GACF,OAAO,EAAe,KAAM,GApDJ,GAqD5B,CACE,cAAI,CAAW,GACb,EAAe,KAAM,GAAwB,GAC7C,KAAK,aACH,aACA,EAAE,iCAAkC,CAAE,WAAY,KAAK,cAEzD,EAAe,EAAW,KAAM,QAAS,KAAK,WAClD,CAKE,oBAAI,GACF,OAAO,EACL,KACA,EAAkB,mBAjDH,EAoDrB,CACE,oBAAI,CAAiB,GACnB,EAAe,KAAM,EAAkB,mBAAoB,EAC/D,CACE,WAAA,GACE,MAAM,EAAS,KAAK,IAAI,KAAK,iBAAmB,KAAK,WAAY,GAC3D,EAAM,IAAI,EAAW,YAAY,EAAc,mBAAoB,CACvE,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,EACvB,EAEA,GAAwB,oBA7ExB,SAA6B,EAAQ,GACnC,iCAToB,EAYe,EAAM,WAZN,yOAK4B,gIAL5C,IAAC,CAetB,EAuEA,GAAwB,sBAtExB,WACE,OAAO,EAAE,gBACX,EAqEK,EAAW,eAAe,IAAI,+BACjC,EAAW,eAAe,OACxB,6BACA,IAGD,IAAC,GAAqC,GCjGzC,MAAM,GACS,aAuBf,MAAM,WAA+B,GACnC,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,mBAClB,GAEN,CACE,iBAAA,GACE,MAAM,oBACN,KAAK,WAAa,EAChB,KACA,GAjCsB,GAoC5B,CACE,wBAAA,CAAyB,EAAU,EAAW,GAC5C,MAAM,yBAAyB,EAAU,EAAW,GAChD,IAAa,KACf,KAAK,WAAa,EAChB,KACA,GA1CoB,IA8C5B,CAKE,cAAI,GACF,OAAO,EAAe,KAAM,GApDJ,GAqD5B,CACE,cAAI,CAAW,GACb,EAAe,KAAM,GAAwB,GAC7C,KAAK,aACH,aACA,EAAE,oCAAqC,CAAE,WAAY,KAAK,cAE5D,EAAe,EAAW,KAAM,QAAS,KAAK,WAClD,CAKE,oBAAI,GACF,OAAO,EACL,KACA,EAAkB,mBAjDH,EAoDrB,CACE,oBAAI,CAAiB,GACnB,EAAe,KAAM,EAAkB,mBAAoB,EAC/D,CACE,WAAA,GACE,MAAM,EAAS,KAAK,iBAAmB,KAAK,WACtC,EAAM,IAAI,EAAW,YAAY,EAAc,mBAAoB,CACvE,UAAU,EACV,SAAS,EACT,WAEF,KAAK,cAAc,EACvB,EAEA,GAAuB,oBA7EvB,SAA6B,EAAQ,GACnC,iCATmB,EAYe,EAAM,WAZN,wOAK4B,gIAL5C,IAAC,CAerB,EAuEA,GAAuB,sBAtEvB,WACE,OAAO,EAAE,eACX,EAqEK,EAAW,eAAe,IAAI,8BACjC,EAAW,eAAe,OACxB,4BACA,IAGD,ICpFC,GDoFA,GAAoC,GCtGpC,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAyBhD,MAAM,GAAa,CACjB,UAAW,YACX,cAAe,eACf,UAAW,YAEP,GAAqB,IACtB,OAAO,OAAO,IACjB,EAAkB,mBAClB,EAAkB,eAClB,EAAkB,gBAEd,GAAoB,CAAC,QAAS,KAE9B,GAAmB,CAAC,GAAM,WADN,iBACuC,MAC/D,IAAI,EAAI,EACR,MAAM,EAA4C,OAA7B,EAAK,EAAG,kBAA4B,EAAK,GACxD,CAAG,GAA0C,OAA1B,EAAK,EAAG,eAAyB,EAAK,GAC/D,IAAI,EAAU,EACV,OAAO,SAAS,EAAG,eACrB,EAAU,EAAG,cACJ,OAAO,SAAS,KACzB,EAAU,GAEZ,MAAM,EAAY,EAAG,UAAY,EAAW,GAAK,EAAU,IAAgB,EAAW,GACtF,OAAK,EAAG,aAED,GAAG,IAAY,IAAW,EAAW,KADnC,CAC6C,EAkCxD,MAAM,WAAyB,GAC7B,WAAA,GA/EiB,IAAC,EAAK,EAAQ,EAAO,EAgFpC,QArFe,EAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAmFlE,CAAa,KAAM,QAAO,GAjFV,EAkFH,KAlFQ,EAkFF,GAlFU,EAkFH,KAAK,WAAW,cAAc,QAjF1D,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAiFjD,GAAa,KAAM,IAAO,UAAY,GAAG,GAAiB,OAC9D,CACE,6BAAW,GACT,MAAO,IAAI,MAAM,sBAAuB,GAAoB,WAChE,CACE,iBAAA,GACE,MAAM,MAAE,GAAU,EAChB,KAAK,WACL,iCAEF,EAAM,YAAY,SAAU,gCAC5B,EAAM,YACJ,aACA,8DAEG,KAAK,aAAa,aACrB,KAAK,SAEP,KAAK,aAAa,OAAQ,eAC1B,KAAK,aAAa,aAAc,EAAE,kBAClC,MAAM,EAAgB,IACpB,MAAM,IAAE,GAAQ,EACX,GAAkB,SAAS,GAIhC,KAAK,oBAHH,KAAK,oBAAoB,QAAS,EAGZ,EAE1B,KAAK,iBAAiB,WAAY,IAChC,MAAM,QAAE,EAAO,OAAE,EAAM,IAAE,GAAQ,EAC7B,GAAW,IAAW,GAAkB,SAAS,GACnD,KAAK,oBAAoB,QAAS,GAGpC,KAAK,iBAAiB,QAAS,EAAa,IAE9C,KAAK,iBAAiB,QAAS,KAAK,mBACpC,MAAM,mBACV,CACE,iBAAA,GACM,KAAK,WAGL,KAAK,aAAa,aACpB,KAAK,gBAAgB,aAErB,KAAK,aAAa,YAAa,IAErC,CACE,oBAAA,GACE,KAAK,UACL,MAAM,sBACV,CACE,wBAAA,CAAyB,EAAU,EAAU,GACvC,GAAmB,SAAS,GAC9B,KAAK,SACiB,aAAb,GAA2B,IAAa,IACjC,MAAZ,EACF,KAAK,SAEL,KAAK,WAGT,MAAM,yBAAyB,EAAU,EAAU,EACvD,CACE,MAAA,GACE,KAAK,SAAW,CACpB,CACE,OAAA,GACE,KAAK,UAAY,CACrB,CAKE,aAAI,GACF,OAAO,GAAe,KAAM,GAAW,UAC3C,CACE,aAAI,CAAU,GACZ,GAAe,KAAM,GAAW,UAAW,EAC/C,CAIE,gBAAI,GACF,OAAO,GAAe,KAAM,GAAW,cAC3C,CACE,gBAAI,CAAa,GACf,GAAe,KAAM,GAAW,cAAe,EACnD,CAIE,YAAI,GACF,OAAO,GAAe,KAAM,GAAW,UAC3C,CACE,YAAI,CAAS,GACX,GAAe,KAAM,GAAW,UAAW,EAC/C,CAKE,iBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,eAClD,CACE,iBAAI,CAAc,GAChB,EAAe,KAAM,EAAkB,eAAgB,EAC3D,CAIE,oBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,mBAClD,CACE,oBAAI,CAAiB,GACnB,EAAe,KAAM,EAAkB,mBAAoB,EAC/D,CAKE,iBAAI,GACF,MAAM,EAAW,KAAK,aAAa,EAAkB,gBACrD,GAAK,EAEL,OAAO,EAAS,MAAM,KAAK,KAAK,IAAU,GAC9C,CACE,iBAAI,CAAc,GACH,MAAT,EAIJ,KAAK,aAAa,EAAkB,eAAgB,EAAM,KAAK,MAH7D,KAAK,gBAAgB,EAAkB,eAI7C,CACE,MAAA,GACE,MAAM,EAAa,GAAiB,MA5KZ,CAAC,IAC3B,IAAI,EACJ,MAAM,EAAc,EAAG,kBACjB,CAAG,GAA0C,OAA1B,EAAK,EAAG,eAAyB,EAAK,GAC/D,IAAI,EAAU,KAMd,GALI,OAAO,SAAS,EAAG,eACrB,EAAU,EAAG,cACJ,OAAO,SAAS,KACzB,EAAU,GAEO,MAAf,GAAmC,OAAZ,EAEzB,YADA,EAAG,aAAa,iBAZgB,mCAelC,MAAM,EAAoB,EAAG,UAAY,EAAmB,GAAK,EAAU,IAAgB,EAAmB,GAC9G,IAAK,EAAG,aAEN,YADA,EAAG,aAAa,iBAAkB,GAGpC,MACM,EAAa,GAAG,QADE,EAAmB,KAE3C,EAAG,aAAa,iBAAkB,EAAW,EAwJ3C,CAAoB,MAChB,IAAe,GAAa,KAAM,IAAO,YAC3C,GAAa,KAAM,IAAO,UAAY,EAE5C,EAEA,GAAQ,IAAI,QACZ,GAAiB,oBA7JjB,SAA6B,EAAQ,GACnC,qBAGU,GAAiB,eAG7B,EAuJK,EAAW,eAAe,IAAI,uBACjC,EAAW,eAAe,OAAO,qBAAsB,IAEtD,IC1NC,GAAQ,GAAY,GAAe,GAAY,GAAa,GAAkB,GAAmB,GAAoB,GAAK,GD0N1H,GAA6B,GCpP7B,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAWT,MAAM,GACJ,WAAA,CAAY,EAAO,EAAU,GAC3B,GAAa,KAAM,QAAQ,GAC3B,GAAa,KAAM,QAAY,GAC/B,GAAa,KAAM,QAAe,GAClC,GAAa,KAAM,QAAY,GAC/B,GAAa,KAAM,QAAa,GAChC,GAAa,KAAM,QAAkB,GACrC,GAAa,KAAM,QAAmB,GACtC,GAAa,KAAM,QAAoB,GACvC,GAAa,KAAM,GAAK,GACxB,GAAa,KAAM,IAAU,CAAC,EAAM,YAAY,SAC9C,GAAa,KAAM,GAAK,sBAAsB,GAAa,KAAM,MACjE,GAAa,KAAM,GAAY,YAAY,MAAQ,GAAa,KAAM,KACtE,MAAM,EAAc,IAAM,KAAK,IAC/B,GAAI,GAAa,KAAM,IAAc,EAAa,CAChD,GAAa,KAAM,GAAe,EAAM,GAAa,KAAM,IAAc,GACzE,MAAM,EAAM,MAAQ,EAAM,GAAa,KAAM,QA1B7B,EA0B+D,KA1B1D,EA0BgE,GA1B1C,CACjD,KAAI,CAAE,GACJ,GAAa,EAAK,EAAQ,EAAO,EACrC,EACE,KAAI,GACF,OAAO,GAAa,EAAK,EAAQ,EACrC,IAoB0G,GAC5F,GAAS,EAAM,GAAa,KAAM,KAAqB,IAAM,KAAK,SACxE,IAAI,EAAQ,GAAa,KAAM,IAAqB,EAAQ,KAAK,aAChD,EAAQ,GAAa,KAAM,IAAQ,cACrC,EACb,GAAa,KAAM,GAAoB,KAAK,aAAe,KAAK,SAAW,IAE3E,GAAa,KAAM,GAAoB,KAAQ,GAAa,KAAM,KAClE,EAAQ,GAAa,KAAM,IAAQ,cAAgB,GAAa,KAAM,KAExE,KAAK,SAAS,EACtB,CArCuB,IAAC,EAAK,EAAQ,EAAQ,CAqC7C,IAEI,GAAa,KAAM,GAAQ,GAC3B,KAAK,SAAW,EAChB,KAAK,IAAM,CACf,CACE,KAAA,GACkC,IAA5B,GAAa,KAAM,MAEvB,GAAa,KAAM,GAAe,YAAY,OAC9C,GAAa,KAAM,GAAY,GAAa,KAAM,KAClD,GAAa,KAAM,GAAa,GAChC,GAAa,KAAM,IAAU,KAAK,MACtC,CACE,IAAA,GACkC,IAA5B,GAAa,KAAM,MAEvB,qBAAqB,GAAa,KAAM,KACxC,GAAa,KAAM,GAAK,GAC5B,CACE,MAAA,EAAO,MAAE,EAAK,SAAE,EAAQ,aAAE,IACxB,MAAM,EAAW,EAAQ,GAAa,KAAM,IAAQ,cAC9C,EAAgB,KAAK,IAAI,EAAW,KAAK,WAC3C,EAAW,GAAK,GAAY,KAAQ,GAAiB,KACvD,KAAK,SAAS,GAEhB,GAAa,KAAM,GAAmB,GACtC,GAAa,KAAM,GAAkB,YAAY,OACjD,KAAK,SAAW,EAChB,KAAK,aAAe,CACxB,EAEA,GAAS,IAAI,QACb,GAAa,IAAI,QACjB,GAAgB,IAAI,QACpB,GAAa,IAAI,QACjB,GAAc,IAAI,QAClB,GAAmB,IAAI,QACvB,GAAoB,IAAI,QACxB,GAAqB,IAAI,QACzB,GAAM,IAAI,QACV,GAAW,IAAI,QChGf,IAsBI,GAAW,GAAY,GAAQ,GAAc,GAAa,GAAa,GAAiB,GAAkB,GAAoB,GAAgB,GAAuB,GAAyB,GAAqB,GAAuB,GAAc,GAAkB,GAAoB,GAAiB,GAAmB,GAAsB,GAAwB,GAAoB,GAAsB,GAAiB,GAAmB,GAAc,GAtB5c,GAAgB,CAAC,EAAK,EAAQ,KAChC,IAAK,EAAO,IAAI,GACd,MAAM,UAAU,UAAY,EAAI,EAEhC,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAc,EAAK,EAAQ,2BACpB,EAAS,EAAO,KAAK,GAAO,EAAO,IAAI,IAE5C,GAAe,CAAC,EAAK,EAAQ,KAC/B,GAAI,EAAO,IAAI,GACb,MAAM,UAAU,qDAClB,aAAkB,QAAU,EAAO,IAAI,GAAO,EAAO,IAAI,EAAK,EAAM,EAElE,GAAe,CAAC,EAAK,EAAQ,EAAO,KACtC,GAAc,EAAK,EAAQ,0BAC3B,EAAS,EAAO,KAAK,EAAK,GAAS,EAAO,IAAI,EAAK,GAC5C,GAEL,GAAkB,CAAC,EAAK,EAAQ,KAClC,GAAc,EAAK,EAAQ,yBACpB,GA4QT,MAAM,GAAyB,CAAC,EAAI,EAAO,EAAG,oBAC5C,MAAM,EAAY,OAAO,SAAS,EAAG,oBAAsB,EAAG,mBAAqB,EAC7E,EAAU,OAAO,SAAS,EAAG,eAAiB,EAAG,cAAgB,EAAG,iBAC1E,GAAI,OAAO,MAAM,GACf,OAAO,EACT,MAAM,GAAS,EAAO,IAAc,EAAU,GAC9C,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAO,GAAG,EAElC,GAAyB,CAAC,EAAI,EAAQ,EAAG,MAAM,iBACnD,MAAM,EAAY,OAAO,SAAS,EAAG,oBAAsB,EAAG,mBAAqB,EAC7E,EAAU,OAAO,SAAS,EAAG,eAAiB,EAAG,cAAgB,EAAG,iBAC1E,OAAI,OAAO,MAAM,GACR,EACF,GAAS,EAAU,GAAa,CAAS,EAElD,MAAM,WAAuB,GAC3B,WAAA,GACE,QACA,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IAMnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,IACnB,GAAa,KAAM,QAAW,GAC9B,GAAa,KAAM,QAAY,GAC/B,GAAa,KAAM,QAAQ,GAC3B,GAAa,KAAM,QAAc,GACjC,GAAa,KAAM,QAAa,GAChC,GAAa,KAAM,QAAa,GAChC,GAAa,KAAM,QAAiB,GACpC,GAAa,KAAM,QAAkB,GACrC,GAAa,KAAM,QAAoB,GACvC,GAAa,KAAM,QAAgB,GACnC,GAAa,KAAM,IAAe,IAC5B,KAAK,WAEL,EAAc,KAChB,KAAK,MAAM,cAAgB,GAExB,GAAa,KAAM,KACtB,KAAK,YACb,IAEkB,KAAK,WAAW,cAAc,UACtC,mBACJ,aACA,6CAEF,GAAa,KAAM,GAAQ,KAAK,WAAW,iBAAiB,kBAC5D,GAAa,KAAM,GAAa,KAAK,WAAW,cAAc,0BAC9D,GAAa,KAAM,GAAa,KAAK,WAAW,cAAc,0BAC9D,MAAM,EAAgB,iBAAiB,MACvC,GAAa,KAAM,GAAiB,SAClC,EAAc,iBAAiB,8BAEjC,GAAa,KAAM,GAAkB,SACnC,EAAc,iBAAiB,+BAEjC,GAAa,KAAM,GAAY,IAAI,GAAe,KAAK,MAAO,GAAa,KAAM,IAAe,IACpG,CACE,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,aAClB,EAAkB,eAClB,EAAkB,eAClB,EAAkB,mBAClB,EAAkB,oBAClB,EAAkB,mBAClB,EAAkB,sBAClB,EAAkB,eAClB,EAAkB,oBAClB,EAAkB,cAClB,EAAkB,YAExB,CACE,iBAAA,GACE,IAAI,EACJ,MAAM,oBACN,KAAK,MAAM,aAAa,aAAc,EAAE,SACxC,GAAgB,KAAM,GAAuB,IAAyB,KAAK,MAC3E,GAAa,KAAM,GAAW,KAAK,eACK,OAAvC,EAAK,GAAa,KAAM,MAA+B,EAAG,iBAAiB,kBAAmB,KACnG,CACE,oBAAA,GACE,IAAI,EACJ,MAAM,uBACN,GAAgB,KAAM,GAAuB,IAAyB,KAAK,MACnC,OAAvC,EAAK,GAAa,KAAM,MAA+B,EAAG,oBAAoB,kBAAmB,MAClG,GAAa,KAAM,GAAW,KAClC,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,GAAY,IAEZ,IAAa,EAAkB,oBAAsB,IAAa,EAAkB,cAAgB,IAAa,EAAkB,aAAe,IAAa,EAAkB,eAAiB,IAAa,EAAkB,gBAAkB,IAAa,EAAkB,gBACpR,GAAa,KAAM,IAAY,OAAO,CACpC,MAAO,GAAuB,MAC9B,SAAU,KAAK,iBAAmB,KAAK,mBACvC,aAAc,KAAK,oBAErB,GAAgB,KAAM,GAAuB,IAAyB,KAAK,MA9VrD,CAAC,IAC3B,MAAM,EAAQ,EAAG,MACX,EAAoB,GAAoB,GAAuB,IAC/D,EAAkB,GAAoB,EAAG,kBACzC,EAAe,GAAqB,EAAiD,GAAG,QAAwB,IALpF,kCAMlC,EAAM,aAAa,iBAAkB,EAAW,EA0V5C,CAAoB,OACX,IAAa,EAAkB,gBACxC,KAAK,oBAEH,IAAa,EAAkB,gBAAkB,IAAa,EAAkB,iBAClF,KAAK,kBAAoB,GAAa,KAAM,IAC5C,KAAK,aAEX,CACE,qBAAI,GACF,OAAO,GAAa,KAAM,GAC9B,CACE,qBAAI,CAAkB,GACpB,IAAI,EACJ,GAAa,KAAM,GAAoB,GACvC,KAAK,eAC8C,OAAhD,EAAK,GAAa,KAAM,UAA+B,EAAS,EAAG,KAAK,IAAC,CACxE,MAAO,GAAuB,KAAM,EAAE,WACtC,IAAK,GAAuB,KAAM,EAAE,aAG5C,CAIE,eAAI,GACF,OAAO,GAAe,KAAM,EAAkB,aAClD,CACE,eAAI,CAAY,GACd,GAAe,KAAM,EAAkB,aAAc,EACzD,CAIE,gBAAI,GACF,OAAO,GAAe,KAAM,EAAkB,cAClD,CACE,gBAAI,CAAa,GACf,GAAe,KAAM,EAAkB,cAAe,EAC1D,CAIE,iBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,eAClD,CACE,iBAAI,CAAc,GAChB,EAAe,KAAM,EAAkB,eAAgB,EAC3D,CAIE,oBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,mBAClD,CACE,oBAAI,CAAiB,GACnB,EAAe,KAAM,EAAkB,mBAAoB,EAC/D,CAIE,qBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,oBAAqB,EACvE,CACE,qBAAI,CAAkB,GACpB,EAAe,KAAM,EAAkB,oBAAqB,EAChE,CAKE,iBAAI,GACF,MAAM,EAAW,KAAK,aAAa,EAAkB,gBACrD,OAAK,EAEE,EAAS,MAAM,KAAK,KAAK,GAAa,EAAS,MAAM,KAAK,KAAK,IAAa,MAD1E,EAEb,CACE,iBAAI,CAAc,GAChB,IAAK,EAEH,YADA,KAAK,gBAAgB,EAAkB,gBAGzC,MAAM,EAAS,EAAK,KAAK,GAAU,EAAM,KAAK,OAAM,KAAK,KACzD,KAAK,aAAa,EAAkB,eAAgB,EACxD,CAKE,iBAAI,GACF,MAAM,EAAW,KAAK,aAAa,EAAkB,gBACrD,GAAK,EAEL,OAAO,EAAS,MAAM,KAAK,KAAK,IAAU,GAC9C,CACE,iBAAI,CAAc,GACH,MAAT,EAIJ,KAAK,aAAa,EAAkB,eAAgB,EAAM,KAAK,MAH7D,KAAK,gBAAgB,EAAkB,eAI7C,CAIE,oBAAI,GACF,IAAI,EACJ,MAAM,CAAG,EAAM,KAAK,eAA8C,OAA5B,EAAK,KAAK,eAAyB,EAAK,GAC9E,OAAO,CACX,CACE,sBAAI,GACF,IAAI,EACJ,MAAO,EAAQ,GAAkC,OAA5B,EAAK,KAAK,eAAyB,EAAK,GAC7D,OAAO,CACX,CAIE,qBAAI,GACF,OAAO,GAAc,KAAM,EAAkB,oBACjD,CACE,qBAAI,CAAkB,GACpB,GAAc,KAAM,EAAkB,oBAAqB,EAC/D,CAIE,oBAAI,GACF,OAAO,EAAe,KAAM,EAAkB,mBAClD,CACE,oBAAI,CAAiB,GACnB,EAAe,KAAM,EAAkB,mBAAoB,EAC/D,CAIE,cAAI,GACF,OAAO,GAAe,KAAM,EAAkB,YAClD,CACE,cAAI,CAAW,GACb,GAAe,KAAM,EAAkB,YAAa,EACxD,CAEE,SAAA,GACE,MAAM,YACN,KAAK,oBACL,KAAK,kBACT,CACE,iBAAA,GACE,IAAI,EACJ,MAAM,EAAW,KAAK,cACtB,IAAK,EAAS,OACZ,OAEF,IAAI,EACJ,GAAK,KAAK,WAOR,EAAsB,MAPF,CACpB,MAAM,EAAc,KAAK,kBACnB,CAAG,EAAc,KAAK,oBAEtB,OAF6C,EAAK,EAAS,MAC/D,EAAE,EAAO,KAAS,GAAS,GAAe,GAAe,KAC9C,EAAK,GAClB,EAAsB,GAAuB,KAAM,EACzD,CAGI,MAAM,MAAE,GAAU,EAAmB,KAAK,WAAY,aACtD,EAAM,YAAY,QAAkC,IAAtB,EAAH,IAC/B,CACE,gBAAA,GAIE,IAHoB,KAAK,WAAW,cAClC,wBAEe,mBAAmB,OAClC,OACF,MAAM,EAAkB,EACtB,KAAK,WACL,iBAEI,EAAiB,EACrB,KAAK,WACL,yBAEI,EAAQ,GAAgB,KAAM,GAAkB,IAAoB,KAAK,KAAM,GAAa,KAAM,KAClG,EAAS,GAAgB,KAAM,GAAiB,IAAmB,KAAK,KAAM,EAAO,KAAK,MAAM,eAChG,EAAW,GAAgB,KAAM,GAAsB,IAAwB,KAAK,KAAM,EAAO,KAAK,MAAM,eAClH,EAAgB,MAAM,UAAY,cAAc,KAChD,EAAgB,MAAM,YAAY,iBAAkB,GAAG,EAAM,MAAM,SACnE,EAAe,MAAM,YAAY,eAAgB,GAAG,KACpD,EAAe,MAAM,YAAY,eAAgB,GAAG,EAAM,IAAI,WAC9D,EAAe,MAAM,YAAY,aAAc,UACnD,CACE,WAAA,CAAY,GAEV,OADA,MAAM,YAAY,GACV,EAAI,MACV,IAAK,QACH,GAAgB,KAAM,GAAc,IAAgB,KAAK,MACzD,MACF,IAAK,cACH,GAAgB,KAAM,GAAoB,IAAsB,KAAK,KAAM,GAC3E,MACF,IAAK,YACC,GAAa,KAAM,KACrB,GAAa,KAAM,IAAgB,GACrC,MACF,IAAK,cACH,GAAa,KAAM,IAAgB,GACnC,MACF,IAAK,eACH,GAAgB,KAAM,GAAiB,IAAmB,KAAK,KAAM,MACrE,MACF,IAAK,kBACC,EAAqB,EAAI,OAAQ,OACnC,YAAW,IAAM,GAAgB,KAAM,GAAuB,IAAyB,KAAK,OAAO,GAI7G,EAEA,GAAY,IAAI,QAChB,GAAa,IAAI,QACjB,GAAS,IAAI,QACb,GAAe,IAAI,QACnB,GAAc,IAAI,QAClB,GAAc,IAAI,QAClB,GAAkB,IAAI,QACtB,GAAmB,IAAI,QACvB,GAAqB,IAAI,QACzB,GAAiB,IAAI,QACrB,GAAwB,IAAI,QAC5B,GAA0B,WACpB,GAAgB,KAAM,GAAqB,IAAuB,KAAK,MACzE,GAAa,KAAM,IAAY,QAE/B,GAAa,KAAM,IAAY,MAEnC,EACA,GAAsB,IAAI,QAC1B,GAAwB,WACtB,OAAO,KAAK,cAAgB,KAAK,cAAgB,KAAK,eAAiB,KAAK,YAAc,KAAK,iBAAmB,GAAK,EAAiB,KAC1I,EACA,GAAe,IAAI,QACnB,GAAmB,IAAI,QACvB,GAAqB,SAAS,GAC5B,IAAI,EACJ,MACM,GADmI,OAAzH,EAAK,KAAK,aAAa,UAAY,EAAoB,KAAM,IAAI,KAAK,aAAa,aAAe,KAAK,eAAyB,EAAK,MAC3H,wBACpB,EAAY,KAAK,MAAM,wBACvB,EAAQ,EAAI,YAGlB,MAAO,CACL,IAAK,CAAE,QAAO,MAHF,EAAU,KAAO,EAAW,KAAO,EAAQ,GAGpC,IAFT,EAAW,MAAQ,EAAU,KAAO,EAAQ,GAGtD,OAAQ,EACR,MAAO,EAEX,EACA,GAAkB,IAAI,QACtB,GAAoB,SAAS,EAAO,GAClC,IAAI,EAAsB,IAAR,EAAH,IACf,MAAM,MAAE,EAAK,IAAE,EAAG,IAAE,GAAQ,EAAM,IAClC,IAAK,EACH,OAAO,EACT,IAAK,OAAO,MAAM,GAAM,CAGtB,EAAW,OADI,wCAAwC,QAD3C,uCAEiB,IACjC,CACE,IAAK,OAAO,MAAM,GAAM,CAGtB,EAAW,OAAO,MADH,wCAAwC,QAD3C,sCAGhB,CACE,OAAO,CACT,EACA,GAAuB,IAAI,QAC3B,GAAyB,SAAS,EAAO,GACvC,MAAM,MAAE,EAAK,IAAE,EAAG,IAAE,GAAQ,EAAM,IAC5B,EAAW,EAAQ,EAAM,MAAM,MACrC,GAAI,EAAW,EAAM,GAAa,KAAM,IAAkB,CAExD,MAAO,GAAG,EAAW,EAAQ,GADd,EAAM,MAAM,KAAO,EAAM,OAAO,KAAO,GAAa,KAAM,QAE7E,CACE,GAAI,EAAW,EAAM,GAAa,KAAM,IAAmB,CAEzD,OAAU,EAAW,EAAQ,GADd,EAAM,OAAO,MAAQ,EAAM,MAAM,MAAQ,GAAa,KAAM,KACjC,EAAM,MAAM,MAA/C,IACX,CACE,OAAO,CACT,EACA,GAAqB,IAAI,QACzB,GAAuB,SAAS,GAC9B,MAAM,EAAc,IAAI,GAAa,KAAM,KAAS,MACjD,GAAM,EAAI,eAAe,SAAS,KAErC,IAAK,KAAK,WAAa,IAAgB,EAAI,eAAe,SAAS,OAEjE,YADA,GAAgB,KAAM,GAAiB,IAAmB,KAAK,KAAM,MAGvE,MAAM,EAAW,KAAK,iBACtB,IAAK,EACH,OACF,MAAM,EAAkB,EACtB,KAAK,WACL,iBAEI,EAAiB,EACrB,KAAK,WACL,yBAEI,EAAQ,GAAgB,KAAM,GAAkB,IAAoB,KAAK,KAAM,GAAa,KAAM,KACxG,IAAI,GAAgB,EAAI,QAAU,EAAM,MAAM,MAAQ,EAAM,MAAM,MAClE,EAAe,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,IACvC,MAAM,EAAS,GAAgB,KAAM,GAAiB,IAAmB,KAAK,KAAM,EAAO,GACrF,EAAW,GAAgB,KAAM,GAAsB,IAAwB,KAAK,KAAM,EAAO,GACvG,EAAgB,MAAM,UAAY,cAAc,KAChD,EAAgB,MAAM,YAAY,iBAAkB,GAAG,EAAM,MAAM,SACnE,EAAe,MAAM,YAAY,eAAgB,GAAG,KACpD,EAAe,MAAM,YAAY,eAAgB,GAAG,EAAM,IAAI,WAC9D,MAAM,EAAO,KAAK,MAAM,GAAa,KAAM,KAAiB,KAAK,MAAM,EAAe,GAClF,KAAK,IAAI,GAAQ,GAAK,EAAe,KAAQ,EAAe,MAEhE,GAAa,KAAM,GAAc,EAAe,GAChD,GAAgB,KAAM,GAAiB,IAAmB,KAAK,KAAM,GAAa,KAAM,KAC1F,EACA,GAAkB,IAAI,QACtB,GAAoB,SAAS,GAC3B,KAAK,cACH,IAAI,EAAW,YAAY,EAAc,sBAAuB,CAC9D,UAAU,EACV,SAAS,EACT,WAGN,EACA,GAAe,IAAI,QACnB,GAAiB,WACf,GAAa,KAAM,IAAY,OAC/B,MAAM,EAAS,GAAuB,MACtC,KAAK,cACH,IAAI,EAAW,YAAY,EAAc,mBAAoB,CAC3D,UAAU,EACV,SAAS,EACT,WAGN,EACA,GAAe,kBAAoB,CAAE,KAAM,QAC3C,GAAe,gBAjrBf,SAAyB,GACvB,eAGI,GAAiB,gBAAgB,i6DA6DpB,EAAkB,0BAA0B,EAAkB,uUAQ5D,EAAkB,0BAA0B,EAAkB,6vCA0BpE,EAAkB,0EAClB,EAAkB,2OAMhB,EAAkB,wEAClB,EAAkB,8MAKlB,EAAkB,omCAwBpB,EAAkB,sEAClB,EAAkB,8ZAQK,EAAkB,0EACR,EAAkB,k4CAkCnD,EAAkB,mEAClB,EAAkB,sVAOlB,EAAkB,4+BA0BK,GAAsB,kBAAkB,uBAChE,GAAsB,gBAAgB,qaAkBpD,EAycK,EAAW,eAAe,IAAI,qBACjC,EAAW,eAAe,OAAO,mBAAoB,IAEpD,IAAC,GAA2B,GCxtB/B,MAAM,WAAyB,GAC7B,6BAAW,GACT,MAAO,IACF,MAAM,mBACT,EAAkB,aAClB,EAAkB,YAClB,EAAkB,yBAExB,CACE,WAAA,GACE,QACA,KAAK,MAAM,iBAAiB,SAAS,KACnC,MAAM,EAAS,KAAK,MAAM,MACpB,EAAM,IAAI,EAAW,YACzB,EAAc,qBACd,CACE,UAAU,EACV,SAAS,EACT,WAGJ,KAAK,cAAc,EAAI,GAE7B,CACE,iBAAA,GACE,MAAM,oBACN,KAAK,MAAM,aAAa,aAAc,EAAE,UAC5C,CACE,wBAAA,CAAyB,EAAU,EAAU,GA7BjB,IAAC,EALb,EAmCd,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,cAAgB,IAAa,EAAkB,cAChF,KAAK,MAAM,eArCC,EAqCwB,MApCjC,WACE,EACF,EAAG,YAmCN,KAAK,MAAM,aACT,kBAlCuB,EAmCD,KAAK,MAAM,cAnCA,GAAG,KAAK,MAAc,IAAR,QAqCjD,KAAK,YAEX,CAIE,eAAI,GACF,OAAO,EAAe,KAAM,EAAkB,aAlD3B,EAmDvB,CACE,eAAI,CAAY,GACd,EAAe,KAAM,EAAkB,aAAc,EACzD,CAIE,cAAI,GACF,OAAO,GAAe,KAAM,EAAkB,YAClD,CACE,cAAI,CAAW,GACb,GAAe,KAAM,EAAkB,YAAa,EACxD,CAIE,0BAAI,GACF,OAAO,GAAc,KAAM,EAAkB,yBACjD,CACE,0BAAI,CAAuB,GACzB,GAAc,KAAM,EAAkB,yBAA0B,EACpE,EAEK,EAAW,eAAe,IAAI,uBACjC,EAAW,eAAe,OAAO,qBAAsB,IAEtD,IAAC,GAA6B,GC9CjC,MAAM,WAAwB,GAC5B,WAAA,GACE,SAAS,WACT,KAAK,UAAY,IACrB,CACE,6BAAW,GACT,MAAO,IAAI,MAAM,mBAAoB,EAAkB,WAC3D,CACE,iBAAA,GACE,IAAI,EACJ,MAAM,oBACN,KAAK,WAAuC,OAAzB,EAAK,KAAK,iBAAsB,EAAS,EAAG,cAAc,WAAa,KACtF,KAAK,YACP,KAAK,UAAU,YAAc,EAAE,QAErC,CACE,wBAAA,CAAyB,EAAU,EAAU,GAC3C,MAAM,yBAAyB,EAAU,EAAU,GAC/C,IAAa,EAAkB,YAAc,KAAK,WACpD,KAAK,aACH,eACA,KAAK,UAAY,OAAS,QAGlC,CACE,aAAI,GACF,OAAO,GAAe,KAAM,EAAkB,WAClD,CACE,aAAI,CAAU,GACZ,GAAe,KAAM,EAAkB,WAAY,EACvD,CACE,WAAA,GACE,MAAM,GAAW,KAAK,UAChB,EAAM,IAAI,EAAW,YAAY,EAAc,mBAAoB,CACvE,UAAU,EACV,SAAS,EACT,OAAQ,IAEV,KAAK,cAAc,EACvB,EAEA,GAAgB,oBA/EhB,SAA6B,GAC3B,qbAkBe,EAAkB,oZAenC,EA8CA,GAAgB,sBA7ChB,WACE,OAAO,EAAE,OACX,EA4CK,EAAW,eAAe,IAAI,sBACjC,EAAW,eAAe,OAAO,oBAAqB,IAErD,IAAC,GAA4B,U","file":"/npm/media-chrome@4.16.1/dist/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/media-chrome@4.16.1/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const MediaUIEvents = {\n  MEDIA_PLAY_REQUEST: \"mediaplayrequest\",\n  MEDIA_PAUSE_REQUEST: \"mediapauserequest\",\n  MEDIA_MUTE_REQUEST: \"mediamuterequest\",\n  MEDIA_UNMUTE_REQUEST: \"mediaunmuterequest\",\n  MEDIA_LOOP_REQUEST: \"medialooprequest\",\n  MEDIA_VOLUME_REQUEST: \"mediavolumerequest\",\n  MEDIA_SEEK_REQUEST: \"mediaseekrequest\",\n  MEDIA_AIRPLAY_REQUEST: \"mediaairplayrequest\",\n  MEDIA_ENTER_FULLSCREEN_REQUEST: \"mediaenterfullscreenrequest\",\n  MEDIA_EXIT_FULLSCREEN_REQUEST: \"mediaexitfullscreenrequest\",\n  MEDIA_PREVIEW_REQUEST: \"mediapreviewrequest\",\n  MEDIA_ENTER_PIP_REQUEST: \"mediaenterpiprequest\",\n  MEDIA_EXIT_PIP_REQUEST: \"mediaexitpiprequest\",\n  MEDIA_ENTER_CAST_REQUEST: \"mediaentercastrequest\",\n  MEDIA_EXIT_CAST_REQUEST: \"mediaexitcastrequest\",\n  MEDIA_SHOW_TEXT_TRACKS_REQUEST: \"mediashowtexttracksrequest\",\n  MEDIA_HIDE_TEXT_TRACKS_REQUEST: \"mediahidetexttracksrequest\",\n  MEDIA_SHOW_SUBTITLES_REQUEST: \"mediashowsubtitlesrequest\",\n  MEDIA_DISABLE_SUBTITLES_REQUEST: \"mediadisablesubtitlesrequest\",\n  MEDIA_TOGGLE_SUBTITLES_REQUEST: \"mediatogglesubtitlesrequest\",\n  MEDIA_PLAYBACK_RATE_REQUEST: \"mediaplaybackraterequest\",\n  MEDIA_RENDITION_REQUEST: \"mediarenditionrequest\",\n  MEDIA_AUDIO_TRACK_REQUEST: \"mediaaudiotrackrequest\",\n  MEDIA_SEEK_TO_LIVE_REQUEST: \"mediaseektoliverequest\",\n  REGISTER_MEDIA_STATE_RECEIVER: \"registermediastatereceiver\",\n  UNREGISTER_MEDIA_STATE_RECEIVER: \"unregistermediastatereceiver\"\n};\nconst MediaStateReceiverAttributes = {\n  MEDIA_CHROME_ATTRIBUTES: \"mediachromeattributes\",\n  MEDIA_CONTROLLER: \"mediacontroller\"\n};\nconst MediaUIProps = {\n  MEDIA_AIRPLAY_UNAVAILABLE: \"mediaAirplayUnavailable\",\n  MEDIA_AUDIO_TRACK_ENABLED: \"mediaAudioTrackEnabled\",\n  MEDIA_AUDIO_TRACK_LIST: \"mediaAudioTrackList\",\n  MEDIA_AUDIO_TRACK_UNAVAILABLE: \"mediaAudioTrackUnavailable\",\n  MEDIA_BUFFERED: \"mediaBuffered\",\n  MEDIA_CAST_UNAVAILABLE: \"mediaCastUnavailable\",\n  MEDIA_CHAPTERS_CUES: \"mediaChaptersCues\",\n  MEDIA_CURRENT_TIME: \"mediaCurrentTime\",\n  MEDIA_DURATION: \"mediaDuration\",\n  MEDIA_ENDED: \"mediaEnded\",\n  MEDIA_ERROR: \"mediaError\",\n  MEDIA_ERROR_CODE: \"mediaErrorCode\",\n  MEDIA_ERROR_MESSAGE: \"mediaErrorMessage\",\n  MEDIA_FULLSCREEN_UNAVAILABLE: \"mediaFullscreenUnavailable\",\n  MEDIA_HAS_PLAYED: \"mediaHasPlayed\",\n  MEDIA_HEIGHT: \"mediaHeight\",\n  MEDIA_IS_AIRPLAYING: \"mediaIsAirplaying\",\n  MEDIA_IS_CASTING: \"mediaIsCasting\",\n  MEDIA_IS_FULLSCREEN: \"mediaIsFullscreen\",\n  MEDIA_IS_PIP: \"mediaIsPip\",\n  MEDIA_LOADING: \"mediaLoading\",\n  MEDIA_MUTED: \"mediaMuted\",\n  MEDIA_LOOP: \"mediaLoop\",\n  MEDIA_PAUSED: \"mediaPaused\",\n  MEDIA_PIP_UNAVAILABLE: \"mediaPipUnavailable\",\n  MEDIA_PLAYBACK_RATE: \"mediaPlaybackRate\",\n  MEDIA_PREVIEW_CHAPTER: \"mediaPreviewChapter\",\n  MEDIA_PREVIEW_COORDS: \"mediaPreviewCoords\",\n  MEDIA_PREVIEW_IMAGE: \"mediaPreviewImage\",\n  MEDIA_PREVIEW_TIME: \"mediaPreviewTime\",\n  MEDIA_RENDITION_LIST: \"mediaRenditionList\",\n  MEDIA_RENDITION_SELECTED: \"mediaRenditionSelected\",\n  MEDIA_RENDITION_UNAVAILABLE: \"mediaRenditionUnavailable\",\n  MEDIA_SEEKABLE: \"mediaSeekable\",\n  MEDIA_STREAM_TYPE: \"mediaStreamType\",\n  MEDIA_SUBTITLES_LIST: \"mediaSubtitlesList\",\n  MEDIA_SUBTITLES_SHOWING: \"mediaSubtitlesShowing\",\n  MEDIA_TARGET_LIVE_WINDOW: \"mediaTargetLiveWindow\",\n  MEDIA_TIME_IS_LIVE: \"mediaTimeIsLive\",\n  MEDIA_VOLUME: \"mediaVolume\",\n  MEDIA_VOLUME_LEVEL: \"mediaVolumeLevel\",\n  MEDIA_VOLUME_UNAVAILABLE: \"mediaVolumeUnavailable\",\n  MEDIA_LANG: \"mediaLang\",\n  MEDIA_WIDTH: \"mediaWidth\"\n};\nconst MediaUIPropsEntries = Object.entries(\n  MediaUIProps\n);\nconst MediaUIAttributes = MediaUIPropsEntries.reduce(\n  (dictObj, [key, propName]) => {\n    dictObj[key] = propName.toLowerCase();\n    return dictObj;\n  },\n  {}\n);\nconst AdditionalStateChangeEvents = {\n  USER_INACTIVE_CHANGE: \"userinactivechange\",\n  BREAKPOINTS_CHANGE: \"breakpointchange\",\n  BREAKPOINTS_COMPUTED: \"breakpointscomputed\"\n};\nconst MediaStateChangeEvents = MediaUIPropsEntries.reduce(\n  (dictObj, [key, propName]) => {\n    dictObj[key] = propName.toLowerCase();\n    return dictObj;\n  },\n  { ...AdditionalStateChangeEvents }\n);\nconst StateChangeEventToAttributeMap = Object.entries(\n  MediaStateChangeEvents\n).reduce(\n  (mapObj, [key, eventType]) => {\n    const attrName = MediaUIAttributes[key];\n    if (attrName) {\n      mapObj[eventType] = attrName;\n    }\n    return mapObj;\n  },\n  { userinactivechange: \"userinactive\" }\n);\nconst AttributeToStateChangeEventMap = Object.entries(\n  MediaUIAttributes\n).reduce(\n  (mapObj, [key, attrName]) => {\n    const evtType = MediaStateChangeEvents[key];\n    if (evtType) {\n      mapObj[attrName] = evtType;\n    }\n    return mapObj;\n  },\n  { userinactive: \"userinactivechange\" }\n);\nconst TextTrackKinds = {\n  SUBTITLES: \"subtitles\",\n  CAPTIONS: \"captions\",\n  DESCRIPTIONS: \"descriptions\",\n  CHAPTERS: \"chapters\",\n  METADATA: \"metadata\"\n};\nconst TextTrackModes = {\n  DISABLED: \"disabled\",\n  HIDDEN: \"hidden\",\n  SHOWING: \"showing\"\n};\nconst ReadyStates = {\n  HAVE_NOTHING: 0,\n  HAVE_METADATA: 1,\n  HAVE_CURRENT_DATA: 2,\n  HAVE_FUTURE_DATA: 3,\n  HAVE_ENOUGH_DATA: 4\n};\nconst PointerTypes = {\n  MOUSE: \"mouse\",\n  PEN: \"pen\",\n  TOUCH: \"touch\"\n};\nconst AvailabilityStates = {\n  UNAVAILABLE: \"unavailable\",\n  UNSUPPORTED: \"unsupported\"\n};\nconst StreamTypes = {\n  LIVE: \"live\",\n  ON_DEMAND: \"on-demand\",\n  UNKNOWN: \"unknown\"\n};\nconst VolumeLevels = {\n  HIGH: \"high\",\n  MEDIUM: \"medium\",\n  LOW: \"low\",\n  OFF: \"off\"\n};\nconst WebkitPresentationModes = {\n  INLINE: \"inline\",\n  FULLSCREEN: \"fullscreen\",\n  PICTURE_IN_PICTURE: \"picture-in-picture\"\n};\nexport {\n  AttributeToStateChangeEventMap,\n  AvailabilityStates,\n  MediaStateChangeEvents,\n  MediaStateReceiverAttributes,\n  MediaUIAttributes,\n  MediaUIEvents,\n  MediaUIProps,\n  PointerTypes,\n  ReadyStates,\n  StateChangeEventToAttributeMap,\n  StreamTypes,\n  TextTrackKinds,\n  TextTrackModes,\n  VolumeLevels,\n  WebkitPresentationModes\n};\n","function stringifyRenditionList(renditions) {\n  return renditions == null ? void 0 : renditions.map(stringifyRendition).join(\" \");\n}\nfunction parseRenditionList(renditions) {\n  return renditions == null ? void 0 : renditions.split(/\\s+/).map(parseRendition);\n}\nfunction stringifyRendition(rendition) {\n  if (rendition) {\n    const { id, width, height } = rendition;\n    return [id, width, height].filter((a) => a != null).join(\":\");\n  }\n}\nfunction parseRendition(rendition) {\n  if (rendition) {\n    const [id, width, height] = rendition.split(\":\");\n    return { id, width: +width, height: +height };\n  }\n}\nfunction stringifyAudioTrackList(audioTracks) {\n  return audioTracks == null ? void 0 : audioTracks.map(stringifyAudioTrack).join(\" \");\n}\nfunction parseAudioTrackList(audioTracks) {\n  return audioTracks == null ? void 0 : audioTracks.split(/\\s+/).map(parseAudioTrack);\n}\nfunction stringifyAudioTrack(audioTrack) {\n  if (audioTrack) {\n    const { id, kind, language, label } = audioTrack;\n    return [id, kind, language, label].filter((a) => a != null).join(\":\");\n  }\n}\nfunction parseAudioTrack(audioTrack) {\n  if (audioTrack) {\n    const [id, kind, language, label] = audioTrack.split(\":\");\n    return {\n      id,\n      kind,\n      language,\n      label\n    };\n  }\n}\nfunction dashedToCamel(word) {\n  return word.split(\"-\").map(function(x, i) {\n    return (i ? x[0].toUpperCase() : x[0].toLowerCase()) + x.slice(1).toLowerCase();\n  }).join(\"\");\n}\nfunction constToCamel(word, upperFirst = false) {\n  return word.split(\"_\").map(function(x, i) {\n    return (i || upperFirst ? x[0].toUpperCase() : x[0].toLowerCase()) + x.slice(1).toLowerCase();\n  }).join(\"\");\n}\nfunction camelCase(name) {\n  return name.replace(/[-_]([a-z])/g, ($0, $1) => $1.toUpperCase());\n}\nfunction isValidNumber(x) {\n  return typeof x === \"number\" && !Number.isNaN(x) && Number.isFinite(x);\n}\nfunction isNumericString(str) {\n  if (typeof str != \"string\")\n    return false;\n  return !isNaN(str) && !isNaN(parseFloat(str));\n}\nconst delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nconst capitalize = (str) => str && str[0].toUpperCase() + str.slice(1);\nexport {\n  camelCase,\n  capitalize,\n  constToCamel,\n  dashedToCamel,\n  delay,\n  isNumericString,\n  isValidNumber,\n  parseAudioTrack,\n  parseAudioTrackList,\n  parseRendition,\n  parseRenditionList,\n  stringifyAudioTrack,\n  stringifyAudioTrackList,\n  stringifyRendition,\n  stringifyRenditionList\n};\n","import { isValidNumber } from \"./utils.js\";\nconst UnitLabels = [\n  {\n    singular: \"hour\",\n    plural: \"hours\"\n  },\n  {\n    singular: \"minute\",\n    plural: \"minutes\"\n  },\n  {\n    singular: \"second\",\n    plural: \"seconds\"\n  }\n];\nconst toTimeUnitPhrase = (timeUnitValue, unitIndex) => {\n  const unitLabel = timeUnitValue === 1 ? UnitLabels[unitIndex].singular : UnitLabels[unitIndex].plural;\n  return `${timeUnitValue} ${unitLabel}`;\n};\nconst formatAsTimePhrase = (seconds) => {\n  if (!isValidNumber(seconds))\n    return \"\";\n  const positiveSeconds = Math.abs(seconds);\n  const negative = positiveSeconds !== seconds;\n  const secondsDateTime = new Date(0, 0, 0, 0, 0, positiveSeconds, 0);\n  const timeParts = [\n    secondsDateTime.getHours(),\n    secondsDateTime.getMinutes(),\n    secondsDateTime.getSeconds()\n  ];\n  const timeString = timeParts.map(\n    (timeUnitValue, index) => timeUnitValue && toTimeUnitPhrase(timeUnitValue, index)\n  ).filter((x) => x).join(\", \");\n  const negativeSuffix = negative ? \" remaining\" : \"\";\n  return `${timeString}${negativeSuffix}`;\n};\nfunction formatTime(seconds, guide) {\n  let negative = false;\n  if (seconds < 0) {\n    negative = true;\n    seconds = 0 - seconds;\n  }\n  seconds = seconds < 0 ? 0 : seconds;\n  let s = Math.floor(seconds % 60);\n  let m = Math.floor(seconds / 60 % 60);\n  let h = Math.floor(seconds / 3600);\n  const gm = Math.floor(guide / 60 % 60);\n  const gh = Math.floor(guide / 3600);\n  if (isNaN(seconds) || seconds === Infinity) {\n    h = m = s = \"0\";\n  }\n  h = h > 0 || gh > 0 ? h + \":\" : \"\";\n  m = ((h || gm >= 10) && m < 10 ? \"0\" + m : m) + \":\";\n  s = s < 10 ? \"0\" + s : s;\n  return (negative ? \"-\" : \"\") + h + m + s;\n}\nconst emptyTimeRanges = Object.freeze({\n  length: 0,\n  start(index) {\n    const unsignedIdx = index >>> 0;\n    if (unsignedIdx >= this.length) {\n      throw new DOMException(\n        `Failed to execute 'start' on 'TimeRanges': The index provided (${unsignedIdx}) is greater than or equal to the maximum bound (${this.length}).`\n      );\n    }\n    return 0;\n  },\n  end(index) {\n    const unsignedIdx = index >>> 0;\n    if (unsignedIdx >= this.length) {\n      throw new DOMException(\n        `Failed to execute 'end' on 'TimeRanges': The index provided (${unsignedIdx}) is greater than or equal to the maximum bound (${this.length}).`\n      );\n    }\n    return 0;\n  }\n});\nfunction serializeTimeRanges(timeRanges = emptyTimeRanges) {\n  return Array.from(timeRanges).map(\n    (_, i) => [\n      Number(timeRanges.start(i).toFixed(3)),\n      Number(timeRanges.end(i).toFixed(3))\n    ].join(\":\")\n  ).join(\" \");\n}\nexport {\n  emptyTimeRanges,\n  formatAsTimePhrase,\n  formatTime,\n  serializeTimeRanges\n};\n","var _a;\nimport { En } from \"../lang/en.js\";\nconst translations = {\n  en: En\n};\nlet currentLang = ((_a = globalThis.navigator) == null ? void 0 : _a.language) || \"en\";\nconst setLanguage = (langCode) => {\n  currentLang = langCode;\n};\nconst addTranslation = (lang, languageDictionary) => {\n  translations[lang] = languageDictionary;\n};\nconst resolveTranslation = (key) => {\n  var _a2, _b, _c;\n  const [base] = currentLang.split(\"-\");\n  return ((_a2 = translations[currentLang]) == null ? void 0 : _a2[key]) || ((_b = translations[base]) == null ? void 0 : _b[key]) || ((_c = translations.en) == null ? void 0 : _c[key]) || key;\n};\nconst t = (key, vars = {}) => resolveTranslation(key).replace(\n  /\\{(\\w+)\\}/g,\n  (_, v) => v in vars ? String(vars[v]) : `{${v}}`\n);\nexport {\n  addTranslation,\n  setLanguage,\n  t\n};\n","const En = {\n  \"Start airplay\": \"Start airplay\",\n  \"Stop airplay\": \"Stop airplay\",\n  Audio: \"Audio\",\n  Captions: \"Captions\",\n  \"Enable captions\": \"Enable captions\",\n  \"Disable captions\": \"Disable captions\",\n  \"Start casting\": \"Start casting\",\n  \"Stop casting\": \"Stop casting\",\n  \"Enter fullscreen mode\": \"Enter fullscreen mode\",\n  \"Exit fullscreen mode\": \"Exit fullscreen mode\",\n  Mute: \"Mute\",\n  Unmute: \"Unmute\",\n  Loop: \"Loop\",\n  \"Enter picture in picture mode\": \"Enter picture in picture mode\",\n  \"Exit picture in picture mode\": \"Exit picture in picture mode\",\n  Play: \"Play\",\n  Pause: \"Pause\",\n  \"Playback rate\": \"Playback rate\",\n  \"Playback rate {playbackRate}\": \"Playback rate {playbackRate}\",\n  Quality: \"Quality\",\n  \"Seek backward\": \"Seek backward\",\n  \"Seek forward\": \"Seek forward\",\n  Settings: \"Settings\",\n  Auto: \"Auto\",\n  \"audio player\": \"audio player\",\n  \"video player\": \"video player\",\n  volume: \"volume\",\n  seek: \"seek\",\n  \"closed captions\": \"closed captions\",\n  \"current playback rate\": \"current playback rate\",\n  \"playback time\": \"playback time\",\n  \"media loading\": \"media loading\",\n  settings: \"settings\",\n  \"audio tracks\": \"audio tracks\",\n  quality: \"quality\",\n  play: \"play\",\n  pause: \"pause\",\n  mute: \"mute\",\n  unmute: \"unmute\",\n  \"chapter: {chapterName}\": \"chapter: {chapterName}\",\n  live: \"live\",\n  Off: \"Off\",\n  \"start airplay\": \"start airplay\",\n  \"stop airplay\": \"stop airplay\",\n  \"start casting\": \"start casting\",\n  \"stop casting\": \"stop casting\",\n  \"enter fullscreen mode\": \"enter fullscreen mode\",\n  \"exit fullscreen mode\": \"exit fullscreen mode\",\n  \"enter picture in picture mode\": \"enter picture in picture mode\",\n  \"exit picture in picture mode\": \"exit picture in picture mode\",\n  \"seek to live\": \"seek to live\",\n  \"playing live\": \"playing live\",\n  \"seek back {seekOffset} seconds\": \"seek back {seekOffset} seconds\",\n  \"seek forward {seekOffset} seconds\": \"seek forward {seekOffset} seconds\",\n  \"Network Error\": \"Network Error\",\n  \"Decode Error\": \"Decode Error\",\n  \"Source Not Supported\": \"Source Not Supported\",\n  \"Encryption Error\": \"Encryption Error\",\n  \"A network error caused the media download to fail.\": \"A network error caused the media download to fail.\",\n  \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\": \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\",\n  \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\": \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\",\n  \"The media is encrypted and there are no keys to decrypt it.\": \"The media is encrypted and there are no keys to decrypt it.\"\n};\nexport {\n  En\n};\n","class EventTarget {\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  dispatchEvent() {\n    return true;\n  }\n}\nclass Node extends EventTarget {\n}\nclass Element extends Node {\n  constructor() {\n    super(...arguments);\n    this.role = null;\n  }\n}\nclass ResizeObserver {\n  observe() {\n  }\n  unobserve() {\n  }\n  disconnect() {\n  }\n}\nconst documentShim = {\n  createElement: function() {\n    return new globalThisShim.HTMLElement();\n  },\n  createElementNS: function() {\n    return new globalThisShim.HTMLElement();\n  },\n  addEventListener() {\n  },\n  removeEventListener() {\n  },\n  dispatchEvent(_event) {\n    return false;\n  }\n};\nconst globalThisShim = {\n  ResizeObserver,\n  document: documentShim,\n  Node,\n  Element,\n  HTMLElement: class HTMLElement extends Element {\n    constructor() {\n      super(...arguments);\n      this.innerHTML = \"\";\n    }\n    get content() {\n      return new globalThisShim.DocumentFragment();\n    }\n  },\n  DocumentFragment: class DocumentFragment extends EventTarget {\n  },\n  customElements: {\n    get: function() {\n    },\n    define: function() {\n    },\n    whenDefined: function() {\n    }\n  },\n  localStorage: {\n    getItem(_key) {\n      return null;\n    },\n    setItem(_key, _value) {\n    },\n    removeItem(_key) {\n    }\n  },\n  CustomEvent: function CustomEvent() {\n  },\n  getComputedStyle: function() {\n  },\n  navigator: {\n    languages: [],\n    get userAgent() {\n      return \"\";\n    }\n  },\n  matchMedia(media) {\n    return {\n      matches: false,\n      media\n    };\n  },\n  DOMParser: class DOMParser {\n    parseFromString(string, _contentType) {\n      return {\n        body: {\n          textContent: string\n        }\n      };\n    }\n  }\n};\nconst isServer = \"global\" in globalThis && (globalThis == null ? void 0 : globalThis.global) === globalThis || // node or node-like environments, whether or not there are global polyfills like jsdom\ntypeof window === \"undefined\" || typeof window.customElements === \"undefined\";\nconst isShimmed = Object.keys(globalThisShim).every((key) => key in globalThis);\nconst GlobalThis = isServer && !isShimmed ? globalThisShim : globalThis;\nconst Document = isServer && !isShimmed ? documentShim : globalThis.document;\nexport {\n  Document,\n  GlobalThis,\n  Document as document,\n  GlobalThis as globalThis,\n  isServer\n};\n","import { globalThis } from \"./server-safe-globals.js\";\nconst callbacksMap = /* @__PURE__ */ new WeakMap();\nconst getCallbacks = (element) => {\n  let callbacks = callbacksMap.get(element);\n  if (!callbacks)\n    callbacksMap.set(element, callbacks = /* @__PURE__ */ new Set());\n  return callbacks;\n};\nconst observer = new globalThis.ResizeObserver(\n  (entries) => {\n    for (const entry of entries) {\n      for (const callback of getCallbacks(entry.target)) {\n        callback(entry);\n      }\n    }\n  }\n);\nfunction observeResize(element, callback) {\n  getCallbacks(element).add(callback);\n  observer.observe(element);\n}\nfunction unobserveResize(element, callback) {\n  const callbacks = getCallbacks(element);\n  callbacks.delete(callback);\n  if (!callbacks.size) {\n    observer.unobserve(element);\n  }\n}\nexport {\n  observeResize,\n  unobserveResize\n};\n","import { MediaStateReceiverAttributes } from \"../constants.js\";\nfunction namedNodeMapToObject(namedNodeMap) {\n  const obj = {};\n  for (const attr of namedNodeMap) {\n    obj[attr.name] = attr.value;\n  }\n  return obj;\n}\nfunction getMediaController(host) {\n  var _a;\n  return (_a = getAttributeMediaController(host)) != null ? _a : closestComposedNode(host, \"media-controller\");\n}\nfunction getAttributeMediaController(host) {\n  var _a;\n  const { MEDIA_CONTROLLER } = MediaStateReceiverAttributes;\n  const mediaControllerId = host.getAttribute(MEDIA_CONTROLLER);\n  if (mediaControllerId) {\n    return (_a = getDocumentOrShadowRoot(host)) == null ? void 0 : _a.getElementById(\n      mediaControllerId\n    );\n  }\n}\nconst updateIconText = (svg, value, selector = \".value\") => {\n  const node = svg.querySelector(selector);\n  if (!node)\n    return;\n  node.textContent = value;\n};\nconst getAllSlotted = (el, name) => {\n  const slotSelector = `slot[name=\"${name}\"]`;\n  const slot = el.shadowRoot.querySelector(slotSelector);\n  if (!slot)\n    return [];\n  return slot.children;\n};\nconst getSlotted = (el, name) => getAllSlotted(el, name)[0];\nconst containsComposedNode = (rootNode, childNode) => {\n  if (!rootNode || !childNode)\n    return false;\n  if (rootNode == null ? void 0 : rootNode.contains(childNode))\n    return true;\n  return containsComposedNode(\n    rootNode,\n    childNode.getRootNode().host\n  );\n};\nconst closestComposedNode = (childNode, selector) => {\n  if (!childNode)\n    return null;\n  const closest = childNode.closest(selector);\n  if (closest)\n    return closest;\n  return closestComposedNode(\n    childNode.getRootNode().host,\n    selector\n  );\n};\nfunction getActiveElement(root = document) {\n  var _a;\n  const activeEl = root == null ? void 0 : root.activeElement;\n  if (!activeEl)\n    return null;\n  return (_a = getActiveElement(activeEl.shadowRoot)) != null ? _a : activeEl;\n}\nfunction getDocumentOrShadowRoot(node) {\n  var _a;\n  const rootNode = (_a = node == null ? void 0 : node.getRootNode) == null ? void 0 : _a.call(node);\n  if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {\n    return rootNode;\n  }\n  return null;\n}\nfunction isElementVisible(element, { depth = 3, checkOpacity = true, checkVisibilityCSS = true } = {}) {\n  if (element.checkVisibility) {\n    return element.checkVisibility({\n      checkOpacity,\n      checkVisibilityCSS\n    });\n  }\n  let el = element;\n  while (el && depth > 0) {\n    const style = getComputedStyle(el);\n    if (checkOpacity && style.opacity === \"0\" || checkVisibilityCSS && style.visibility === \"hidden\" || style.display === \"none\") {\n      return false;\n    }\n    el = el.parentElement;\n    depth--;\n  }\n  return true;\n}\nfunction getPointProgressOnLine(x, y, p1, p2) {\n  const dx = p2.x - p1.x;\n  const dy = p2.y - p1.y;\n  const lengthSquared = dx * dx + dy * dy;\n  if (lengthSquared === 0)\n    return 0;\n  const projection = ((x - p1.x) * dx + (y - p1.y) * dy) / lengthSquared;\n  return Math.max(0, Math.min(1, projection));\n}\nfunction distance(p1, p2) {\n  return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\nfunction getOrInsertCSSRule(styleParent, selectorText) {\n  const cssRule = getCSSRule(styleParent, (st) => st === selectorText);\n  if (cssRule)\n    return cssRule;\n  return insertCSSRule(styleParent, selectorText);\n}\nfunction getCSSRule(styleParent, predicate) {\n  var _a, _b;\n  let style;\n  for (style of (_a = styleParent.querySelectorAll(\"style:not([media])\")) != null ? _a : []) {\n    let cssRules;\n    try {\n      cssRules = (_b = style.sheet) == null ? void 0 : _b.cssRules;\n    } catch {\n      continue;\n    }\n    for (const rule of cssRules != null ? cssRules : []) {\n      if (predicate(rule.selectorText))\n        return rule;\n    }\n  }\n}\nfunction insertCSSRule(styleParent, selectorText) {\n  var _a, _b;\n  const styles = (_a = styleParent.querySelectorAll(\"style:not([media])\")) != null ? _a : [];\n  const style = styles == null ? void 0 : styles[styles.length - 1];\n  if (!(style == null ? void 0 : style.sheet)) {\n    console.warn(\n      \"Media Chrome: No style sheet found on style tag of\",\n      styleParent\n    );\n    return {\n      // @ts-ignore\n      style: {\n        setProperty: () => {\n        },\n        removeProperty: () => \"\",\n        getPropertyValue: () => \"\"\n      }\n    };\n  }\n  style == null ? void 0 : style.sheet.insertRule(`${selectorText}{}`, style.sheet.cssRules.length);\n  return (\n    /** @type {CSSStyleRule} */\n    (_b = style.sheet.cssRules) == null ? void 0 : _b[style.sheet.cssRules.length - 1]\n  );\n}\nfunction getNumericAttr(el, attrName, defaultValue = Number.NaN) {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal != null ? +attrVal : defaultValue;\n}\nfunction setNumericAttr(el, attrName, value) {\n  const nextNumericValue = +value;\n  if (value == null || Number.isNaN(nextNumericValue)) {\n    if (el.hasAttribute(attrName)) {\n      el.removeAttribute(attrName);\n    }\n    return;\n  }\n  if (getNumericAttr(el, attrName, void 0) === nextNumericValue)\n    return;\n  el.setAttribute(attrName, `${nextNumericValue}`);\n}\nfunction getBooleanAttr(el, attrName) {\n  return el.hasAttribute(attrName);\n}\nfunction setBooleanAttr(el, attrName, value) {\n  if (value == null) {\n    if (el.hasAttribute(attrName)) {\n      el.removeAttribute(attrName);\n    }\n    return;\n  }\n  if (getBooleanAttr(el, attrName) == value)\n    return;\n  el.toggleAttribute(attrName, value);\n}\nfunction getStringAttr(el, attrName, defaultValue = null) {\n  var _a;\n  return (_a = el.getAttribute(attrName)) != null ? _a : defaultValue;\n}\nfunction setStringAttr(el, attrName, value) {\n  if (value == null) {\n    if (el.hasAttribute(attrName)) {\n      el.removeAttribute(attrName);\n    }\n    return;\n  }\n  const nextValue = `${value}`;\n  if (getStringAttr(el, attrName, void 0) === nextValue)\n    return;\n  el.setAttribute(attrName, nextValue);\n}\nexport {\n  closestComposedNode,\n  containsComposedNode,\n  distance,\n  getActiveElement,\n  getAllSlotted,\n  getAttributeMediaController,\n  getBooleanAttr,\n  getCSSRule,\n  getDocumentOrShadowRoot,\n  getMediaController,\n  getNumericAttr,\n  getOrInsertCSSRule,\n  getPointProgressOnLine,\n  getSlotted,\n  getStringAttr,\n  insertCSSRule,\n  isElementVisible,\n  namedNodeMapToObject,\n  setBooleanAttr,\n  setNumericAttr,\n  setStringAttr,\n  updateIconText\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController;\nimport {\n  MediaUIAttributes,\n  MediaUIEvents,\n  MediaStateReceiverAttributes,\n  PointerTypes\n} from \"./constants.js\";\nimport {\n  closestComposedNode,\n  getBooleanAttr,\n  namedNodeMapToObject,\n  setBooleanAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        display: var(--media-control-display, var(--media-gesture-receiver-display, inline-block));\n        box-sizing: border-box;\n      }\n    </style>\n  `\n  );\n}\nclass MediaGestureReceiver extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _mediaController, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n  }\n  // NOTE: Currently \"baking in\" actions + attrs until we come up with\n  // a more robust architecture (CJP)\n  static get observedAttributes() {\n    return [\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_PAUSED\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a, _b, _c, _d;\n    this.tabIndex = -1;\n    this.setAttribute(\"aria-hidden\", \"true\");\n    __privateSet(this, _mediaController, getMediaControllerEl(this));\n    if (this.getAttribute(MediaStateReceiverAttributes.MEDIA_CONTROLLER)) {\n      (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.associateElement) == null ? void 0 : _b.call(_a, this);\n    }\n    (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.addEventListener(\"pointerdown\", this);\n    (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.addEventListener(\"click\", this);\n  }\n  disconnectedCallback() {\n    var _a, _b, _c, _d;\n    if (this.getAttribute(MediaStateReceiverAttributes.MEDIA_CONTROLLER)) {\n      (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    }\n    (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.removeEventListener(\"pointerdown\", this);\n    (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.removeEventListener(\"click\", this);\n    __privateSet(this, _mediaController, null);\n  }\n  handleEvent(event) {\n    var _a;\n    const composedTarget = (_a = event.composedPath()) == null ? void 0 : _a[0];\n    const allowList = [\"video\", \"media-controller\"];\n    if (!allowList.includes(composedTarget == null ? void 0 : composedTarget.localName))\n      return;\n    if (event.type === \"pointerdown\") {\n      this._pointerType = event.pointerType;\n    } else if (event.type === \"click\") {\n      const { clientX, clientY } = event;\n      const { left, top, width, height } = this.getBoundingClientRect();\n      const x = clientX - left;\n      const y = clientY - top;\n      if (x < 0 || y < 0 || x > width || y > height || // In case this element has no dimensions (or display: none) return.\n      width === 0 && height === 0) {\n        return;\n      }\n      const pointerType = this._pointerType || \"mouse\";\n      this._pointerType = void 0;\n      if (pointerType === PointerTypes.TOUCH) {\n        this.handleTap(event);\n        return;\n      } else if (pointerType === PointerTypes.MOUSE || pointerType === PointerTypes.PEN) {\n        this.handleMouseClick(event);\n        return;\n      }\n    }\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  // NOTE: Currently \"baking in\" actions + attrs until we come up with\n  // a more robust architecture (CJP)\n  /**\n   * @abstract\n   * @argument {Event} e\n   */\n  handleTap(e) {\n  }\n  // eslint-disable-line\n  // eslint-disable-next-line\n  handleMouseClick(e) {\n    const eventName = this.mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n    this.dispatchEvent(\n      new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n}\n_mediaController = new WeakMap();\nMediaGestureReceiver.shadowRootOptions = { mode: \"open\" };\nMediaGestureReceiver.getTemplateHTML = getTemplateHTML;\nfunction getMediaControllerEl(controlEl) {\n  var _a;\n  const mediaControllerId = controlEl.getAttribute(\n    MediaStateReceiverAttributes.MEDIA_CONTROLLER\n  );\n  if (mediaControllerId) {\n    return (_a = controlEl.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId);\n  }\n  return closestComposedNode(controlEl, \"media-controller\");\n}\nif (!globalThis.customElements.get(\"media-gesture-receiver\")) {\n  globalThis.customElements.define(\n    \"media-gesture-receiver\",\n    MediaGestureReceiver\n  );\n}\nvar media_gesture_receiver_default = MediaGestureReceiver;\nexport {\n  media_gesture_receiver_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck(obj, member, \"access private method\");\n  return method;\n};\nvar _pointerDownTimeStamp, _currentMedia, _inactiveTimeout, _autohide, _mutationObserver, _handleMutation, handleMutation_fn, _isResizePending, _handleResize, _handlePointerMove, handlePointerMove_fn, _handlePointerUp, handlePointerUp_fn, _setInactive, setInactive_fn, _setActive, setActive_fn, _scheduleInactive, scheduleInactive_fn;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaStateChangeEvents } from \"./constants.js\";\nimport { observeResize, unobserveResize } from \"./utils/resize-observer.js\";\nimport \"./media-gesture-receiver.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n  getBooleanAttr,\n  getStringAttr,\n  namedNodeMapToObject,\n  setBooleanAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nimport MediaGestureReceiver from \"./media-gesture-receiver.js\";\nconst Attributes = {\n  AUDIO: \"audio\",\n  AUTOHIDE: \"autohide\",\n  BREAKPOINTS: \"breakpoints\",\n  GESTURES_DISABLED: \"gesturesdisabled\",\n  KEYBOARD_CONTROL: \"keyboardcontrol\",\n  NO_AUTOHIDE: \"noautohide\",\n  USER_INACTIVE: \"userinactive\",\n  AUTOHIDE_OVER_CONTROLS: \"autohideovercontrols\"\n};\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      ${/*\n    * outline on media is turned off because it is allowed to get focus to faciliate hotkeys.\n    * However, on keyboard interactions, the focus outline is shown,\n    * which is particularly noticeable when going fullscreen via hotkeys.\n    */\n    \"\"}\n      :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) ::slotted([slot=media]) {\n        outline: none;\n      }\n\n      :host {\n        box-sizing: border-box;\n        position: relative;\n        display: inline-block;\n        line-height: 0;\n        background-color: var(--media-background-color, #000);\n        overflow: hidden;\n      }\n\n      :host(:not([${Attributes.AUDIO}])) [part~=layer]:not([part~=media-layer]) {\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        right: 0;\n        display: flex;\n        flex-flow: column nowrap;\n        align-items: start;\n        pointer-events: none;\n        background: none;\n      }\n\n      slot[name=media] {\n        display: var(--media-slot-display, contents);\n      }\n\n      ${/*\n    * when in audio mode, hide the slotted media element by default\n    */\n    \"\"}\n      :host([${Attributes.AUDIO}]) slot[name=media] {\n        display: var(--media-slot-display, none);\n      }\n\n      ${/*\n    * when in audio mode, hide the gesture-layer which causes media-controller to be taller than the control bar\n    */\n    \"\"}\n      :host([${Attributes.AUDIO}]) [part~=layer][part~=gesture-layer] {\n        height: 0;\n        display: block;\n      }\n\n      ${/*\n    * if gestures are disabled, don't accept pointer-events\n    */\n    \"\"}\n      :host(:not([${Attributes.AUDIO}])[${Attributes.GESTURES_DISABLED}]) ::slotted([slot=gestures-chrome]),\n          :host(:not([${Attributes.AUDIO}])[${Attributes.GESTURES_DISABLED}]) media-gesture-receiver[slot=gestures-chrome] {\n        display: none;\n      }\n\n      ${/*\n    * any slotted element that isn't a poster or media slot should be pointer-events auto\n    * we'll want to add here any slotted elements that shouldn't get pointer-events by default when slotted\n    */\n    \"\"}\n      ::slotted(:not([slot=media]):not([slot=poster]):not(media-loading-indicator):not([role=dialog]):not([hidden])) {\n        pointer-events: auto;\n      }\n\n      :host(:not([${Attributes.AUDIO}])) *[part~=layer][part~=centered-layer] {\n        align-items: center;\n        justify-content: center;\n      }\n\n      :host(:not([${Attributes.AUDIO}])) ::slotted(media-gesture-receiver[slot=gestures-chrome]),\n      :host(:not([${Attributes.AUDIO}])) media-gesture-receiver[slot=gestures-chrome] {\n        align-self: stretch;\n        flex-grow: 1;\n      }\n\n      slot[name=middle-chrome] {\n        display: inline;\n        flex-grow: 1;\n        pointer-events: none;\n        background: none;\n      }\n\n      ${/* Position the media and poster elements to fill the container */\n    \"\"}\n      ::slotted([slot=media]),\n      ::slotted([slot=poster]) {\n        width: 100%;\n        height: 100%;\n      }\n\n      ${/* Video specific styles */\n    \"\"}\n      :host(:not([${Attributes.AUDIO}])) .spacer {\n        flex-grow: 1;\n      }\n\n      ${/* Safari needs this to actually make the element fill the window */\n    \"\"}\n      :host(:-webkit-full-screen) {\n        ${/* Needs to use !important otherwise easy to break */\n    \"\"}\n        width: 100% !important;\n        height: 100% !important;\n      }\n\n      ${/* Only add these if auto hide is not disabled */\n    \"\"}\n      ::slotted(:not([slot=media]):not([slot=poster]):not([${Attributes.NO_AUTOHIDE}]):not([hidden]):not([role=dialog])) {\n        opacity: 1;\n        transition: var(--media-control-transition-in, opacity 0.25s);\n      }\n\n      ${/* Hide controls when inactive, not paused, not audio and auto hide not disabled */\n    \"\"}\n      :host([${Attributes.USER_INACTIVE}]:not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) ::slotted(:not([slot=media]):not([slot=poster]):not([${Attributes.NO_AUTOHIDE}]):not([role=dialog])) {\n        opacity: 0;\n        transition: var(--media-control-transition-out, opacity 1s);\n      }\n\n      :host([${Attributes.USER_INACTIVE}]:not([${Attributes.NO_AUTOHIDE}]):not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) ::slotted([slot=media]) {\n        cursor: none;\n      }\n\n      :host([${Attributes.USER_INACTIVE}][${Attributes.AUTOHIDE_OVER_CONTROLS}]:not([${Attributes.NO_AUTOHIDE}]):not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) * {\n        --media-cursor: none;\n        cursor: none;\n      }\n\n\n      ::slotted(media-control-bar)  {\n        align-self: stretch;\n      }\n\n      ${/* ::slotted([slot=poster]) doesn't work for slot fallback content so hide parent slot instead */\n    \"\"}\n      :host(:not([${Attributes.AUDIO}])[${MediaUIAttributes.MEDIA_HAS_PLAYED}]) slot[name=poster] {\n        display: none;\n      }\n\n      ::slotted([role=dialog]) {\n        width: 100%;\n        height: 100%;\n        align-self: center;\n      }\n\n      ::slotted([role=menu]) {\n        align-self: end;\n      }\n    </style>\n\n    <slot name=\"media\" part=\"layer media-layer\"></slot>\n    <slot name=\"poster\" part=\"layer poster-layer\"></slot>\n    <slot name=\"gestures-chrome\" part=\"layer gesture-layer\">\n      <media-gesture-receiver slot=\"gestures-chrome\">\n        <template shadowrootmode=\"${MediaGestureReceiver.shadowRootOptions.mode}\">\n          ${MediaGestureReceiver.getTemplateHTML({})}\n        </template>\n      </media-gesture-receiver>\n    </slot>\n    <span part=\"layer vertical-layer\">\n      <slot name=\"top-chrome\" part=\"top chrome\"></slot>\n      <slot name=\"middle-chrome\" part=\"middle chrome\"></slot>\n      <slot name=\"centered-chrome\" part=\"layer centered-layer center centered chrome\"></slot>\n      ${/* default, effectively \"bottom-chrome\" */\n    \"\"}\n      <slot part=\"bottom chrome\"></slot>\n    </span>\n    <slot name=\"dialog\" part=\"layer dialog-layer\"></slot>\n  `\n  );\n}\nconst MEDIA_UI_ATTRIBUTE_NAMES = Object.values(MediaUIAttributes);\nconst defaultBreakpoints = \"sm:384 md:576 lg:768 xl:960\";\nfunction resizeCallback(entry) {\n  setBreakpoints(entry.target, entry.contentRect.width);\n}\nfunction setBreakpoints(container, width) {\n  var _a;\n  if (!container.isConnected)\n    return;\n  const breakpoints = (_a = container.getAttribute(Attributes.BREAKPOINTS)) != null ? _a : defaultBreakpoints;\n  const ranges = createBreakpointMap(breakpoints);\n  const activeBreakpoints = getBreakpoints(ranges, width);\n  let changed = false;\n  Object.keys(ranges).forEach((name) => {\n    if (activeBreakpoints.includes(name)) {\n      if (!container.hasAttribute(`breakpoint${name}`)) {\n        container.setAttribute(`breakpoint${name}`, \"\");\n        changed = true;\n      }\n      return;\n    }\n    if (container.hasAttribute(`breakpoint${name}`)) {\n      container.removeAttribute(`breakpoint${name}`);\n      changed = true;\n    }\n  });\n  if (changed) {\n    const evt = new CustomEvent(MediaStateChangeEvents.BREAKPOINTS_CHANGE, {\n      detail: activeBreakpoints\n    });\n    container.dispatchEvent(evt);\n  }\n  if (!container.breakpointsComputed) {\n    container.breakpointsComputed = true;\n    container.dispatchEvent(\n      new CustomEvent(MediaStateChangeEvents.BREAKPOINTS_COMPUTED, {\n        bubbles: true,\n        composed: true\n      })\n    );\n  }\n}\nfunction createBreakpointMap(breakpoints) {\n  const pairs = breakpoints.split(/\\s+/);\n  return Object.fromEntries(pairs.map((pair) => pair.split(\":\")));\n}\nfunction getBreakpoints(breakpoints, width) {\n  return Object.keys(breakpoints).filter((name) => {\n    return width >= parseInt(breakpoints[name]);\n  });\n}\nclass MediaContainer extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _handleMutation);\n    __privateAdd(this, _handlePointerMove);\n    __privateAdd(this, _handlePointerUp);\n    __privateAdd(this, _setInactive);\n    __privateAdd(this, _setActive);\n    __privateAdd(this, _scheduleInactive);\n    __privateAdd(this, _pointerDownTimeStamp, 0);\n    __privateAdd(this, _currentMedia, null);\n    __privateAdd(this, _inactiveTimeout, null);\n    __privateAdd(this, _autohide, void 0);\n    this.breakpointsComputed = false;\n    __privateAdd(this, _mutationObserver, new MutationObserver(__privateMethod(this, _handleMutation, handleMutation_fn).bind(this)));\n    __privateAdd(this, _isResizePending, false);\n    __privateAdd(this, _handleResize, (entry) => {\n      if (__privateGet(this, _isResizePending))\n        return;\n      setTimeout(() => {\n        resizeCallback(entry);\n        __privateSet(this, _isResizePending, false);\n      }, 0);\n      __privateSet(this, _isResizePending, true);\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      const html = this.constructor.getTemplateHTML(attrs);\n      this.shadowRoot.setHTMLUnsafe ? this.shadowRoot.setHTMLUnsafe(html) : this.shadowRoot.innerHTML = html;\n    }\n    const chainedSlot = this.querySelector(\n      \":scope > slot[slot=media]\"\n    );\n    if (chainedSlot) {\n      chainedSlot.addEventListener(\"slotchange\", () => {\n        const slotEls = chainedSlot.assignedElements({ flatten: true });\n        if (!slotEls.length) {\n          if (__privateGet(this, _currentMedia)) {\n            this.mediaUnsetCallback(__privateGet(this, _currentMedia));\n          }\n          return;\n        }\n        this.handleMediaUpdated(this.media);\n      });\n    }\n  }\n  static get observedAttributes() {\n    return [Attributes.AUTOHIDE, Attributes.GESTURES_DISABLED].concat(MEDIA_UI_ATTRIBUTE_NAMES).filter(\n      (name) => ![\n        MediaUIAttributes.MEDIA_RENDITION_LIST,\n        MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST,\n        MediaUIAttributes.MEDIA_CHAPTERS_CUES,\n        MediaUIAttributes.MEDIA_WIDTH,\n        MediaUIAttributes.MEDIA_HEIGHT,\n        MediaUIAttributes.MEDIA_ERROR,\n        MediaUIAttributes.MEDIA_ERROR_MESSAGE\n      ].includes(name)\n    );\n  }\n  // Could share this code with media-chrome-html-element instead\n  attributeChangedCallback(attrName, _oldValue, newValue) {\n    if (attrName.toLowerCase() == Attributes.AUTOHIDE) {\n      this.autohide = newValue;\n    }\n  }\n  // First direct child with slot=media, or null\n  get media() {\n    let media = this.querySelector(\":scope > [slot=media]\");\n    if ((media == null ? void 0 : media.nodeName) == \"SLOT\")\n      media = media.assignedElements({ flatten: true })[0];\n    return media;\n  }\n  async handleMediaUpdated(media) {\n    if (!media)\n      return;\n    __privateSet(this, _currentMedia, media);\n    if (media.localName.includes(\"-\")) {\n      await globalThis.customElements.whenDefined(media.localName);\n    }\n    this.mediaSetCallback(media);\n  }\n  connectedCallback() {\n    var _a;\n    __privateGet(this, _mutationObserver).observe(this, { childList: true, subtree: true });\n    observeResize(this, __privateGet(this, _handleResize));\n    const isAudioChrome = this.getAttribute(Attributes.AUDIO) != null;\n    const label = isAudioChrome ? t(\"audio player\") : t(\"video player\");\n    this.setAttribute(\"role\", \"region\");\n    this.setAttribute(\"aria-label\", label);\n    this.handleMediaUpdated(this.media);\n    this.setAttribute(Attributes.USER_INACTIVE, \"\");\n    setBreakpoints(this, this.getBoundingClientRect().width);\n    this.addEventListener(\"pointerdown\", this);\n    this.addEventListener(\"pointermove\", this);\n    this.addEventListener(\"pointerup\", this);\n    this.addEventListener(\"mouseleave\", this);\n    this.addEventListener(\"keyup\", this);\n    (_a = globalThis.window) == null ? void 0 : _a.addEventListener(\"mouseup\", this);\n  }\n  disconnectedCallback() {\n    var _a;\n    __privateGet(this, _mutationObserver).disconnect();\n    unobserveResize(this, __privateGet(this, _handleResize));\n    if (this.media) {\n      this.mediaUnsetCallback(this.media);\n    }\n    (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"mouseup\", this);\n  }\n  /**\n   * @abstract\n   */\n  mediaSetCallback(_media) {\n  }\n  mediaUnsetCallback(_media) {\n    __privateSet(this, _currentMedia, null);\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"pointerdown\":\n        __privateSet(this, _pointerDownTimeStamp, event.timeStamp);\n        break;\n      case \"pointermove\":\n        __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, event);\n        break;\n      case \"pointerup\":\n        __privateMethod(this, _handlePointerUp, handlePointerUp_fn).call(this, event);\n        break;\n      case \"mouseleave\":\n        __privateMethod(this, _setInactive, setInactive_fn).call(this);\n        break;\n      case \"mouseup\":\n        this.removeAttribute(Attributes.KEYBOARD_CONTROL);\n        break;\n      case \"keyup\":\n        __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n        this.setAttribute(Attributes.KEYBOARD_CONTROL, \"\");\n        break;\n    }\n  }\n  set autohide(seconds) {\n    const parsedSeconds = Number(seconds);\n    __privateSet(this, _autohide, isNaN(parsedSeconds) ? 0 : parsedSeconds);\n  }\n  get autohide() {\n    return (__privateGet(this, _autohide) === void 0 ? 2 : __privateGet(this, _autohide)).toString();\n  }\n  get breakpoints() {\n    return getStringAttr(this, Attributes.BREAKPOINTS);\n  }\n  set breakpoints(value) {\n    setStringAttr(this, Attributes.BREAKPOINTS, value);\n  }\n  get audio() {\n    return getBooleanAttr(this, Attributes.AUDIO);\n  }\n  set audio(value) {\n    setBooleanAttr(this, Attributes.AUDIO, value);\n  }\n  get gesturesDisabled() {\n    return getBooleanAttr(this, Attributes.GESTURES_DISABLED);\n  }\n  set gesturesDisabled(value) {\n    setBooleanAttr(this, Attributes.GESTURES_DISABLED, value);\n  }\n  get keyboardControl() {\n    return getBooleanAttr(this, Attributes.KEYBOARD_CONTROL);\n  }\n  set keyboardControl(value) {\n    setBooleanAttr(this, Attributes.KEYBOARD_CONTROL, value);\n  }\n  get noAutohide() {\n    return getBooleanAttr(this, Attributes.NO_AUTOHIDE);\n  }\n  set noAutohide(value) {\n    setBooleanAttr(this, Attributes.NO_AUTOHIDE, value);\n  }\n  get autohideOverControls() {\n    return getBooleanAttr(this, Attributes.AUTOHIDE_OVER_CONTROLS);\n  }\n  set autohideOverControls(value) {\n    setBooleanAttr(this, Attributes.AUTOHIDE_OVER_CONTROLS, value);\n  }\n  get userInteractive() {\n    return getBooleanAttr(this, Attributes.USER_INACTIVE);\n  }\n  set userInteractive(value) {\n    setBooleanAttr(this, Attributes.USER_INACTIVE, value);\n  }\n}\n_pointerDownTimeStamp = new WeakMap();\n_currentMedia = new WeakMap();\n_inactiveTimeout = new WeakMap();\n_autohide = new WeakMap();\n_mutationObserver = new WeakMap();\n_handleMutation = new WeakSet();\nhandleMutation_fn = function(mutationsList) {\n  const media = this.media;\n  for (const mutation of mutationsList) {\n    if (mutation.type !== \"childList\")\n      continue;\n    const removedNodes = mutation.removedNodes;\n    for (const node of removedNodes) {\n      if (node.slot != \"media\" || mutation.target != this)\n        continue;\n      let previousSibling = mutation.previousSibling && mutation.previousSibling.previousElementSibling;\n      if (!previousSibling || !media) {\n        this.mediaUnsetCallback(node);\n      } else {\n        let wasFirst = previousSibling.slot !== \"media\";\n        while ((previousSibling = previousSibling.previousSibling) !== null) {\n          if (previousSibling.slot == \"media\")\n            wasFirst = false;\n        }\n        if (wasFirst)\n          this.mediaUnsetCallback(node);\n      }\n    }\n    if (media) {\n      for (const node of mutation.addedNodes) {\n        if (node === media)\n          this.handleMediaUpdated(media);\n      }\n    }\n  }\n};\n_isResizePending = new WeakMap();\n_handleResize = new WeakMap();\n_handlePointerMove = new WeakSet();\nhandlePointerMove_fn = function(event) {\n  if (event.pointerType !== \"mouse\") {\n    const MAX_TAP_DURATION = 250;\n    if (event.timeStamp - __privateGet(this, _pointerDownTimeStamp) < MAX_TAP_DURATION)\n      return;\n  }\n  __privateMethod(this, _setActive, setActive_fn).call(this);\n  clearTimeout(__privateGet(this, _inactiveTimeout));\n  const autohideOverControls = this.hasAttribute(\n    Attributes.AUTOHIDE_OVER_CONTROLS\n  );\n  if ([this, this.media].includes(event.target) || autohideOverControls) {\n    __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n  }\n};\n_handlePointerUp = new WeakSet();\nhandlePointerUp_fn = function(event) {\n  if (event.pointerType === \"touch\") {\n    const controlsVisible = !this.hasAttribute(Attributes.USER_INACTIVE);\n    if ([this, this.media].includes(event.target) && controlsVisible) {\n      __privateMethod(this, _setInactive, setInactive_fn).call(this);\n    } else {\n      __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n    }\n  } else if (event.composedPath().some(\n    (el) => [\"media-play-button\", \"media-fullscreen-button\"].includes(\n      el == null ? void 0 : el.localName\n    )\n  )) {\n    __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n  }\n};\n_setInactive = new WeakSet();\nsetInactive_fn = function() {\n  if (__privateGet(this, _autohide) < 0)\n    return;\n  if (this.hasAttribute(Attributes.USER_INACTIVE))\n    return;\n  this.setAttribute(Attributes.USER_INACTIVE, \"\");\n  const evt = new globalThis.CustomEvent(\n    MediaStateChangeEvents.USER_INACTIVE_CHANGE,\n    { composed: true, bubbles: true, detail: true }\n  );\n  this.dispatchEvent(evt);\n};\n_setActive = new WeakSet();\nsetActive_fn = function() {\n  if (!this.hasAttribute(Attributes.USER_INACTIVE))\n    return;\n  this.removeAttribute(Attributes.USER_INACTIVE);\n  const evt = new globalThis.CustomEvent(\n    MediaStateChangeEvents.USER_INACTIVE_CHANGE,\n    { composed: true, bubbles: true, detail: false }\n  );\n  this.dispatchEvent(evt);\n};\n_scheduleInactive = new WeakSet();\nscheduleInactive_fn = function() {\n  __privateMethod(this, _setActive, setActive_fn).call(this);\n  clearTimeout(__privateGet(this, _inactiveTimeout));\n  const autohide = parseInt(this.autohide);\n  if (autohide < 0)\n    return;\n  __privateSet(this, _inactiveTimeout, setTimeout(() => {\n    __privateMethod(this, _setInactive, setInactive_fn).call(this);\n  }, autohide * 1e3));\n};\nMediaContainer.shadowRootOptions = { mode: \"open\" };\nMediaContainer.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-container\")) {\n  globalThis.customElements.define(\"media-container\", MediaContainer);\n}\nvar media_container_default = MediaContainer;\nexport {\n  Attributes,\n  MediaContainer,\n  media_container_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _el, _attr, _defaultSet, _tokenSet, _tokens, tokens_get;\nclass AttributeTokenList {\n  constructor(el, attr, { defaultValue } = { defaultValue: void 0 }) {\n    __privateAdd(this, _tokens);\n    __privateAdd(this, _el, void 0);\n    __privateAdd(this, _attr, void 0);\n    __privateAdd(this, _defaultSet, void 0);\n    __privateAdd(this, _tokenSet, /* @__PURE__ */ new Set());\n    __privateSet(this, _el, el);\n    __privateSet(this, _attr, attr);\n    __privateSet(this, _defaultSet, new Set(defaultValue));\n  }\n  [Symbol.iterator]() {\n    return __privateGet(this, _tokens, tokens_get).values();\n  }\n  get length() {\n    return __privateGet(this, _tokens, tokens_get).size;\n  }\n  get value() {\n    var _a;\n    return (_a = [...__privateGet(this, _tokens, tokens_get)].join(\" \")) != null ? _a : \"\";\n  }\n  set value(val) {\n    var _a;\n    if (val === this.value)\n      return;\n    __privateSet(this, _tokenSet, /* @__PURE__ */ new Set());\n    this.add(...(_a = val == null ? void 0 : val.split(\" \")) != null ? _a : []);\n  }\n  toString() {\n    return this.value;\n  }\n  item(index) {\n    return [...__privateGet(this, _tokens, tokens_get)][index];\n  }\n  values() {\n    return __privateGet(this, _tokens, tokens_get).values();\n  }\n  forEach(callback, thisArg) {\n    __privateGet(this, _tokens, tokens_get).forEach(callback, thisArg);\n  }\n  add(...tokens) {\n    var _a, _b;\n    tokens.forEach((t) => __privateGet(this, _tokenSet).add(t));\n    if (this.value === \"\" && !((_a = __privateGet(this, _el)) == null ? void 0 : _a.hasAttribute(`${__privateGet(this, _attr)}`))) {\n      return;\n    }\n    (_b = __privateGet(this, _el)) == null ? void 0 : _b.setAttribute(`${__privateGet(this, _attr)}`, `${this.value}`);\n  }\n  remove(...tokens) {\n    var _a;\n    tokens.forEach((t) => __privateGet(this, _tokenSet).delete(t));\n    (_a = __privateGet(this, _el)) == null ? void 0 : _a.setAttribute(`${__privateGet(this, _attr)}`, `${this.value}`);\n  }\n  contains(token) {\n    return __privateGet(this, _tokens, tokens_get).has(token);\n  }\n  toggle(token, force) {\n    if (typeof force !== \"undefined\") {\n      if (force) {\n        this.add(token);\n        return true;\n      } else {\n        this.remove(token);\n        return false;\n      }\n    }\n    if (this.contains(token)) {\n      this.remove(token);\n      return false;\n    }\n    this.add(token);\n    return true;\n  }\n  replace(oldToken, newToken) {\n    this.remove(oldToken);\n    this.add(newToken);\n    return oldToken === newToken;\n  }\n}\n_el = new WeakMap();\n_attr = new WeakMap();\n_defaultSet = new WeakMap();\n_tokenSet = new WeakMap();\n_tokens = new WeakSet();\ntokens_get = function() {\n  return __privateGet(this, _tokenSet).size ? __privateGet(this, _tokenSet) : __privateGet(this, _defaultSet);\n};\nexport {\n  AttributeTokenList\n};\n","import { MediaUIAttributes, TextTrackKinds } from \"../constants.js\";\nconst splitTextTracksStr = (textTracksStr = \"\") => textTracksStr.split(/\\s+/);\nconst parseTextTrackStr = (textTrackStr = \"\") => {\n  const [kind, language, encodedLabel] = textTrackStr.split(\":\");\n  const label = encodedLabel ? decodeURIComponent(encodedLabel) : void 0;\n  return {\n    kind: kind === \"cc\" ? TextTrackKinds.CAPTIONS : TextTrackKinds.SUBTITLES,\n    language,\n    label\n  };\n};\nconst parseTextTracksStr = (textTracksStr = \"\", textTrackLikeObj = {}) => {\n  return splitTextTracksStr(textTracksStr).map((textTrackStr) => {\n    const textTrackObj = parseTextTrackStr(textTrackStr);\n    return {\n      ...textTrackLikeObj,\n      ...textTrackObj\n    };\n  });\n};\nconst parseTracks = (trackOrTracks) => {\n  if (!trackOrTracks)\n    return [];\n  if (Array.isArray(trackOrTracks)) {\n    return trackOrTracks.map((trackObjOrStr) => {\n      if (typeof trackObjOrStr === \"string\") {\n        return parseTextTrackStr(trackObjOrStr);\n      }\n      return trackObjOrStr;\n    });\n  }\n  if (typeof trackOrTracks === \"string\") {\n    return parseTextTracksStr(trackOrTracks);\n  }\n  return [trackOrTracks];\n};\nconst formatTextTrackObj = ({ kind, label, language } = { kind: \"subtitles\" }) => {\n  if (!label)\n    return language;\n  return `${kind === \"captions\" ? \"cc\" : \"sb\"}:${language}:${encodeURIComponent(\n    label\n  )}`;\n};\nconst stringifyTextTrackList = (textTracks = []) => {\n  return Array.prototype.map.call(textTracks, formatTextTrackObj).join(\" \");\n};\nconst isMatchingPropOf = (key, value) => (obj) => obj[key] === value;\nconst textTrackObjAsPred = (filterObj) => {\n  const preds = Object.entries(filterObj).map(([key, value]) => {\n    return isMatchingPropOf(key, value);\n  });\n  return (textTrack) => preds.every((pred) => pred(textTrack));\n};\nconst updateTracksModeTo = (mode, tracks = [], tracksToUpdate = []) => {\n  const preds = parseTracks(tracksToUpdate).map(textTrackObjAsPred);\n  const isTrackToUpdate = (textTrack) => {\n    return preds.some((pred) => pred(textTrack));\n  };\n  Array.from(tracks).filter(isTrackToUpdate).forEach((textTrack) => {\n    textTrack.mode = mode;\n  });\n};\nconst getTextTracksList = (media, filterPredOrObj = () => true) => {\n  if (!(media == null ? void 0 : media.textTracks))\n    return [];\n  const filterPred = typeof filterPredOrObj === \"function\" ? filterPredOrObj : textTrackObjAsPred(filterPredOrObj);\n  return Array.from(media.textTracks).filter(filterPred);\n};\nconst areSubsOn = (el) => {\n  var _a;\n  const showingSubtitles = !!((_a = el.mediaSubtitlesShowing) == null ? void 0 : _a.length) || el.hasAttribute(MediaUIAttributes.MEDIA_SUBTITLES_SHOWING);\n  return showingSubtitles;\n};\nexport {\n  areSubsOn,\n  formatTextTrackObj,\n  getTextTracksList,\n  isMatchingPropOf,\n  parseTextTrackStr,\n  parseTextTracksStr,\n  parseTracks,\n  splitTextTracksStr,\n  stringifyTextTrackList,\n  textTrackObjAsPred,\n  updateTracksModeTo\n};\n","import { WebkitPresentationModes } from \"../constants.js\";\nimport { containsComposedNode } from \"./element-utils.js\";\nimport { document } from \"./server-safe-globals.js\";\nconst enterFullscreen = (stateOwners) => {\n  var _a;\n  const { media, fullscreenElement } = stateOwners;\n  try {\n    const enterFullscreenKey = fullscreenElement && \"requestFullscreen\" in fullscreenElement ? \"requestFullscreen\" : fullscreenElement && \"webkitRequestFullScreen\" in fullscreenElement ? \"webkitRequestFullScreen\" : void 0;\n    if (enterFullscreenKey) {\n      const maybePromise = (_a = fullscreenElement[enterFullscreenKey]) == null ? void 0 : _a.call(fullscreenElement);\n      if (maybePromise instanceof Promise) {\n        return maybePromise.catch(() => {\n        });\n      }\n    } else if (media == null ? void 0 : media.webkitEnterFullscreen) {\n      media.webkitEnterFullscreen();\n    } else if (media == null ? void 0 : media.requestFullscreen) {\n      media.requestFullscreen();\n    }\n  } catch (e) {\n    console.error(e);\n  }\n};\nconst exitFullscreenKey = \"exitFullscreen\" in document ? \"exitFullscreen\" : \"webkitExitFullscreen\" in document ? \"webkitExitFullscreen\" : \"webkitCancelFullScreen\" in document ? \"webkitCancelFullScreen\" : void 0;\nconst exitFullscreen = (stateOwners) => {\n  var _a;\n  const { documentElement } = stateOwners;\n  if (exitFullscreenKey) {\n    const maybePromise = (_a = documentElement == null ? void 0 : documentElement[exitFullscreenKey]) == null ? void 0 : _a.call(documentElement);\n    if (maybePromise instanceof Promise) {\n      return maybePromise.catch(() => {\n      });\n    }\n  }\n};\nconst fullscreenElementKey = \"fullscreenElement\" in document ? \"fullscreenElement\" : \"webkitFullscreenElement\" in document ? \"webkitFullscreenElement\" : void 0;\nconst getFullscreenElement = (stateOwners) => {\n  const { documentElement, media } = stateOwners;\n  const docFullscreenElement = documentElement == null ? void 0 : documentElement[fullscreenElementKey];\n  if (!docFullscreenElement && \"webkitDisplayingFullscreen\" in media && \"webkitPresentationMode\" in media && media.webkitDisplayingFullscreen && media.webkitPresentationMode === WebkitPresentationModes.FULLSCREEN) {\n    return media;\n  }\n  return docFullscreenElement;\n};\nconst isFullscreen = (stateOwners) => {\n  var _a;\n  const { media, documentElement, fullscreenElement = media } = stateOwners;\n  if (!media || !documentElement)\n    return false;\n  const currentFullscreenElement = getFullscreenElement(stateOwners);\n  if (!currentFullscreenElement)\n    return false;\n  if (currentFullscreenElement === fullscreenElement || currentFullscreenElement === media) {\n    return true;\n  }\n  if (currentFullscreenElement.localName.includes(\"-\")) {\n    let currentRoot = currentFullscreenElement.shadowRoot;\n    if (!(fullscreenElementKey in currentRoot)) {\n      return containsComposedNode(\n        currentFullscreenElement,\n        /** @TODO clean up type assumptions (e.g. Node) (CJP) */\n        // @ts-ignore\n        fullscreenElement\n      );\n    }\n    while (currentRoot == null ? void 0 : currentRoot[fullscreenElementKey]) {\n      if (currentRoot[fullscreenElementKey] === fullscreenElement)\n        return true;\n      currentRoot = (_a = currentRoot[fullscreenElementKey]) == null ? void 0 : _a.shadowRoot;\n    }\n  }\n  return false;\n};\nconst fullscreenEnabledKey = \"fullscreenEnabled\" in document ? \"fullscreenEnabled\" : \"webkitFullscreenEnabled\" in document ? \"webkitFullscreenEnabled\" : void 0;\nconst isFullscreenEnabled = (stateOwners) => {\n  const { documentElement, media } = stateOwners;\n  return !!(documentElement == null ? void 0 : documentElement[fullscreenEnabledKey]) || media && \"webkitSupportsFullscreen\" in media;\n};\nexport {\n  enterFullscreen,\n  exitFullscreen,\n  getFullscreenElement,\n  isFullscreen,\n  isFullscreenEnabled\n};\n","import { globalThis, document } from \"./server-safe-globals.js\";\nimport { delay } from \"./utils.js\";\nimport { isFullscreenEnabled } from \"./fullscreen-api.js\";\nlet testMediaEl;\nconst getTestMediaEl = () => {\n  var _a, _b;\n  if (testMediaEl)\n    return testMediaEl;\n  testMediaEl = (_b = (_a = document) == null ? void 0 : _a.createElement) == null ? void 0 : _b.call(_a, \"video\");\n  return testMediaEl;\n};\nconst hasVolumeSupportAsync = async (mediaEl = getTestMediaEl()) => {\n  if (!mediaEl)\n    return false;\n  const prevVolume = mediaEl.volume;\n  mediaEl.volume = prevVolume / 2 + 0.1;\n  const abortController = new AbortController();\n  const volumeSupported = await Promise.race([\n    dispatchedVolumeChange(mediaEl, abortController.signal),\n    volumeChanged(mediaEl, prevVolume)\n  ]);\n  abortController.abort();\n  return volumeSupported;\n};\nconst dispatchedVolumeChange = (mediaEl, signal) => {\n  return new Promise((resolve) => {\n    mediaEl.addEventListener(\"volumechange\", () => resolve(true), { signal });\n  });\n};\nconst volumeChanged = async (mediaEl, prevVolume) => {\n  for (let i = 0; i < 10; i++) {\n    if (mediaEl.volume === prevVolume)\n      return false;\n    await delay(10);\n  }\n  return mediaEl.volume !== prevVolume;\n};\nconst isSafari = /.*Version\\/.*Safari\\/.*/.test(\n  globalThis.navigator.userAgent\n);\nconst hasPipSupport = (mediaEl = getTestMediaEl()) => {\n  if (globalThis.matchMedia(\"(display-mode: standalone)\").matches && isSafari)\n    return false;\n  return typeof (mediaEl == null ? void 0 : mediaEl.requestPictureInPicture) === \"function\";\n};\nconst hasFullscreenSupport = (mediaEl = getTestMediaEl()) => {\n  return isFullscreenEnabled({ documentElement: document, media: mediaEl });\n};\nconst fullscreenSupported = hasFullscreenSupport();\nconst pipSupported = hasPipSupport();\nconst airplaySupported = !!globalThis.WebKitPlaybackTargetAvailabilityEvent;\nconst castSupported = !!globalThis.chrome;\nexport {\n  airplaySupported,\n  castSupported,\n  fullscreenSupported,\n  getTestMediaEl,\n  hasFullscreenSupport,\n  hasPipSupport,\n  hasVolumeSupportAsync,\n  pipSupported\n};\n","import { TextTrackKinds, TextTrackModes } from \"../constants.js\";\nimport { getTextTracksList, updateTracksModeTo } from \"../utils/captions.js\";\nconst getSubtitleTracks = (stateOwners) => {\n  return getTextTracksList(stateOwners.media, (textTrack) => {\n    return [TextTrackKinds.SUBTITLES, TextTrackKinds.CAPTIONS].includes(\n      textTrack.kind\n    );\n  }).sort((a, b) => a.kind >= b.kind ? 1 : -1);\n};\nconst getShowingSubtitleTracks = (stateOwners) => {\n  return getTextTracksList(stateOwners.media, (textTrack) => {\n    return textTrack.mode === TextTrackModes.SHOWING && [TextTrackKinds.SUBTITLES, TextTrackKinds.CAPTIONS].includes(\n      textTrack.kind\n    );\n  });\n};\nconst toggleSubtitleTracks = (stateOwners, force) => {\n  const tracks = getSubtitleTracks(stateOwners);\n  const showingSubitleTracks = getShowingSubtitleTracks(stateOwners);\n  const subtitlesShowing = !!showingSubitleTracks.length;\n  if (!tracks.length)\n    return;\n  if (force === false || subtitlesShowing && force !== true) {\n    updateTracksModeTo(TextTrackModes.DISABLED, tracks, showingSubitleTracks);\n  } else if (force === true || !subtitlesShowing && force !== false) {\n    let subTrack = tracks[0];\n    const { options } = stateOwners;\n    if (!(options == null ? void 0 : options.noSubtitlesLangPref)) {\n      const subtitlesPref = globalThis.localStorage.getItem(\n        \"media-chrome-pref-subtitles-lang\"\n      );\n      const userLangPrefs = subtitlesPref ? [subtitlesPref, ...globalThis.navigator.languages] : globalThis.navigator.languages;\n      const preferredAvailableSubs = tracks.filter((textTrack) => {\n        return userLangPrefs.some(\n          (lang) => textTrack.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n        );\n      }).sort((textTrackA, textTrackB) => {\n        const idxA = userLangPrefs.findIndex(\n          (lang) => textTrackA.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n        );\n        const idxB = userLangPrefs.findIndex(\n          (lang) => textTrackB.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n        );\n        return idxA - idxB;\n      });\n      if (preferredAvailableSubs[0]) {\n        subTrack = preferredAvailableSubs[0];\n      }\n    }\n    const { language, label, kind } = subTrack;\n    updateTracksModeTo(TextTrackModes.DISABLED, tracks, showingSubitleTracks);\n    updateTracksModeTo(TextTrackModes.SHOWING, tracks, [\n      { language, label, kind }\n    ]);\n  }\n};\nconst areValuesEq = (x, y) => {\n  if (x === y)\n    return true;\n  if (x == null || y == null)\n    return false;\n  if (typeof x !== typeof y)\n    return false;\n  if (typeof x === \"number\" && Number.isNaN(x) && Number.isNaN(y))\n    return true;\n  if (typeof x !== \"object\")\n    return false;\n  if (Array.isArray(x))\n    return areArraysEq(x, y);\n  return Object.entries(x).every(\n    // NOTE: Checking key in y to disambiguate between between missing keys and keys whose value are undefined (CJP)\n    ([key, value]) => key in y && areValuesEq(value, y[key])\n  );\n};\nconst areArraysEq = (xs, ys) => {\n  const xIsArray = Array.isArray(xs);\n  const yIsArray = Array.isArray(ys);\n  if (xIsArray !== yIsArray)\n    return false;\n  if (!(xIsArray || yIsArray))\n    return true;\n  if (xs.length !== ys.length)\n    return false;\n  return xs.every((x, i) => areValuesEq(x, ys[i]));\n};\nexport {\n  areArraysEq,\n  areValuesEq,\n  getShowingSubtitleTracks,\n  getSubtitleTracks,\n  toggleSubtitleTracks\n};\n","import { document, globalThis } from \"../utils/server-safe-globals.js\";\nimport {\n  AvailabilityStates,\n  StreamTypes,\n  TextTrackKinds\n} from \"../constants.js\";\nimport { containsComposedNode } from \"../utils/element-utils.js\";\nimport {\n  enterFullscreen,\n  exitFullscreen,\n  isFullscreen\n} from \"../utils/fullscreen-api.js\";\nimport {\n  airplaySupported,\n  castSupported,\n  fullscreenSupported,\n  hasFullscreenSupport,\n  hasPipSupport,\n  hasVolumeSupportAsync,\n  pipSupported\n} from \"../utils/platform-tests.js\";\nimport {\n  getShowingSubtitleTracks,\n  getSubtitleTracks,\n  toggleSubtitleTracks\n} from \"./util.js\";\nimport { getTextTracksList } from \"../utils/captions.js\";\nimport { isValidNumber } from \"../utils/utils.js\";\nconst StreamTypeValues = Object.values(StreamTypes);\nlet volumeSupported;\nconst volumeSupportPromise = hasVolumeSupportAsync().then((supported) => {\n  volumeSupported = supported;\n  return volumeSupported;\n});\nconst prepareStateOwners = async (...stateOwners) => {\n  await Promise.all(\n    stateOwners.filter((x) => x).map(async (stateOwner) => {\n      if (!(\"localName\" in stateOwner && stateOwner instanceof globalThis.HTMLElement)) {\n        return;\n      }\n      const name = stateOwner.localName;\n      if (!name.includes(\"-\"))\n        return;\n      const classDef = globalThis.customElements.get(name);\n      if (classDef && stateOwner instanceof classDef)\n        return;\n      await globalThis.customElements.whenDefined(name);\n      globalThis.customElements.upgrade(stateOwner);\n    })\n  );\n};\nconst domParser = new globalThis.DOMParser();\nconst parseHtmlToText = (text) => text ? domParser.parseFromString(text, \"text/html\").body.textContent || text : text;\nconst stateMediator = {\n  mediaError: {\n    get(stateOwners, event) {\n      const { media } = stateOwners;\n      if ((event == null ? void 0 : event.type) === \"playing\")\n        return;\n      return media == null ? void 0 : media.error;\n    },\n    mediaEvents: [\"emptied\", \"error\", \"playing\"]\n  },\n  mediaErrorCode: {\n    get(stateOwners, event) {\n      var _a;\n      const { media } = stateOwners;\n      if ((event == null ? void 0 : event.type) === \"playing\")\n        return;\n      return (_a = media == null ? void 0 : media.error) == null ? void 0 : _a.code;\n    },\n    mediaEvents: [\"emptied\", \"error\", \"playing\"]\n  },\n  mediaErrorMessage: {\n    get(stateOwners, event) {\n      var _a, _b;\n      const { media } = stateOwners;\n      if ((event == null ? void 0 : event.type) === \"playing\")\n        return;\n      return (_b = (_a = media == null ? void 0 : media.error) == null ? void 0 : _a.message) != null ? _b : \"\";\n    },\n    mediaEvents: [\"emptied\", \"error\", \"playing\"]\n  },\n  mediaWidth: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.videoWidth) != null ? _a : 0;\n    },\n    mediaEvents: [\"resize\"]\n  },\n  mediaHeight: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.videoHeight) != null ? _a : 0;\n    },\n    mediaEvents: [\"resize\"]\n  },\n  mediaPaused: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.paused) != null ? _a : true;\n    },\n    set(value, stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (value) {\n        media.pause();\n      } else {\n        (_a = media.play()) == null ? void 0 : _a.catch(() => {\n        });\n      }\n    },\n    mediaEvents: [\"play\", \"playing\", \"pause\", \"emptied\"]\n  },\n  mediaHasPlayed: {\n    // We want to let the user know that the media started playing at any point (`media-has-played`).\n    // Since these propagators are all called when boostrapping state, let's verify this is\n    // a real playing event by checking that 1) there's media and 2) it isn't currently paused.\n    get(stateOwners, event) {\n      const { media } = stateOwners;\n      if (!media)\n        return false;\n      if (!event)\n        return !media.paused;\n      return event.type === \"playing\";\n    },\n    mediaEvents: [\"playing\", \"emptied\"]\n  },\n  mediaEnded: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.ended) != null ? _a : false;\n    },\n    mediaEvents: [\"seeked\", \"ended\", \"emptied\"]\n  },\n  mediaPlaybackRate: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.playbackRate) != null ? _a : 1;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (!Number.isFinite(+value))\n        return;\n      media.playbackRate = +value;\n    },\n    mediaEvents: [\"ratechange\", \"loadstart\"]\n  },\n  mediaMuted: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.muted) != null ? _a : false;\n    },\n    set(value, stateOwners) {\n      const { media, options: { noMutedPref } = {} } = stateOwners;\n      if (!media)\n        return;\n      media.muted = value;\n      try {\n        const hasLocalStoragePrefMuted = globalThis.localStorage.getItem(\"media-chrome-pref-muted\") !== null;\n        const hasMutedAttribute = media.hasAttribute(\"muted\");\n        if (noMutedPref) {\n          if (hasLocalStoragePrefMuted)\n            globalThis.localStorage.removeItem(\"media-chrome-pref-muted\");\n          return;\n        }\n        if (hasMutedAttribute && !hasLocalStoragePrefMuted) {\n          return;\n        }\n        globalThis.localStorage.setItem(\n          \"media-chrome-pref-muted\",\n          value ? \"true\" : \"false\"\n        );\n      } catch (e) {\n        console.debug(\"Error setting muted pref\", e);\n      }\n    },\n    mediaEvents: [\"volumechange\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        const {\n          options: { noMutedPref }\n        } = stateOwners;\n        const { media } = stateOwners;\n        if (!media || media.muted || noMutedPref)\n          return;\n        try {\n          const mutedPref = globalThis.localStorage.getItem(\"media-chrome-pref-muted\") === \"true\";\n          stateMediator.mediaMuted.set(mutedPref, stateOwners);\n          handler(mutedPref);\n        } catch (e) {\n          console.debug(\"Error getting muted pref\", e);\n        }\n      }\n    ]\n  },\n  mediaLoop: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      return media == null ? void 0 : media.loop;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      media.loop = value;\n    },\n    mediaEvents: [\"medialooprequest\"]\n  },\n  mediaVolume: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.volume) != null ? _a : 1;\n    },\n    set(value, stateOwners) {\n      const { media, options: { noVolumePref } = {} } = stateOwners;\n      if (!media)\n        return;\n      try {\n        if (value == null) {\n          globalThis.localStorage.removeItem(\"media-chrome-pref-volume\");\n        } else if (!media.hasAttribute(\"muted\") && !noVolumePref) {\n          globalThis.localStorage.setItem(\n            \"media-chrome-pref-volume\",\n            value.toString()\n          );\n        }\n      } catch (e) {\n        console.debug(\"Error setting volume pref\", e);\n      }\n      if (!Number.isFinite(+value))\n        return;\n      media.volume = +value;\n    },\n    mediaEvents: [\"volumechange\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        const {\n          options: { noVolumePref }\n        } = stateOwners;\n        if (noVolumePref)\n          return;\n        try {\n          const { media } = stateOwners;\n          if (!media)\n            return;\n          const volumePref = globalThis.localStorage.getItem(\n            \"media-chrome-pref-volume\"\n          );\n          if (volumePref == null)\n            return;\n          stateMediator.mediaVolume.set(+volumePref, stateOwners);\n          handler(+volumePref);\n        } catch (e) {\n          console.debug(\"Error getting volume pref\", e);\n        }\n      }\n    ]\n  },\n  // NOTE: Keeping this roughly equivalent to prior impl to reduce number of changes,\n  // however we may want to model \"derived\" state differently from \"primary\" state\n  // (in this case, derived === mediaVolumeLevel, primary === mediaMuted, mediaVolume) (CJP)\n  mediaVolumeLevel: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (typeof (media == null ? void 0 : media.volume) == \"undefined\")\n        return \"high\";\n      if (media.muted || media.volume === 0)\n        return \"off\";\n      if (media.volume < 0.5)\n        return \"low\";\n      if (media.volume < 0.75)\n        return \"medium\";\n      return \"high\";\n    },\n    mediaEvents: [\"volumechange\"]\n  },\n  mediaCurrentTime: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return (_a = media == null ? void 0 : media.currentTime) != null ? _a : 0;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media || !isValidNumber(value))\n        return;\n      media.currentTime = value;\n    },\n    mediaEvents: [\"timeupdate\", \"loadedmetadata\"]\n  },\n  mediaDuration: {\n    get(stateOwners) {\n      const { media, options: { defaultDuration } = {} } = stateOwners;\n      if (defaultDuration && (!media || !media.duration || Number.isNaN(media.duration) || !Number.isFinite(media.duration))) {\n        return defaultDuration;\n      }\n      return Number.isFinite(media == null ? void 0 : media.duration) ? media.duration : Number.NaN;\n    },\n    mediaEvents: [\"durationchange\", \"loadedmetadata\", \"emptied\"]\n  },\n  mediaLoading: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      return (media == null ? void 0 : media.readyState) < 3;\n    },\n    mediaEvents: [\"waiting\", \"playing\", \"emptied\"]\n  },\n  mediaSeekable: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      if (!((_a = media == null ? void 0 : media.seekable) == null ? void 0 : _a.length))\n        return void 0;\n      const start = media.seekable.start(0);\n      const end = media.seekable.end(media.seekable.length - 1);\n      if (!start && !end)\n        return void 0;\n      return [Number(start.toFixed(3)), Number(end.toFixed(3))];\n    },\n    mediaEvents: [\"loadedmetadata\", \"emptied\", \"progress\", \"seekablechange\"]\n  },\n  mediaBuffered: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      const timeRanges = (_a = media == null ? void 0 : media.buffered) != null ? _a : [];\n      return Array.from(timeRanges).map((_, i) => [\n        Number(timeRanges.start(i).toFixed(3)),\n        Number(timeRanges.end(i).toFixed(3))\n      ]);\n    },\n    mediaEvents: [\"progress\", \"emptied\"]\n  },\n  mediaStreamType: {\n    get(stateOwners) {\n      const { media, options: { defaultStreamType } = {} } = stateOwners;\n      const usedDefaultStreamType = [\n        StreamTypes.LIVE,\n        StreamTypes.ON_DEMAND\n      ].includes(defaultStreamType) ? defaultStreamType : void 0;\n      if (!media)\n        return usedDefaultStreamType;\n      const { streamType } = media;\n      if (StreamTypeValues.includes(streamType)) {\n        if (streamType === StreamTypes.UNKNOWN) {\n          return usedDefaultStreamType;\n        }\n        return streamType;\n      }\n      const duration = media.duration;\n      if (duration === Infinity) {\n        return StreamTypes.LIVE;\n      } else if (Number.isFinite(duration)) {\n        return StreamTypes.ON_DEMAND;\n      }\n      return usedDefaultStreamType;\n    },\n    mediaEvents: [\n      \"emptied\",\n      \"durationchange\",\n      \"loadedmetadata\",\n      \"streamtypechange\"\n    ]\n  },\n  mediaTargetLiveWindow: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return Number.NaN;\n      const { targetLiveWindow } = media;\n      const streamType = stateMediator.mediaStreamType.get(stateOwners);\n      if ((targetLiveWindow == null || Number.isNaN(targetLiveWindow)) && streamType === StreamTypes.LIVE) {\n        return 0;\n      }\n      return targetLiveWindow;\n    },\n    mediaEvents: [\n      \"emptied\",\n      \"durationchange\",\n      \"loadedmetadata\",\n      \"streamtypechange\",\n      \"targetlivewindowchange\"\n    ]\n  },\n  mediaTimeIsLive: {\n    get(stateOwners) {\n      const {\n        media,\n        // Default to 10 seconds\n        options: { liveEdgeOffset = 10 } = {}\n      } = stateOwners;\n      if (!media)\n        return false;\n      if (typeof media.liveEdgeStart === \"number\") {\n        if (Number.isNaN(media.liveEdgeStart))\n          return false;\n        return media.currentTime >= media.liveEdgeStart;\n      }\n      const live = stateMediator.mediaStreamType.get(stateOwners) === StreamTypes.LIVE;\n      if (!live)\n        return false;\n      const seekable = media.seekable;\n      if (!seekable)\n        return true;\n      if (!seekable.length)\n        return false;\n      const liveEdgeStart = seekable.end(seekable.length - 1) - liveEdgeOffset;\n      return media.currentTime >= liveEdgeStart;\n    },\n    mediaEvents: [\"playing\", \"timeupdate\", \"progress\", \"waiting\", \"emptied\"]\n  },\n  // Text Tracks modeling\n  mediaSubtitlesList: {\n    get(stateOwners) {\n      return getSubtitleTracks(stateOwners).map(\n        ({ kind, label, language }) => ({ kind, label, language })\n      );\n    },\n    mediaEvents: [\"loadstart\"],\n    textTracksEvents: [\"addtrack\", \"removetrack\"]\n  },\n  mediaSubtitlesShowing: {\n    get(stateOwners) {\n      return getShowingSubtitleTracks(stateOwners).map(\n        ({ kind, label, language }) => ({ kind, label, language })\n      );\n    },\n    mediaEvents: [\"loadstart\"],\n    textTracksEvents: [\"addtrack\", \"removetrack\", \"change\"],\n    stateOwnersUpdateHandlers: [\n      (_handler, stateOwners) => {\n        var _a, _b;\n        const { media, options } = stateOwners;\n        if (!media)\n          return;\n        const updateDefaultSubtitlesCallback = (event) => {\n          var _a2;\n          if (!options.defaultSubtitles)\n            return;\n          const nonSubsEvent = event && ![TextTrackKinds.CAPTIONS, TextTrackKinds.SUBTITLES].includes(\n            // @ts-ignore\n            (_a2 = event == null ? void 0 : event.track) == null ? void 0 : _a2.kind\n          );\n          if (nonSubsEvent)\n            return;\n          toggleSubtitleTracks(stateOwners, true);\n        };\n        media.addEventListener(\n          \"loadstart\",\n          updateDefaultSubtitlesCallback\n        );\n        (_a = media.textTracks) == null ? void 0 : _a.addEventListener(\n          \"addtrack\",\n          updateDefaultSubtitlesCallback\n        );\n        (_b = media.textTracks) == null ? void 0 : _b.addEventListener(\n          \"removetrack\",\n          updateDefaultSubtitlesCallback\n        );\n        return () => {\n          var _a2, _b2;\n          media.removeEventListener(\n            \"loadstart\",\n            updateDefaultSubtitlesCallback\n          );\n          (_a2 = media.textTracks) == null ? void 0 : _a2.removeEventListener(\n            \"addtrack\",\n            updateDefaultSubtitlesCallback\n          );\n          (_b2 = media.textTracks) == null ? void 0 : _b2.removeEventListener(\n            \"removetrack\",\n            updateDefaultSubtitlesCallback\n          );\n        };\n      }\n    ]\n  },\n  mediaChaptersCues: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      if (!media)\n        return [];\n      const [chaptersTrack] = getTextTracksList(media, {\n        kind: TextTrackKinds.CHAPTERS\n      });\n      return Array.from((_a = chaptersTrack == null ? void 0 : chaptersTrack.cues) != null ? _a : []).map(\n        ({ text, startTime, endTime }) => ({\n          text: parseHtmlToText(text),\n          startTime,\n          endTime\n        })\n      );\n    },\n    mediaEvents: [\"loadstart\", \"loadedmetadata\"],\n    textTracksEvents: [\"addtrack\", \"removetrack\", \"change\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        var _a;\n        const { media } = stateOwners;\n        if (!media)\n          return;\n        const chaptersTrack = media.querySelector(\n          'track[kind=\"chapters\"][default][src]'\n        );\n        const shadowChaptersTrack = (_a = media.shadowRoot) == null ? void 0 : _a.querySelector(\n          ':is(video,audio) > track[kind=\"chapters\"][default][src]'\n        );\n        chaptersTrack == null ? void 0 : chaptersTrack.addEventListener(\"load\", handler);\n        shadowChaptersTrack == null ? void 0 : shadowChaptersTrack.addEventListener(\"load\", handler);\n        return () => {\n          chaptersTrack == null ? void 0 : chaptersTrack.removeEventListener(\"load\", handler);\n          shadowChaptersTrack == null ? void 0 : shadowChaptersTrack.removeEventListener(\"load\", handler);\n        };\n      }\n    ]\n  },\n  // Modeling state tied to root node\n  mediaIsPip: {\n    get(stateOwners) {\n      var _a, _b;\n      const { media, documentElement } = stateOwners;\n      if (!media || !documentElement)\n        return false;\n      if (!documentElement.pictureInPictureElement)\n        return false;\n      if (documentElement.pictureInPictureElement === media)\n        return true;\n      if (documentElement.pictureInPictureElement instanceof HTMLMediaElement) {\n        if (!((_a = media.localName) == null ? void 0 : _a.includes(\"-\")))\n          return false;\n        return containsComposedNode(\n          media,\n          documentElement.pictureInPictureElement\n        );\n      }\n      if (documentElement.pictureInPictureElement.localName.includes(\"-\")) {\n        let currentRoot = documentElement.pictureInPictureElement.shadowRoot;\n        while (currentRoot == null ? void 0 : currentRoot.pictureInPictureElement) {\n          if (currentRoot.pictureInPictureElement === media)\n            return true;\n          currentRoot = (_b = currentRoot.pictureInPictureElement) == null ? void 0 : _b.shadowRoot;\n        }\n      }\n      return false;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (value) {\n        if (!document.pictureInPictureEnabled) {\n          console.warn(\"MediaChrome: Picture-in-picture is not enabled\");\n          return;\n        }\n        if (!media.requestPictureInPicture) {\n          console.warn(\n            \"MediaChrome: The current media does not support picture-in-picture\"\n          );\n          return;\n        }\n        const warnNotReady = () => {\n          console.warn(\n            \"MediaChrome: The media is not ready for picture-in-picture. It must have a readyState > 0.\"\n          );\n        };\n        media.requestPictureInPicture().catch((err) => {\n          if (err.code === 11) {\n            if (!media.src) {\n              console.warn(\n                \"MediaChrome: The media is not ready for picture-in-picture. It must have a src set.\"\n              );\n              return;\n            }\n            if (media.readyState === 0 && media.preload === \"none\") {\n              const cleanup = () => {\n                media.removeEventListener(\"loadedmetadata\", tryPip);\n                media.preload = \"none\";\n              };\n              const tryPip = () => {\n                media.requestPictureInPicture().catch(warnNotReady);\n                cleanup();\n              };\n              media.addEventListener(\"loadedmetadata\", tryPip);\n              media.preload = \"metadata\";\n              setTimeout(() => {\n                if (media.readyState === 0)\n                  warnNotReady();\n                cleanup();\n              }, 1e3);\n            } else {\n              throw err;\n            }\n          } else {\n            throw err;\n          }\n        });\n      } else if (document.pictureInPictureElement) {\n        document.exitPictureInPicture();\n      }\n    },\n    mediaEvents: [\"enterpictureinpicture\", \"leavepictureinpicture\"]\n  },\n  mediaRenditionList: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return [...(_a = media == null ? void 0 : media.videoRenditions) != null ? _a : []].map((videoRendition) => ({\n        ...videoRendition\n      }));\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    videoRenditionsEvents: [\"addrendition\", \"removerendition\"]\n  },\n  /** @TODO Model this as a derived value? (CJP) */\n  mediaRenditionSelected: {\n    get(stateOwners) {\n      var _a, _b, _c;\n      const { media } = stateOwners;\n      return (_c = (_b = media == null ? void 0 : media.videoRenditions) == null ? void 0 : _b[(_a = media.videoRenditions) == null ? void 0 : _a.selectedIndex]) == null ? void 0 : _c.id;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.videoRenditions)) {\n        console.warn(\n          \"MediaController: Rendition selection not supported by this media.\"\n        );\n        return;\n      }\n      const renditionId = value;\n      const index = Array.prototype.findIndex.call(\n        media.videoRenditions,\n        (r) => r.id == renditionId\n      );\n      if (media.videoRenditions.selectedIndex != index) {\n        media.videoRenditions.selectedIndex = index;\n      }\n    },\n    mediaEvents: [\"emptied\"],\n    videoRenditionsEvents: [\"addrendition\", \"removerendition\", \"change\"]\n  },\n  mediaAudioTrackList: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      return [...(_a = media == null ? void 0 : media.audioTracks) != null ? _a : []];\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    audioTracksEvents: [\"addtrack\", \"removetrack\"]\n  },\n  mediaAudioTrackEnabled: {\n    get(stateOwners) {\n      var _a, _b;\n      const { media } = stateOwners;\n      return (_b = [...(_a = media == null ? void 0 : media.audioTracks) != null ? _a : []].find(\n        (audioTrack) => audioTrack.enabled\n      )) == null ? void 0 : _b.id;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.audioTracks)) {\n        console.warn(\n          \"MediaChrome: Audio track selection not supported by this media.\"\n        );\n        return;\n      }\n      const audioTrackId = value;\n      for (const track of media.audioTracks) {\n        track.enabled = audioTrackId == track.id;\n      }\n    },\n    mediaEvents: [\"emptied\"],\n    audioTracksEvents: [\"addtrack\", \"removetrack\", \"change\"]\n  },\n  mediaIsFullscreen: {\n    get(stateOwners) {\n      return isFullscreen(stateOwners);\n    },\n    set(value, stateOwners, event) {\n      var _a;\n      if (!value) {\n        exitFullscreen(stateOwners);\n      } else {\n        enterFullscreen(stateOwners);\n        const isPointer = event.detail;\n        if (isPointer)\n          (_a = stateOwners.media) == null ? void 0 : _a.focus();\n      }\n    },\n    // older Safari version may require webkit-specific events\n    rootEvents: [\"fullscreenchange\", \"webkitfullscreenchange\"],\n    // iOS requires webkit-specific events on the video.\n    mediaEvents: [\n      \"webkitbeginfullscreen\",\n      \"webkitendfullscreen\",\n      \"webkitpresentationmodechanged\"\n    ]\n  },\n  mediaIsCasting: {\n    // Note this relies on a customized castable-video element.\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.remote) || ((_a = media.remote) == null ? void 0 : _a.state) === \"disconnected\")\n        return false;\n      return !!media.remote.state;\n    },\n    set(value, stateOwners) {\n      var _a, _b;\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (value && ((_a = media.remote) == null ? void 0 : _a.state) !== \"disconnected\")\n        return;\n      if (!value && ((_b = media.remote) == null ? void 0 : _b.state) !== \"connected\")\n        return;\n      if (typeof media.remote.prompt !== \"function\") {\n        console.warn(\n          \"MediaChrome: Casting is not supported in this environment\"\n        );\n        return;\n      }\n      media.remote.prompt().catch(() => {\n      });\n    },\n    remoteEvents: [\"connect\", \"connecting\", \"disconnect\"]\n  },\n  // NOTE: Newly added state for tracking airplaying\n  mediaIsAirplaying: {\n    // NOTE: Cannot know if airplaying since Safari doesn't fully support HTMLMediaElement::remote yet (e.g. remote::state) (CJP)\n    get() {\n      return false;\n    },\n    set(_value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (!(media.webkitShowPlaybackTargetPicker && globalThis.WebKitPlaybackTargetAvailabilityEvent)) {\n        console.error(\n          \"MediaChrome: received a request to select AirPlay but AirPlay is not supported in this environment\"\n        );\n        return;\n      }\n      media.webkitShowPlaybackTargetPicker();\n    },\n    mediaEvents: [\"webkitcurrentplaybacktargetiswirelesschanged\"]\n  },\n  mediaFullscreenUnavailable: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (!fullscreenSupported || !hasFullscreenSupport(media))\n        return AvailabilityStates.UNSUPPORTED;\n      return void 0;\n    }\n  },\n  mediaPipUnavailable: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (!pipSupported || !hasPipSupport(media))\n        return AvailabilityStates.UNSUPPORTED;\n      else if (media == null ? void 0 : media.disablePictureInPicture)\n        return AvailabilityStates.UNAVAILABLE;\n      return void 0;\n    }\n  },\n  mediaVolumeUnavailable: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (volumeSupported === false || (media == null ? void 0 : media.volume) == void 0) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      return void 0;\n    },\n    // NOTE: Slightly different impl here. Added generic support for\n    // \"stateOwnersUpdateHandlers\" since the original impl had to hack around\n    // race conditions. (CJP)\n    stateOwnersUpdateHandlers: [\n      (handler) => {\n        if (volumeSupported == null) {\n          volumeSupportPromise.then(\n            (supported) => handler(supported ? void 0 : AvailabilityStates.UNSUPPORTED)\n          );\n        }\n      }\n    ]\n  },\n  mediaCastUnavailable: {\n    // @ts-ignore\n    get(stateOwners, { availability = \"not-available\" } = {}) {\n      var _a;\n      const { media } = stateOwners;\n      if (!castSupported || !((_a = media == null ? void 0 : media.remote) == null ? void 0 : _a.state)) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      if (availability == null || availability === \"available\")\n        return void 0;\n      return AvailabilityStates.UNAVAILABLE;\n    },\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        var _a;\n        const { media } = stateOwners;\n        if (!media)\n          return;\n        const remotePlaybackDisabled = media.disableRemotePlayback || media.hasAttribute(\"disableremoteplayback\");\n        if (!remotePlaybackDisabled) {\n          (_a = media == null ? void 0 : media.remote) == null ? void 0 : _a.watchAvailability((availabilityBool) => {\n            const availability = availabilityBool ? \"available\" : \"not-available\";\n            handler({ availability });\n          }).catch((error) => {\n            if (error.name === \"NotSupportedError\") {\n              handler({ availability: null });\n            } else {\n              handler({ availability: \"not-available\" });\n            }\n          });\n        }\n        return () => {\n          var _a2;\n          (_a2 = media == null ? void 0 : media.remote) == null ? void 0 : _a2.cancelWatchAvailability().catch(() => {\n          });\n        };\n      }\n    ]\n  },\n  mediaAirplayUnavailable: {\n    get(_stateOwners, event) {\n      if (!airplaySupported)\n        return AvailabilityStates.UNSUPPORTED;\n      if ((event == null ? void 0 : event.availability) === \"not-available\") {\n        return AvailabilityStates.UNAVAILABLE;\n      }\n      return void 0;\n    },\n    // NOTE: Keeping this event, as it's still the documented way of monitoring\n    // for AirPlay availability from Apple.\n    // See: https://developer.apple.com/documentation/webkitjs/adding_an_airplay_button_to_your_safari_media_controls#2940021 (CJP)\n    mediaEvents: [\"webkitplaybacktargetavailabilitychanged\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        var _a;\n        const { media } = stateOwners;\n        if (!media)\n          return;\n        const remotePlaybackDisabled = media.disableRemotePlayback || media.hasAttribute(\"disableremoteplayback\");\n        if (!remotePlaybackDisabled) {\n          (_a = media == null ? void 0 : media.remote) == null ? void 0 : _a.watchAvailability((availabilityBool) => {\n            const availability = availabilityBool ? \"available\" : \"not-available\";\n            handler({ availability });\n          }).catch((error) => {\n            if (error.name === \"NotSupportedError\") {\n              handler({ availability: null });\n            } else {\n              handler({ availability: \"not-available\" });\n            }\n          });\n        }\n        return () => {\n          var _a2;\n          (_a2 = media == null ? void 0 : media.remote) == null ? void 0 : _a2.cancelWatchAvailability().catch(() => {\n          });\n        };\n      }\n    ]\n  },\n  mediaRenditionUnavailable: {\n    get(stateOwners) {\n      var _a;\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.videoRenditions)) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      if (!((_a = media.videoRenditions) == null ? void 0 : _a.length)) {\n        return AvailabilityStates.UNAVAILABLE;\n      }\n      return void 0;\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    videoRenditionsEvents: [\"addrendition\", \"removerendition\"]\n  },\n  mediaAudioTrackUnavailable: {\n    get(stateOwners) {\n      var _a, _b;\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.audioTracks)) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      if (((_b = (_a = media.audioTracks) == null ? void 0 : _a.length) != null ? _b : 0) <= 1) {\n        return AvailabilityStates.UNAVAILABLE;\n      }\n      return void 0;\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    audioTracksEvents: [\"addtrack\", \"removetrack\"]\n  },\n  mediaLang: {\n    get(stateOwners) {\n      const { options: { mediaLang } = {} } = stateOwners;\n      return mediaLang != null ? mediaLang : \"en\";\n    }\n  }\n};\nexport {\n  prepareStateOwners,\n  stateMediator,\n  volumeSupportPromise\n};\n","import { globalThis } from \"../utils/server-safe-globals.js\";\nimport {\n  MediaUIEvents,\n  StreamTypes,\n  TextTrackKinds,\n  TextTrackModes\n} from \"../constants.js\";\nimport {\n  getTextTracksList,\n  parseTracks,\n  updateTracksModeTo\n} from \"../utils/captions.js\";\nimport { getSubtitleTracks, toggleSubtitleTracks } from \"./util.js\";\nconst requestMap = {\n  /**\n   * @TODO Consider adding state to `StateMediator` for e.g. `mediaThumbnailCues` and use that for derived state here (CJP)\n   */\n  [MediaUIEvents.MEDIA_PREVIEW_REQUEST](stateMediator, stateOwners, { detail }) {\n    var _a, _b, _c;\n    const { media } = stateOwners;\n    const mediaPreviewTime = detail != null ? detail : void 0;\n    let mediaPreviewImage = void 0;\n    let mediaPreviewCoords = void 0;\n    if (media && mediaPreviewTime != null) {\n      const [track] = getTextTracksList(media, {\n        kind: TextTrackKinds.METADATA,\n        label: \"thumbnails\"\n      });\n      const cue = Array.prototype.find.call((_a = track == null ? void 0 : track.cues) != null ? _a : [], (c, i, cs) => {\n        if (i === 0)\n          return c.endTime > mediaPreviewTime;\n        if (i === cs.length - 1)\n          return c.startTime <= mediaPreviewTime;\n        return c.startTime <= mediaPreviewTime && c.endTime > mediaPreviewTime;\n      });\n      if (cue) {\n        const base = !/'^(?:[a-z]+:)?\\/\\//i.test(cue.text) ? (_b = media == null ? void 0 : media.querySelector(\n          'track[label=\"thumbnails\"]'\n        )) == null ? void 0 : _b.src : void 0;\n        const url = new URL(cue.text, base);\n        const previewCoordsStr = new URLSearchParams(url.hash).get(\"#xywh\");\n        mediaPreviewCoords = previewCoordsStr.split(\",\").map((numStr) => +numStr);\n        mediaPreviewImage = url.href;\n      }\n    }\n    const mediaDuration = stateMediator.mediaDuration.get(stateOwners);\n    const mediaChaptersCues = stateMediator.mediaChaptersCues.get(stateOwners);\n    let mediaPreviewChapter = (_c = mediaChaptersCues.find((c, i, cs) => {\n      if (i === cs.length - 1 && mediaDuration === c.endTime) {\n        return c.startTime <= mediaPreviewTime && c.endTime >= mediaPreviewTime;\n      }\n      return c.startTime <= mediaPreviewTime && c.endTime > mediaPreviewTime;\n    })) == null ? void 0 : _c.text;\n    if (detail != null && mediaPreviewChapter == null) {\n      mediaPreviewChapter = \"\";\n    }\n    return {\n      mediaPreviewTime,\n      mediaPreviewImage,\n      mediaPreviewCoords,\n      mediaPreviewChapter\n    };\n  },\n  [MediaUIEvents.MEDIA_PAUSE_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaPaused\";\n    const value = true;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_PLAY_REQUEST](stateMediator, stateOwners) {\n    var _a, _b, _c, _d;\n    const key = \"mediaPaused\";\n    const value = false;\n    const isLive = stateMediator.mediaStreamType.get(stateOwners) === StreamTypes.LIVE;\n    const canAutoSeekToLive = !((_a = stateOwners.options) == null ? void 0 : _a.noAutoSeekToLive);\n    const isDVR = stateMediator.mediaTargetLiveWindow.get(stateOwners) > 0;\n    if (isLive && canAutoSeekToLive && !isDVR) {\n      const seekableEnd = (_b = stateMediator.mediaSeekable.get(stateOwners)) == null ? void 0 : _b[1];\n      if (seekableEnd) {\n        const seekToLiveOffset = (_d = (_c = stateOwners.options) == null ? void 0 : _c.seekToLiveOffset) != null ? _d : 0;\n        const liveEdgeTime = seekableEnd - seekToLiveOffset;\n        stateMediator.mediaCurrentTime.set(liveEdgeTime, stateOwners);\n      }\n    }\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST](stateMediator, stateOwners, { detail }) {\n    const key = \"mediaPlaybackRate\";\n    const value = detail;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_MUTE_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaMuted\";\n    const value = true;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_UNMUTE_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaMuted\";\n    const value = false;\n    if (!stateMediator.mediaVolume.get(stateOwners)) {\n      stateMediator.mediaVolume.set(0.25, stateOwners);\n    }\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_LOOP_REQUEST](stateMediator, stateOwners, { detail }) {\n    const key = \"mediaLoop\";\n    const value = !!detail;\n    stateMediator[key].set(value, stateOwners);\n    return { mediaLoop: value };\n  },\n  [MediaUIEvents.MEDIA_VOLUME_REQUEST](stateMediator, stateOwners, { detail }) {\n    const key = \"mediaVolume\";\n    const value = detail;\n    if (value && stateMediator.mediaMuted.get(stateOwners)) {\n      stateMediator.mediaMuted.set(false, stateOwners);\n    }\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_SEEK_REQUEST](stateMediator, stateOwners, { detail }) {\n    const key = \"mediaCurrentTime\";\n    const value = detail;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_SEEK_TO_LIVE_REQUEST](stateMediator, stateOwners) {\n    var _a, _b, _c;\n    const key = \"mediaCurrentTime\";\n    const seekableEnd = (_a = stateMediator.mediaSeekable.get(stateOwners)) == null ? void 0 : _a[1];\n    if (Number.isNaN(Number(seekableEnd)))\n      return;\n    const seekToLiveOffset = (_c = (_b = stateOwners.options) == null ? void 0 : _b.seekToLiveOffset) != null ? _c : 0;\n    const value = seekableEnd - seekToLiveOffset;\n    stateMediator[key].set(value, stateOwners);\n  },\n  // Text Tracks state change requests\n  [MediaUIEvents.MEDIA_SHOW_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n    var _a;\n    const { options } = stateOwners;\n    const tracks = getSubtitleTracks(stateOwners);\n    const tracksToUpdate = parseTracks(detail);\n    const preferredLanguage = (_a = tracksToUpdate[0]) == null ? void 0 : _a.language;\n    if (preferredLanguage && !options.noSubtitlesLangPref) {\n      globalThis.localStorage.setItem(\n        \"media-chrome-pref-subtitles-lang\",\n        preferredLanguage\n      );\n    }\n    updateTracksModeTo(TextTrackModes.SHOWING, tracks, tracksToUpdate);\n  },\n  [MediaUIEvents.MEDIA_DISABLE_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n    const tracks = getSubtitleTracks(stateOwners);\n    const tracksToUpdate = detail != null ? detail : [];\n    updateTracksModeTo(TextTrackModes.DISABLED, tracks, tracksToUpdate);\n  },\n  [MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n    toggleSubtitleTracks(stateOwners, detail);\n  },\n  // Renditions/Tracks state change requests\n  [MediaUIEvents.MEDIA_RENDITION_REQUEST](stateMediator, stateOwners, { detail }) {\n    const key = \"mediaRenditionSelected\";\n    const value = detail;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_AUDIO_TRACK_REQUEST](stateMediator, stateOwners, { detail }) {\n    const key = \"mediaAudioTrackEnabled\";\n    const value = detail;\n    stateMediator[key].set(value, stateOwners);\n  },\n  // State change requests dependent on root node\n  [MediaUIEvents.MEDIA_ENTER_PIP_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaIsPip\";\n    const value = true;\n    if (stateMediator.mediaIsFullscreen.get(stateOwners)) {\n      stateMediator.mediaIsFullscreen.set(false, stateOwners);\n    }\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_EXIT_PIP_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaIsPip\";\n    const value = false;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST](stateMediator, stateOwners, event) {\n    const key = \"mediaIsFullscreen\";\n    const value = true;\n    if (stateMediator.mediaIsPip.get(stateOwners)) {\n      stateMediator.mediaIsPip.set(false, stateOwners);\n    }\n    stateMediator[key].set(value, stateOwners, event);\n  },\n  [MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaIsFullscreen\";\n    const value = false;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_ENTER_CAST_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaIsCasting\";\n    const value = true;\n    if (stateMediator.mediaIsFullscreen.get(stateOwners)) {\n      stateMediator.mediaIsFullscreen.set(false, stateOwners);\n    }\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_EXIT_CAST_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaIsCasting\";\n    const value = false;\n    stateMediator[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_AIRPLAY_REQUEST](stateMediator, stateOwners) {\n    const key = \"mediaIsAirplaying\";\n    const value = true;\n    stateMediator[key].set(value, stateOwners);\n  }\n};\nexport {\n  requestMap\n};\n","import {\n  stateMediator as defaultStateMediator,\n  prepareStateOwners\n} from \"./state-mediator.js\";\nimport { areValuesEq } from \"./util.js\";\nimport { requestMap as defaultRequestMap } from \"./request-map.js\";\nconst createMediaStore = ({\n  media,\n  fullscreenElement,\n  documentElement,\n  stateMediator = defaultStateMediator,\n  requestMap = defaultRequestMap,\n  options = {},\n  monitorStateOwnersOnlyWithSubscriptions = true\n}) => {\n  const callbacks = [];\n  const stateOwners = {\n    // Spreading options here since folks should not rely on holding onto references\n    // for any app-level logic wrt options.\n    options: { ...options }\n  };\n  let state = Object.freeze({\n    mediaPreviewTime: void 0,\n    mediaPreviewImage: void 0,\n    mediaPreviewCoords: void 0,\n    mediaPreviewChapter: void 0\n  });\n  const updateState = (nextStateDelta) => {\n    if (nextStateDelta == void 0)\n      return;\n    if (areValuesEq(nextStateDelta, state)) {\n      return;\n    }\n    state = Object.freeze({\n      ...state,\n      ...nextStateDelta\n    });\n    callbacks.forEach((cb) => cb(state));\n  };\n  const updateStateFromFacade = () => {\n    const nextState = Object.entries(stateMediator).reduce(\n      (nextState2, [stateName, { get }]) => {\n        nextState2[stateName] = get(stateOwners);\n        return nextState2;\n      },\n      {}\n    );\n    updateState(nextState);\n  };\n  const stateUpdateHandlers = {};\n  let nextStateOwners = void 0;\n  const updateStateOwners = async (nextStateOwnersDelta, nextSubscriberCount) => {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;\n    const pendingUpdate = !!nextStateOwners;\n    nextStateOwners = {\n      ...stateOwners,\n      ...nextStateOwners != null ? nextStateOwners : {},\n      ...nextStateOwnersDelta\n    };\n    if (pendingUpdate)\n      return;\n    await prepareStateOwners(...Object.values(nextStateOwnersDelta));\n    const shouldTeardownFromSubscriberCount = callbacks.length > 0 && nextSubscriberCount === 0 && monitorStateOwnersOnlyWithSubscriptions;\n    const mediaChanged = stateOwners.media !== nextStateOwners.media;\n    const textTracksChanged = ((_a = stateOwners.media) == null ? void 0 : _a.textTracks) !== ((_b = nextStateOwners.media) == null ? void 0 : _b.textTracks);\n    const videoRenditionsChanged = ((_c = stateOwners.media) == null ? void 0 : _c.videoRenditions) !== ((_d = nextStateOwners.media) == null ? void 0 : _d.videoRenditions);\n    const audioTracksChanged = ((_e = stateOwners.media) == null ? void 0 : _e.audioTracks) !== ((_f = nextStateOwners.media) == null ? void 0 : _f.audioTracks);\n    const remoteChanged = ((_g = stateOwners.media) == null ? void 0 : _g.remote) !== ((_h = nextStateOwners.media) == null ? void 0 : _h.remote);\n    const rootNodeChanged = stateOwners.documentElement !== nextStateOwners.documentElement;\n    const teardownMedia = !!stateOwners.media && (mediaChanged || shouldTeardownFromSubscriberCount);\n    const teardownTextTracks = !!((_i = stateOwners.media) == null ? void 0 : _i.textTracks) && (textTracksChanged || shouldTeardownFromSubscriberCount);\n    const teardownVideoRenditions = !!((_j = stateOwners.media) == null ? void 0 : _j.videoRenditions) && (videoRenditionsChanged || shouldTeardownFromSubscriberCount);\n    const teardownAudioTracks = !!((_k = stateOwners.media) == null ? void 0 : _k.audioTracks) && (audioTracksChanged || shouldTeardownFromSubscriberCount);\n    const teardownRemote = !!((_l = stateOwners.media) == null ? void 0 : _l.remote) && (remoteChanged || shouldTeardownFromSubscriberCount);\n    const teardownRootNode = !!stateOwners.documentElement && (rootNodeChanged || shouldTeardownFromSubscriberCount);\n    const teardownSomething = teardownMedia || teardownTextTracks || teardownVideoRenditions || teardownAudioTracks || teardownRemote || teardownRootNode;\n    const shouldSetupFromSubscriberCount = callbacks.length === 0 && nextSubscriberCount === 1 && monitorStateOwnersOnlyWithSubscriptions;\n    const setupMedia = !!nextStateOwners.media && (mediaChanged || shouldSetupFromSubscriberCount);\n    const setupTextTracks = !!((_m = nextStateOwners.media) == null ? void 0 : _m.textTracks) && (textTracksChanged || shouldSetupFromSubscriberCount);\n    const setupVideoRenditions = !!((_n = nextStateOwners.media) == null ? void 0 : _n.videoRenditions) && (videoRenditionsChanged || shouldSetupFromSubscriberCount);\n    const setupAudioTracks = !!((_o = nextStateOwners.media) == null ? void 0 : _o.audioTracks) && (audioTracksChanged || shouldSetupFromSubscriberCount);\n    const setupRemote = !!((_p = nextStateOwners.media) == null ? void 0 : _p.remote) && (remoteChanged || shouldSetupFromSubscriberCount);\n    const setupRootNode = !!nextStateOwners.documentElement && (rootNodeChanged || shouldSetupFromSubscriberCount);\n    const setupSomething = setupMedia || setupTextTracks || setupVideoRenditions || setupAudioTracks || setupRemote || setupRootNode;\n    const somethingToDo = teardownSomething || setupSomething;\n    if (!somethingToDo) {\n      Object.entries(nextStateOwners).forEach(\n        ([stateOwnerName, stateOwner]) => {\n          stateOwners[stateOwnerName] = stateOwner;\n        }\n      );\n      updateStateFromFacade();\n      nextStateOwners = void 0;\n      return;\n    }\n    Object.entries(stateMediator).forEach(\n      ([\n        stateName,\n        {\n          get,\n          mediaEvents = [],\n          textTracksEvents = [],\n          videoRenditionsEvents = [],\n          audioTracksEvents = [],\n          remoteEvents = [],\n          rootEvents = [],\n          stateOwnersUpdateHandlers = []\n        }\n      ]) => {\n        if (!stateUpdateHandlers[stateName]) {\n          stateUpdateHandlers[stateName] = {};\n        }\n        const handler = (event) => {\n          const nextValue = get(stateOwners, event);\n          updateState({ [stateName]: nextValue });\n        };\n        let prevHandler;\n        prevHandler = stateUpdateHandlers[stateName].mediaEvents;\n        mediaEvents.forEach((eventType) => {\n          if (prevHandler && teardownMedia) {\n            stateOwners.media.removeEventListener(eventType, prevHandler);\n            stateUpdateHandlers[stateName].mediaEvents = void 0;\n          }\n          if (setupMedia) {\n            nextStateOwners.media.addEventListener(eventType, handler);\n            stateUpdateHandlers[stateName].mediaEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].textTracksEvents;\n        textTracksEvents.forEach((eventType) => {\n          var _a2, _b2;\n          if (prevHandler && teardownTextTracks) {\n            (_a2 = stateOwners.media.textTracks) == null ? void 0 : _a2.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].textTracksEvents = void 0;\n          }\n          if (setupTextTracks) {\n            (_b2 = nextStateOwners.media.textTracks) == null ? void 0 : _b2.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].textTracksEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].videoRenditionsEvents;\n        videoRenditionsEvents.forEach((eventType) => {\n          var _a2, _b2;\n          if (prevHandler && teardownVideoRenditions) {\n            (_a2 = stateOwners.media.videoRenditions) == null ? void 0 : _a2.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].videoRenditionsEvents = void 0;\n          }\n          if (setupVideoRenditions) {\n            (_b2 = nextStateOwners.media.videoRenditions) == null ? void 0 : _b2.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].videoRenditionsEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].audioTracksEvents;\n        audioTracksEvents.forEach((eventType) => {\n          var _a2, _b2;\n          if (prevHandler && teardownAudioTracks) {\n            (_a2 = stateOwners.media.audioTracks) == null ? void 0 : _a2.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].audioTracksEvents = void 0;\n          }\n          if (setupAudioTracks) {\n            (_b2 = nextStateOwners.media.audioTracks) == null ? void 0 : _b2.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].audioTracksEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].remoteEvents;\n        remoteEvents.forEach((eventType) => {\n          var _a2, _b2;\n          if (prevHandler && teardownRemote) {\n            (_a2 = stateOwners.media.remote) == null ? void 0 : _a2.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].remoteEvents = void 0;\n          }\n          if (setupRemote) {\n            (_b2 = nextStateOwners.media.remote) == null ? void 0 : _b2.addEventListener(eventType, handler);\n            stateUpdateHandlers[stateName].remoteEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].rootEvents;\n        rootEvents.forEach((eventType) => {\n          if (prevHandler && teardownRootNode) {\n            stateOwners.documentElement.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].rootEvents = void 0;\n          }\n          if (setupRootNode) {\n            nextStateOwners.documentElement.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].rootEvents = handler;\n          }\n        });\n        const prevHandlerTeardowns = stateUpdateHandlers[stateName].stateOwnersUpdateHandlers;\n        if (prevHandlerTeardowns && teardownSomething) {\n          const teardowns = Array.isArray(prevHandlerTeardowns) ? prevHandlerTeardowns : [prevHandlerTeardowns];\n          teardowns.forEach((teardown) => {\n            if (typeof teardown === \"function\") {\n              teardown();\n            }\n          });\n        }\n        if (setupSomething) {\n          const newTeardowns = stateOwnersUpdateHandlers.map((fn) => fn(handler, nextStateOwners)).filter((teardown) => typeof teardown === \"function\");\n          stateUpdateHandlers[stateName].stateOwnersUpdateHandlers = newTeardowns.length === 1 ? newTeardowns[0] : newTeardowns;\n        } else if (teardownSomething) {\n          stateUpdateHandlers[stateName].stateOwnersUpdateHandlers = void 0;\n        }\n      }\n    );\n    Object.entries(nextStateOwners).forEach(([stateOwnerName, stateOwner]) => {\n      stateOwners[stateOwnerName] = stateOwner;\n    });\n    updateStateFromFacade();\n    nextStateOwners = void 0;\n  };\n  updateStateOwners({ media, fullscreenElement, documentElement, options });\n  return {\n    // note that none of these cases directly interact with the media element, root node, full screen element, etc.\n    // note these \"actions\" could just be the events if we wanted, especially if we normalize on \"detail\" for\n    // any payload-relevant values\n    // This is roughly equivalent to our used to be in our state requests dictionary object, though much of the\n    // \"heavy lifting\" is now moved into the facade `set()`\n    dispatch(action) {\n      const { type, detail } = action;\n      if (requestMap[type] && state.mediaErrorCode == null) {\n        updateState(requestMap[type](stateMediator, stateOwners, action));\n        return;\n      }\n      if (type === \"mediaelementchangerequest\") {\n        updateStateOwners({ media: detail });\n      } else if (type === \"fullscreenelementchangerequest\") {\n        updateStateOwners({ fullscreenElement: detail });\n      } else if (type === \"documentelementchangerequest\") {\n        updateStateOwners({ documentElement: detail });\n      } else if (type === \"optionschangerequest\") {\n        Object.entries(detail != null ? detail : {}).forEach(([optionName, optionValue]) => {\n          stateOwners.options[optionName] = optionValue;\n        });\n        updateStateFromFacade();\n      }\n    },\n    getState() {\n      return state;\n    },\n    subscribe(callback) {\n      updateStateOwners({}, callbacks.length + 1);\n      callbacks.push(callback);\n      callback(state);\n      return () => {\n        const idx = callbacks.indexOf(callback);\n        if (idx >= 0) {\n          updateStateOwners({}, callbacks.length - 1);\n          callbacks.splice(idx, 1);\n        }\n      };\n    }\n  };\n};\nvar media_store_default = createMediaStore;\nexport {\n  createMediaStore,\n  media_store_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck(obj, member, \"access private method\");\n  return method;\n};\nvar _hotKeys, _fullscreenElement, _mediaStore, _keyboardShortcutsDialog, _mediaStateCallback, _mediaStoreUnsubscribe, _mediaStateEventHandler, _setupDefaultStore, setupDefaultStore_fn, _keyUpHandler, keyUpHandler_fn, _keyDownHandler, keyDownHandler_fn, _showKeyboardShortcutsDialog, showKeyboardShortcutsDialog_fn;\nimport { MediaContainer } from \"./media-container.js\";\nimport { document, globalThis } from \"./utils/server-safe-globals.js\";\nimport { AttributeTokenList } from \"./utils/attribute-token-list.js\";\nimport {\n  delay,\n  stringifyRenditionList,\n  stringifyAudioTrackList\n} from \"./utils/utils.js\";\nimport { stringifyTextTrackList } from \"./utils/captions.js\";\nimport {\n  MediaUIEvents,\n  MediaUIAttributes,\n  MediaStateReceiverAttributes,\n  AttributeToStateChangeEventMap,\n  MediaUIProps\n} from \"./constants.js\";\nimport {\n  getBooleanAttr,\n  getNumericAttr,\n  getStringAttr,\n  setBooleanAttr,\n  setNumericAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nimport { createMediaStore } from \"./media-store/media-store.js\";\nimport { setLanguage } from \"./utils/i18n.js\";\nconst ButtonPressedKeys = [\n  \"ArrowLeft\",\n  \"ArrowRight\",\n  \"ArrowUp\",\n  \"ArrowDown\",\n  \"Enter\",\n  \" \",\n  \"f\",\n  \"m\",\n  \"k\",\n  \"c\",\n  \"l\",\n  \"j\",\n  \">\",\n  \"<\",\n  \"p\"\n];\nconst DEFAULT_SEEK_OFFSET = 10;\nconst DEFAULT_VOLUME_STEP = 0.025;\nconst DEFAULT_PLAYBACK_RATE_STEP = 0.25;\nconst MIN_PLAYBACK_RATE = 0.25;\nconst MAX_PLAYBACK_RATE = 2;\nconst Attributes = {\n  DEFAULT_SUBTITLES: \"defaultsubtitles\",\n  DEFAULT_STREAM_TYPE: \"defaultstreamtype\",\n  DEFAULT_DURATION: \"defaultduration\",\n  FULLSCREEN_ELEMENT: \"fullscreenelement\",\n  HOTKEYS: \"hotkeys\",\n  KEYBOARD_BACKWARD_SEEK_OFFSET: \"keyboardbackwardseekoffset\",\n  KEYBOARD_FORWARD_SEEK_OFFSET: \"keyboardforwardseekoffset\",\n  KEYBOARD_DOWN_VOLUME_STEP: \"keyboarddownvolumestep\",\n  KEYBOARD_UP_VOLUME_STEP: \"keyboardupvolumestep\",\n  KEYS_USED: \"keysused\",\n  LANG: \"lang\",\n  LOOP: \"loop\",\n  LIVE_EDGE_OFFSET: \"liveedgeoffset\",\n  NO_AUTO_SEEK_TO_LIVE: \"noautoseektolive\",\n  NO_DEFAULT_STORE: \"nodefaultstore\",\n  NO_HOTKEYS: \"nohotkeys\",\n  NO_MUTED_PREF: \"nomutedpref\",\n  NO_SUBTITLES_LANG_PREF: \"nosubtitleslangpref\",\n  NO_VOLUME_PREF: \"novolumepref\",\n  SEEK_TO_LIVE_OFFSET: \"seektoliveoffset\"\n};\nclass MediaController extends MediaContainer {\n  constructor() {\n    super();\n    __privateAdd(this, _setupDefaultStore);\n    __privateAdd(this, _keyUpHandler);\n    __privateAdd(this, _keyDownHandler);\n    __privateAdd(this, _showKeyboardShortcutsDialog);\n    this.mediaStateReceivers = [];\n    this.associatedElementSubscriptions = /* @__PURE__ */ new Map();\n    __privateAdd(this, _hotKeys, new AttributeTokenList(this, Attributes.HOTKEYS));\n    __privateAdd(this, _fullscreenElement, void 0);\n    __privateAdd(this, _mediaStore, void 0);\n    __privateAdd(this, _keyboardShortcutsDialog, null);\n    __privateAdd(this, _mediaStateCallback, void 0);\n    __privateAdd(this, _mediaStoreUnsubscribe, void 0);\n    __privateAdd(this, _mediaStateEventHandler, (event) => {\n      var _a;\n      (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch(event);\n    });\n    this.associateElement(this);\n    let prevState = {};\n    __privateSet(this, _mediaStateCallback, (nextState) => {\n      Object.entries(nextState).forEach(([stateName, stateValue]) => {\n        if (stateName in prevState && prevState[stateName] === stateValue)\n          return;\n        this.propagateMediaState(stateName, stateValue);\n        const attrName = stateName.toLowerCase();\n        const evt = new globalThis.CustomEvent(\n          AttributeToStateChangeEventMap[attrName],\n          { composed: true, detail: stateValue }\n        );\n        this.dispatchEvent(evt);\n      });\n      prevState = nextState;\n    });\n    this.hasAttribute(Attributes.NO_HOTKEYS) ? this.disableHotkeys() : this.enableHotkeys();\n  }\n  static get observedAttributes() {\n    return super.observedAttributes.concat(\n      Attributes.NO_HOTKEYS,\n      Attributes.HOTKEYS,\n      Attributes.DEFAULT_STREAM_TYPE,\n      Attributes.DEFAULT_SUBTITLES,\n      Attributes.DEFAULT_DURATION,\n      Attributes.NO_MUTED_PREF,\n      Attributes.NO_VOLUME_PREF,\n      Attributes.LANG,\n      Attributes.LOOP\n    );\n  }\n  get mediaStore() {\n    return __privateGet(this, _mediaStore);\n  }\n  set mediaStore(value) {\n    var _a, _b;\n    if (__privateGet(this, _mediaStore)) {\n      (_a = __privateGet(this, _mediaStoreUnsubscribe)) == null ? void 0 : _a.call(this);\n      __privateSet(this, _mediaStoreUnsubscribe, void 0);\n    }\n    __privateSet(this, _mediaStore, value);\n    if (!__privateGet(this, _mediaStore) && !this.hasAttribute(Attributes.NO_DEFAULT_STORE)) {\n      __privateMethod(this, _setupDefaultStore, setupDefaultStore_fn).call(this);\n      return;\n    }\n    __privateSet(this, _mediaStoreUnsubscribe, (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.subscribe(\n      __privateGet(this, _mediaStateCallback)\n    ));\n  }\n  get fullscreenElement() {\n    var _a;\n    return (_a = __privateGet(this, _fullscreenElement)) != null ? _a : this;\n  }\n  set fullscreenElement(element) {\n    var _a;\n    if (this.hasAttribute(Attributes.FULLSCREEN_ELEMENT)) {\n      this.removeAttribute(Attributes.FULLSCREEN_ELEMENT);\n    }\n    __privateSet(this, _fullscreenElement, element);\n    (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n      type: \"fullscreenelementchangerequest\",\n      detail: this.fullscreenElement\n    });\n  }\n  get defaultSubtitles() {\n    return getBooleanAttr(this, Attributes.DEFAULT_SUBTITLES);\n  }\n  set defaultSubtitles(value) {\n    setBooleanAttr(this, Attributes.DEFAULT_SUBTITLES, value);\n  }\n  get defaultStreamType() {\n    return getStringAttr(this, Attributes.DEFAULT_STREAM_TYPE);\n  }\n  set defaultStreamType(value) {\n    setStringAttr(this, Attributes.DEFAULT_STREAM_TYPE, value);\n  }\n  get defaultDuration() {\n    return getNumericAttr(this, Attributes.DEFAULT_DURATION);\n  }\n  set defaultDuration(value) {\n    setNumericAttr(this, Attributes.DEFAULT_DURATION, value);\n  }\n  get noHotkeys() {\n    return getBooleanAttr(this, Attributes.NO_HOTKEYS);\n  }\n  set noHotkeys(value) {\n    setBooleanAttr(this, Attributes.NO_HOTKEYS, value);\n  }\n  get keysUsed() {\n    return getStringAttr(this, Attributes.KEYS_USED);\n  }\n  set keysUsed(value) {\n    setStringAttr(this, Attributes.KEYS_USED, value);\n  }\n  get liveEdgeOffset() {\n    return getNumericAttr(this, Attributes.LIVE_EDGE_OFFSET);\n  }\n  set liveEdgeOffset(value) {\n    setNumericAttr(this, Attributes.LIVE_EDGE_OFFSET, value);\n  }\n  get noAutoSeekToLive() {\n    return getBooleanAttr(this, Attributes.NO_AUTO_SEEK_TO_LIVE);\n  }\n  set noAutoSeekToLive(value) {\n    setBooleanAttr(this, Attributes.NO_AUTO_SEEK_TO_LIVE, value);\n  }\n  get noVolumePref() {\n    return getBooleanAttr(this, Attributes.NO_VOLUME_PREF);\n  }\n  set noVolumePref(value) {\n    setBooleanAttr(this, Attributes.NO_VOLUME_PREF, value);\n  }\n  get noMutedPref() {\n    return getBooleanAttr(this, Attributes.NO_MUTED_PREF);\n  }\n  set noMutedPref(value) {\n    setBooleanAttr(this, Attributes.NO_MUTED_PREF, value);\n  }\n  get noSubtitlesLangPref() {\n    return getBooleanAttr(this, Attributes.NO_SUBTITLES_LANG_PREF);\n  }\n  set noSubtitlesLangPref(value) {\n    setBooleanAttr(this, Attributes.NO_SUBTITLES_LANG_PREF, value);\n  }\n  get noDefaultStore() {\n    return getBooleanAttr(this, Attributes.NO_DEFAULT_STORE);\n  }\n  set noDefaultStore(value) {\n    setBooleanAttr(this, Attributes.NO_DEFAULT_STORE, value);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === Attributes.NO_HOTKEYS) {\n      if (newValue !== oldValue && newValue === \"\") {\n        if (this.hasAttribute(Attributes.HOTKEYS)) {\n          console.warn(\n            \"Media Chrome: Both `hotkeys` and `nohotkeys` have been set. All hotkeys will be disabled.\"\n          );\n        }\n        this.disableHotkeys();\n      } else if (newValue !== oldValue && newValue === null) {\n        this.enableHotkeys();\n      }\n    } else if (attrName === Attributes.HOTKEYS) {\n      __privateGet(this, _hotKeys).value = newValue;\n    } else if (attrName === Attributes.DEFAULT_SUBTITLES && newValue !== oldValue) {\n      (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          defaultSubtitles: this.hasAttribute(Attributes.DEFAULT_SUBTITLES)\n        }\n      });\n    } else if (attrName === Attributes.DEFAULT_STREAM_TYPE) {\n      (_c = __privateGet(this, _mediaStore)) == null ? void 0 : _c.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          defaultStreamType: (_b = this.getAttribute(Attributes.DEFAULT_STREAM_TYPE)) != null ? _b : void 0\n        }\n      });\n    } else if (attrName === Attributes.LIVE_EDGE_OFFSET) {\n      (_d = __privateGet(this, _mediaStore)) == null ? void 0 : _d.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          liveEdgeOffset: this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,\n          seekToLiveOffset: !this.hasAttribute(Attributes.SEEK_TO_LIVE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0\n        }\n      });\n    } else if (attrName === Attributes.SEEK_TO_LIVE_OFFSET) {\n      (_e = __privateGet(this, _mediaStore)) == null ? void 0 : _e.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          seekToLiveOffset: this.hasAttribute(Attributes.SEEK_TO_LIVE_OFFSET) ? +this.getAttribute(Attributes.SEEK_TO_LIVE_OFFSET) : void 0\n        }\n      });\n    } else if (attrName === Attributes.NO_AUTO_SEEK_TO_LIVE) {\n      (_f = __privateGet(this, _mediaStore)) == null ? void 0 : _f.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          noAutoSeekToLive: this.hasAttribute(Attributes.NO_AUTO_SEEK_TO_LIVE)\n        }\n      });\n    } else if (attrName === Attributes.FULLSCREEN_ELEMENT) {\n      const el = newValue ? (_g = this.getRootNode()) == null ? void 0 : _g.getElementById(newValue) : void 0;\n      __privateSet(this, _fullscreenElement, el);\n      (_h = __privateGet(this, _mediaStore)) == null ? void 0 : _h.dispatch({\n        type: \"fullscreenelementchangerequest\",\n        detail: this.fullscreenElement\n      });\n    } else if (attrName === Attributes.LANG && newValue !== oldValue) {\n      setLanguage(newValue);\n      (_i = __privateGet(this, _mediaStore)) == null ? void 0 : _i.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          mediaLang: newValue\n        }\n      });\n    } else if (attrName === Attributes.LOOP && newValue !== oldValue) {\n      (_j = __privateGet(this, _mediaStore)) == null ? void 0 : _j.dispatch({\n        type: MediaUIEvents.MEDIA_LOOP_REQUEST,\n        detail: newValue != null\n      });\n    } else if (attrName === Attributes.NO_VOLUME_PREF && newValue !== oldValue) {\n      (_k = __privateGet(this, _mediaStore)) == null ? void 0 : _k.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          noVolumePref: this.hasAttribute(Attributes.NO_VOLUME_PREF)\n        }\n      });\n    } else if (attrName === Attributes.NO_MUTED_PREF && newValue !== oldValue) {\n      (_l = __privateGet(this, _mediaStore)) == null ? void 0 : _l.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          noMutedPref: this.hasAttribute(Attributes.NO_MUTED_PREF)\n        }\n      });\n    }\n  }\n  connectedCallback() {\n    var _a, _b;\n    if (!__privateGet(this, _mediaStore) && !this.hasAttribute(Attributes.NO_DEFAULT_STORE)) {\n      __privateMethod(this, _setupDefaultStore, setupDefaultStore_fn).call(this);\n    }\n    (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n      type: \"documentelementchangerequest\",\n      detail: document\n    });\n    super.connectedCallback();\n    if (__privateGet(this, _mediaStore) && !__privateGet(this, _mediaStoreUnsubscribe)) {\n      __privateSet(this, _mediaStoreUnsubscribe, (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.subscribe(\n        __privateGet(this, _mediaStateCallback)\n      ));\n    }\n    this.hasAttribute(Attributes.NO_HOTKEYS) ? this.disableHotkeys() : this.enableHotkeys();\n  }\n  disconnectedCallback() {\n    var _a, _b, _c, _d;\n    (_a = super.disconnectedCallback) == null ? void 0 : _a.call(this);\n    if (__privateGet(this, _mediaStore)) {\n      (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.dispatch({\n        type: \"documentelementchangerequest\",\n        detail: void 0\n      });\n      (_c = __privateGet(this, _mediaStore)) == null ? void 0 : _c.dispatch({\n        type: MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,\n        detail: false\n      });\n    }\n    if (__privateGet(this, _mediaStoreUnsubscribe)) {\n      (_d = __privateGet(this, _mediaStoreUnsubscribe)) == null ? void 0 : _d.call(this);\n      __privateSet(this, _mediaStoreUnsubscribe, void 0);\n    }\n  }\n  /**\n   * @override\n   * @param {HTMLMediaElement} media\n   */\n  mediaSetCallback(media) {\n    var _a;\n    super.mediaSetCallback(media);\n    (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n      type: \"mediaelementchangerequest\",\n      detail: media\n    });\n    if (!media.hasAttribute(\"tabindex\")) {\n      media.tabIndex = -1;\n    }\n  }\n  /**\n   * @override\n   * @param {HTMLMediaElement} media\n   */\n  mediaUnsetCallback(media) {\n    var _a;\n    super.mediaUnsetCallback(media);\n    (_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({\n      type: \"mediaelementchangerequest\",\n      detail: void 0\n    });\n  }\n  propagateMediaState(stateName, state) {\n    propagateMediaState(this.mediaStateReceivers, stateName, state);\n  }\n  associateElement(element) {\n    if (!element)\n      return;\n    const { associatedElementSubscriptions } = this;\n    if (associatedElementSubscriptions.has(element))\n      return;\n    const registerMediaStateReceiver = this.registerMediaStateReceiver.bind(this);\n    const unregisterMediaStateReceiver = this.unregisterMediaStateReceiver.bind(this);\n    const unsubscribe = monitorForMediaStateReceivers(\n      element,\n      registerMediaStateReceiver,\n      unregisterMediaStateReceiver\n    );\n    Object.values(MediaUIEvents).forEach((eventName) => {\n      element.addEventListener(eventName, __privateGet(this, _mediaStateEventHandler));\n    });\n    associatedElementSubscriptions.set(element, unsubscribe);\n  }\n  unassociateElement(element) {\n    if (!element)\n      return;\n    const { associatedElementSubscriptions } = this;\n    if (!associatedElementSubscriptions.has(element))\n      return;\n    const unsubscribe = associatedElementSubscriptions.get(element);\n    unsubscribe();\n    associatedElementSubscriptions.delete(element);\n    Object.values(MediaUIEvents).forEach((eventName) => {\n      element.removeEventListener(eventName, __privateGet(this, _mediaStateEventHandler));\n    });\n  }\n  registerMediaStateReceiver(el) {\n    if (!el)\n      return;\n    const els = this.mediaStateReceivers;\n    const index = els.indexOf(el);\n    if (index > -1)\n      return;\n    els.push(el);\n    if (__privateGet(this, _mediaStore)) {\n      Object.entries(__privateGet(this, _mediaStore).getState()).forEach(\n        ([stateName, stateValue]) => {\n          propagateMediaState([el], stateName, stateValue);\n        }\n      );\n    }\n  }\n  unregisterMediaStateReceiver(el) {\n    const els = this.mediaStateReceivers;\n    const index = els.indexOf(el);\n    if (index < 0)\n      return;\n    els.splice(index, 1);\n  }\n  enableHotkeys() {\n    this.addEventListener(\"keydown\", __privateMethod(this, _keyDownHandler, keyDownHandler_fn));\n  }\n  disableHotkeys() {\n    this.removeEventListener(\"keydown\", __privateMethod(this, _keyDownHandler, keyDownHandler_fn));\n    this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n  }\n  get hotkeys() {\n    return getStringAttr(this, Attributes.HOTKEYS);\n  }\n  set hotkeys(value) {\n    setStringAttr(this, Attributes.HOTKEYS, value);\n  }\n  keyboardShortcutHandler(e) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const target = e.target;\n    const keysUsed = ((_c = (_b = (_a = target.getAttribute(Attributes.KEYS_USED)) == null ? void 0 : _a.split(\" \")) != null ? _b : target == null ? void 0 : target.keysUsed) != null ? _c : []).map((key) => key === \"Space\" ? \" \" : key).filter(Boolean);\n    if (keysUsed.includes(e.key)) {\n      return;\n    }\n    let eventName, detail, evt;\n    if (__privateGet(this, _hotKeys).contains(`no${e.key.toLowerCase()}`))\n      return;\n    if (e.key === \" \" && __privateGet(this, _hotKeys).contains(`nospace`))\n      return;\n    const isShiftSlash = e.shiftKey && (e.key === \"/\" || e.key === \"?\");\n    if (isShiftSlash && __privateGet(this, _hotKeys).contains(\"noshift+/\"))\n      return;\n    switch (e.key) {\n      case \" \":\n      case \"k\":\n        eventName = __privateGet(this, _mediaStore).getState().mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n        this.dispatchEvent(\n          new globalThis.CustomEvent(eventName, {\n            composed: true,\n            bubbles: true\n          })\n        );\n        break;\n      case \"m\":\n        eventName = this.mediaStore.getState().mediaVolumeLevel === \"off\" ? MediaUIEvents.MEDIA_UNMUTE_REQUEST : MediaUIEvents.MEDIA_MUTE_REQUEST;\n        this.dispatchEvent(\n          new globalThis.CustomEvent(eventName, {\n            composed: true,\n            bubbles: true\n          })\n        );\n        break;\n      case \"f\":\n        eventName = this.mediaStore.getState().mediaIsFullscreen ? MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST : MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST;\n        this.dispatchEvent(\n          new globalThis.CustomEvent(eventName, {\n            composed: true,\n            bubbles: true\n          })\n        );\n        break;\n      case \"c\":\n        this.dispatchEvent(\n          new globalThis.CustomEvent(\n            MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,\n            { composed: true, bubbles: true }\n          )\n        );\n        break;\n      case \"ArrowLeft\":\n      case \"j\": {\n        const offsetValue = this.hasAttribute(\n          Attributes.KEYBOARD_BACKWARD_SEEK_OFFSET\n        ) ? +this.getAttribute(Attributes.KEYBOARD_BACKWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;\n        detail = Math.max(\n          ((_d = this.mediaStore.getState().mediaCurrentTime) != null ? _d : 0) - offsetValue,\n          0\n        );\n        evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \"ArrowRight\":\n      case \"l\": {\n        const offsetValue = this.hasAttribute(\n          Attributes.KEYBOARD_FORWARD_SEEK_OFFSET\n        ) ? +this.getAttribute(Attributes.KEYBOARD_FORWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;\n        detail = Math.max(\n          ((_e = this.mediaStore.getState().mediaCurrentTime) != null ? _e : 0) + offsetValue,\n          0\n        );\n        evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \"ArrowUp\": {\n        const step = this.hasAttribute(Attributes.KEYBOARD_UP_VOLUME_STEP) ? +this.getAttribute(Attributes.KEYBOARD_UP_VOLUME_STEP) : DEFAULT_VOLUME_STEP;\n        detail = Math.min(\n          ((_f = this.mediaStore.getState().mediaVolume) != null ? _f : 1) + step,\n          1\n        );\n        evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_VOLUME_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \"ArrowDown\": {\n        const step = this.hasAttribute(Attributes.KEYBOARD_DOWN_VOLUME_STEP) ? +this.getAttribute(Attributes.KEYBOARD_DOWN_VOLUME_STEP) : DEFAULT_VOLUME_STEP;\n        detail = Math.max(\n          ((_g = this.mediaStore.getState().mediaVolume) != null ? _g : 1) - step,\n          0\n        );\n        evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_VOLUME_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \"<\": {\n        const playbackRate = (_h = this.mediaStore.getState().mediaPlaybackRate) != null ? _h : 1;\n        detail = Math.max(\n          playbackRate - DEFAULT_PLAYBACK_RATE_STEP,\n          MIN_PLAYBACK_RATE\n        ).toFixed(2);\n        evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \">\": {\n        const playbackRate = (_i = this.mediaStore.getState().mediaPlaybackRate) != null ? _i : 1;\n        detail = Math.min(\n          playbackRate + DEFAULT_PLAYBACK_RATE_STEP,\n          MAX_PLAYBACK_RATE\n        ).toFixed(2);\n        evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \"/\":\n      case \"?\": {\n        if (e.shiftKey) {\n          __privateMethod(this, _showKeyboardShortcutsDialog, showKeyboardShortcutsDialog_fn).call(this);\n        }\n        break;\n      }\n      case \"p\": {\n        eventName = this.mediaStore.getState().mediaIsPip ? MediaUIEvents.MEDIA_EXIT_PIP_REQUEST : MediaUIEvents.MEDIA_ENTER_PIP_REQUEST;\n        evt = new globalThis.CustomEvent(eventName, {\n          composed: true,\n          bubbles: true\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      default:\n        break;\n    }\n  }\n}\n_hotKeys = new WeakMap();\n_fullscreenElement = new WeakMap();\n_mediaStore = new WeakMap();\n_keyboardShortcutsDialog = new WeakMap();\n_mediaStateCallback = new WeakMap();\n_mediaStoreUnsubscribe = new WeakMap();\n_mediaStateEventHandler = new WeakMap();\n_setupDefaultStore = new WeakSet();\nsetupDefaultStore_fn = function() {\n  var _a;\n  this.mediaStore = createMediaStore({\n    media: this.media,\n    fullscreenElement: this.fullscreenElement,\n    options: {\n      defaultSubtitles: this.hasAttribute(Attributes.DEFAULT_SUBTITLES),\n      defaultDuration: this.hasAttribute(Attributes.DEFAULT_DURATION) ? +this.getAttribute(Attributes.DEFAULT_DURATION) : void 0,\n      defaultStreamType: (\n        /** @type {import('./media-store/state-mediator.js').StreamTypeValue} */\n        (_a = this.getAttribute(\n          Attributes.DEFAULT_STREAM_TYPE\n        )) != null ? _a : void 0\n      ),\n      liveEdgeOffset: this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,\n      seekToLiveOffset: this.hasAttribute(Attributes.SEEK_TO_LIVE_OFFSET) ? +this.getAttribute(Attributes.SEEK_TO_LIVE_OFFSET) : this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,\n      noAutoSeekToLive: this.hasAttribute(Attributes.NO_AUTO_SEEK_TO_LIVE),\n      // NOTE: This wasn't updated if it was changed later. Should it be? (CJP)\n      noVolumePref: this.hasAttribute(Attributes.NO_VOLUME_PREF),\n      noMutedPref: this.hasAttribute(Attributes.NO_MUTED_PREF),\n      noSubtitlesLangPref: this.hasAttribute(\n        Attributes.NO_SUBTITLES_LANG_PREF\n      )\n    }\n  });\n};\n_keyUpHandler = new WeakSet();\nkeyUpHandler_fn = function(e) {\n  const { key, shiftKey } = e;\n  const isShiftSlash = shiftKey && (key === \"/\" || key === \"?\");\n  const shouldHandle = isShiftSlash || ButtonPressedKeys.includes(key);\n  if (!shouldHandle) {\n    this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n    return;\n  }\n  this.keyboardShortcutHandler(e);\n};\n_keyDownHandler = new WeakSet();\nkeyDownHandler_fn = function(e) {\n  var _a;\n  const { metaKey, altKey, key, shiftKey } = e;\n  const isShiftSlash = shiftKey && (key === \"/\" || key === \"?\");\n  if (isShiftSlash && ((_a = __privateGet(this, _keyboardShortcutsDialog)) == null ? void 0 : _a.open)) {\n    this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n    return;\n  }\n  if (metaKey || altKey || !isShiftSlash && !ButtonPressedKeys.includes(key)) {\n    this.removeEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));\n    return;\n  }\n  const target = e.target;\n  const isRangeInput = target instanceof HTMLElement && (target.tagName.toLowerCase() === \"media-volume-range\" || target.tagName.toLowerCase() === \"media-time-range\");\n  if ([\" \", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(key) && !(__privateGet(this, _hotKeys).contains(`no${key.toLowerCase()}`) || key === \" \" && __privateGet(this, _hotKeys).contains(\"nospace\")) && !isRangeInput) {\n    e.preventDefault();\n  }\n  this.addEventListener(\"keyup\", __privateMethod(this, _keyUpHandler, keyUpHandler_fn), { once: true });\n};\n_showKeyboardShortcutsDialog = new WeakSet();\nshowKeyboardShortcutsDialog_fn = function() {\n  if (!__privateGet(this, _keyboardShortcutsDialog)) {\n    __privateSet(this, _keyboardShortcutsDialog, document.createElement(\n      \"media-keyboard-shortcuts-dialog\"\n    ));\n    this.appendChild(__privateGet(this, _keyboardShortcutsDialog));\n  }\n  __privateGet(this, _keyboardShortcutsDialog).open = true;\n};\nconst MEDIA_UI_ATTRIBUTE_NAMES = Object.values(MediaUIAttributes);\nconst MEDIA_UI_PROP_NAMES = Object.values(MediaUIProps);\nconst getMediaUIAttributesFrom = (child) => {\n  var _a, _b, _c, _d;\n  let { observedAttributes } = child.constructor;\n  if (!observedAttributes && ((_a = child.nodeName) == null ? void 0 : _a.includes(\"-\"))) {\n    globalThis.customElements.upgrade(child);\n    ({ observedAttributes } = child.constructor);\n  }\n  const mediaChromeAttributesList = (_d = (_c = (_b = child == null ? void 0 : child.getAttribute) == null ? void 0 : _b.call(child, MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES)) == null ? void 0 : _c.split) == null ? void 0 : _d.call(_c, /\\s+/);\n  if (!Array.isArray(observedAttributes || mediaChromeAttributesList))\n    return [];\n  return (observedAttributes || mediaChromeAttributesList).filter(\n    (attrName) => MEDIA_UI_ATTRIBUTE_NAMES.includes(attrName)\n  );\n};\nconst hasMediaUIProps = (mediaStateReceiverCandidate) => {\n  var _a, _b;\n  if (((_a = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _a.includes(\"-\")) && !!globalThis.customElements.get(\n    (_b = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _b.toLowerCase()\n  ) && !(mediaStateReceiverCandidate instanceof globalThis.customElements.get(\n    mediaStateReceiverCandidate.nodeName.toLowerCase()\n  ))) {\n    globalThis.customElements.upgrade(mediaStateReceiverCandidate);\n  }\n  return MEDIA_UI_PROP_NAMES.some(\n    (propName) => propName in mediaStateReceiverCandidate\n  );\n};\nconst isMediaStateReceiver = (child) => {\n  return hasMediaUIProps(child) || !!getMediaUIAttributesFrom(child).length;\n};\nconst serializeTuple = (tuple) => {\n  var _a;\n  return (_a = tuple == null ? void 0 : tuple.join) == null ? void 0 : _a.call(tuple, \":\");\n};\nconst CustomAttrSerializer = {\n  [MediaUIAttributes.MEDIA_SUBTITLES_LIST]: stringifyTextTrackList,\n  [MediaUIAttributes.MEDIA_SUBTITLES_SHOWING]: stringifyTextTrackList,\n  [MediaUIAttributes.MEDIA_SEEKABLE]: serializeTuple,\n  [MediaUIAttributes.MEDIA_BUFFERED]: (tuples) => tuples == null ? void 0 : tuples.map(serializeTuple).join(\" \"),\n  [MediaUIAttributes.MEDIA_PREVIEW_COORDS]: (coords) => coords == null ? void 0 : coords.join(\" \"),\n  [MediaUIAttributes.MEDIA_RENDITION_LIST]: stringifyRenditionList,\n  [MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST]: stringifyAudioTrackList\n};\nconst setAttr = async (child, attrName, attrValue) => {\n  var _a, _b;\n  if (!child.isConnected) {\n    await delay(0);\n  }\n  if (typeof attrValue === \"boolean\" || attrValue == null) {\n    return setBooleanAttr(child, attrName, attrValue);\n  }\n  if (typeof attrValue === \"number\") {\n    return setNumericAttr(child, attrName, attrValue);\n  }\n  if (typeof attrValue === \"string\") {\n    return setStringAttr(child, attrName, attrValue);\n  }\n  if (Array.isArray(attrValue) && !attrValue.length) {\n    return child.removeAttribute(attrName);\n  }\n  const val = (_b = (_a = CustomAttrSerializer[attrName]) == null ? void 0 : _a.call(CustomAttrSerializer, attrValue)) != null ? _b : attrValue;\n  return child.setAttribute(attrName, val);\n};\nconst isMediaSlotElementDescendant = (el) => {\n  var _a;\n  return !!((_a = el.closest) == null ? void 0 : _a.call(el, '*[slot=\"media\"]'));\n};\nconst traverseForMediaStateReceivers = (rootNode, mediaStateReceiverCallback) => {\n  if (isMediaSlotElementDescendant(rootNode)) {\n    return;\n  }\n  const traverseForMediaStateReceiversSync = (rootNode2, mediaStateReceiverCallback2) => {\n    var _a, _b;\n    if (isMediaStateReceiver(rootNode2)) {\n      mediaStateReceiverCallback2(rootNode2);\n    }\n    const { children = [] } = rootNode2 != null ? rootNode2 : {};\n    const shadowChildren = (_b = (_a = rootNode2 == null ? void 0 : rootNode2.shadowRoot) == null ? void 0 : _a.children) != null ? _b : [];\n    const allChildren = [...children, ...shadowChildren];\n    allChildren.forEach(\n      (child) => traverseForMediaStateReceivers(\n        child,\n        mediaStateReceiverCallback2\n      )\n    );\n  };\n  const name = rootNode == null ? void 0 : rootNode.nodeName.toLowerCase();\n  if (name.includes(\"-\") && !isMediaStateReceiver(rootNode)) {\n    globalThis.customElements.whenDefined(name).then(() => {\n      traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);\n    });\n    return;\n  }\n  traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);\n};\nconst propagateMediaState = (els, stateName, val) => {\n  els.forEach((el) => {\n    if (stateName in el) {\n      el[stateName] = val;\n      return;\n    }\n    const relevantAttrs = getMediaUIAttributesFrom(el);\n    const attrName = stateName.toLowerCase();\n    if (!relevantAttrs.includes(attrName))\n      return;\n    setAttr(el, attrName, val);\n  });\n};\nconst monitorForMediaStateReceivers = (rootNode, registerMediaStateReceiver, unregisterMediaStateReceiver) => {\n  traverseForMediaStateReceivers(rootNode, registerMediaStateReceiver);\n  const registerMediaStateReceiverHandler = (evt) => {\n    var _a;\n    const el = (_a = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a : evt.target;\n    registerMediaStateReceiver(el);\n  };\n  const unregisterMediaStateReceiverHandler = (evt) => {\n    var _a;\n    const el = (_a = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a : evt.target;\n    unregisterMediaStateReceiver(el);\n  };\n  rootNode.addEventListener(\n    MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,\n    registerMediaStateReceiverHandler\n  );\n  rootNode.addEventListener(\n    MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,\n    unregisterMediaStateReceiverHandler\n  );\n  const mutationCallback = (mutationsList) => {\n    mutationsList.forEach((mutationRecord) => {\n      const {\n        addedNodes = [],\n        removedNodes = [],\n        type,\n        target,\n        attributeName\n      } = mutationRecord;\n      if (type === \"childList\") {\n        Array.prototype.forEach.call(\n          addedNodes,\n          (node) => traverseForMediaStateReceivers(\n            node,\n            registerMediaStateReceiver\n          )\n        );\n        Array.prototype.forEach.call(\n          removedNodes,\n          (node) => traverseForMediaStateReceivers(\n            node,\n            unregisterMediaStateReceiver\n          )\n        );\n      } else if (type === \"attributes\" && attributeName === MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES) {\n        if (isMediaStateReceiver(target)) {\n          registerMediaStateReceiver(target);\n        } else {\n          unregisterMediaStateReceiver(target);\n        }\n      }\n    });\n  };\n  let prevSlotted = [];\n  const slotChangeHandler = (event) => {\n    const slotEl = event.target;\n    if (slotEl.name === \"media\")\n      return;\n    prevSlotted.forEach(\n      (node) => traverseForMediaStateReceivers(node, unregisterMediaStateReceiver)\n    );\n    prevSlotted = [\n      ...slotEl.assignedElements({ flatten: true })\n    ];\n    prevSlotted.forEach(\n      (node) => traverseForMediaStateReceivers(node, registerMediaStateReceiver)\n    );\n  };\n  rootNode.addEventListener(\"slotchange\", slotChangeHandler);\n  const observer = new MutationObserver(mutationCallback);\n  observer.observe(rootNode, {\n    childList: true,\n    attributes: true,\n    subtree: true\n  });\n  const unsubscribe = () => {\n    traverseForMediaStateReceivers(rootNode, unregisterMediaStateReceiver);\n    rootNode.removeEventListener(\"slotchange\", slotChangeHandler);\n    observer.disconnect();\n    rootNode.removeEventListener(\n      MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,\n      registerMediaStateReceiverHandler\n    );\n    rootNode.removeEventListener(\n      MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,\n      unregisterMediaStateReceiverHandler\n    );\n  };\n  return unsubscribe;\n};\nif (!globalThis.customElements.get(\"media-controller\")) {\n  globalThis.customElements.define(\"media-controller\", MediaController);\n}\nvar media_controller_default = MediaController;\nexport {\n  Attributes,\n  MediaController,\n  media_controller_default as default\n};\n","import {\n  closestComposedNode,\n  getMediaController,\n  getStringAttr,\n  isElementVisible,\n  namedNodeMapToObject,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nconst Attributes = {\n  PLACEMENT: \"placement\",\n  BOUNDS: \"bounds\"\n};\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        --_tooltip-background-color: var(--media-tooltip-background-color, var(--media-secondary-color, rgba(20, 20, 30, .7)));\n        --_tooltip-background: var(--media-tooltip-background, var(--_tooltip-background-color));\n        --_tooltip-arrow-half-width: calc(var(--media-tooltip-arrow-width, 12px) / 2);\n        --_tooltip-arrow-height: var(--media-tooltip-arrow-height, 5px);\n        --_tooltip-arrow-background: var(--media-tooltip-arrow-color, var(--_tooltip-background-color));\n        position: relative;\n        pointer-events: none;\n        display: var(--media-tooltip-display, inline-flex);\n        justify-content: center;\n        align-items: center;\n        box-sizing: border-box;\n        z-index: var(--media-tooltip-z-index, 1);\n        background: var(--_tooltip-background);\n        color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n        font: var(--media-font,\n          var(--media-font-weight, 400)\n          var(--media-font-size, 13px) /\n          var(--media-text-content-height, var(--media-control-height, 18px))\n          var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n        padding: var(--media-tooltip-padding, .35em .7em);\n        border: var(--media-tooltip-border, none);\n        border-radius: var(--media-tooltip-border-radius, 5px);\n        filter: var(--media-tooltip-filter, drop-shadow(0 0 4px rgba(0, 0, 0, .2)));\n        white-space: var(--media-tooltip-white-space, nowrap);\n      }\n\n      :host([hidden]) {\n        display: none;\n      }\n\n      img, svg {\n        display: inline-block;\n      }\n\n      #arrow {\n        position: absolute;\n        width: 0px;\n        height: 0px;\n        border-style: solid;\n        display: var(--media-tooltip-arrow-display, block);\n      }\n\n      :host(:not([placement])),\n      :host([placement=\"top\"]) {\n        position: absolute;\n        bottom: calc(100% + var(--media-tooltip-distance, 12px));\n        left: 50%;\n        transform: translate(calc(-50% - var(--media-tooltip-offset-x, 0px)), 0);\n      }\n      :host(:not([placement])) #arrow,\n      :host([placement=\"top\"]) #arrow {\n        top: 100%;\n        left: 50%;\n        border-width: var(--_tooltip-arrow-height) var(--_tooltip-arrow-half-width) 0 var(--_tooltip-arrow-half-width);\n        border-color: var(--_tooltip-arrow-background) transparent transparent transparent;\n        transform: translate(calc(-50% + var(--media-tooltip-offset-x, 0px)), 0);\n      }\n\n      :host([placement=\"right\"]) {\n        position: absolute;\n        left: calc(100% + var(--media-tooltip-distance, 12px));\n        top: 50%;\n        transform: translate(0, -50%);\n      }\n      :host([placement=\"right\"]) #arrow {\n        top: 50%;\n        right: 100%;\n        border-width: var(--_tooltip-arrow-half-width) var(--_tooltip-arrow-height) var(--_tooltip-arrow-half-width) 0;\n        border-color: transparent var(--_tooltip-arrow-background) transparent transparent;\n        transform: translate(0, -50%);\n      }\n\n      :host([placement=\"bottom\"]) {\n        position: absolute;\n        top: calc(100% + var(--media-tooltip-distance, 12px));\n        left: 50%;\n        transform: translate(calc(-50% - var(--media-tooltip-offset-x, 0px)), 0);\n      }\n      :host([placement=\"bottom\"]) #arrow {\n        bottom: 100%;\n        left: 50%;\n        border-width: 0 var(--_tooltip-arrow-half-width) var(--_tooltip-arrow-height) var(--_tooltip-arrow-half-width);\n        border-color: transparent transparent var(--_tooltip-arrow-background) transparent;\n        transform: translate(calc(-50% + var(--media-tooltip-offset-x, 0px)), 0);\n      }\n\n      :host([placement=\"left\"]) {\n        position: absolute;\n        right: calc(100% + var(--media-tooltip-distance, 12px));\n        top: 50%;\n        transform: translate(0, -50%);\n      }\n      :host([placement=\"left\"]) #arrow {\n        top: 50%;\n        left: 100%;\n        border-width: var(--_tooltip-arrow-half-width) 0 var(--_tooltip-arrow-half-width) var(--_tooltip-arrow-height);\n        border-color: transparent transparent transparent var(--_tooltip-arrow-background);\n        transform: translate(0, -50%);\n      }\n      \n      :host([placement=\"none\"]) #arrow {\n        display: none;\n      }\n    </style>\n    <slot></slot>\n    <div id=\"arrow\"></div>\n  `\n  );\n}\nclass MediaTooltip extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    // Adjusts tooltip position relative to the closest specified container\n    // such that it doesn't spill out of the left or right sides. Only applies\n    // to 'top' and 'bottom' placed tooltips.\n    this.updateXOffset = () => {\n      var _a;\n      if (!isElementVisible(this, { checkOpacity: false, checkVisibilityCSS: false }))\n        return;\n      const placement = this.placement;\n      if (placement === \"left\" || placement === \"right\") {\n        this.style.removeProperty(\"--media-tooltip-offset-x\");\n        return;\n      }\n      const tooltipStyle = getComputedStyle(this);\n      const containingEl = (_a = closestComposedNode(this, \"#\" + this.bounds)) != null ? _a : getMediaController(this);\n      if (!containingEl)\n        return;\n      const { x: containerX, width: containerWidth } = containingEl.getBoundingClientRect();\n      const { x: tooltipX, width: tooltipWidth } = this.getBoundingClientRect();\n      const tooltipRight = tooltipX + tooltipWidth;\n      const containerRight = containerX + containerWidth;\n      const offsetXVal = tooltipStyle.getPropertyValue(\n        \"--media-tooltip-offset-x\"\n      );\n      const currOffsetX = offsetXVal ? parseFloat(offsetXVal.replace(\"px\", \"\")) : 0;\n      const marginVal = tooltipStyle.getPropertyValue(\n        \"--media-tooltip-container-margin\"\n      );\n      const currMargin = marginVal ? parseFloat(marginVal.replace(\"px\", \"\")) : 0;\n      const leftDiff = tooltipX - containerX + currOffsetX - currMargin;\n      const rightDiff = tooltipRight - containerRight + currOffsetX + currMargin;\n      if (leftDiff < 0) {\n        this.style.setProperty(\"--media-tooltip-offset-x\", `${leftDiff}px`);\n        return;\n      }\n      if (rightDiff > 0) {\n        this.style.setProperty(\"--media-tooltip-offset-x\", `${rightDiff}px`);\n        return;\n      }\n      this.style.removeProperty(\"--media-tooltip-offset-x\");\n    };\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n    this.arrowEl = this.shadowRoot.querySelector(\"#arrow\");\n    if (Object.prototype.hasOwnProperty.call(this, \"placement\")) {\n      const placement = this.placement;\n      delete this.placement;\n      this.placement = placement;\n    }\n  }\n  static get observedAttributes() {\n    return [Attributes.PLACEMENT, Attributes.BOUNDS];\n  }\n  /**\n   * Get or set tooltip placement\n   */\n  get placement() {\n    return getStringAttr(this, Attributes.PLACEMENT);\n  }\n  set placement(value) {\n    setStringAttr(this, Attributes.PLACEMENT, value);\n  }\n  /**\n   * Get or set tooltip container ID selector that will constrain the tooltips\n   * horizontal position.\n   */\n  get bounds() {\n    return getStringAttr(this, Attributes.BOUNDS);\n  }\n  set bounds(value) {\n    setStringAttr(this, Attributes.BOUNDS, value);\n  }\n}\nMediaTooltip.shadowRootOptions = { mode: \"open\" };\nMediaTooltip.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-tooltip\")) {\n  globalThis.customElements.define(\"media-tooltip\", MediaTooltip);\n}\nvar media_tooltip_default = MediaTooltip;\nexport {\n  Attributes,\n  media_tooltip_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck(obj, member, \"access private method\");\n  return method;\n};\nvar _mediaController, _clickListener, _positionTooltip, _keyupListener, _keydownListener, _setupTooltip, setupTooltip_fn;\nimport {\n  MediaStateReceiverAttributes,\n  MediaUIAttributes\n} from \"./constants.js\";\nimport MediaTooltip from \"./media-tooltip.js\";\nimport {\n  getBooleanAttr,\n  getOrInsertCSSRule,\n  getStringAttr,\n  namedNodeMapToObject,\n  setBooleanAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nconst Attributes = {\n  TOOLTIP_PLACEMENT: \"tooltipplacement\",\n  DISABLED: \"disabled\",\n  NO_TOOLTIP: \"notooltip\"\n};\nfunction getTemplateHTML(_attrs, _props = {}) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        position: relative;\n        font: var(--media-font,\n          var(--media-font-weight, bold)\n          var(--media-font-size, 14px) /\n          var(--media-text-content-height, var(--media-control-height, 24px))\n          var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n        color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n        background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n        padding: var(--media-button-padding, var(--media-control-padding, 10px));\n        justify-content: var(--media-button-justify-content, center);\n        display: inline-flex;\n        align-items: center;\n        vertical-align: middle;\n        box-sizing: border-box;\n        transition: background .15s linear;\n        pointer-events: auto;\n        cursor: var(--media-cursor, pointer);\n        -webkit-tap-highlight-color: transparent;\n      }\n\n      ${/*\n      Only show outline when keyboard focusing.\n      https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo\n    */\n    \"\"}\n      :host(:focus-visible) {\n        box-shadow: var(--media-focus-box-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n        outline: 0;\n      }\n      ${/*\n    * hide default focus ring, particularly when using mouse\n    */\n    \"\"}\n      :host(:where(:focus)) {\n        box-shadow: none;\n        outline: 0;\n      }\n\n      :host(:hover) {\n        background: var(--media-control-hover-background, rgba(50 50 70 / .7));\n      }\n\n      svg, img, ::slotted(svg), ::slotted(img) {\n        width: var(--media-button-icon-width);\n        height: var(--media-button-icon-height, var(--media-control-height, 24px));\n        transform: var(--media-button-icon-transform);\n        transition: var(--media-button-icon-transition);\n        fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n        vertical-align: middle;\n        max-width: 100%;\n        max-height: 100%;\n        min-width: 100%;\n      }\n\n      media-tooltip {\n        ${/** Make sure unpositioned tooltip doesn't cause page overflow (scroll). */\n    \"\"}\n        max-width: 0;\n        overflow-x: clip;\n        opacity: 0;\n        transition: opacity .3s, max-width 0s 9s;\n      }\n\n      :host(:hover) media-tooltip,\n      :host(:focus-visible) media-tooltip {\n        max-width: 100vw;\n        opacity: 1;\n        transition: opacity .3s;\n      }\n\n      :host([notooltip]) slot[name=\"tooltip\"] {\n        display: none;\n      }\n    </style>\n\n    ${this.getSlotTemplateHTML(_attrs, _props)}\n\n    <slot name=\"tooltip\">\n      <media-tooltip part=\"tooltip\" aria-hidden=\"true\">\n        <template shadowrootmode=\"${MediaTooltip.shadowRootOptions.mode}\">\n          ${MediaTooltip.getTemplateHTML({})}\n        </template>\n        <slot name=\"tooltip-content\">\n          ${this.getTooltipContentHTML(_attrs)}\n        </slot>\n      </media-tooltip>\n    </slot>\n  `\n  );\n}\nfunction getSlotTemplateHTML(_attrs, _props) {\n  return (\n    /*html*/\n    `\n    <slot></slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return \"\";\n}\nclass MediaChromeButton extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    // Called when we know the tooltip is ready / defined\n    __privateAdd(this, _setupTooltip);\n    __privateAdd(this, _mediaController, void 0);\n    this.preventClick = false;\n    this.tooltipEl = null;\n    __privateAdd(this, _clickListener, (e) => {\n      if (!this.preventClick) {\n        this.handleClick(e);\n      }\n      setTimeout(__privateGet(this, _positionTooltip), 0);\n    });\n    __privateAdd(this, _positionTooltip, () => {\n      var _a, _b;\n      (_b = (_a = this.tooltipEl) == null ? void 0 : _a.updateXOffset) == null ? void 0 : _b.call(_a);\n    });\n    // NOTE: There are definitely some \"false positive\" cases with multi-key pressing,\n    // but this should be good enough for most use cases.\n    __privateAdd(this, _keyupListener, (e) => {\n      const { key } = e;\n      if (!this.keysUsed.includes(key)) {\n        this.removeEventListener(\"keyup\", __privateGet(this, _keyupListener));\n        return;\n      }\n      if (!this.preventClick) {\n        this.handleClick(e);\n      }\n    });\n    __privateAdd(this, _keydownListener, (e) => {\n      const { metaKey, altKey, key } = e;\n      if (metaKey || altKey || !this.keysUsed.includes(key)) {\n        this.removeEventListener(\"keyup\", __privateGet(this, _keyupListener));\n        return;\n      }\n      this.addEventListener(\"keyup\", __privateGet(this, _keyupListener), { once: true });\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      const html = this.constructor.getTemplateHTML(attrs);\n      this.shadowRoot.setHTMLUnsafe ? this.shadowRoot.setHTMLUnsafe(html) : this.shadowRoot.innerHTML = html;\n    }\n    this.tooltipEl = this.shadowRoot.querySelector(\"media-tooltip\");\n  }\n  static get observedAttributes() {\n    return [\n      \"disabled\",\n      Attributes.TOOLTIP_PLACEMENT,\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_LANG\n    ];\n  }\n  enable() {\n    this.addEventListener(\"click\", __privateGet(this, _clickListener));\n    this.addEventListener(\"keydown\", __privateGet(this, _keydownListener));\n    this.tabIndex = 0;\n  }\n  disable() {\n    this.removeEventListener(\"click\", __privateGet(this, _clickListener));\n    this.removeEventListener(\"keydown\", __privateGet(this, _keydownListener));\n    this.removeEventListener(\"keyup\", __privateGet(this, _keyupListener));\n    this.tabIndex = -1;\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    } else if (attrName === \"disabled\" && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    } else if (attrName === Attributes.TOOLTIP_PLACEMENT && this.tooltipEl && newValue !== oldValue) {\n      this.tooltipEl.placement = newValue;\n    } else if (attrName === MediaUIAttributes.MEDIA_LANG) {\n      this.shadowRoot.querySelector('slot[name=\"tooltip-content\"]').innerHTML = this.constructor.getTooltipContentHTML();\n    }\n    __privateGet(this, _positionTooltip).call(this);\n  }\n  connectedCallback() {\n    var _a, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    } else {\n      this.disable();\n    }\n    this.setAttribute(\"role\", \"button\");\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet(\n        this,\n        _mediaController,\n        // @ts-ignore\n        (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId)\n      );\n      (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n    globalThis.customElements.whenDefined(\"media-tooltip\").then(() => __privateMethod(this, _setupTooltip, setupTooltip_fn).call(this));\n  }\n  disconnectedCallback() {\n    var _a, _b;\n    this.disable();\n    (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    __privateSet(this, _mediaController, null);\n    this.removeEventListener(\"mouseenter\", __privateGet(this, _positionTooltip));\n    this.removeEventListener(\"focus\", __privateGet(this, _positionTooltip));\n    this.removeEventListener(\"click\", __privateGet(this, _clickListener));\n  }\n  get keysUsed() {\n    return [\"Enter\", \" \"];\n  }\n  /**\n   * Get or set tooltip placement\n   */\n  get tooltipPlacement() {\n    return getStringAttr(this, Attributes.TOOLTIP_PLACEMENT);\n  }\n  set tooltipPlacement(value) {\n    setStringAttr(this, Attributes.TOOLTIP_PLACEMENT, value);\n  }\n  get mediaController() {\n    return getStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER);\n  }\n  set mediaController(value) {\n    setStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER, value);\n  }\n  get disabled() {\n    return getBooleanAttr(this, Attributes.DISABLED);\n  }\n  set disabled(value) {\n    setBooleanAttr(this, Attributes.DISABLED, value);\n  }\n  get noTooltip() {\n    return getBooleanAttr(this, Attributes.NO_TOOLTIP);\n  }\n  set noTooltip(value) {\n    setBooleanAttr(this, Attributes.NO_TOOLTIP, value);\n  }\n  /**\n   * @abstract\n   * @argument {Event} e\n   */\n  handleClick(e) {\n  }\n  // eslint-disable-line\n}\n_mediaController = new WeakMap();\n_clickListener = new WeakMap();\n_positionTooltip = new WeakMap();\n_keyupListener = new WeakMap();\n_keydownListener = new WeakMap();\n_setupTooltip = new WeakSet();\nsetupTooltip_fn = function() {\n  this.addEventListener(\"mouseenter\", __privateGet(this, _positionTooltip));\n  this.addEventListener(\"focus\", __privateGet(this, _positionTooltip));\n  this.addEventListener(\"click\", __privateGet(this, _clickListener));\n  const initialPlacement = this.tooltipPlacement;\n  if (initialPlacement && this.tooltipEl) {\n    this.tooltipEl.placement = initialPlacement;\n  }\n};\nMediaChromeButton.shadowRootOptions = { mode: \"open\" };\nMediaChromeButton.getTemplateHTML = getTemplateHTML;\nMediaChromeButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaChromeButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-chrome-button\")) {\n  globalThis.customElements.define(\"media-chrome-button\", MediaChromeButton);\n}\nvar media_chrome_button_default = MediaChromeButton;\nexport {\n  MediaChromeButton,\n  media_chrome_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n  getStringAttr,\n  setStringAttr,\n  getBooleanAttr,\n  setBooleanAttr\n} from \"./utils/element-utils.js\";\nconst airplayIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M22.13 3H3.87a.87.87 0 0 0-.87.87v13.26a.87.87 0 0 0 .87.87h3.4L9 16H5V5h16v11h-4l1.72 2h3.4a.87.87 0 0 0 .87-.87V3.87a.87.87 0 0 0-.86-.87Zm-8.75 11.44a.5.5 0 0 0-.76 0l-4.91 5.73a.5.5 0 0 0 .38.83h9.82a.501.501 0 0 0 .38-.83l-4.91-5.73Z\"/>\n</svg>\n`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]) slot[name=icon] slot:not([name=exit]) {\n        display: none !important;\n      }\n\n      ${/* Double negative, but safer if display doesn't equal 'block' */\n    \"\"}\n      :host(:not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}])) slot[name=icon] slot:not([name=enter]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]) slot[name=tooltip-enter],\n      :host(:not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}])) slot[name=tooltip-exit] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"enter\">${airplayIcon}</slot>\n      <slot name=\"exit\">${airplayIcon}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-enter\">${t(\"start airplay\")}</slot>\n    <slot name=\"tooltip-exit\">${t(\"stop airplay\")}</slot>\n  `\n  );\n}\nconst updateAriaLabel = (el) => {\n  const label = el.mediaIsAirplaying ? t(\"stop airplay\") : t(\"start airplay\");\n  el.setAttribute(\"aria-label\", label);\n};\nclass MediaAirplayButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_AIRPLAYING,\n      MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_AIRPLAYING) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * Are we currently airplaying\n   */\n  get mediaIsAirplaying() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_AIRPLAYING);\n  }\n  set mediaIsAirplaying(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_AIRPLAYING, value);\n  }\n  /**\n   * Airplay unavailability state\n   */\n  get mediaAirplayUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE);\n  }\n  set mediaAirplayUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE, value);\n  }\n  handleClick() {\n    const evt = new globalThis.CustomEvent(\n      MediaUIEvents.MEDIA_AIRPLAY_REQUEST,\n      {\n        composed: true,\n        bubbles: true\n      }\n    );\n    this.dispatchEvent(evt);\n  }\n}\nMediaAirplayButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaAirplayButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-airplay-button\")) {\n  globalThis.customElements.define(\"media-airplay-button\", MediaAirplayButton);\n}\nvar media_airplay_button_default = MediaAirplayButton;\nexport {\n  media_airplay_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"./constants.js\";\nimport {\n  areSubsOn,\n  parseTextTracksStr,\n  stringifyTextTrackList\n} from \"./utils/captions.js\";\nimport { t } from \"./utils/i18n.js\";\nconst ccIconOn = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n</svg>`;\nconst ccIconOff = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M17.73 14.09a1.4 1.4 0 0 1-1 .37 1.579 1.579 0 0 1-1.27-.58A3 3 0 0 1 15 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34A2.89 2.89 0 0 0 19 9.07a3 3 0 0 0-2.14-.78 3.14 3.14 0 0 0-2.42 1 3.91 3.91 0 0 0-.93 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.17 3.17 0 0 0 1.07-1.74l-1.4-.45c-.083.43-.3.822-.62 1.12Zm-7.22 0a1.43 1.43 0 0 1-1 .37 1.58 1.58 0 0 1-1.27-.58A3 3 0 0 1 7.76 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34a2.81 2.81 0 0 0-.74-1.32 2.94 2.94 0 0 0-2.13-.78 3.18 3.18 0 0 0-2.43 1 4 4 0 0 0-.92 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.23 3.23 0 0 0 1.07-1.74l-1.4-.45a2.06 2.06 0 0 1-.6 1.07Zm12.32-8.41a2.59 2.59 0 0 0-2.3-2.51C18.72 3.05 15.86 3 13 3c-2.86 0-5.72.05-7.53.17a2.59 2.59 0 0 0-2.3 2.51c-.23 4.207-.23 8.423 0 12.63a2.57 2.57 0 0 0 2.3 2.5c1.81.13 4.67.19 7.53.19 2.86 0 5.72-.06 7.53-.19a2.57 2.57 0 0 0 2.3-2.5c.23-4.207.23-8.423 0-12.63Zm-1.49 12.53a1.11 1.11 0 0 1-.91 1.11c-1.67.11-4.45.18-7.43.18-2.98 0-5.76-.07-7.43-.18a1.11 1.11 0 0 1-.91-1.11c-.21-4.14-.21-8.29 0-12.43a1.11 1.11 0 0 1 .91-1.11C7.24 4.56 10 4.49 13 4.49s5.76.07 7.43.18a1.11 1.11 0 0 1 .91 1.11c.21 4.14.21 8.29 0 12.43Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host([aria-checked=\"true\"]) slot[name=off] {\n        display: none !important;\n      }\n\n      ${/* Double negative, but safer if display doesn't equal 'block' */\n    \"\"}\n      :host(:not([aria-checked=\"true\"])) slot[name=on] {\n        display: none !important;\n      }\n\n      :host([aria-checked=\"true\"]) slot[name=tooltip-enable],\n      :host(:not([aria-checked=\"true\"])) slot[name=tooltip-disable] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"on\">${ccIconOn}</slot>\n      <slot name=\"off\">${ccIconOff}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-enable\">${t(\"Enable captions\")}</slot>\n    <slot name=\"tooltip-disable\">${t(\"Disable captions\")}</slot>\n  `\n  );\n}\nconst updateAriaChecked = (el) => {\n  el.setAttribute(\"aria-checked\", areSubsOn(el).toString());\n};\nclass MediaCaptionsButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"role\", \"switch\");\n    this.setAttribute(\"aria-label\", t(\"closed captions\"));\n    updateAriaChecked(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING) {\n      updateAriaChecked(this);\n    }\n  }\n  /**\n   * An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesList() {\n    return getSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n  }\n  set mediaSubtitlesList(list) {\n    setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n  }\n  /**\n   * An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesShowing() {\n    return getSubtitlesListAttr(\n      this,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    );\n  }\n  set mediaSubtitlesShowing(list) {\n    setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n  }\n  handleClick() {\n    this.dispatchEvent(\n      new globalThis.CustomEvent(MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST, {\n        composed: true,\n        bubbles: true\n      })\n    );\n  }\n}\nMediaCaptionsButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaCaptionsButton.getTooltipContentHTML = getTooltipContentHTML;\nconst getSubtitlesListAttr = (el, attrName) => {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nconst setSubtitlesListAttr = (el, attrName, list) => {\n  if (!(list == null ? void 0 : list.length)) {\n    el.removeAttribute(attrName);\n    return;\n  }\n  const newValStr = stringifyTextTrackList(list);\n  const oldVal = el.getAttribute(attrName);\n  if (oldVal === newValStr)\n    return;\n  el.setAttribute(attrName, newValStr);\n};\nif (!globalThis.customElements.get(\"media-captions-button\")) {\n  globalThis.customElements.define(\n    \"media-captions-button\",\n    MediaCaptionsButton\n  );\n}\nvar media_captions_button_default = MediaCaptionsButton;\nexport {\n  MediaCaptionsButton,\n  media_captions_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n  getBooleanAttr,\n  setBooleanAttr,\n  getStringAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nconst enterIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><g><path class=\"cast_caf_icon_arch0\" d=\"M1,18 L1,21 L4,21 C4,19.3 2.66,18 1,18 L1,18 Z\"/><path class=\"cast_caf_icon_arch1\" d=\"M1,14 L1,16 C3.76,16 6,18.2 6,21 L8,21 C8,17.13 4.87,14 1,14 L1,14 Z\"/><path class=\"cast_caf_icon_arch2\" d=\"M1,10 L1,12 C5.97,12 10,16.0 10,21 L12,21 C12,14.92 7.07,10 1,10 L1,10 Z\"/><path class=\"cast_caf_icon_box\" d=\"M21,3 L3,3 C1.9,3 1,3.9 1,5 L1,8 L3,8 L3,5 L21,5 L21,19 L14,19 L14,21 L21,21 C22.1,21 23,20.1 23,19 L23,5 C23,3.9 22.1,3 21,3 L21,3 Z\"/></g></svg>`;\nconst exitIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><g><path class=\"cast_caf_icon_arch0\" d=\"M1,18 L1,21 L4,21 C4,19.3 2.66,18 1,18 L1,18 Z\"/><path class=\"cast_caf_icon_arch1\" d=\"M1,14 L1,16 C3.76,16 6,18.2 6,21 L8,21 C8,17.13 4.87,14 1,14 L1,14 Z\"/><path class=\"cast_caf_icon_arch2\" d=\"M1,10 L1,12 C5.97,12 10,16.0 10,21 L12,21 C12,14.92 7.07,10 1,10 L1,10 Z\"/><path class=\"cast_caf_icon_box\" d=\"M21,3 L3,3 C1.9,3 1,3.9 1,5 L1,8 L3,8 L3,5 L21,5 L21,19 L14,19 L14,21 L21,21 C22.1,21 23,20.1 23,19 L23,5 C23,3.9 22.1,3 21,3 L21,3 Z\"/><path class=\"cast_caf_icon_boxfill\" d=\"M5,7 L5,8.63 C8,8.6 13.37,14 13.37,17 L19,17 L19,7 Z\"/></g></svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host([${MediaUIAttributes.MEDIA_IS_CASTING}]) slot[name=icon] slot:not([name=exit]) {\n        display: none !important;\n      }\n\n      ${/* Double negative, but safer if display doesn't equal 'block' */\n    \"\"}\n      :host(:not([${MediaUIAttributes.MEDIA_IS_CASTING}])) slot[name=icon] slot:not([name=enter]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_IS_CASTING}]) slot[name=tooltip-enter],\n      :host(:not([${MediaUIAttributes.MEDIA_IS_CASTING}])) slot[name=tooltip-exit] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"enter\">${enterIcon}</slot>\n      <slot name=\"exit\">${exitIcon}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-enter\">${t(\"Start casting\")}</slot>\n    <slot name=\"tooltip-exit\">${t(\"Stop casting\")}</slot>\n  `\n  );\n}\nconst updateAriaLabel = (el) => {\n  const label = el.mediaIsCasting ? t(\"stop casting\") : t(\"start casting\");\n  el.setAttribute(\"aria-label\", label);\n};\nclass MediaCastButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_CASTING,\n      MediaUIAttributes.MEDIA_CAST_UNAVAILABLE\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_CASTING) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * @type {boolean} Are we currently casting\n   */\n  get mediaIsCasting() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_CASTING);\n  }\n  set mediaIsCasting(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_CASTING, value);\n  }\n  /**\n   * @type {string | undefined} Cast unavailability state\n   */\n  get mediaCastUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_CAST_UNAVAILABLE);\n  }\n  set mediaCastUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_CAST_UNAVAILABLE, value);\n  }\n  handleClick() {\n    const eventName = this.mediaIsCasting ? MediaUIEvents.MEDIA_EXIT_CAST_REQUEST : MediaUIEvents.MEDIA_ENTER_CAST_REQUEST;\n    this.dispatchEvent(\n      new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n}\nMediaCastButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaCastButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-cast-button\")) {\n  globalThis.customElements.define(\"media-cast-button\", MediaCastButton);\n}\nvar media_cast_button_default = MediaCastButton;\nexport {\n  media_cast_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck(obj, member, \"access private method\");\n  return method;\n};\nvar _isInit, _previouslyFocused, _invokerElement, _init, init_fn, _handleOpen, handleOpen_fn, _handleClosed, handleClosed_fn, _handleInvoke, handleInvoke_fn, _handleFocusOut, handleFocusOut_fn, _handleKeyDown, handleKeyDown_fn;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport {\n  containsComposedNode,\n  getActiveElement,\n  getBooleanAttr,\n  namedNodeMapToObject,\n  setBooleanAttr,\n  getOrInsertCSSRule\n} from \"./utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        font: var(--media-font,\n          var(--media-font-weight, normal)\n          var(--media-font-size, 14px) /\n          var(--media-text-content-height, var(--media-control-height, 24px))\n          var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n        color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n        display: var(--media-dialog-display, inline-flex);\n        justify-content: center;\n        align-items: center;\n        ${/** The hide transition is defined below after a short delay. */\n    \"\"}\n        transition-behavior: allow-discrete;\n        visibility: hidden;\n        opacity: 0;\n        transform: translateY(2px) scale(.99);\n        pointer-events: none;\n      }\n\n      :host([open]) {\n        transition: display .2s, visibility 0s, opacity .2s ease-out, transform .15s ease-out;\n        visibility: visible;\n        opacity: 1;\n        transform: translateY(0) scale(1);\n        pointer-events: auto;\n      }\n\n      #content {\n        display: flex;\n        position: relative;\n        box-sizing: border-box;\n        width: min(320px, 100%);\n        word-wrap: break-word;\n        max-height: 100%;\n        overflow: auto;\n        text-align: center;\n        line-height: 1.4;\n      }\n    </style>\n    ${this.getSlotTemplateHTML(_attrs)}\n  `\n  );\n}\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <slot id=\"content\"></slot>\n  `\n  );\n}\nconst Attributes = {\n  OPEN: \"open\",\n  ANCHOR: \"anchor\"\n};\nclass MediaChromeDialog extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _init);\n    __privateAdd(this, _handleOpen);\n    __privateAdd(this, _handleClosed);\n    __privateAdd(this, _handleInvoke);\n    __privateAdd(this, _handleFocusOut);\n    __privateAdd(this, _handleKeyDown);\n    __privateAdd(this, _isInit, false);\n    __privateAdd(this, _previouslyFocused, null);\n    __privateAdd(this, _invokerElement, null);\n    this.addEventListener(\"invoke\", this);\n    this.addEventListener(\"focusout\", this);\n    this.addEventListener(\"keydown\", this);\n  }\n  static get observedAttributes() {\n    return [Attributes.OPEN, Attributes.ANCHOR];\n  }\n  get open() {\n    return getBooleanAttr(this, Attributes.OPEN);\n  }\n  set open(value) {\n    setBooleanAttr(this, Attributes.OPEN, value);\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"invoke\":\n        __privateMethod(this, _handleInvoke, handleInvoke_fn).call(this, event);\n        break;\n      case \"focusout\":\n        __privateMethod(this, _handleFocusOut, handleFocusOut_fn).call(this, event);\n        break;\n      case \"keydown\":\n        __privateMethod(this, _handleKeyDown, handleKeyDown_fn).call(this, event);\n        break;\n    }\n  }\n  connectedCallback() {\n    __privateMethod(this, _init, init_fn).call(this);\n    if (!this.role) {\n      this.role = \"dialog\";\n    }\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    __privateMethod(this, _init, init_fn).call(this);\n    if (attrName === Attributes.OPEN && newValue !== oldValue) {\n      if (this.open) {\n        __privateMethod(this, _handleOpen, handleOpen_fn).call(this);\n      } else {\n        __privateMethod(this, _handleClosed, handleClosed_fn).call(this);\n      }\n    }\n  }\n  focus() {\n    __privateSet(this, _previouslyFocused, getActiveElement());\n    const focusCancelled = !this.dispatchEvent(new Event(\"focus\", { composed: true, cancelable: true }));\n    const focusInCancelled = !this.dispatchEvent(new Event(\"focusin\", { composed: true, bubbles: true, cancelable: true }));\n    if (focusCancelled || focusInCancelled)\n      return;\n    const focusable = this.querySelector(\n      '[autofocus], [tabindex]:not([tabindex=\"-1\"]), [role=\"menu\"]'\n    );\n    focusable == null ? void 0 : focusable.focus();\n  }\n  get keysUsed() {\n    return [\"Escape\", \"Tab\"];\n  }\n}\n_isInit = new WeakMap();\n_previouslyFocused = new WeakMap();\n_invokerElement = new WeakMap();\n_init = new WeakSet();\ninit_fn = function() {\n  if (__privateGet(this, _isInit))\n    return;\n  __privateSet(this, _isInit, true);\n  if (!this.shadowRoot) {\n    this.attachShadow(this.constructor.shadowRootOptions);\n    const attrs = namedNodeMapToObject(this.attributes);\n    this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    queueMicrotask(() => {\n      const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n      style.setProperty(\n        \"transition\",\n        `display .15s, visibility .15s, opacity .15s ease-in, transform .15s ease-in`\n      );\n    });\n  }\n};\n_handleOpen = new WeakSet();\nhandleOpen_fn = function() {\n  var _a;\n  (_a = __privateGet(this, _invokerElement)) == null ? void 0 : _a.setAttribute(\"aria-expanded\", \"true\");\n  this.dispatchEvent(new Event(\"open\", { composed: true, bubbles: true }));\n  this.addEventListener(\"transitionend\", () => this.focus(), { once: true });\n};\n_handleClosed = new WeakSet();\nhandleClosed_fn = function() {\n  var _a;\n  (_a = __privateGet(this, _invokerElement)) == null ? void 0 : _a.setAttribute(\"aria-expanded\", \"false\");\n  this.dispatchEvent(new Event(\"close\", { composed: true, bubbles: true }));\n};\n_handleInvoke = new WeakSet();\nhandleInvoke_fn = function(event) {\n  __privateSet(this, _invokerElement, event.relatedTarget);\n  if (!containsComposedNode(this, event.relatedTarget)) {\n    this.open = !this.open;\n  }\n};\n_handleFocusOut = new WeakSet();\nhandleFocusOut_fn = function(event) {\n  var _a;\n  if (!containsComposedNode(this, event.relatedTarget)) {\n    (_a = __privateGet(this, _previouslyFocused)) == null ? void 0 : _a.focus();\n    if (__privateGet(this, _invokerElement) && __privateGet(this, _invokerElement) !== event.relatedTarget && this.open) {\n      this.open = false;\n    }\n  }\n};\n_handleKeyDown = new WeakSet();\nhandleKeyDown_fn = function(event) {\n  var _a, _b, _c, _d, _e;\n  const { key, ctrlKey, altKey, metaKey } = event;\n  if (ctrlKey || altKey || metaKey) {\n    return;\n  }\n  if (!this.keysUsed.includes(key)) {\n    return;\n  }\n  event.preventDefault();\n  event.stopPropagation();\n  if (key === \"Tab\") {\n    if (event.shiftKey) {\n      (_b = (_a = this.previousElementSibling) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a);\n    } else {\n      (_d = (_c = this.nextElementSibling) == null ? void 0 : _c.focus) == null ? void 0 : _d.call(_c);\n    }\n    this.blur();\n  } else if (key === \"Escape\") {\n    (_e = __privateGet(this, _previouslyFocused)) == null ? void 0 : _e.focus();\n    this.open = false;\n  }\n};\nMediaChromeDialog.shadowRootOptions = { mode: \"open\" };\nMediaChromeDialog.getTemplateHTML = getTemplateHTML;\nMediaChromeDialog.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-chrome-dialog\")) {\n  globalThis.customElements.define(\"media-chrome-dialog\", MediaChromeDialog);\n}\nvar media_chrome_dialog_default = MediaChromeDialog;\nexport {\n  Attributes,\n  MediaChromeDialog,\n  media_chrome_dialog_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck(obj, member, \"access private method\");\n  return method;\n};\nvar _mediaController, _isInputTarget, _startpoint, _endpoint, _cssRules, _segments, _onFocusIn, _onFocusOut, _updateComputedStyles, _updateActiveSegment, updateActiveSegment_fn, _enableUserEvents, enableUserEvents_fn, _disableUserEvents, disableUserEvents_fn, _handlePointerDown, handlePointerDown_fn, _handlePointerEnter, handlePointerEnter_fn, _handlePointerUp, handlePointerUp_fn, _handlePointerLeave, handlePointerLeave_fn, _handlePointerMove, handlePointerMove_fn;\nimport { MediaStateReceiverAttributes } from \"./constants.js\";\nimport { globalThis, document } from \"./utils/server-safe-globals.js\";\nimport {\n  getOrInsertCSSRule,\n  getPointProgressOnLine,\n  insertCSSRule,\n  namedNodeMapToObject\n} from \"./utils/element-utils.js\";\nimport { observeResize, unobserveResize } from \"./utils/resize-observer.js\";\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        --_focus-box-shadow: var(--media-focus-box-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n        --_media-range-padding: var(--media-range-padding, var(--media-control-padding, 10px));\n\n        box-shadow: var(--_focus-visible-box-shadow, none);\n        background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n        height: calc(var(--media-control-height, 24px) + 2 * var(--_media-range-padding));\n        display: inline-flex;\n        align-items: center;\n        ${/* Don't horizontal align w/ justify-content! #container can go negative on the x-axis w/ small width. */\n    \"\"}\n        vertical-align: middle;\n        box-sizing: border-box;\n        position: relative;\n        width: 100px;\n        transition: background .15s linear;\n        cursor: var(--media-cursor, pointer);\n        pointer-events: auto;\n        touch-action: none; ${/* Prevent scrolling when dragging on mobile. */\n    \"\"}\n      }\n\n      ${/* Reset before `outline` on track could be set by a CSS var */\n    \"\"}\n      input[type=range]:focus {\n        outline: 0;\n      }\n      input[type=range]:focus::-webkit-slider-runnable-track {\n        outline: 0;\n      }\n\n      :host(:hover) {\n        background: var(--media-control-hover-background, rgb(50 50 70 / .7));\n      }\n\n      #leftgap {\n        padding-left: var(--media-range-padding-left, var(--_media-range-padding));\n      }\n\n      #rightgap {\n        padding-right: var(--media-range-padding-right, var(--_media-range-padding));\n      }\n\n      #startpoint,\n      #endpoint {\n        position: absolute;\n      }\n\n      #endpoint {\n        right: 0;\n      }\n\n      #container {\n        ${/* Not using the CSS `padding` prop makes it easier for slide open volume ranges so the width can be zero. */\n    \"\"}\n        width: var(--media-range-track-width, 100%);\n        transform: translate(var(--media-range-track-translate-x, 0px), var(--media-range-track-translate-y, 0px));\n        position: relative;\n        height: 100%;\n        display: flex;\n        align-items: center;\n        min-width: 40px;\n      }\n\n      #range {\n        ${/* The input range acts as a hover and hit zone for input events. */\n    \"\"}\n        display: var(--media-time-range-hover-display, block);\n        bottom: var(--media-time-range-hover-bottom, -7px);\n        height: var(--media-time-range-hover-height, max(100% + 7px, 25px));\n        width: 100%;\n        position: absolute;\n        cursor: var(--media-cursor, pointer);\n\n        -webkit-appearance: none; ${/* Hides the slider so that custom slider can be made */\n    \"\"}\n        -webkit-tap-highlight-color: transparent;\n        background: transparent; ${/* Otherwise white in Chrome */\n    \"\"}\n        margin: 0;\n        z-index: 1;\n      }\n\n      @media (hover: hover) {\n        #range {\n          bottom: var(--media-time-range-hover-bottom, -5px);\n          height: var(--media-time-range-hover-height, max(100% + 5px, 20px));\n        }\n      }\n\n      ${/* Special styling for WebKit/Blink */\n    \"\"}\n      ${/* Make thumb width/height small so it has no effect on range click position. */\n    \"\"}\n      #range::-webkit-slider-thumb {\n        -webkit-appearance: none;\n        background: transparent;\n        width: .1px;\n        height: .1px;\n      }\n\n      ${/* The thumb is not positioned relative to the track in Firefox */\n    \"\"}\n      #range::-moz-range-thumb {\n        background: transparent;\n        border: transparent;\n        width: .1px;\n        height: .1px;\n      }\n\n      #appearance {\n        height: var(--media-range-track-height, 4px);\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        width: 100%;\n        position: absolute;\n        ${/* Required for Safari to stop glitching track height on hover */\n    \"\"}\n        will-change: transform;\n      }\n\n      #track {\n        background: var(--media-range-track-background, rgb(255 255 255 / .2));\n        border-radius: var(--media-range-track-border-radius, 1px);\n        border: var(--media-range-track-border, none);\n        outline: var(--media-range-track-outline);\n        outline-offset: var(--media-range-track-outline-offset);\n        backdrop-filter: var(--media-range-track-backdrop-filter);\n        -webkit-backdrop-filter: var(--media-range-track-backdrop-filter);\n        box-shadow: var(--media-range-track-box-shadow, none);\n        position: absolute;\n        width: 100%;\n        height: 100%;\n        overflow: hidden;\n      }\n\n      #progress,\n      #pointer {\n        position: absolute;\n        height: 100%;\n        will-change: width;\n      }\n\n      #progress {\n        background: var(--media-range-bar-color, var(--media-primary-color, rgb(238 238 238)));\n        transition: var(--media-range-track-transition);\n      }\n\n      #pointer {\n        background: var(--media-range-track-pointer-background);\n        border-right: var(--media-range-track-pointer-border-right);\n        transition: visibility .25s, opacity .25s;\n        visibility: hidden;\n        opacity: 0;\n      }\n\n      @media (hover: hover) {\n        :host(:hover) #pointer {\n          transition: visibility .5s, opacity .5s;\n          visibility: visible;\n          opacity: 1;\n        }\n      }\n\n      #thumb,\n      ::slotted([slot=thumb]) {\n        width: var(--media-range-thumb-width, 10px);\n        height: var(--media-range-thumb-height, 10px);\n        transition: var(--media-range-thumb-transition);\n        transform: var(--media-range-thumb-transform, none);\n        opacity: var(--media-range-thumb-opacity, 1);\n        translate: -50%;\n        position: absolute;\n        left: 0;\n        cursor: var(--media-cursor, pointer);\n      }\n\n      #thumb {\n        border-radius: var(--media-range-thumb-border-radius, 10px);\n        background: var(--media-range-thumb-background, var(--media-primary-color, rgb(238 238 238)));\n        box-shadow: var(--media-range-thumb-box-shadow, 1px 1px 1px transparent);\n        border: var(--media-range-thumb-border, none);\n      }\n\n      :host([disabled]) #thumb {\n        background-color: #777;\n      }\n\n      .segments #appearance {\n        height: var(--media-range-segment-hover-height, 7px);\n      }\n\n      #track {\n        clip-path: url(#segments-clipping);\n      }\n\n      #segments {\n        --segments-gap: var(--media-range-segments-gap, 2px);\n        position: absolute;\n        width: 100%;\n        height: 100%;\n      }\n\n      #segments-clipping {\n        transform: translateX(calc(var(--segments-gap) / 2));\n      }\n\n      #segments-clipping:empty {\n        display: none;\n      }\n\n      #segments-clipping rect {\n        height: var(--media-range-track-height, 4px);\n        y: calc((var(--media-range-segment-hover-height, 7px) - var(--media-range-track-height, 4px)) / 2);\n        transition: var(--media-range-segment-transition, transform .1s ease-in-out);\n        transform: var(--media-range-segment-transform, scaleY(1));\n        transform-origin: center;\n      }\n    </style>\n    <div id=\"leftgap\"></div>\n    <div id=\"container\">\n      <div id=\"startpoint\"></div>\n      <div id=\"endpoint\"></div>\n      <div id=\"appearance\">\n        <div id=\"track\" part=\"track\">\n          <div id=\"pointer\"></div>\n          <div id=\"progress\" part=\"progress\"></div>\n        </div>\n        <slot name=\"thumb\">\n          <div id=\"thumb\" part=\"thumb\"></div>\n        </slot>\n        <svg id=\"segments\"><clipPath id=\"segments-clipping\"></clipPath></svg>\n      </div>\n      <input id=\"range\" type=\"range\" min=\"0\" max=\"1\" step=\"any\" value=\"0\">\n    </div>\n    <div id=\"rightgap\"></div>\n  `\n  );\n}\nclass MediaChromeRange extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _updateActiveSegment);\n    __privateAdd(this, _enableUserEvents);\n    __privateAdd(this, _disableUserEvents);\n    __privateAdd(this, _handlePointerDown);\n    __privateAdd(this, _handlePointerEnter);\n    __privateAdd(this, _handlePointerUp);\n    __privateAdd(this, _handlePointerLeave);\n    __privateAdd(this, _handlePointerMove);\n    __privateAdd(this, _mediaController, void 0);\n    __privateAdd(this, _isInputTarget, void 0);\n    __privateAdd(this, _startpoint, void 0);\n    __privateAdd(this, _endpoint, void 0);\n    __privateAdd(this, _cssRules, {});\n    __privateAdd(this, _segments, []);\n    __privateAdd(this, _onFocusIn, () => {\n      if (this.range.matches(\":focus-visible\")) {\n        const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n        style.setProperty(\n          \"--_focus-visible-box-shadow\",\n          \"var(--_focus-box-shadow)\"\n        );\n      }\n    });\n    __privateAdd(this, _onFocusOut, () => {\n      const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n      style.removeProperty(\"--_focus-visible-box-shadow\");\n    });\n    __privateAdd(this, _updateComputedStyles, () => {\n      const clipping = this.shadowRoot.querySelector(\"#segments-clipping\");\n      if (clipping)\n        clipping.parentNode.append(clipping);\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      const html = this.constructor.getTemplateHTML(attrs);\n      this.shadowRoot.setHTMLUnsafe ? this.shadowRoot.setHTMLUnsafe(html) : this.shadowRoot.innerHTML = html;\n    }\n    this.container = this.shadowRoot.querySelector(\"#container\");\n    __privateSet(this, _startpoint, this.shadowRoot.querySelector(\"#startpoint\"));\n    __privateSet(this, _endpoint, this.shadowRoot.querySelector(\"#endpoint\"));\n    this.range = this.shadowRoot.querySelector(\"#range\");\n    this.appearance = this.shadowRoot.querySelector(\"#appearance\");\n  }\n  static get observedAttributes() {\n    return [\n      \"disabled\",\n      \"aria-disabled\",\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    } else if (attrName === \"disabled\" || attrName === \"aria-disabled\" && oldValue !== newValue) {\n      if (newValue == null) {\n        this.range.removeAttribute(attrName);\n        __privateMethod(this, _enableUserEvents, enableUserEvents_fn).call(this);\n      } else {\n        this.range.setAttribute(attrName, newValue);\n        __privateMethod(this, _disableUserEvents, disableUserEvents_fn).call(this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    __privateGet(this, _cssRules).pointer = getOrInsertCSSRule(this.shadowRoot, \"#pointer\");\n    __privateGet(this, _cssRules).progress = getOrInsertCSSRule(this.shadowRoot, \"#progress\");\n    __privateGet(this, _cssRules).thumb = getOrInsertCSSRule(\n      this.shadowRoot,\n      '#thumb, ::slotted([slot=\"thumb\"])'\n    );\n    __privateGet(this, _cssRules).activeSegment = getOrInsertCSSRule(\n      this.shadowRoot,\n      \"#segments-clipping rect:nth-child(0)\"\n    );\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n        mediaControllerId\n      ));\n      (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n    this.updateBar();\n    this.shadowRoot.addEventListener(\"focusin\", __privateGet(this, _onFocusIn));\n    this.shadowRoot.addEventListener(\"focusout\", __privateGet(this, _onFocusOut));\n    __privateMethod(this, _enableUserEvents, enableUserEvents_fn).call(this);\n    observeResize(this.container, __privateGet(this, _updateComputedStyles));\n  }\n  disconnectedCallback() {\n    var _a, _b;\n    __privateMethod(this, _disableUserEvents, disableUserEvents_fn).call(this);\n    (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    __privateSet(this, _mediaController, null);\n    this.shadowRoot.removeEventListener(\"focusin\", __privateGet(this, _onFocusIn));\n    this.shadowRoot.removeEventListener(\"focusout\", __privateGet(this, _onFocusOut));\n    unobserveResize(this.container, __privateGet(this, _updateComputedStyles));\n  }\n  updatePointerBar(evt) {\n    var _a;\n    (_a = __privateGet(this, _cssRules).pointer) == null ? void 0 : _a.style.setProperty(\n      \"width\",\n      `${this.getPointerRatio(evt) * 100}%`\n    );\n  }\n  updateBar() {\n    var _a, _b;\n    const rangePercent = this.range.valueAsNumber * 100;\n    (_a = __privateGet(this, _cssRules).progress) == null ? void 0 : _a.style.setProperty(\"width\", `${rangePercent}%`);\n    (_b = __privateGet(this, _cssRules).thumb) == null ? void 0 : _b.style.setProperty(\"left\", `${rangePercent}%`);\n  }\n  updateSegments(segments) {\n    const clipping = this.shadowRoot.querySelector(\"#segments-clipping\");\n    clipping.textContent = \"\";\n    this.container.classList.toggle(\"segments\", !!(segments == null ? void 0 : segments.length));\n    if (!(segments == null ? void 0 : segments.length))\n      return;\n    const normalized = [\n      .../* @__PURE__ */ new Set([\n        +this.range.min,\n        ...segments.flatMap((s) => [s.start, s.end]),\n        +this.range.max\n      ])\n    ];\n    __privateSet(this, _segments, [...normalized]);\n    const lastMarker = normalized.pop();\n    for (const [i, marker] of normalized.entries()) {\n      const [isFirst, isLast] = [i === 0, i === normalized.length - 1];\n      const x = isFirst ? \"calc(var(--segments-gap) / -1)\" : `${marker * 100}%`;\n      const x2 = isLast ? lastMarker : normalized[i + 1];\n      const width = `calc(${(x2 - marker) * 100}%${isFirst || isLast ? \"\" : ` - var(--segments-gap)`})`;\n      const segmentEl = document.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        \"rect\"\n      );\n      const cssRule = insertCSSRule(\n        this.shadowRoot,\n        `#segments-clipping rect:nth-child(${i + 1})`\n      );\n      cssRule.style.setProperty(\"x\", x);\n      cssRule.style.setProperty(\"width\", width);\n      clipping.append(segmentEl);\n    }\n  }\n  getPointerRatio(evt) {\n    return getPointProgressOnLine(\n      evt.clientX,\n      evt.clientY,\n      __privateGet(this, _startpoint).getBoundingClientRect(),\n      __privateGet(this, _endpoint).getBoundingClientRect()\n    );\n  }\n  get dragging() {\n    return this.hasAttribute(\"dragging\");\n  }\n  handleEvent(evt) {\n    switch (evt.type) {\n      case \"pointermove\":\n        __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, evt);\n        break;\n      case \"input\":\n        this.updateBar();\n        break;\n      case \"pointerenter\":\n        __privateMethod(this, _handlePointerEnter, handlePointerEnter_fn).call(this, evt);\n        break;\n      case \"pointerdown\":\n        __privateMethod(this, _handlePointerDown, handlePointerDown_fn).call(this, evt);\n        break;\n      case \"pointerup\":\n        __privateMethod(this, _handlePointerUp, handlePointerUp_fn).call(this);\n        break;\n      case \"pointerleave\":\n        __privateMethod(this, _handlePointerLeave, handlePointerLeave_fn).call(this);\n        break;\n    }\n  }\n  get keysUsed() {\n    return [\"ArrowUp\", \"ArrowRight\", \"ArrowDown\", \"ArrowLeft\"];\n  }\n}\n_mediaController = new WeakMap();\n_isInputTarget = new WeakMap();\n_startpoint = new WeakMap();\n_endpoint = new WeakMap();\n_cssRules = new WeakMap();\n_segments = new WeakMap();\n_onFocusIn = new WeakMap();\n_onFocusOut = new WeakMap();\n_updateComputedStyles = new WeakMap();\n_updateActiveSegment = new WeakSet();\nupdateActiveSegment_fn = function(evt) {\n  const rule = __privateGet(this, _cssRules).activeSegment;\n  if (!rule)\n    return;\n  const pointerRatio = this.getPointerRatio(evt);\n  const segmentIndex = __privateGet(this, _segments).findIndex((start, i, arr) => {\n    const end = arr[i + 1];\n    return end != null && pointerRatio >= start && pointerRatio <= end;\n  });\n  const selectorText = `#segments-clipping rect:nth-child(${segmentIndex + 1})`;\n  if (rule.selectorText != selectorText || !rule.style.transform) {\n    rule.selectorText = selectorText;\n    rule.style.setProperty(\n      \"transform\",\n      \"var(--media-range-segment-hover-transform, scaleY(2))\"\n    );\n  }\n};\n_enableUserEvents = new WeakSet();\nenableUserEvents_fn = function() {\n  if (this.hasAttribute(\"disabled\"))\n    return;\n  this.addEventListener(\"input\", this);\n  this.addEventListener(\"pointerdown\", this);\n  this.addEventListener(\"pointerenter\", this);\n};\n_disableUserEvents = new WeakSet();\ndisableUserEvents_fn = function() {\n  var _a, _b;\n  this.removeEventListener(\"input\", this);\n  this.removeEventListener(\"pointerdown\", this);\n  this.removeEventListener(\"pointerenter\", this);\n  (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"pointerup\", this);\n  (_b = globalThis.window) == null ? void 0 : _b.removeEventListener(\"pointermove\", this);\n};\n_handlePointerDown = new WeakSet();\nhandlePointerDown_fn = function(evt) {\n  var _a;\n  __privateSet(this, _isInputTarget, evt.composedPath().includes(this.range));\n  (_a = globalThis.window) == null ? void 0 : _a.addEventListener(\"pointerup\", this);\n};\n_handlePointerEnter = new WeakSet();\nhandlePointerEnter_fn = function(evt) {\n  var _a;\n  if (evt.pointerType !== \"mouse\")\n    __privateMethod(this, _handlePointerDown, handlePointerDown_fn).call(this, evt);\n  this.addEventListener(\"pointerleave\", this);\n  (_a = globalThis.window) == null ? void 0 : _a.addEventListener(\"pointermove\", this);\n};\n_handlePointerUp = new WeakSet();\nhandlePointerUp_fn = function() {\n  var _a;\n  (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"pointerup\", this);\n  this.toggleAttribute(\"dragging\", false);\n  this.range.disabled = this.hasAttribute(\"disabled\");\n};\n_handlePointerLeave = new WeakSet();\nhandlePointerLeave_fn = function() {\n  var _a, _b;\n  this.removeEventListener(\"pointerleave\", this);\n  (_a = globalThis.window) == null ? void 0 : _a.removeEventListener(\"pointermove\", this);\n  this.toggleAttribute(\"dragging\", false);\n  this.range.disabled = this.hasAttribute(\"disabled\");\n  (_b = __privateGet(this, _cssRules).activeSegment) == null ? void 0 : _b.style.removeProperty(\"transform\");\n};\n_handlePointerMove = new WeakSet();\nhandlePointerMove_fn = function(evt) {\n  if (evt.pointerType === \"pen\" && evt.buttons === 0) {\n    return;\n  }\n  this.toggleAttribute(\n    \"dragging\",\n    evt.buttons === 1 || evt.pointerType !== \"mouse\"\n  );\n  this.updatePointerBar(evt);\n  __privateMethod(this, _updateActiveSegment, updateActiveSegment_fn).call(this, evt);\n  if (this.dragging && (evt.pointerType !== \"mouse\" || !__privateGet(this, _isInputTarget))) {\n    this.range.disabled = true;\n    this.range.valueAsNumber = this.getPointerRatio(evt);\n    this.range.dispatchEvent(\n      new Event(\"input\", { bubbles: true, composed: true })\n    );\n  }\n};\nMediaChromeRange.shadowRootOptions = { mode: \"open\" };\nMediaChromeRange.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-chrome-range\")) {\n  globalThis.customElements.define(\"media-chrome-range\", MediaChromeRange);\n}\nvar media_chrome_range_default = MediaChromeRange;\nexport {\n  MediaChromeRange,\n  media_chrome_range_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController;\nimport { MediaStateReceiverAttributes } from \"./constants.js\";\nimport { namedNodeMapToObject } from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        ${/* Need position to display above video for some reason */\n    \"\"}\n        box-sizing: border-box;\n        display: var(--media-control-display, var(--media-control-bar-display, inline-flex));\n        color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n        --media-loading-indicator-icon-height: 44px;\n      }\n\n      ::slotted(media-time-range),\n      ::slotted(media-volume-range) {\n        min-height: 100%;\n      }\n\n      ::slotted(media-time-range),\n      ::slotted(media-clip-selector) {\n        flex-grow: 1;\n      }\n\n      ::slotted([role=\"menu\"]) {\n        position: absolute;\n      }\n    </style>\n\n    <slot></slot>\n  `\n  );\n}\nclass MediaControlBar extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _mediaController, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n  }\n  static get observedAttributes() {\n    return [MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a, _b, _c;\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n        mediaControllerId\n      ));\n      (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a, _b;\n    (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    __privateSet(this, _mediaController, null);\n  }\n}\n_mediaController = new WeakMap();\nMediaControlBar.shadowRootOptions = { mode: \"open\" };\nMediaControlBar.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-control-bar\")) {\n  globalThis.customElements.define(\"media-control-bar\", MediaControlBar);\n}\nvar media_control_bar_default = MediaControlBar;\nexport {\n  media_control_bar_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController;\nimport { MediaStateReceiverAttributes } from \"./constants.js\";\nimport { getOrInsertCSSRule, namedNodeMapToObject } from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nfunction getTemplateHTML(_attrs, _props = {}) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        font: var(--media-font,\n          var(--media-font-weight, normal)\n          var(--media-font-size, 14px) /\n          var(--media-text-content-height, var(--media-control-height, 24px))\n          var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n        color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n        background: var(--media-text-background, var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7))));\n        padding: var(--media-control-padding, 10px);\n        display: inline-flex;\n        justify-content: center;\n        align-items: center;\n        vertical-align: middle;\n        box-sizing: border-box;\n        text-align: center;\n        pointer-events: auto;\n      }\n\n      ${/*\n      Only show outline when keyboard focusing.\n      https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo\n    */\n    \"\"}\n      :host(:focus-visible) {\n        box-shadow: inset 0 0 0 2px rgb(27 127 204 / .9);\n        outline: 0;\n      }\n\n      ${/*\n    * hide default focus ring, particularly when using mouse\n    */\n    \"\"}\n      :host(:where(:focus)) {\n        box-shadow: none;\n        outline: 0;\n      }\n    </style>\n\n    ${this.getSlotTemplateHTML(_attrs, _props)}\n  `\n  );\n}\nfunction getSlotTemplateHTML(_attrs, _props) {\n  return (\n    /*html*/\n    `\n    <slot></slot>\n  `\n  );\n}\nclass MediaTextDisplay extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _mediaController, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n  }\n  static get observedAttributes() {\n    return [MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n        mediaControllerId\n      ));\n      (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a, _b;\n    (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    __privateSet(this, _mediaController, null);\n  }\n}\n_mediaController = new WeakMap();\nMediaTextDisplay.shadowRootOptions = { mode: \"open\" };\nMediaTextDisplay.getTemplateHTML = getTemplateHTML;\nMediaTextDisplay.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-text-display\")) {\n  globalThis.customElements.define(\"media-text-display\", MediaTextDisplay);\n}\nvar media_text_display_default = MediaTextDisplay;\nexport {\n  MediaTextDisplay,\n  media_text_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { formatTime } from \"./utils/time.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr } from \"./utils/element-utils.js\";\nfunction getSlotTemplateHTML(_attrs, props) {\n  return (\n    /*html*/\n    `\n    <slot>${formatTime(props.mediaDuration)}</slot>\n  `\n  );\n}\nclass MediaDurationDisplay extends MediaTextDisplay {\n  constructor() {\n    var _a;\n    super();\n    __privateAdd(this, _slot, void 0);\n    __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n    __privateGet(this, _slot).textContent = formatTime((_a = this.mediaDuration) != null ? _a : 0);\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_DURATION];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === MediaUIAttributes.MEDIA_DURATION) {\n      __privateGet(this, _slot).textContent = formatTime(+newValue);\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  /**\n   * @type {number | undefined} In seconds\n   */\n  get mediaDuration() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n  }\n  set mediaDuration(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, time);\n  }\n}\n_slot = new WeakMap();\nMediaDurationDisplay.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-duration-display\")) {\n  globalThis.customElements.define(\n    \"media-duration-display\",\n    MediaDurationDisplay\n  );\n}\nvar media_duration_display_default = MediaDurationDisplay;\nexport {\n  media_duration_display_default as default\n};\n","import { t } from \"../utils/i18n.js\";\nconst defaultErrorTitles = {\n  2: t(\"Network Error\"),\n  3: t(\"Decode Error\"),\n  4: t(\"Source Not Supported\"),\n  5: t(\"Encryption Error\")\n};\nconst defaultErrorMessages = {\n  2: t(\"A network error caused the media download to fail.\"),\n  3: t(\n    \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\"\n  ),\n  4: t(\n    \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\"\n  ),\n  5: t(\"The media is encrypted and there are no keys to decrypt it.\")\n};\nconst formatError = (error) => {\n  var _a, _b;\n  if (error.code === 1)\n    return null;\n  return {\n    title: (_a = defaultErrorTitles[error.code]) != null ? _a : `Error ${error.code}`,\n    message: (_b = defaultErrorMessages[error.code]) != null ? _b : error.message\n  };\n};\nexport {\n  formatError\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaError;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { formatError } from \"./labels/labels.js\";\nimport { MediaChromeDialog } from \"./media-chrome-dialog.js\";\nimport {\n  getNumericAttr,\n  getStringAttr,\n  setNumericAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nfunction getSlotTemplateHTML(attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        background: rgb(20 20 30 / .8);\n      }\n\n      #content {\n        display: block;\n        padding: 1.2em 1.5em;\n      }\n\n      h3,\n      p {\n        margin-block: 0 .3em;\n      }\n    </style>\n    <slot name=\"error-${attrs.mediaerrorcode}\" id=\"content\">\n      ${formatErrorMessage({ code: +attrs.mediaerrorcode, message: attrs.mediaerrormessage })}\n    </slot>\n  `\n  );\n}\nfunction shouldOpenErrorDialog(error) {\n  return error.code && formatError(error) !== null;\n}\nfunction formatErrorMessage(error) {\n  var _a;\n  const { title, message } = (_a = formatError(error)) != null ? _a : {};\n  let html = \"\";\n  if (title)\n    html += `<slot name=\"error-${error.code}-title\"><h3>${title}</h3></slot>`;\n  if (message)\n    html += `<slot name=\"error-${error.code}-message\"><p>${message}</p></slot>`;\n  return html;\n}\nconst observedAttributes = [\n  MediaUIAttributes.MEDIA_ERROR_CODE,\n  MediaUIAttributes.MEDIA_ERROR_MESSAGE\n];\nclass MediaErrorDialog extends MediaChromeDialog {\n  constructor() {\n    super(...arguments);\n    __privateAdd(this, _mediaError, null);\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, ...observedAttributes];\n  }\n  formatErrorMessage(error) {\n    return this.constructor.formatErrorMessage(error);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a;\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (!observedAttributes.includes(attrName))\n      return;\n    const mediaError = (_a = this.mediaError) != null ? _a : {\n      code: this.mediaErrorCode,\n      message: this.mediaErrorMessage\n    };\n    this.open = shouldOpenErrorDialog(mediaError);\n    if (this.open) {\n      this.shadowRoot.querySelector(\"slot\").name = `error-${this.mediaErrorCode}`;\n      this.shadowRoot.querySelector(\"#content\").innerHTML = this.formatErrorMessage(mediaError);\n    }\n  }\n  get mediaError() {\n    return __privateGet(this, _mediaError);\n  }\n  set mediaError(value) {\n    __privateSet(this, _mediaError, value);\n  }\n  get mediaErrorCode() {\n    return getNumericAttr(this, \"mediaerrorcode\");\n  }\n  set mediaErrorCode(value) {\n    setNumericAttr(this, \"mediaerrorcode\", value);\n  }\n  get mediaErrorMessage() {\n    return getStringAttr(this, \"mediaerrormessage\");\n  }\n  set mediaErrorMessage(value) {\n    setStringAttr(this, \"mediaerrormessage\", value);\n  }\n}\n_mediaError = new WeakMap();\nMediaErrorDialog.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaErrorDialog.formatErrorMessage = formatErrorMessage;\nif (!globalThis.customElements.get(\"media-error-dialog\")) {\n  globalThis.customElements.define(\"media-error-dialog\", MediaErrorDialog);\n}\nvar media_error_dialog_default = MediaErrorDialog;\nexport {\n  MediaErrorDialog,\n  media_error_dialog_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar _clickHandler, _keyDownHandler;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaChromeDialog } from \"./media-chrome-dialog.js\";\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        position: fixed;\n        top: 0;\n        left: 0;\n        z-index: 9999;\n        background: rgb(20 20 30 / .8);\n        backdrop-filter: blur(10px);\n      }\n\n      #content {\n        display: block;\n        width: clamp(400px, 40vw, 700px);\n        max-width: 90vw;\n        text-align: left;\n      }\n\n      h2 {\n        margin: 0 0 1.5rem 0;\n        font-size: 1.5rem;\n        font-weight: 500;\n        text-align: center;\n      }\n\n      .shortcuts-table {\n        width: 100%;\n        border-collapse: collapse;\n      }\n\n      .shortcuts-table tr {\n        border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n      }\n\n      .shortcuts-table tr:last-child {\n        border-bottom: none;\n      }\n\n      .shortcuts-table td {\n        padding: 0.75rem 0.5rem;\n      }\n\n      .shortcuts-table td:first-child {\n        text-align: right;\n        padding-right: 1rem;\n        width: 40%;\n        min-width: 120px;\n      }\n\n      .shortcuts-table td:last-child {\n        padding-left: 1rem;\n      }\n\n      .key {\n        display: inline-block;\n        background: rgba(255, 255, 255, 0.15);\n        border: 1px solid rgba(255, 255, 255, 0.2);\n        border-radius: 4px;\n        padding: 0.25rem 0.5rem;\n        font-family: 'Courier New', monospace;\n        font-size: 0.9rem;\n        font-weight: 500;\n        min-width: 1.5rem;\n        text-align: center;\n        margin: 0 0.2rem;\n      }\n\n      .description {\n        color: rgba(255, 255, 255, 0.9);\n        font-size: 0.95rem;\n      }\n\n      .key-combo {\n        display: flex;\n        align-items: center;\n        justify-content: flex-end;\n        gap: 0.3rem;\n      }\n\n      .key-separator {\n        color: rgba(255, 255, 255, 0.5);\n        font-size: 0.9rem;\n      }\n    </style>\n    <slot id=\"content\">\n      ${formatKeyboardShortcuts()}\n    </slot>\n  `\n  );\n}\nfunction formatKeyboardShortcuts() {\n  const shortcuts = [\n    { keys: [\"Space\", \"k\"], description: \"Toggle Playback\" },\n    { keys: [\"m\"], description: \"Toggle mute\" },\n    { keys: [\"f\"], description: \"Toggle fullscreen\" },\n    { keys: [\"c\"], description: \"Toggle captions or subtitles, if available\" },\n    { keys: [\"p\"], description: \"Toggle Picture in Picture\" },\n    { keys: [\"\\u2190\", \"j\"], description: \"Seek back 10s\" },\n    { keys: [\"\\u2192\", \"l\"], description: \"Seek forward 10s\" },\n    { keys: [\"\\u2191\"], description: \"Turn volume up\" },\n    { keys: [\"\\u2193\"], description: \"Turn volume down\" },\n    { keys: [\"< (SHIFT+,)\"], description: \"Decrease playback rate\" },\n    { keys: [\"> (SHIFT+.)\"], description: \"Increase playback rate\" }\n  ];\n  const rows = shortcuts.map(({ keys, description }) => {\n    const keyCombo = keys.map(\n      (key, index) => index > 0 ? `<span class=\"key-separator\">or</span><span class=\"key\">${key}</span>` : `<span class=\"key\">${key}</span>`\n    ).join(\"\");\n    return `\n      <tr>\n        <td>\n          <div class=\"key-combo\">${keyCombo}</div>\n        </td>\n        <td class=\"description\">${description}</td>\n      </tr>\n    `;\n  }).join(\"\");\n  return `\n    <h2>Keyboard Shortcuts</h2>\n    <table class=\"shortcuts-table\">${rows}</table>\n  `;\n}\nclass MediaKeyboardShortcutsDialog extends MediaChromeDialog {\n  constructor() {\n    super(...arguments);\n    __privateAdd(this, _clickHandler, (e) => {\n      var _a;\n      if (!this.open)\n        return;\n      const content = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(\"#content\");\n      if (!content)\n        return;\n      const path = e.composedPath();\n      const isClickOnHost = path[0] === this || path.includes(this);\n      const isClickInsideContent = path.includes(content);\n      if (isClickOnHost && !isClickInsideContent) {\n        this.open = false;\n      }\n    });\n    __privateAdd(this, _keyDownHandler, (e) => {\n      if (!this.open)\n        return;\n      const isShiftSlash = e.shiftKey && (e.key === \"/\" || e.key === \"?\");\n      if ((e.key === \"Escape\" || isShiftSlash) && !e.ctrlKey && !e.altKey && !e.metaKey) {\n        this.open = false;\n        e.preventDefault();\n        e.stopPropagation();\n      }\n    });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    if (this.open) {\n      this.addEventListener(\"click\", __privateGet(this, _clickHandler));\n      document.addEventListener(\"keydown\", __privateGet(this, _keyDownHandler));\n    }\n  }\n  disconnectedCallback() {\n    this.removeEventListener(\"click\", __privateGet(this, _clickHandler));\n    document.removeEventListener(\"keydown\", __privateGet(this, _keyDownHandler));\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === \"open\") {\n      if (this.open) {\n        this.addEventListener(\"click\", __privateGet(this, _clickHandler));\n        document.addEventListener(\"keydown\", __privateGet(this, _keyDownHandler));\n      } else {\n        this.removeEventListener(\"click\", __privateGet(this, _clickHandler));\n        document.removeEventListener(\"keydown\", __privateGet(this, _keyDownHandler));\n      }\n    }\n  }\n}\n_clickHandler = new WeakMap();\n_keyDownHandler = new WeakMap();\nMediaKeyboardShortcutsDialog.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-keyboard-shortcuts-dialog\")) {\n  globalThis.customElements.define(\"media-keyboard-shortcuts-dialog\", MediaKeyboardShortcutsDialog);\n}\nvar media_keyboard_shortcuts_dialog_default = MediaKeyboardShortcutsDialog;\nexport {\n  MediaKeyboardShortcutsDialog,\n  media_keyboard_shortcuts_dialog_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _lastActionEvent;\nimport { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n  getBooleanAttr,\n  getStringAttr,\n  setBooleanAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nconst enterFullscreenIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M16 3v2.5h3.5V9H22V3h-6ZM4 9h2.5V5.5H10V3H4v6Zm15.5 9.5H16V21h6v-6h-2.5v3.5ZM6.5 15H4v6h6v-2.5H6.5V15Z\"/>\n</svg>`;\nconst exitFullscreenIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M18.5 6.5V3H16v6h6V6.5h-3.5ZM16 21h2.5v-3.5H22V15h-6v6ZM4 17.5h3.5V21H10v-6H4v2.5Zm3.5-11H4V9h6V3H7.5v3.5Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) slot[name=icon] slot:not([name=exit]) {\n        display: none !important;\n      }\n\n      ${/* Double negative, but safer if display doesn't equal 'block' */\n    \"\"}\n      :host(:not([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}])) slot[name=icon] slot:not([name=enter]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) slot[name=tooltip-enter],\n      :host(:not([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}])) slot[name=tooltip-exit] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"enter\">${enterFullscreenIcon}</slot>\n      <slot name=\"exit\">${exitFullscreenIcon}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-enter\">${t(\"Enter fullscreen mode\")}</slot>\n    <slot name=\"tooltip-exit\">${t(\"Exit fullscreen mode\")}</slot>\n  `\n  );\n}\nconst updateAriaLabel = (el) => {\n  const label = el.mediaIsFullscreen ? t(\"exit fullscreen mode\") : t(\"enter fullscreen mode\");\n  el.setAttribute(\"aria-label\", label);\n};\nclass MediaFullscreenButton extends MediaChromeButton {\n  constructor() {\n    super(...arguments);\n    __privateAdd(this, _lastActionEvent, null);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_FULLSCREEN,\n      MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_FULLSCREEN) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * @type {string | undefined} Fullscreen unavailability state\n   */\n  get mediaFullscreenUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE);\n  }\n  set mediaFullscreenUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE, value);\n  }\n  /**\n   * @type {boolean} Whether fullscreen is available\n   */\n  get mediaIsFullscreen() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_FULLSCREEN);\n  }\n  set mediaIsFullscreen(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_FULLSCREEN, value);\n  }\n  handleClick(e) {\n    __privateSet(this, _lastActionEvent, e);\n    const isPointerEvent = __privateGet(this, _lastActionEvent) instanceof PointerEvent;\n    const event = this.mediaIsFullscreen ? new globalThis.CustomEvent(\n      MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST,\n      { composed: true, bubbles: true }\n    ) : new globalThis.CustomEvent(\n      MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST,\n      { composed: true, bubbles: true, detail: isPointerEvent }\n    );\n    this.dispatchEvent(event);\n  }\n}\n_lastActionEvent = new WeakMap();\nMediaFullscreenButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaFullscreenButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-fullscreen-button\")) {\n  globalThis.customElements.define(\n    \"media-fullscreen-button\",\n    MediaFullscreenButton\n  );\n}\nvar media_fullscreen_button_default = MediaFullscreenButton;\nexport {\n  media_fullscreen_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getBooleanAttr, setBooleanAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst { MEDIA_TIME_IS_LIVE, MEDIA_PAUSED } = MediaUIAttributes;\nconst { MEDIA_SEEK_TO_LIVE_REQUEST, MEDIA_PLAY_REQUEST } = MediaUIEvents;\nconst indicatorSVG = '<svg viewBox=\"0 0 6 12\"><circle cx=\"3\" cy=\"6\" r=\"2\"></circle></svg>';\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host { --media-tooltip-display: none; }\n      \n      slot[name=indicator] > *,\n      :host ::slotted([slot=indicator]) {\n        ${/* Override styles for icon-only buttons */\n    \"\"}\n        min-width: auto;\n        fill: var(--media-live-button-icon-color, rgb(140, 140, 140));\n        color: var(--media-live-button-icon-color, rgb(140, 140, 140));\n      }\n\n      :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) slot[name=indicator] > *,\n      :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) ::slotted([slot=indicator]) {\n        fill: var(--media-live-button-indicator-color, rgb(255, 0, 0));\n        color: var(--media-live-button-indicator-color, rgb(255, 0, 0));\n      }\n\n      :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) {\n        cursor: var(--media-cursor, not-allowed);\n      }\n\n      slot[name=text]{\n        text-transform: uppercase;\n      }\n\n    </style>\n\n    <slot name=\"indicator\">${indicatorSVG}</slot>\n    ${/*\n      A new line between spacer and text creates inconsistent spacing\n      between slotted items and default slots.\n    */\n    \"\"}\n    <slot name=\"spacer\">&nbsp;</slot><slot name=\"text\">${t(\"live\")}</slot>\n  `\n  );\n}\nconst updateAriaAttributes = (el) => {\n  var _a;\n  const isPausedOrNotLive = el.mediaPaused || !el.mediaTimeIsLive;\n  const label = isPausedOrNotLive ? t(\"seek to live\") : t(\"playing live\");\n  el.setAttribute(\"aria-label\", label);\n  const textSlot = (_a = el.shadowRoot) == null ? void 0 : _a.querySelector('slot[name=\"text\"]');\n  if (textSlot)\n    textSlot.textContent = t(\"live\");\n  isPausedOrNotLive ? el.removeAttribute(\"aria-disabled\") : el.setAttribute(\"aria-disabled\", \"true\");\n};\nclass MediaLiveButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MEDIA_TIME_IS_LIVE,\n      MEDIA_PAUSED\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaAttributes(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    updateAriaAttributes(this);\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  /**\n   * @type {boolean} Is the media playback currently live\n   */\n  get mediaTimeIsLive() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_TIME_IS_LIVE);\n  }\n  set mediaTimeIsLive(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_TIME_IS_LIVE, value);\n  }\n  handleClick() {\n    if (!this.mediaPaused && this.mediaTimeIsLive)\n      return;\n    this.dispatchEvent(\n      new globalThis.CustomEvent(MEDIA_SEEK_TO_LIVE_REQUEST, {\n        composed: true,\n        bubbles: true\n      })\n    );\n    if (this.hasAttribute(MEDIA_PAUSED)) {\n      this.dispatchEvent(\n        new globalThis.CustomEvent(MEDIA_PLAY_REQUEST, {\n          composed: true,\n          bubbles: true\n        })\n      );\n    }\n  }\n}\nMediaLiveButton.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-live-button\")) {\n  globalThis.customElements.define(\"media-live-button\", MediaLiveButton);\n}\nvar media_live_button_default = MediaLiveButton;\nexport {\n  media_live_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController, _delay;\nimport {\n  MediaUIAttributes,\n  MediaStateReceiverAttributes\n} from \"./constants.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport {\n  getBooleanAttr,\n  setBooleanAttr,\n  getOrInsertCSSRule,\n  setStringAttr,\n  getStringAttr,\n  namedNodeMapToObject\n} from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n  LOADING_DELAY: \"loadingdelay\",\n  NO_AUTOHIDE: \"noautohide\"\n};\nconst DEFAULT_LOADING_DELAY = 500;\nconst loadingIndicatorIcon = `\n<svg aria-hidden=\"true\" viewBox=\"0 0 100 100\">\n  <path d=\"M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50\">\n    <animateTransform\n       attributeName=\"transform\"\n       attributeType=\"XML\"\n       type=\"rotate\"\n       dur=\"1s\"\n       from=\"0 50 50\"\n       to=\"360 50 50\"\n       repeatCount=\"indefinite\" />\n  </path>\n</svg>\n`;\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        display: var(--media-control-display, var(--media-loading-indicator-display, inline-block));\n        vertical-align: middle;\n        box-sizing: border-box;\n        --_loading-indicator-delay: var(--media-loading-indicator-transition-delay, ${DEFAULT_LOADING_DELAY}ms);\n      }\n\n      #status {\n        color: rgba(0,0,0,0);\n        width: 0px;\n        height: 0px;\n      }\n\n      :host slot[name=icon] > *,\n      :host ::slotted([slot=icon]) {\n        opacity: var(--media-loading-indicator-opacity, 0);\n        transition: opacity 0.15s;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=icon] > *,\n      :host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) ::slotted([slot=icon]) {\n        opacity: var(--media-loading-indicator-opacity, 1);\n        transition: opacity 0.15s var(--_loading-indicator-delay);\n      }\n\n      :host #status {\n        visibility: var(--media-loading-indicator-opacity, hidden);\n        transition: visibility 0.15s;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) #status {\n        visibility: var(--media-loading-indicator-opacity, visible);\n        transition: visibility 0.15s var(--_loading-indicator-delay);\n      }\n\n      svg, img, ::slotted(svg), ::slotted(img) {\n        width: var(--media-loading-indicator-icon-width);\n        height: var(--media-loading-indicator-icon-height, 100px);\n        fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n        vertical-align: middle;\n      }\n    </style>\n\n    <slot name=\"icon\">${loadingIndicatorIcon}</slot>\n    <div id=\"status\" role=\"status\" aria-live=\"polite\">${t(\"media loading\")}</div>\n  `\n  );\n}\nclass MediaLoadingIndicator extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _mediaController, void 0);\n    __privateAdd(this, _delay, DEFAULT_LOADING_DELAY);\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n  }\n  static get observedAttributes() {\n    return [\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_PAUSED,\n      MediaUIAttributes.MEDIA_LOADING,\n      Attributes.LOADING_DELAY\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if (attrName === Attributes.LOADING_DELAY && oldValue !== newValue) {\n      this.loadingDelay = Number(newValue);\n    } else if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a, _b, _c;\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet(this, _mediaController, (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(\n        mediaControllerId\n      ));\n      (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a, _b;\n    (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    __privateSet(this, _mediaController, null);\n  }\n  /**\n   * Delay in ms\n   */\n  get loadingDelay() {\n    return __privateGet(this, _delay);\n  }\n  set loadingDelay(delay) {\n    __privateSet(this, _delay, delay);\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"--_loading-indicator-delay\",\n      `var(--media-loading-indicator-transition-delay, ${delay}ms)`\n    );\n  }\n  /**\n   * Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  /**\n   * Is the media loading\n   */\n  get mediaLoading() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING);\n  }\n  set mediaLoading(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING, value);\n  }\n  get mediaController() {\n    return getStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER);\n  }\n  set mediaController(value) {\n    setStringAttr(this, MediaStateReceiverAttributes.MEDIA_CONTROLLER, value);\n  }\n  get noAutohide() {\n    return getBooleanAttr(this, Attributes.NO_AUTOHIDE);\n  }\n  set noAutohide(value) {\n    setBooleanAttr(this, Attributes.NO_AUTOHIDE, value);\n  }\n}\n_mediaController = new WeakMap();\n_delay = new WeakMap();\nMediaLoadingIndicator.shadowRootOptions = { mode: \"open\" };\nMediaLoadingIndicator.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-loading-indicator\")) {\n  globalThis.customElements.define(\n    \"media-loading-indicator\",\n    MediaLoadingIndicator\n  );\n}\nvar media_loading_indicator_default = MediaLoadingIndicator;\nexport {\n  Attributes,\n  media_loading_indicator_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport { getStringAttr, setStringAttr } from \"./utils/element-utils.js\";\nconst offIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M16.5 12A4.5 4.5 0 0 0 14 8v2.18l2.45 2.45a4.22 4.22 0 0 0 .05-.63Zm2.5 0a6.84 6.84 0 0 1-.54 2.64L20 16.15A8.8 8.8 0 0 0 21 12a9 9 0 0 0-7-8.77v2.06A7 7 0 0 1 19 12ZM4.27 3 3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25A6.92 6.92 0 0 1 14 18.7v2.06A9 9 0 0 0 17.69 19l2 2.05L21 19.73l-9-9L4.27 3ZM12 4 9.91 6.09 12 8.18V4Z\"/>\n</svg>`;\nconst lowIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M3 9v6h4l5 5V4L7 9H3Zm13.5 3A4.5 4.5 0 0 0 14 8v8a4.47 4.47 0 0 0 2.5-4Z\"/>\n</svg>`;\nconst highIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M3 9v6h4l5 5V4L7 9H3Zm13.5 3A4.5 4.5 0 0 0 14 8v8a4.47 4.47 0 0 0 2.5-4ZM14 3.23v2.06a7 7 0 0 1 0 13.42v2.06a9 9 0 0 0 0-17.54Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host(:not([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}])) slot[name=icon] slot:not([name=high]),\n      :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=high]) slot[name=icon] slot:not([name=high]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=off]) slot[name=icon] slot:not([name=off]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=low]) slot[name=icon] slot:not([name=low]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=medium]) slot[name=icon] slot:not([name=medium]) {\n        display: none !important;\n      }\n\n      :host(:not([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=off])) slot[name=tooltip-unmute],\n      :host([${MediaUIAttributes.MEDIA_VOLUME_LEVEL}=off]) slot[name=tooltip-mute] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"off\">${offIcon}</slot>\n      <slot name=\"low\">${lowIcon}</slot>\n      <slot name=\"medium\">${lowIcon}</slot>\n      <slot name=\"high\">${highIcon}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-mute\">${t(\"Mute\")}</slot>\n    <slot name=\"tooltip-unmute\">${t(\"Unmute\")}</slot>\n  `\n  );\n}\nconst updateAriaLabel = (el) => {\n  const muted = el.mediaVolumeLevel === \"off\";\n  const label = muted ? t(\"unmute\") : t(\"mute\");\n  el.setAttribute(\"aria-label\", label);\n};\nclass MediaMuteButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_VOLUME_LEVEL];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_VOLUME_LEVEL) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * @type {string | undefined}\n   */\n  get mediaVolumeLevel() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_LEVEL);\n  }\n  set mediaVolumeLevel(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_LEVEL, value);\n  }\n  handleClick() {\n    const eventName = this.mediaVolumeLevel === \"off\" ? MediaUIEvents.MEDIA_UNMUTE_REQUEST : MediaUIEvents.MEDIA_MUTE_REQUEST;\n    this.dispatchEvent(\n      new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n}\nMediaMuteButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaMuteButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-mute-button\")) {\n  globalThis.customElements.define(\"media-mute-button\", MediaMuteButton);\n}\nvar media_mute_button_default = MediaMuteButton;\nexport {\n  media_mute_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n  getBooleanAttr,\n  getStringAttr,\n  setBooleanAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nconst pipIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 28 24\">\n  <path d=\"M24 3H4a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1Zm-1 16H5V5h18v14Zm-3-8h-7v5h7v-5Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host([${MediaUIAttributes.MEDIA_IS_PIP}]) slot[name=icon] slot:not([name=exit]) {\n        display: none !important;\n      }\n\n      :host(:not([${MediaUIAttributes.MEDIA_IS_PIP}])) slot[name=icon] slot:not([name=enter]) {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_IS_PIP}]) slot[name=tooltip-enter],\n      :host(:not([${MediaUIAttributes.MEDIA_IS_PIP}])) slot[name=tooltip-exit] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"enter\">${pipIcon}</slot>\n      <slot name=\"exit\">${pipIcon}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-enter\">${t(\"Enter picture in picture mode\")}</slot>\n    <slot name=\"tooltip-exit\">${t(\"Exit picture in picture mode\")}</slot>\n  `\n  );\n}\nconst updateAriaLabel = (el) => {\n  const label = el.mediaIsPip ? t(\"exit picture in picture mode\") : t(\"enter picture in picture mode\");\n  el.setAttribute(\"aria-label\", label);\n};\nclass MediaPipButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_PIP,\n      MediaUIAttributes.MEDIA_PIP_UNAVAILABLE\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_PIP) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * @type {string | undefined} Pip unavailability state\n   */\n  get mediaPipUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PIP_UNAVAILABLE);\n  }\n  set mediaPipUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PIP_UNAVAILABLE, value);\n  }\n  /**\n   * @type {boolean} Is the media currently playing picture-in-picture\n   */\n  get mediaIsPip() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_PIP);\n  }\n  set mediaIsPip(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_PIP, value);\n  }\n  handleClick() {\n    const eventName = this.mediaIsPip ? MediaUIEvents.MEDIA_EXIT_PIP_REQUEST : MediaUIEvents.MEDIA_ENTER_PIP_REQUEST;\n    this.dispatchEvent(\n      new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n}\nMediaPipButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPipButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-pip-button\")) {\n  globalThis.customElements.define(\"media-pip-button\", MediaPipButton);\n}\nvar media_pip_button_default = MediaPipButton;\nexport {\n  media_pip_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar _rates;\nimport { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { AttributeTokenList } from \"./utils/attribute-token-list.js\";\nimport { getNumericAttr, setNumericAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n  RATES: \"rates\"\n};\nconst DEFAULT_RATES = [1, 1.2, 1.5, 1.7, 2];\nconst DEFAULT_RATE = 1;\nfunction getSlotTemplateHTML(attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        min-width: 5ch;\n        padding: var(--media-button-padding, var(--media-control-padding, 10px 5px));\n      }\n    </style>\n    <slot name=\"icon\">${attrs[\"mediaplaybackrate\"] || DEFAULT_RATE}x</slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return t(\"Playback rate\");\n}\nclass MediaPlaybackRateButton extends MediaChromeButton {\n  constructor() {\n    var _a;\n    super();\n    __privateAdd(this, _rates, new AttributeTokenList(this, Attributes.RATES, {\n      defaultValue: DEFAULT_RATES\n    }));\n    this.container = this.shadowRoot.querySelector('slot[name=\"icon\"]');\n    this.container.innerHTML = `${(_a = this.mediaPlaybackRate) != null ? _a : DEFAULT_RATE}x`;\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      Attributes.RATES\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === Attributes.RATES) {\n      __privateGet(this, _rates).value = newValue;\n    }\n    if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE) {\n      const newPlaybackRate = newValue ? +newValue : Number.NaN;\n      const playbackRate = !Number.isNaN(newPlaybackRate) ? newPlaybackRate : DEFAULT_RATE;\n      this.container.innerHTML = `${playbackRate}x`;\n      this.setAttribute(\n        \"aria-label\",\n        t(\"Playback rate {playbackRate}\", { playbackRate })\n      );\n    }\n  }\n  /**\n   * Get the playback rates for the button.\n   */\n  get rates() {\n    return __privateGet(this, _rates);\n  }\n  /**\n   * Set the playback rates for the button.\n   * For React 19+ compatibility, accept a string of space-separated rates.\n   */\n  set rates(value) {\n    if (!value) {\n      __privateGet(this, _rates).value = \"\";\n    } else if (Array.isArray(value)) {\n      __privateGet(this, _rates).value = value.join(\" \");\n    } else if (typeof value === \"string\") {\n      __privateGet(this, _rates).value = value;\n    }\n  }\n  /**\n   * @type {number} The current playback rate\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      DEFAULT_RATE\n    );\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n  handleClick() {\n    var _a, _b;\n    const availableRates = Array.from(__privateGet(this, _rates).values(), (str) => +str).sort(\n      (a, b) => a - b\n    );\n    const detail = (_b = (_a = availableRates.find((r) => r > this.mediaPlaybackRate)) != null ? _a : availableRates[0]) != null ? _b : DEFAULT_RATE;\n    const evt = new globalThis.CustomEvent(\n      MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST,\n      { composed: true, bubbles: true, detail }\n    );\n    this.dispatchEvent(evt);\n  }\n}\n_rates = new WeakMap();\nMediaPlaybackRateButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPlaybackRateButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-playback-rate-button\")) {\n  globalThis.customElements.define(\n    \"media-playback-rate-button\",\n    MediaPlaybackRateButton\n  );\n}\nvar media_playback_rate_button_default = MediaPlaybackRateButton;\nexport {\n  Attributes,\n  DEFAULT_RATE,\n  DEFAULT_RATES,\n  media_playback_rate_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport { getBooleanAttr, setBooleanAttr } from \"./utils/element-utils.js\";\nconst playIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"m6 21 15-9L6 3v18Z\"/>\n</svg>`;\nconst pauseIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M6 20h4V4H6v16Zm8-16v16h4V4h-4Z\"/>\n</svg>`;\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host([${MediaUIAttributes.MEDIA_PAUSED}]) slot[name=pause],\n      :host(:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=play] {\n        display: none !important;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_PAUSED}]) slot[name=tooltip-pause],\n      :host(:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=tooltip-play] {\n        display: none;\n      }\n    </style>\n\n    <slot name=\"icon\">\n      <slot name=\"play\">${playIcon}</slot>\n      <slot name=\"pause\">${pauseIcon}</slot>\n    </slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return (\n    /*html*/\n    `\n    <slot name=\"tooltip-play\">${t(\"Play\")}</slot>\n    <slot name=\"tooltip-pause\">${t(\"Pause\")}</slot>\n  `\n  );\n}\nconst updateAriaLabel = (el) => {\n  const label = el.mediaPaused ? t(\"play\") : t(\"pause\");\n  el.setAttribute(\"aria-label\", label);\n};\nclass MediaPlayButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PAUSED,\n      MediaUIAttributes.MEDIA_ENDED\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PAUSED || attrName === MediaUIAttributes.MEDIA_LANG) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  handleClick() {\n    const eventName = this.mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n    this.dispatchEvent(\n      new globalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n}\nMediaPlayButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaPlayButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-play-button\")) {\n  globalThis.customElements.define(\"media-play-button\", MediaPlayButton);\n}\nvar media_play_button_default = MediaPlayButton;\nexport {\n  MediaPlayButton,\n  media_play_button_default as default\n};\n","import { globalThis } from \"./utils/server-safe-globals.js\";\nimport { getStringAttr, namedNodeMapToObject, setStringAttr } from \"./utils/element-utils.js\";\nconst Attributes = {\n  PLACEHOLDER_SRC: \"placeholdersrc\",\n  SRC: \"src\"\n};\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        pointer-events: none;\n        display: var(--media-poster-image-display, inline-block);\n        box-sizing: border-box;\n      }\n\n      img {\n        max-width: 100%;\n        max-height: 100%;\n        min-width: 100%;\n        min-height: 100%;\n        background-repeat: no-repeat;\n        background-position: var(--media-poster-image-background-position, var(--media-object-position, center));\n        background-size: var(--media-poster-image-background-size, var(--media-object-fit, contain));\n        object-fit: var(--media-object-fit, contain);\n        object-position: var(--media-object-position, center);\n      }\n    </style>\n\n    <img part=\"poster img\" aria-hidden=\"true\" id=\"image\"/>\n  `\n  );\n}\nconst unsetBackgroundImage = (el) => {\n  el.style.removeProperty(\"background-image\");\n};\nconst setBackgroundImage = (el, image) => {\n  el.style[\"background-image\"] = `url('${image}')`;\n};\nclass MediaPosterImage extends globalThis.HTMLElement {\n  static get observedAttributes() {\n    return [Attributes.PLACEHOLDER_SRC, Attributes.SRC];\n  }\n  constructor() {\n    super();\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n    this.image = this.shadowRoot.querySelector(\"#image\");\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === Attributes.SRC) {\n      if (newValue == null) {\n        this.image.removeAttribute(Attributes.SRC);\n      } else {\n        this.image.setAttribute(Attributes.SRC, newValue);\n      }\n    }\n    if (attrName === Attributes.PLACEHOLDER_SRC) {\n      if (newValue == null) {\n        unsetBackgroundImage(this.image);\n      } else {\n        setBackgroundImage(this.image, newValue);\n      }\n    }\n  }\n  /**\n   *\n   */\n  get placeholderSrc() {\n    return getStringAttr(this, Attributes.PLACEHOLDER_SRC);\n  }\n  set placeholderSrc(value) {\n    setStringAttr(this, Attributes.SRC, value);\n  }\n  /**\n   *\n   */\n  get src() {\n    return getStringAttr(this, Attributes.SRC);\n  }\n  set src(value) {\n    setStringAttr(this, Attributes.SRC, value);\n  }\n}\nMediaPosterImage.shadowRootOptions = { mode: \"open\" };\nMediaPosterImage.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-poster-image\")) {\n  globalThis.customElements.define(\"media-poster-image\", MediaPosterImage);\n}\nvar media_poster_image_default = MediaPosterImage;\nexport {\n  Attributes,\n  media_poster_image_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { getStringAttr, setStringAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nclass MediaPreviewChapterDisplay extends MediaTextDisplay {\n  constructor() {\n    super();\n    __privateAdd(this, _slot, void 0);\n    __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PREVIEW_CHAPTER,\n      MediaUIAttributes.MEDIA_LANG\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PREVIEW_CHAPTER || attrName === MediaUIAttributes.MEDIA_LANG) {\n      if (newValue !== oldValue && newValue != null) {\n        __privateGet(this, _slot).textContent = newValue;\n        if (newValue !== \"\") {\n          const ariaValueText = t(\"chapter: {chapterName}\", {\n            chapterName: newValue\n          });\n          this.setAttribute(\"aria-valuetext\", ariaValueText);\n        } else {\n          this.removeAttribute(\"aria-valuetext\");\n        }\n      }\n    }\n  }\n  /**\n   * @type {string | undefined} Timeline preview chapter\n   */\n  get mediaPreviewChapter() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_CHAPTER);\n  }\n  set mediaPreviewChapter(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_CHAPTER, value);\n  }\n}\n_slot = new WeakMap();\nif (!globalThis.customElements.get(\"media-preview-chapter-display\")) {\n  globalThis.customElements.define(\n    \"media-preview-chapter-display\",\n    MediaPreviewChapterDisplay\n  );\n}\nvar media_preview_chapter_display_default = MediaPreviewChapterDisplay;\nexport {\n  media_preview_chapter_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport {\n  MediaUIAttributes,\n  MediaStateReceiverAttributes\n} from \"./constants.js\";\nimport {\n  getOrInsertCSSRule,\n  getStringAttr,\n  namedNodeMapToObject,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    <style>\n      :host {\n        box-sizing: border-box;\n        display: var(--media-control-display, var(--media-preview-thumbnail-display, inline-block));\n        overflow: hidden;\n      }\n\n      img {\n        display: none;\n        position: relative;\n      }\n    </style>\n    <img crossorigin loading=\"eager\" decoding=\"async\">\n  `\n  );\n}\nclass MediaPreviewThumbnail extends globalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd(this, _mediaController, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow(this.constructor.shadowRootOptions);\n      const attrs = namedNodeMapToObject(this.attributes);\n      this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n    }\n  }\n  static get observedAttributes() {\n    return [\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n      MediaUIAttributes.MEDIA_PREVIEW_COORDS\n    ];\n  }\n  connectedCallback() {\n    var _a, _b, _c;\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet(\n        this,\n        _mediaController,\n        // @ts-ignore\n        (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId)\n      );\n      (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a, _b;\n    (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n    __privateSet(this, _mediaController, null);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a, _b, _c, _d, _e;\n    if ([\n      MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n      MediaUIAttributes.MEDIA_PREVIEW_COORDS\n    ].includes(attrName)) {\n      this.update();\n    }\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this);\n      }\n    }\n  }\n  /**\n   * @type {string | undefined} The url of the preview image\n   */\n  get mediaPreviewImage() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE);\n  }\n  set mediaPreviewImage(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE, value);\n  }\n  /**\n   * @type {Array<number> | undefined} Fixed length array [x, y, width, height] or undefined\n   */\n  get mediaPreviewCoords() {\n    const attrVal = this.getAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS);\n    if (!attrVal)\n      return void 0;\n    return attrVal.split(/\\s+/).map((coord) => +coord);\n  }\n  set mediaPreviewCoords(value) {\n    if (!value) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS);\n      return;\n    }\n    this.setAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS, value.join(\" \"));\n  }\n  update() {\n    const coords = this.mediaPreviewCoords;\n    const previewImage = this.mediaPreviewImage;\n    if (!(coords && previewImage))\n      return;\n    const [x, y, w, h] = coords;\n    const src = previewImage.split(\"#\")[0];\n    const computedStyle = getComputedStyle(this);\n    const { maxWidth, maxHeight, minWidth, minHeight } = computedStyle;\n    const maxRatio = Math.min(parseInt(maxWidth) / w, parseInt(maxHeight) / h);\n    const minRatio = Math.max(parseInt(minWidth) / w, parseInt(minHeight) / h);\n    const isScalingDown = maxRatio < 1;\n    const scale = isScalingDown ? maxRatio : minRatio > 1 ? minRatio : 1;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    const imgStyle = getOrInsertCSSRule(this.shadowRoot, \"img\").style;\n    const img = this.shadowRoot.querySelector(\"img\");\n    const extremum = isScalingDown ? \"min\" : \"max\";\n    style.setProperty(`${extremum}-width`, \"initial\", \"important\");\n    style.setProperty(`${extremum}-height`, \"initial\", \"important\");\n    style.width = `${w * scale}px`;\n    style.height = `${h * scale}px`;\n    const resize = () => {\n      imgStyle.width = `${this.imgWidth * scale}px`;\n      imgStyle.height = `${this.imgHeight * scale}px`;\n      imgStyle.display = \"block\";\n    };\n    if (img.src !== src) {\n      img.onload = () => {\n        this.imgWidth = img.naturalWidth;\n        this.imgHeight = img.naturalHeight;\n        resize();\n      };\n      img.src = src;\n      resize();\n    }\n    resize();\n    imgStyle.transform = `translate(-${x * scale}px, -${y * scale}px)`;\n  }\n}\n_mediaController = new WeakMap();\nMediaPreviewThumbnail.shadowRootOptions = { mode: \"open\" };\nMediaPreviewThumbnail.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-preview-thumbnail\")) {\n  globalThis.customElements.define(\n    \"media-preview-thumbnail\",\n    MediaPreviewThumbnail\n  );\n}\nvar media_preview_thumbnail_default = MediaPreviewThumbnail;\nexport {\n  media_preview_thumbnail_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { formatTime } from \"./utils/time.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr } from \"./utils/element-utils.js\";\nclass MediaPreviewTimeDisplay extends MediaTextDisplay {\n  constructor() {\n    super();\n    __privateAdd(this, _slot, void 0);\n    __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n    __privateGet(this, _slot).textContent = formatTime(0);\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_PREVIEW_TIME];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PREVIEW_TIME && newValue != null) {\n      __privateGet(this, _slot).textContent = formatTime(parseFloat(newValue));\n    }\n  }\n  /**\n   * Timeline preview time\n   */\n  get mediaPreviewTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME);\n  }\n  set mediaPreviewTime(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME, value);\n  }\n}\n_slot = new WeakMap();\nif (!globalThis.customElements.get(\"media-preview-time-display\")) {\n  globalThis.customElements.define(\n    \"media-preview-time-display\",\n    MediaPreviewTimeDisplay\n  );\n}\nvar media_preview_time_display_default = MediaPreviewTimeDisplay;\nexport {\n  media_preview_time_display_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr, getSlotted, updateIconText } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n  SEEK_OFFSET: \"seekoffset\"\n};\nconst DEFAULT_SEEK_OFFSET = 30;\nconst backwardIcon = (seekOffset) => `\n  <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\">\n    <defs>\n      <style>.text{font-size:8px;font-family:Arial-BoldMT, Arial;font-weight:700;}</style>\n    </defs>\n    <text class=\"text value\" transform=\"translate(2.18 19.87)\">${seekOffset}</text>\n    <path d=\"M10 6V3L4.37 7 10 10.94V8a5.54 5.54 0 0 1 1.9 10.48v2.12A7.5 7.5 0 0 0 10 6Z\"/>\n  </svg>`;\nfunction getSlotTemplateHTML(_attrs, props) {\n  return (\n    /*html*/\n    `\n    <slot name=\"icon\">${backwardIcon(props.seekOffset)}</slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return t(\"Seek backward\");\n}\nconst DEFAULT_TIME = 0;\nclass MediaSeekBackwardButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      Attributes.SEEK_OFFSET\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.seekOffset = getNumericAttr(\n      this,\n      Attributes.SEEK_OFFSET,\n      DEFAULT_SEEK_OFFSET\n    );\n  }\n  attributeChangedCallback(attrName, _oldValue, newValue) {\n    super.attributeChangedCallback(attrName, _oldValue, newValue);\n    if (attrName === Attributes.SEEK_OFFSET) {\n      this.seekOffset = getNumericAttr(\n        this,\n        Attributes.SEEK_OFFSET,\n        DEFAULT_SEEK_OFFSET\n      );\n    }\n  }\n  // Own props\n  /**\n   * Seek amount in seconds\n   */\n  get seekOffset() {\n    return getNumericAttr(this, Attributes.SEEK_OFFSET, DEFAULT_SEEK_OFFSET);\n  }\n  set seekOffset(value) {\n    setNumericAttr(this, Attributes.SEEK_OFFSET, value);\n    this.setAttribute(\n      \"aria-label\",\n      t(\"seek back {seekOffset} seconds\", { seekOffset: this.seekOffset })\n    );\n    updateIconText(getSlotted(this, \"icon\"), this.seekOffset);\n  }\n  // Props derived from Media UI Attributes\n  /**\n   * The current time in seconds\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      DEFAULT_TIME\n    );\n  }\n  set mediaCurrentTime(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n  }\n  handleClick() {\n    const detail = Math.max(this.mediaCurrentTime - this.seekOffset, 0);\n    const evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    });\n    this.dispatchEvent(evt);\n  }\n}\nMediaSeekBackwardButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaSeekBackwardButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-seek-backward-button\")) {\n  globalThis.customElements.define(\n    \"media-seek-backward-button\",\n    MediaSeekBackwardButton\n  );\n}\nvar media_seek_backward_button_default = MediaSeekBackwardButton;\nexport {\n  Attributes,\n  media_seek_backward_button_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getNumericAttr, setNumericAttr, getSlotted, updateIconText } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n  SEEK_OFFSET: \"seekoffset\"\n};\nconst DEFAULT_SEEK_OFFSET = 30;\nconst forwardIcon = (seekOffset) => `\n  <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\">\n    <defs>\n      <style>.text{font-size:8px;font-family:Arial-BoldMT, Arial;font-weight:700;}</style>\n    </defs>\n    <text class=\"text value\" transform=\"translate(8.9 19.87)\">${seekOffset}</text>\n    <path d=\"M10 6V3l5.61 4L10 10.94V8a5.54 5.54 0 0 0-1.9 10.48v2.12A7.5 7.5 0 0 1 10 6Z\"/>\n  </svg>`;\nfunction getSlotTemplateHTML(_attrs, props) {\n  return (\n    /*html*/\n    `\n    <slot name=\"icon\">${forwardIcon(props.seekOffset)}</slot>\n  `\n  );\n}\nfunction getTooltipContentHTML() {\n  return t(\"Seek forward\");\n}\nconst DEFAULT_TIME = 0;\nclass MediaSeekForwardButton extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      Attributes.SEEK_OFFSET\n    ];\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.seekOffset = getNumericAttr(\n      this,\n      Attributes.SEEK_OFFSET,\n      DEFAULT_SEEK_OFFSET\n    );\n  }\n  attributeChangedCallback(attrName, _oldValue, newValue) {\n    super.attributeChangedCallback(attrName, _oldValue, newValue);\n    if (attrName === Attributes.SEEK_OFFSET) {\n      this.seekOffset = getNumericAttr(\n        this,\n        Attributes.SEEK_OFFSET,\n        DEFAULT_SEEK_OFFSET\n      );\n    }\n  }\n  // Own props\n  /**\n   * Seek amount in seconds\n   */\n  get seekOffset() {\n    return getNumericAttr(this, Attributes.SEEK_OFFSET, DEFAULT_SEEK_OFFSET);\n  }\n  set seekOffset(value) {\n    setNumericAttr(this, Attributes.SEEK_OFFSET, value);\n    this.setAttribute(\n      \"aria-label\",\n      t(\"seek forward {seekOffset} seconds\", { seekOffset: this.seekOffset })\n    );\n    updateIconText(getSlotted(this, \"icon\"), this.seekOffset);\n  }\n  // Props derived from Media UI Attributes\n  /**\n   * The current time in seconds\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      DEFAULT_TIME\n    );\n  }\n  set mediaCurrentTime(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n  }\n  handleClick() {\n    const detail = this.mediaCurrentTime + this.seekOffset;\n    const evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    });\n    this.dispatchEvent(evt);\n  }\n}\nMediaSeekForwardButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaSeekForwardButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-seek-forward-button\")) {\n  globalThis.customElements.define(\n    \"media-seek-forward-button\",\n    MediaSeekForwardButton\n  );\n}\nvar media_seek_forward_button_default = MediaSeekForwardButton;\nexport {\n  Attributes,\n  media_seek_forward_button_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot;\nimport { MediaTextDisplay } from \"./media-text-display.js\";\nimport {\n  getBooleanAttr,\n  getNumericAttr,\n  getOrInsertCSSRule,\n  setBooleanAttr,\n  setNumericAttr\n} from \"./utils/element-utils.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { formatAsTimePhrase, formatTime } from \"./utils/time.js\";\nimport { MediaUIAttributes } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nconst Attributes = {\n  REMAINING: \"remaining\",\n  SHOW_DURATION: \"showduration\",\n  NO_TOGGLE: \"notoggle\"\n};\nconst CombinedAttributes = [\n  ...Object.values(Attributes),\n  MediaUIAttributes.MEDIA_CURRENT_TIME,\n  MediaUIAttributes.MEDIA_DURATION,\n  MediaUIAttributes.MEDIA_SEEKABLE\n];\nconst ButtonPressedKeys = [\"Enter\", \" \"];\nconst DEFAULT_TIMES_SEP = \"&nbsp;/&nbsp;\";\nconst formatTimesLabel = (el, { timesSep = DEFAULT_TIMES_SEP } = {}) => {\n  var _a, _b;\n  const currentTime = (_a = el.mediaCurrentTime) != null ? _a : 0;\n  const [, seekableEnd] = (_b = el.mediaSeekable) != null ? _b : [];\n  let endTime = 0;\n  if (Number.isFinite(el.mediaDuration)) {\n    endTime = el.mediaDuration;\n  } else if (Number.isFinite(seekableEnd)) {\n    endTime = seekableEnd;\n  }\n  const timeLabel = el.remaining ? formatTime(0 - (endTime - currentTime)) : formatTime(currentTime);\n  if (!el.showDuration)\n    return timeLabel;\n  return `${timeLabel}${timesSep}${formatTime(endTime)}`;\n};\nconst DEFAULT_MISSING_TIME_PHRASE = \"video not loaded, unknown time.\";\nconst updateAriaValueText = (el) => {\n  var _a;\n  const currentTime = el.mediaCurrentTime;\n  const [, seekableEnd] = (_a = el.mediaSeekable) != null ? _a : [];\n  let endTime = null;\n  if (Number.isFinite(el.mediaDuration)) {\n    endTime = el.mediaDuration;\n  } else if (Number.isFinite(seekableEnd)) {\n    endTime = seekableEnd;\n  }\n  if (currentTime == null || endTime === null) {\n    el.setAttribute(\"aria-valuetext\", DEFAULT_MISSING_TIME_PHRASE);\n    return;\n  }\n  const currentTimePhrase = el.remaining ? formatAsTimePhrase(0 - (endTime - currentTime)) : formatAsTimePhrase(currentTime);\n  if (!el.showDuration) {\n    el.setAttribute(\"aria-valuetext\", currentTimePhrase);\n    return;\n  }\n  const totalTimePhrase = formatAsTimePhrase(endTime);\n  const fullPhrase = `${currentTimePhrase} of ${totalTimePhrase}`;\n  el.setAttribute(\"aria-valuetext\", fullPhrase);\n};\nfunction getSlotTemplateHTML(_attrs, props) {\n  return (\n    /*html*/\n    `\n    <slot>${formatTimesLabel(props)}</slot>\n  `\n  );\n}\nclass MediaTimeDisplay extends MediaTextDisplay {\n  constructor() {\n    super();\n    __privateAdd(this, _slot, void 0);\n    __privateSet(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n    __privateGet(this, _slot).innerHTML = `${formatTimesLabel(this)}`;\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, ...CombinedAttributes, \"disabled\"];\n  }\n  connectedCallback() {\n    const { style } = getOrInsertCSSRule(\n      this.shadowRoot,\n      \":host(:hover:not([notoggle]))\"\n    );\n    style.setProperty(\"cursor\", \"var(--media-cursor, pointer)\");\n    style.setProperty(\n      \"background\",\n      \"var(--media-control-hover-background, rgba(50 50 70 / .7))\"\n    );\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    }\n    this.setAttribute(\"role\", \"progressbar\");\n    this.setAttribute(\"aria-label\", t(\"playback time\"));\n    const keyUpHandler = (evt) => {\n      const { key } = evt;\n      if (!ButtonPressedKeys.includes(key)) {\n        this.removeEventListener(\"keyup\", keyUpHandler);\n        return;\n      }\n      this.toggleTimeDisplay();\n    };\n    this.addEventListener(\"keydown\", (evt) => {\n      const { metaKey, altKey, key } = evt;\n      if (metaKey || altKey || !ButtonPressedKeys.includes(key)) {\n        this.removeEventListener(\"keyup\", keyUpHandler);\n        return;\n      }\n      this.addEventListener(\"keyup\", keyUpHandler);\n    });\n    this.addEventListener(\"click\", this.toggleTimeDisplay);\n    super.connectedCallback();\n  }\n  toggleTimeDisplay() {\n    if (this.noToggle) {\n      return;\n    }\n    if (this.hasAttribute(\"remaining\")) {\n      this.removeAttribute(\"remaining\");\n    } else {\n      this.setAttribute(\"remaining\", \"\");\n    }\n  }\n  disconnectedCallback() {\n    this.disable();\n    super.disconnectedCallback();\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (CombinedAttributes.includes(attrName)) {\n      this.update();\n    } else if (attrName === \"disabled\" && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  enable() {\n    this.tabIndex = 0;\n  }\n  disable() {\n    this.tabIndex = -1;\n  }\n  // Own props\n  /**\n   * Whether to show the remaining time\n   */\n  get remaining() {\n    return getBooleanAttr(this, Attributes.REMAINING);\n  }\n  set remaining(show) {\n    setBooleanAttr(this, Attributes.REMAINING, show);\n  }\n  /**\n   * Whether to show the duration\n   */\n  get showDuration() {\n    return getBooleanAttr(this, Attributes.SHOW_DURATION);\n  }\n  set showDuration(show) {\n    setBooleanAttr(this, Attributes.SHOW_DURATION, show);\n  }\n  /**\n   * Disable the default behavior that toggles between current and remaining time\n   */\n  get noToggle() {\n    return getBooleanAttr(this, Attributes.NO_TOGGLE);\n  }\n  set noToggle(noToggle) {\n    setBooleanAttr(this, Attributes.NO_TOGGLE, noToggle);\n  }\n  // Props derived from media UI attributes\n  /**\n   * Get the duration\n   */\n  get mediaDuration() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n  }\n  set mediaDuration(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, time);\n  }\n  /**\n   * The current time in seconds\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME);\n  }\n  set mediaCurrentTime(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n  }\n  /**\n   * Range of values that can be seeked to.\n   * An array of two numbers [start, end]\n   */\n  get mediaSeekable() {\n    const seekable = this.getAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n    if (!seekable)\n      return void 0;\n    return seekable.split(\":\").map((time) => +time);\n  }\n  set mediaSeekable(range) {\n    if (range == null) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n      return;\n    }\n    this.setAttribute(MediaUIAttributes.MEDIA_SEEKABLE, range.join(\":\"));\n  }\n  update() {\n    const timesLabel = formatTimesLabel(this);\n    updateAriaValueText(this);\n    if (timesLabel !== __privateGet(this, _slot).innerHTML) {\n      __privateGet(this, _slot).innerHTML = timesLabel;\n    }\n  }\n}\n_slot = new WeakMap();\nMediaTimeDisplay.getSlotTemplateHTML = getSlotTemplateHTML;\nif (!globalThis.customElements.get(\"media-time-display\")) {\n  globalThis.customElements.define(\"media-time-display\", MediaTimeDisplay);\n}\nvar media_time_display_default = MediaTimeDisplay;\nexport {\n  Attributes,\n  media_time_display_default as default\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateWrapper = (obj, member, setter, getter) => ({\n  set _(value) {\n    __privateSet(obj, member, value, setter);\n  },\n  get _() {\n    return __privateGet(obj, member, getter);\n  }\n});\nvar _range, _startTime, _previousTime, _deltaTime, _frameCount, _updateTimestamp, _updateStartValue, _lastRangeIncrease, _id, _animate;\nclass RangeAnimation {\n  constructor(range, callback, fps) {\n    __privateAdd(this, _range, void 0);\n    __privateAdd(this, _startTime, void 0);\n    __privateAdd(this, _previousTime, void 0);\n    __privateAdd(this, _deltaTime, void 0);\n    __privateAdd(this, _frameCount, void 0);\n    __privateAdd(this, _updateTimestamp, void 0);\n    __privateAdd(this, _updateStartValue, void 0);\n    __privateAdd(this, _lastRangeIncrease, void 0);\n    __privateAdd(this, _id, 0);\n    __privateAdd(this, _animate, (now = performance.now()) => {\n      __privateSet(this, _id, requestAnimationFrame(__privateGet(this, _animate)));\n      __privateSet(this, _deltaTime, performance.now() - __privateGet(this, _previousTime));\n      const fpsInterval = 1e3 / this.fps;\n      if (__privateGet(this, _deltaTime) > fpsInterval) {\n        __privateSet(this, _previousTime, now - __privateGet(this, _deltaTime) % fpsInterval);\n        const fps = 1e3 / ((now - __privateGet(this, _startTime)) / ++__privateWrapper(this, _frameCount)._);\n        const delta = (now - __privateGet(this, _updateTimestamp)) / 1e3 / this.duration;\n        let value = __privateGet(this, _updateStartValue) + delta * this.playbackRate;\n        const increase = value - __privateGet(this, _range).valueAsNumber;\n        if (increase > 0) {\n          __privateSet(this, _lastRangeIncrease, this.playbackRate / this.duration / fps);\n        } else {\n          __privateSet(this, _lastRangeIncrease, 0.995 * __privateGet(this, _lastRangeIncrease));\n          value = __privateGet(this, _range).valueAsNumber + __privateGet(this, _lastRangeIncrease);\n        }\n        this.callback(value);\n      }\n    });\n    __privateSet(this, _range, range);\n    this.callback = callback;\n    this.fps = fps;\n  }\n  start() {\n    if (__privateGet(this, _id) !== 0)\n      return;\n    __privateSet(this, _previousTime, performance.now());\n    __privateSet(this, _startTime, __privateGet(this, _previousTime));\n    __privateSet(this, _frameCount, 0);\n    __privateGet(this, _animate).call(this);\n  }\n  stop() {\n    if (__privateGet(this, _id) === 0)\n      return;\n    cancelAnimationFrame(__privateGet(this, _id));\n    __privateSet(this, _id, 0);\n  }\n  update({ start, duration, playbackRate }) {\n    const increase = start - __privateGet(this, _range).valueAsNumber;\n    const durationDelta = Math.abs(duration - this.duration);\n    if (increase > 0 || increase < -0.03 || durationDelta >= 0.5) {\n      this.callback(start);\n    }\n    __privateSet(this, _updateStartValue, start);\n    __privateSet(this, _updateTimestamp, performance.now());\n    this.duration = duration;\n    this.playbackRate = playbackRate;\n  }\n}\n_range = new WeakMap();\n_startTime = new WeakMap();\n_previousTime = new WeakMap();\n_deltaTime = new WeakMap();\n_frameCount = new WeakMap();\n_updateTimestamp = new WeakMap();\n_updateStartValue = new WeakMap();\n_lastRangeIncrease = new WeakMap();\n_id = new WeakMap();\n_animate = new WeakMap();\nexport {\n  RangeAnimation\n};\n","var __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck(obj, member, \"access private method\");\n  return method;\n};\nvar _rootNode, _animation, _boxes, _previewTime, _previewBox, _currentBox, _boxPaddingLeft, _boxPaddingRight, _mediaChaptersCues, _isPointerDown, _toggleRangeAnimation, toggleRangeAnimation_fn, _shouldRangeAnimate, shouldRangeAnimate_fn, _updateRange, _getElementRects, getElementRects_fn, _getBoxPosition, getBoxPosition_fn, _getBoxShiftPosition, getBoxShiftPosition_fn, _handlePointerMove, handlePointerMove_fn, _previewRequest, previewRequest_fn, _seekRequest, seekRequest_fn;\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaChromeRange } from \"./media-chrome-range.js\";\nimport \"./media-preview-thumbnail.js\";\nimport \"./media-preview-time-display.js\";\nimport \"./media-preview-chapter-display.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { isValidNumber } from \"./utils/utils.js\";\nimport { formatAsTimePhrase } from \"./utils/time.js\";\nimport { isElementVisible } from \"./utils/element-utils.js\";\nimport { RangeAnimation } from \"./utils/range-animation.js\";\nimport {\n  getOrInsertCSSRule,\n  containsComposedNode,\n  closestComposedNode,\n  getBooleanAttr,\n  setBooleanAttr,\n  getNumericAttr,\n  setNumericAttr,\n  getStringAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nimport MediaPreviewThumbnail from \"./media-preview-thumbnail.js\";\nconst DEFAULT_MISSING_TIME_PHRASE = \"video not loaded, unknown time.\";\nconst updateAriaValueText = (el) => {\n  const range = el.range;\n  const currentTimePhrase = formatAsTimePhrase(+calcTimeFromRangeValue(el));\n  const totalTimePhrase = formatAsTimePhrase(+el.mediaSeekableEnd);\n  const fullPhrase = !(currentTimePhrase && totalTimePhrase) ? DEFAULT_MISSING_TIME_PHRASE : `${currentTimePhrase} of ${totalTimePhrase}`;\n  range.setAttribute(\"aria-valuetext\", fullPhrase);\n};\nfunction getTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n    ${MediaChromeRange.getTemplateHTML(_attrs)}\n    <style>\n      :host {\n        --media-box-border-radius: 4px;\n        --media-box-padding-left: 10px;\n        --media-box-padding-right: 10px;\n        --media-preview-border-radius: var(--media-box-border-radius);\n        --media-box-arrow-offset: var(--media-box-border-radius);\n        --_control-background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n        --_preview-background: var(--media-preview-background, var(--_control-background));\n\n        ${/* 1% rail width trick was off in Safari, contain: layout seems to\n    prevent the horizontal overflow as well. */\n    \"\"}\n        contain: layout;\n      }\n\n      #buffered {\n        background: var(--media-time-range-buffered-color, rgb(255 255 255 / .4));\n        position: absolute;\n        height: 100%;\n        will-change: width;\n      }\n\n      #preview-rail,\n      #current-rail {\n        width: 100%;\n        position: absolute;\n        left: 0;\n        bottom: 100%;\n        pointer-events: none;\n        will-change: transform;\n      }\n\n      [part~=\"box\"] {\n        width: min-content;\n        ${/* absolute position is needed here so the box doesn't overflow the bounds */\n    \"\"}\n        position: absolute;\n        bottom: 100%;\n        flex-direction: column;\n        align-items: center;\n        transform: translateX(-50%);\n      }\n\n      [part~=\"current-box\"] {\n        display: var(--media-current-box-display, var(--media-box-display, flex));\n        margin: var(--media-current-box-margin, var(--media-box-margin, 0 0 5px));\n        visibility: hidden;\n      }\n\n      [part~=\"preview-box\"] {\n        display: var(--media-preview-box-display, var(--media-box-display, flex));\n        margin: var(--media-preview-box-margin, var(--media-box-margin, 0 0 5px));\n        transition-property: var(--media-preview-transition-property, visibility, opacity);\n        transition-duration: var(--media-preview-transition-duration-out, .25s);\n        transition-delay: var(--media-preview-transition-delay-out, 0s);\n        visibility: hidden;\n        opacity: 0;\n      }\n\n      :host(:is([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}], [${MediaUIAttributes.MEDIA_PREVIEW_TIME}])[dragging]) [part~=\"preview-box\"] {\n        transition-duration: var(--media-preview-transition-duration-in, .5s);\n        transition-delay: var(--media-preview-transition-delay-in, .25s);\n        visibility: visible;\n        opacity: 1;\n      }\n\n      @media (hover: hover) {\n        :host(:is([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}], [${MediaUIAttributes.MEDIA_PREVIEW_TIME}]):hover) [part~=\"preview-box\"] {\n          transition-duration: var(--media-preview-transition-duration-in, .5s);\n          transition-delay: var(--media-preview-transition-delay-in, .25s);\n          visibility: visible;\n          opacity: 1;\n        }\n      }\n\n      media-preview-thumbnail,\n      ::slotted(media-preview-thumbnail) {\n        visibility: hidden;\n        ${/* delay changing these CSS props until the preview box transition is ended */\n    \"\"}\n        transition: visibility 0s .25s;\n        transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n        background: var(--media-preview-thumbnail-background, var(--_preview-background));\n        box-shadow: var(--media-preview-thumbnail-box-shadow, 0 0 4px rgb(0 0 0 / .2));\n        max-width: var(--media-preview-thumbnail-max-width, 180px);\n        max-height: var(--media-preview-thumbnail-max-height, 160px);\n        min-width: var(--media-preview-thumbnail-min-width, 120px);\n        min-height: var(--media-preview-thumbnail-min-height, 80px);\n        border: var(--media-preview-thumbnail-border);\n        border-radius: var(--media-preview-thumbnail-border-radius,\n          var(--media-preview-border-radius) var(--media-preview-border-radius) 0 0);\n      }\n\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}][dragging]) media-preview-thumbnail,\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}][dragging]) ::slotted(media-preview-thumbnail) {\n        transition-delay: var(--media-preview-transition-delay-in, .25s);\n        visibility: visible;\n      }\n\n      @media (hover: hover) {\n        :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]:hover) media-preview-thumbnail,\n        :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]:hover) ::slotted(media-preview-thumbnail) {\n          transition-delay: var(--media-preview-transition-delay-in, .25s);\n          visibility: visible;\n        }\n\n        :host([${MediaUIAttributes.MEDIA_PREVIEW_TIME}]:hover) {\n          --media-time-range-hover-display: block;\n        }\n      }\n\n      media-preview-chapter-display,\n      ::slotted(media-preview-chapter-display) {\n        font-size: var(--media-font-size, 13px);\n        line-height: 17px;\n        min-width: 0;\n        visibility: hidden;\n        ${/* delay changing these CSS props until the preview box transition is ended */\n    \"\"}\n        transition: min-width 0s, border-radius 0s, margin 0s, padding 0s, visibility 0s;\n        transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n        background: var(--media-preview-chapter-background, var(--_preview-background));\n        border-radius: var(--media-preview-chapter-border-radius,\n          var(--media-preview-border-radius) var(--media-preview-border-radius)\n          var(--media-preview-border-radius) var(--media-preview-border-radius));\n        padding: var(--media-preview-chapter-padding, 3.5px 9px);\n        margin: var(--media-preview-chapter-margin, 0 0 5px);\n        text-shadow: var(--media-preview-chapter-text-shadow, 0 0 4px rgb(0 0 0 / .75));\n      }\n\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) media-preview-chapter-display,\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) ::slotted(media-preview-chapter-display) {\n        transition-delay: var(--media-preview-transition-delay-in, .25s);\n        border-radius: var(--media-preview-chapter-border-radius, 0);\n        padding: var(--media-preview-chapter-padding, 3.5px 9px 0);\n        margin: var(--media-preview-chapter-margin, 0);\n        min-width: 100%;\n      }\n\n      media-preview-chapter-display[${MediaUIAttributes.MEDIA_PREVIEW_CHAPTER}],\n      ::slotted(media-preview-chapter-display[${MediaUIAttributes.MEDIA_PREVIEW_CHAPTER}]) {\n        visibility: visible;\n      }\n\n      media-preview-chapter-display:not([aria-valuetext]),\n      ::slotted(media-preview-chapter-display:not([aria-valuetext])) {\n        display: none;\n      }\n\n      media-preview-time-display,\n      ::slotted(media-preview-time-display),\n      media-time-display,\n      ::slotted(media-time-display) {\n        font-size: var(--media-font-size, 13px);\n        line-height: 17px;\n        min-width: 0;\n        ${/* delay changing these CSS props until the preview box transition is ended */\n    \"\"}\n        transition: min-width 0s, border-radius 0s;\n        transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n        background: var(--media-preview-time-background, var(--_preview-background));\n        border-radius: var(--media-preview-time-border-radius,\n          var(--media-preview-border-radius) var(--media-preview-border-radius)\n          var(--media-preview-border-radius) var(--media-preview-border-radius));\n        padding: var(--media-preview-time-padding, 3.5px 9px);\n        margin: var(--media-preview-time-margin, 0);\n        text-shadow: var(--media-preview-time-text-shadow, 0 0 4px rgb(0 0 0 / .75));\n        transform: translateX(min(\n          max(calc(50% - var(--_box-width) / 2),\n          calc(var(--_box-shift, 0))),\n          calc(var(--_box-width) / 2 - 50%)\n        ));\n      }\n\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) media-preview-time-display,\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) ::slotted(media-preview-time-display) {\n        transition-delay: var(--media-preview-transition-delay-in, .25s);\n        border-radius: var(--media-preview-time-border-radius,\n          0 0 var(--media-preview-border-radius) var(--media-preview-border-radius));\n        min-width: 100%;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_TIME}]:hover) {\n        --media-time-range-hover-display: block;\n      }\n\n      [part~=\"arrow\"],\n      ::slotted([part~=\"arrow\"]) {\n        display: var(--media-box-arrow-display, inline-block);\n        transform: translateX(min(\n          max(calc(50% - var(--_box-width) / 2 + var(--media-box-arrow-offset)),\n          calc(var(--_box-shift, 0))),\n          calc(var(--_box-width) / 2 - 50% - var(--media-box-arrow-offset))\n        ));\n        ${/* border-color has to come before border-top-color! */\n    \"\"}\n        border-color: transparent;\n        border-top-color: var(--media-box-arrow-background, var(--_control-background));\n        border-width: var(--media-box-arrow-border-width,\n          var(--media-box-arrow-height, 5px) var(--media-box-arrow-width, 6px) 0);\n        border-style: solid;\n        justify-content: center;\n        height: 0;\n      }\n    </style>\n    <div id=\"preview-rail\">\n      <slot name=\"preview\" part=\"box preview-box\">\n        <media-preview-thumbnail>\n          <template shadowrootmode=\"${MediaPreviewThumbnail.shadowRootOptions.mode}\">\n            ${MediaPreviewThumbnail.getTemplateHTML({})}\n          </template>\n        </media-preview-thumbnail>\n        <media-preview-chapter-display></media-preview-chapter-display>\n        <media-preview-time-display></media-preview-time-display>\n        <slot name=\"preview-arrow\"><div part=\"arrow\"></div></slot>\n      </slot>\n    </div>\n    <div id=\"current-rail\">\n      <slot name=\"current\" part=\"box current-box\">\n        ${/* Example: add the current time w/ arrow to the playhead\n    <media-time-display slot=\"current\"></media-time-display>\n    <div part=\"arrow\" slot=\"current\"></div> */\n    \"\"}\n      </slot>\n    </div>\n  `\n  );\n}\nconst calcRangeValueFromTime = (el, time = el.mediaCurrentTime) => {\n  const startTime = Number.isFinite(el.mediaSeekableStart) ? el.mediaSeekableStart : 0;\n  const endTime = Number.isFinite(el.mediaDuration) ? el.mediaDuration : el.mediaSeekableEnd;\n  if (Number.isNaN(endTime))\n    return 0;\n  const value = (time - startTime) / (endTime - startTime);\n  return Math.max(0, Math.min(value, 1));\n};\nconst calcTimeFromRangeValue = (el, value = el.range.valueAsNumber) => {\n  const startTime = Number.isFinite(el.mediaSeekableStart) ? el.mediaSeekableStart : 0;\n  const endTime = Number.isFinite(el.mediaDuration) ? el.mediaDuration : el.mediaSeekableEnd;\n  if (Number.isNaN(endTime))\n    return 0;\n  return value * (endTime - startTime) + startTime;\n};\nclass MediaTimeRange extends MediaChromeRange {\n  constructor() {\n    super();\n    __privateAdd(this, _toggleRangeAnimation);\n    __privateAdd(this, _shouldRangeAnimate);\n    __privateAdd(this, _getElementRects);\n    /**\n     * Get the position, max and min for the box in percentage.\n     * It's important this is in percentage so when the player is resized\n     * the box will move accordingly.\n     */\n    __privateAdd(this, _getBoxPosition);\n    __privateAdd(this, _getBoxShiftPosition);\n    __privateAdd(this, _handlePointerMove);\n    __privateAdd(this, _previewRequest);\n    __privateAdd(this, _seekRequest);\n    __privateAdd(this, _rootNode, void 0);\n    __privateAdd(this, _animation, void 0);\n    __privateAdd(this, _boxes, void 0);\n    __privateAdd(this, _previewTime, void 0);\n    __privateAdd(this, _previewBox, void 0);\n    __privateAdd(this, _currentBox, void 0);\n    __privateAdd(this, _boxPaddingLeft, void 0);\n    __privateAdd(this, _boxPaddingRight, void 0);\n    __privateAdd(this, _mediaChaptersCues, void 0);\n    __privateAdd(this, _isPointerDown, void 0);\n    __privateAdd(this, _updateRange, (value) => {\n      if (this.dragging)\n        return;\n      if (isValidNumber(value)) {\n        this.range.valueAsNumber = value;\n      }\n      if (!__privateGet(this, _isPointerDown)) {\n        this.updateBar();\n      }\n    });\n    const track = this.shadowRoot.querySelector(\"#track\");\n    track.insertAdjacentHTML(\n      \"afterbegin\",\n      '<div id=\"buffered\" part=\"buffered\"></div>'\n    );\n    __privateSet(this, _boxes, this.shadowRoot.querySelectorAll('[part~=\"box\"]'));\n    __privateSet(this, _previewBox, this.shadowRoot.querySelector('[part~=\"preview-box\"]'));\n    __privateSet(this, _currentBox, this.shadowRoot.querySelector('[part~=\"current-box\"]'));\n    const computedStyle = getComputedStyle(this);\n    __privateSet(this, _boxPaddingLeft, parseInt(\n      computedStyle.getPropertyValue(\"--media-box-padding-left\")\n    ));\n    __privateSet(this, _boxPaddingRight, parseInt(\n      computedStyle.getPropertyValue(\"--media-box-padding-right\")\n    ));\n    __privateSet(this, _animation, new RangeAnimation(this.range, __privateGet(this, _updateRange), 60));\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PAUSED,\n      MediaUIAttributes.MEDIA_DURATION,\n      MediaUIAttributes.MEDIA_SEEKABLE,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n      MediaUIAttributes.MEDIA_PREVIEW_TIME,\n      MediaUIAttributes.MEDIA_PREVIEW_CHAPTER,\n      MediaUIAttributes.MEDIA_BUFFERED,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      MediaUIAttributes.MEDIA_LOADING,\n      MediaUIAttributes.MEDIA_ENDED\n    ];\n  }\n  connectedCallback() {\n    var _a;\n    super.connectedCallback();\n    this.range.setAttribute(\"aria-label\", t(\"seek\"));\n    __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n    __privateSet(this, _rootNode, this.getRootNode());\n    (_a = __privateGet(this, _rootNode)) == null ? void 0 : _a.addEventListener(\"transitionstart\", this);\n  }\n  disconnectedCallback() {\n    var _a;\n    super.disconnectedCallback();\n    __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n    (_a = __privateGet(this, _rootNode)) == null ? void 0 : _a.removeEventListener(\"transitionstart\", this);\n    __privateSet(this, _rootNode, null);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (oldValue == newValue)\n      return;\n    if (attrName === MediaUIAttributes.MEDIA_CURRENT_TIME || attrName === MediaUIAttributes.MEDIA_PAUSED || attrName === MediaUIAttributes.MEDIA_ENDED || attrName === MediaUIAttributes.MEDIA_LOADING || attrName === MediaUIAttributes.MEDIA_DURATION || attrName === MediaUIAttributes.MEDIA_SEEKABLE) {\n      __privateGet(this, _animation).update({\n        start: calcRangeValueFromTime(this),\n        duration: this.mediaSeekableEnd - this.mediaSeekableStart,\n        playbackRate: this.mediaPlaybackRate\n      });\n      __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n      updateAriaValueText(this);\n    } else if (attrName === MediaUIAttributes.MEDIA_BUFFERED) {\n      this.updateBufferedBar();\n    }\n    if (attrName === MediaUIAttributes.MEDIA_DURATION || attrName === MediaUIAttributes.MEDIA_SEEKABLE) {\n      this.mediaChaptersCues = __privateGet(this, _mediaChaptersCues);\n      this.updateBar();\n    }\n  }\n  get mediaChaptersCues() {\n    return __privateGet(this, _mediaChaptersCues);\n  }\n  set mediaChaptersCues(value) {\n    var _a;\n    __privateSet(this, _mediaChaptersCues, value);\n    this.updateSegments(\n      (_a = __privateGet(this, _mediaChaptersCues)) == null ? void 0 : _a.map((c) => ({\n        start: calcRangeValueFromTime(this, c.startTime),\n        end: calcRangeValueFromTime(this, c.endTime)\n      }))\n    );\n  }\n  /**\n   * Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  /**\n   * Is the media loading\n   */\n  get mediaLoading() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING);\n  }\n  set mediaLoading(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING, value);\n  }\n  /**\n   *\n   */\n  get mediaDuration() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n  }\n  set mediaDuration(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, value);\n  }\n  /**\n   *\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME);\n  }\n  set mediaCurrentTime(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, value);\n  }\n  /**\n   *\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, 1);\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n  /**\n   * An array of ranges, each range being an array of two numbers.\n   * e.g. [[1, 2], [3, 4]]\n   */\n  get mediaBuffered() {\n    const buffered = this.getAttribute(MediaUIAttributes.MEDIA_BUFFERED);\n    if (!buffered)\n      return [];\n    return buffered.split(\" \").map((timePair) => timePair.split(\":\").map((timeStr) => +timeStr));\n  }\n  set mediaBuffered(list) {\n    if (!list) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_BUFFERED);\n      return;\n    }\n    const strVal = list.map((tuple) => tuple.join(\":\")).join(\" \");\n    this.setAttribute(MediaUIAttributes.MEDIA_BUFFERED, strVal);\n  }\n  /**\n   * Range of values that can be seeked to\n   * An array of two numbers [start, end]\n   */\n  get mediaSeekable() {\n    const seekable = this.getAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n    if (!seekable)\n      return void 0;\n    return seekable.split(\":\").map((time) => +time);\n  }\n  set mediaSeekable(range) {\n    if (range == null) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n      return;\n    }\n    this.setAttribute(MediaUIAttributes.MEDIA_SEEKABLE, range.join(\":\"));\n  }\n  /**\n   *\n   */\n  get mediaSeekableEnd() {\n    var _a;\n    const [, end = this.mediaDuration] = (_a = this.mediaSeekable) != null ? _a : [];\n    return end;\n  }\n  get mediaSeekableStart() {\n    var _a;\n    const [start = 0] = (_a = this.mediaSeekable) != null ? _a : [];\n    return start;\n  }\n  /**\n   * The url of the preview image\n   */\n  get mediaPreviewImage() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE);\n  }\n  set mediaPreviewImage(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE, value);\n  }\n  /**\n   *\n   */\n  get mediaPreviewTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME);\n  }\n  set mediaPreviewTime(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME, value);\n  }\n  /**\n   *\n   */\n  get mediaEnded() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_ENDED);\n  }\n  set mediaEnded(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_ENDED, value);\n  }\n  /* Add a buffered progress bar */\n  updateBar() {\n    super.updateBar();\n    this.updateBufferedBar();\n    this.updateCurrentBox();\n  }\n  updateBufferedBar() {\n    var _a;\n    const buffered = this.mediaBuffered;\n    if (!buffered.length) {\n      return;\n    }\n    let relativeBufferedEnd;\n    if (!this.mediaEnded) {\n      const currentTime = this.mediaCurrentTime;\n      const [, bufferedEnd = this.mediaSeekableStart] = (_a = buffered.find(\n        ([start, end]) => start <= currentTime && currentTime <= end\n      )) != null ? _a : [];\n      relativeBufferedEnd = calcRangeValueFromTime(this, bufferedEnd);\n    } else {\n      relativeBufferedEnd = 1;\n    }\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \"#buffered\");\n    style.setProperty(\"width\", `${relativeBufferedEnd * 100}%`);\n  }\n  updateCurrentBox() {\n    const currentSlot = this.shadowRoot.querySelector(\n      'slot[name=\"current\"]'\n    );\n    if (!currentSlot.assignedElements().length)\n      return;\n    const currentRailRule = getOrInsertCSSRule(\n      this.shadowRoot,\n      \"#current-rail\"\n    );\n    const currentBoxRule = getOrInsertCSSRule(\n      this.shadowRoot,\n      '[part~=\"current-box\"]'\n    );\n    const rects = __privateMethod(this, _getElementRects, getElementRects_fn).call(this, __privateGet(this, _currentBox));\n    const boxPos = __privateMethod(this, _getBoxPosition, getBoxPosition_fn).call(this, rects, this.range.valueAsNumber);\n    const boxShift = __privateMethod(this, _getBoxShiftPosition, getBoxShiftPosition_fn).call(this, rects, this.range.valueAsNumber);\n    currentRailRule.style.transform = `translateX(${boxPos})`;\n    currentRailRule.style.setProperty(\"--_range-width\", `${rects.range.width}`);\n    currentBoxRule.style.setProperty(\"--_box-shift\", `${boxShift}`);\n    currentBoxRule.style.setProperty(\"--_box-width\", `${rects.box.width}px`);\n    currentBoxRule.style.setProperty(\"visibility\", \"initial\");\n  }\n  handleEvent(evt) {\n    super.handleEvent(evt);\n    switch (evt.type) {\n      case \"input\":\n        __privateMethod(this, _seekRequest, seekRequest_fn).call(this);\n        break;\n      case \"pointermove\":\n        __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, evt);\n        break;\n      case \"pointerup\":\n        if (__privateGet(this, _isPointerDown))\n          __privateSet(this, _isPointerDown, false);\n        break;\n      case \"pointerdown\":\n        __privateSet(this, _isPointerDown, true);\n        break;\n      case \"pointerleave\":\n        __privateMethod(this, _previewRequest, previewRequest_fn).call(this, null);\n        break;\n      case \"transitionstart\":\n        if (containsComposedNode(evt.target, this)) {\n          setTimeout(() => __privateMethod(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this), 0);\n        }\n        break;\n    }\n  }\n}\n_rootNode = new WeakMap();\n_animation = new WeakMap();\n_boxes = new WeakMap();\n_previewTime = new WeakMap();\n_previewBox = new WeakMap();\n_currentBox = new WeakMap();\n_boxPaddingLeft = new WeakMap();\n_boxPaddingRight = new WeakMap();\n_mediaChaptersCues = new WeakMap();\n_isPointerDown = new WeakMap();\n_toggleRangeAnimation = new WeakSet();\ntoggleRangeAnimation_fn = function() {\n  if (__privateMethod(this, _shouldRangeAnimate, shouldRangeAnimate_fn).call(this)) {\n    __privateGet(this, _animation).start();\n  } else {\n    __privateGet(this, _animation).stop();\n  }\n};\n_shouldRangeAnimate = new WeakSet();\nshouldRangeAnimate_fn = function() {\n  return this.isConnected && !this.mediaPaused && !this.mediaLoading && !this.mediaEnded && this.mediaSeekableEnd > 0 && isElementVisible(this);\n};\n_updateRange = new WeakMap();\n_getElementRects = new WeakSet();\ngetElementRects_fn = function(box) {\n  var _a;\n  const bounds = (_a = this.getAttribute(\"bounds\") ? closestComposedNode(this, `#${this.getAttribute(\"bounds\")}`) : this.parentElement) != null ? _a : this;\n  const boundsRect = bounds.getBoundingClientRect();\n  const rangeRect = this.range.getBoundingClientRect();\n  const width = box.offsetWidth;\n  const min = -(rangeRect.left - boundsRect.left - width / 2);\n  const max = boundsRect.right - rangeRect.left - width / 2;\n  return {\n    box: { width, min, max },\n    bounds: boundsRect,\n    range: rangeRect\n  };\n};\n_getBoxPosition = new WeakSet();\ngetBoxPosition_fn = function(rects, ratio) {\n  let position = `${ratio * 100}%`;\n  const { width, min, max } = rects.box;\n  if (!width)\n    return position;\n  if (!Number.isNaN(min)) {\n    const pad = `var(--media-box-padding-left)`;\n    const minPos = `calc(1 / var(--_range-width) * 100 * ${min}% + ${pad})`;\n    position = `max(${minPos}, ${position})`;\n  }\n  if (!Number.isNaN(max)) {\n    const pad = `var(--media-box-padding-right)`;\n    const maxPos = `calc(1 / var(--_range-width) * 100 * ${max}% - ${pad})`;\n    position = `min(${position}, ${maxPos})`;\n  }\n  return position;\n};\n_getBoxShiftPosition = new WeakSet();\ngetBoxShiftPosition_fn = function(rects, ratio) {\n  const { width, min, max } = rects.box;\n  const pointerX = ratio * rects.range.width;\n  if (pointerX < min + __privateGet(this, _boxPaddingLeft)) {\n    const offset = rects.range.left - rects.bounds.left - __privateGet(this, _boxPaddingLeft);\n    return `${pointerX - width / 2 + offset}px`;\n  }\n  if (pointerX > max - __privateGet(this, _boxPaddingRight)) {\n    const offset = rects.bounds.right - rects.range.right - __privateGet(this, _boxPaddingRight);\n    return `${pointerX + width / 2 - offset - rects.range.width}px`;\n  }\n  return 0;\n};\n_handlePointerMove = new WeakSet();\nhandlePointerMove_fn = function(evt) {\n  const isOverBoxes = [...__privateGet(this, _boxes)].some(\n    (b) => evt.composedPath().includes(b)\n  );\n  if (!this.dragging && (isOverBoxes || !evt.composedPath().includes(this))) {\n    __privateMethod(this, _previewRequest, previewRequest_fn).call(this, null);\n    return;\n  }\n  const duration = this.mediaSeekableEnd;\n  if (!duration)\n    return;\n  const previewRailRule = getOrInsertCSSRule(\n    this.shadowRoot,\n    \"#preview-rail\"\n  );\n  const previewBoxRule = getOrInsertCSSRule(\n    this.shadowRoot,\n    '[part~=\"preview-box\"]'\n  );\n  const rects = __privateMethod(this, _getElementRects, getElementRects_fn).call(this, __privateGet(this, _previewBox));\n  let pointerRatio = (evt.clientX - rects.range.left) / rects.range.width;\n  pointerRatio = Math.max(0, Math.min(1, pointerRatio));\n  const boxPos = __privateMethod(this, _getBoxPosition, getBoxPosition_fn).call(this, rects, pointerRatio);\n  const boxShift = __privateMethod(this, _getBoxShiftPosition, getBoxShiftPosition_fn).call(this, rects, pointerRatio);\n  previewRailRule.style.transform = `translateX(${boxPos})`;\n  previewRailRule.style.setProperty(\"--_range-width\", `${rects.range.width}`);\n  previewBoxRule.style.setProperty(\"--_box-shift\", `${boxShift}`);\n  previewBoxRule.style.setProperty(\"--_box-width\", `${rects.box.width}px`);\n  const diff = Math.round(__privateGet(this, _previewTime)) - Math.round(pointerRatio * duration);\n  if (Math.abs(diff) < 1 && pointerRatio > 0.01 && pointerRatio < 0.99)\n    return;\n  __privateSet(this, _previewTime, pointerRatio * duration);\n  __privateMethod(this, _previewRequest, previewRequest_fn).call(this, __privateGet(this, _previewTime));\n};\n_previewRequest = new WeakSet();\npreviewRequest_fn = function(detail) {\n  this.dispatchEvent(\n    new globalThis.CustomEvent(MediaUIEvents.MEDIA_PREVIEW_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    })\n  );\n};\n_seekRequest = new WeakSet();\nseekRequest_fn = function() {\n  __privateGet(this, _animation).stop();\n  const detail = calcTimeFromRangeValue(this);\n  this.dispatchEvent(\n    new globalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    })\n  );\n};\nMediaTimeRange.shadowRootOptions = { mode: \"open\" };\nMediaTimeRange.getTemplateHTML = getTemplateHTML;\nif (!globalThis.customElements.get(\"media-time-range\")) {\n  globalThis.customElements.define(\"media-time-range\", MediaTimeRange);\n}\nvar media_time_range_default = MediaTimeRange;\nexport {\n  media_time_range_default as default\n};\n","import { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaChromeRange } from \"./media-chrome-range.js\";\nimport { MediaUIAttributes, MediaUIEvents } from \"./constants.js\";\nimport { t } from \"./utils/i18n.js\";\nimport {\n  getBooleanAttr,\n  getNumericAttr,\n  getStringAttr,\n  setBooleanAttr,\n  setNumericAttr,\n  setStringAttr\n} from \"./utils/element-utils.js\";\nconst DEFAULT_VOLUME = 1;\nconst toVolume = (el) => {\n  if (el.mediaMuted)\n    return 0;\n  return el.mediaVolume;\n};\nconst formatAsPercentString = (value) => `${Math.round(value * 100)}%`;\nclass MediaVolumeRange extends MediaChromeRange {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_VOLUME,\n      MediaUIAttributes.MEDIA_MUTED,\n      MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE\n    ];\n  }\n  constructor() {\n    super();\n    this.range.addEventListener(\"input\", () => {\n      const detail = this.range.value;\n      const evt = new globalThis.CustomEvent(\n        MediaUIEvents.MEDIA_VOLUME_REQUEST,\n        {\n          composed: true,\n          bubbles: true,\n          detail\n        }\n      );\n      this.dispatchEvent(evt);\n    });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.range.setAttribute(\"aria-label\", t(\"volume\"));\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_VOLUME || attrName === MediaUIAttributes.MEDIA_MUTED) {\n      this.range.valueAsNumber = toVolume(this);\n      this.range.setAttribute(\n        \"aria-valuetext\",\n        formatAsPercentString(this.range.valueAsNumber)\n      );\n      this.updateBar();\n    }\n  }\n  /**\n   *\n   */\n  get mediaVolume() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_VOLUME, DEFAULT_VOLUME);\n  }\n  set mediaVolume(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_VOLUME, value);\n  }\n  /**\n   * Is the media currently muted\n   */\n  get mediaMuted() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_MUTED);\n  }\n  set mediaMuted(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_MUTED, value);\n  }\n  /**\n   * The volume unavailability state\n   */\n  get mediaVolumeUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE);\n  }\n  set mediaVolumeUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE, value);\n  }\n}\nif (!globalThis.customElements.get(\"media-volume-range\")) {\n  globalThis.customElements.define(\"media-volume-range\", MediaVolumeRange);\n}\nvar media_volume_range_default = MediaVolumeRange;\nexport {\n  media_volume_range_default as default\n};\n","import { MediaChromeButton } from \"./media-chrome-button.js\";\nimport { globalThis } from \"./utils/server-safe-globals.js\";\nimport { MediaUIEvents, MediaUIAttributes } from \"./constants.js\";\nimport { getBooleanAttr, setBooleanAttr } from \"./utils/element-utils.js\";\nimport { t } from \"./utils/i18n.js\";\nfunction getSlotTemplateHTML(_attrs) {\n  return (\n    /*html*/\n    `\n      <style>\n        :host {\n          min-width: 4ch;\n          padding: var(--media-button-padding, var(--media-control-padding, 10px 5px));\n          width: 100%;\n          display: grid;\n          grid-template-columns: 1fr auto;\n          gap: 1rem;\n          font-weight: var(--media-button-font-weight, normal);\n        }\n\n        #checked-indicator {\n          display: none;\n        }\n\n        :host([${MediaUIAttributes.MEDIA_LOOP}]) #checked-indicator {\n          display: block;\n        }\n      </style>\n      \n      <span id=\"icon\">\n     </span>\n\n      <div id=\"checked-indicator\">\n        <svg aria-hidden=\"true\" viewBox=\"0 1 24 24\" part=\"checked-indicator indicator\">\n          <path d=\"m10 15.17 9.193-9.191 1.414 1.414-10.606 10.606-6.364-6.364 1.414-1.414 4.95 4.95Z\"/>\n        </svg>\n      </div>\n    `\n  );\n}\nfunction getTooltipContentHTML() {\n  return t(\"Loop\");\n}\nclass MediaLoopButton extends MediaChromeButton {\n  constructor() {\n    super(...arguments);\n    this.container = null;\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_LOOP];\n  }\n  connectedCallback() {\n    var _a;\n    super.connectedCallback();\n    this.container = ((_a = this.shadowRoot) == null ? void 0 : _a.querySelector(\"#icon\")) || null;\n    if (this.container) {\n      this.container.textContent = t(\"Loop\");\n    }\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_LOOP && this.container) {\n      this.setAttribute(\n        \"aria-checked\",\n        this.mediaLoop ? \"true\" : \"false\"\n      );\n    }\n  }\n  get mediaLoop() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOOP);\n  }\n  set mediaLoop(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_LOOP, value);\n  }\n  handleClick() {\n    const looping = !this.mediaLoop;\n    const evt = new globalThis.CustomEvent(MediaUIEvents.MEDIA_LOOP_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail: looping\n    });\n    this.dispatchEvent(evt);\n  }\n}\nMediaLoopButton.getSlotTemplateHTML = getSlotTemplateHTML;\nMediaLoopButton.getTooltipContentHTML = getTooltipContentHTML;\nif (!globalThis.customElements.get(\"media-loop-button\")) {\n  globalThis.customElements.define(\"media-loop-button\", MediaLoopButton);\n}\nvar media_loop_button_default = MediaLoopButton;\nexport {\n  media_loop_button_default as default\n};\n"]}