{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/K2Z3xiRzSZ81YAA4hgqV/iEmpFfNmuR3MOjNMA6dM/QLB9kVNqx.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignButtonBanner/LiveCampaignButtonBanner.module.css.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/OnAirIndicator/OnAirIndicator.module.css.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/OnAirIndicator/OnAirIndicator.constants.effect.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/OnAirIndicator/OnAirIndicator.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignBanner.constants.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignBanner.utils.js", "ssg:https://asset.29cm.co.kr/contents/framer/hooks/useCountdown.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignStatusText/LiveCampaignStatusText.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignButtonBanner/LiveCampaignButtonBanner.utils.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignButtonBanner/LiveCampaignbuttonBanner.hooks.event.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignButtonBanner/LiveCampaignButtonBanner.hooks.js", "ssg:https://asset.29cm.co.kr/contents/framer/styles/spacing.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignButtonBanner/LiveCampaignButtonBanner.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignQRCodeBanner/LiveCampaignQRCodeBanner.module.css.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignQRCodeBanner/LiveCampaignQRCodeBanner.js", "ssg:https://asset.29cm.co.kr/contents/framer/hooks/fetchers/useFetchLiveCampaign.js", "ssg:https://asset.29cm.co.kr/contents/framer/hooks/useLiveStatus.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignBanner.js", "ssg:https://framerusercontent.com/modules/kLEHE0doU5XnJ9jP3SSX/00N4kr4GA2lyzIEYYNwO/TestLiveCampaignBanner.js", "ssg:https://asset.29cm.co.kr/contents/framer/node_modules/hls.js/dist/hls.js", "ssg:https://asset.29cm.co.kr/contents/framer/utils/hls.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.utils.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.module.css.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.hooks.event.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.hooks.js", "ssg:https://asset.29cm.co.kr/contents/framer/apis/live-campaign/LiveCampaignApiService.types.js", "ssg:https://asset.29cm.co.kr/contents/framer/types/live-campaign.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.constants.js", "ssg:https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.js", "ssg:https://framerusercontent.com/modules/yr70XBNJvPzIS15CP2zK/jVDP4pPZiCu0xmHDMBov/TestLiveCampaignVideo.js", "ssg:https://framerusercontent.com/modules/ykRNvmQwLIaD6XBGfVtx/Gpzv3gHqa5N9BcHGyTxK/I2oGGFThg.js", "ssg:https://framerusercontent.com/modules/8P05femeH8RzMUonAqOy/wNB5f15jRVvRioeUjc4d/MCT7neHeu.js", "ssg:https://ga.jspm.io/npm:canvas-confetti@1.4.0/src/confetti.js", "ssg:https://framerusercontent.com/modules/UDqUMLtu1rxmz1dLR8Yk/q5FUYqxHt1XrM5PCwlbx/Confetti.js", "ssg:https://framerusercontent.com/modules/x9moSLg9Q0cqb0PEzjTQ/6Hfuq3mvOV0HnIPhReoL/hoa12SBgY.js"],
  "sourcesContent": ["// Generated by Framer (3ae0a1a)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,Image,Link,RichText,SVG,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";const cycleOrder=[\"FGn4yOsTU\",\"PoZoea8T4\"];const serializationHash=\"framer-4NT53\";const variantClassNames={FGn4yOsTU:\"framer-v-u11rrh\",PoZoea8T4:\"framer-v-53iw27\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const toResponsiveImage=value=>{if(typeof value===\"object\"&&value!==null&&typeof value.src===\"string\"){return value;}return typeof value===\"string\"?{src:value}:undefined;};const negate=value=>{return!value;};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const humanReadableVariantMap={MO:\"FGn4yOsTU\",PC:\"PoZoea8T4\"};const getProps=({background,cardColor,height,iconBlack,id,link,logo,price,title,width,...props})=>{var _ref,_ref1,_ref2,_ref3,_humanReadableVariantMap_props_variant,_ref4,_ref5,_ref6;return{...props,ChOOBYCm8:(_ref=price!==null&&price!==void 0?price:props.ChOOBYCm8)!==null&&_ref!==void 0?_ref:\"10,000\uC6D0 \uD560\uC778\",IPQqxIy38:(_ref1=title!==null&&title!==void 0?title:props.IPQqxIy38)!==null&&_ref1!==void 0?_ref1:\"\uC804\uBD81\uC740\uD589 JB\uCE74\uB4DC\uB85C \uACB0\uC81C\uD558\uBA74\",mFBeyCGUA:link!==null&&link!==void 0?link:props.mFBeyCGUA,SFWvDmfwf:(_ref2=iconBlack!==null&&iconBlack!==void 0?iconBlack:props.SFWvDmfwf)!==null&&_ref2!==void 0?_ref2:true,SigzId2ik:(_ref3=logo!==null&&logo!==void 0?logo:props.SigzId2ik)!==null&&_ref3!==void 0?_ref3:{src:\"https://framerusercontent.com/images/qIfbzBUj7epGZH6ouYs8qItb0Io.png\"},variant:(_ref4=(_humanReadableVariantMap_props_variant=humanReadableVariantMap[props.variant])!==null&&_humanReadableVariantMap_props_variant!==void 0?_humanReadableVariantMap_props_variant:props.variant)!==null&&_ref4!==void 0?_ref4:\"FGn4yOsTU\",YGgaq9ZpE:(_ref5=cardColor!==null&&cardColor!==void 0?cardColor:props.YGgaq9ZpE)!==null&&_ref5!==void 0?_ref5:\"rgb(0, 130, 201)\",ZzCSuM_Y9:(_ref6=background!==null&&background!==void 0?background:props.ZzCSuM_Y9)!==null&&_ref6!==void 0?_ref6:\"rgb(244, 244, 244)\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,ZzCSuM_Y9,YGgaq9ZpE,IPQqxIy38,ChOOBYCm8,SigzId2ik,mFBeyCGUA,SFWvDmfwf,...restProps}=getProps(props);const{baseVariant,classNames,gestureHandlers,gestureVariant,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"FGn4yOsTU\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const ref1=React.useRef(null);const visible=negate(SFWvDmfwf);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-u11rrh\",className,classNames),\"data-framer-name\":\"MO\",layoutDependency:layoutDependency,layoutId:\"FGn4yOsTU\",ref:ref!==null&&ref!==void 0?ref:ref1,style:{backgroundColor:ZzCSuM_Y9,borderBottomLeftRadius:4,borderBottomRightRadius:4,borderTopLeftRadius:4,borderTopRightRadius:4,...style},...addPropertyOverrides({PoZoea8T4:{\"data-framer-name\":\"PC\"}},baseVariant,gestureVariant),children:[/*#__PURE__*/_jsxs(motion.div,{className:\"framer-v2x4xr\",\"data-framer-name\":\"Header\",layoutDependency:layoutDependency,layoutId:\"zItEVxe8t\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgUmVndWxhcg==\",\"--framer-font-family\":'\"Pretendard Regular\", \"Pretendard Regular Placeholder\", sans-serif',\"--framer-font-size\":\"14px\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(71, 71, 71))\"},children:\"\uC804\uBD81\uC740\uD589 JB\uCE74\uB4DC\uB85C \uACB0\uC81C\uD558\uBA74\"})}),className:\"framer-1rxi22u\",fonts:[\"CUSTOM;Pretendard Regular\"],layoutDependency:layoutDependency,layoutId:\"nAzhNpAWi\",style:{\"--extracted-r6o4lv\":\"rgb(71, 71, 71)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:IPQqxIy38,verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({PoZoea8T4:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgUmVndWxhcg==\",\"--framer-font-family\":'\"Pretendard Regular\", \"Pretendard Regular Placeholder\", sans-serif',\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(71, 71, 71))\"},children:\"\uC804\uBD81\uC740\uD589 JB\uCE74\uB4DC\uB85C \uACB0\uC81C\uD558\uBA74\"})})}},baseVariant,gestureVariant)}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgQm9sZA==\",\"--framer-font-family\":'\"Pretendard Bold\", \"Pretendard Bold Placeholder\", sans-serif',\"--framer-font-size\":\"24px\",\"--framer-line-height\":\"1.4em\",\"--framer-text-alignment\":\"center\",\"--framer-text-transform\":\"uppercase\"},children:\"10,000\"})}),className:\"framer-phwg3c\",fonts:[\"CUSTOM;Pretendard Bold\"],layoutDependency:layoutDependency,layoutId:\"sNukY4VCA\",style:{\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:ChOOBYCm8,verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({PoZoea8T4:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgQm9sZA==\",\"--framer-font-family\":'\"Pretendard Bold\", \"Pretendard Bold Placeholder\", sans-serif',\"--framer-font-size\":\"28px\",\"--framer-line-height\":\"1.4em\",\"--framer-text-alignment\":\"center\",\"--framer-text-transform\":\"uppercase\"},children:\"10,000\"})})}},baseVariant,gestureVariant)})]}),/*#__PURE__*/_jsx(Link,{href:mFBeyCGUA,openInNewTab:true,children:/*#__PURE__*/_jsxs(motion.a,{className:\"framer-1unn2xc framer-cjei7k\",\"data-framer-name\":\"Link\",layoutDependency:layoutDependency,layoutId:\"sp4WS4Od1\",style:{backgroundColor:YGgaq9ZpE},children:[/*#__PURE__*/_jsx(Image,{background:{alt:\"\",fit:\"fit\",intrinsicHeight:60,intrinsicWidth:200,pixelHeight:60,pixelWidth:200,sizes:`max(${(componentViewport===null||componentViewport===void 0?void 0:componentViewport.width)||\"100vw\"} - 24px, 1px)`,...toResponsiveImage(SigzId2ik),...{positionX:\"left\",positionY:\"top\"}},className:\"framer-lk6yv\",\"data-framer-name\":\"Logo\",layoutDependency:layoutDependency,layoutId:\"deAwT4iqn\",...addPropertyOverrides({PoZoea8T4:{background:{alt:\"\",fit:\"fit\",intrinsicHeight:60,intrinsicWidth:200,pixelHeight:60,pixelWidth:200,sizes:`max(${(componentViewport===null||componentViewport===void 0?void 0:componentViewport.width)||\"100vw\"} - 40px, 1px)`,...toResponsiveImage(SigzId2ik),...{positionX:\"left\",positionY:\"top\"}}}},baseVariant,gestureVariant)}),SFWvDmfwf&&/*#__PURE__*/_jsx(SVG,{className:\"framer-16ilquz\",\"data-framer-name\":\"graphic\",fill:\"black\",intrinsicHeight:24,intrinsicWidth:24,layoutDependency:layoutDependency,layoutId:\"DdYyPAKEy\",svg:'<svg width=\"24\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"m17.414 12-8.707 8.707-1.414-1.414L14.586 12 7.293 4.707l1.414-1.414L17.414 12Z\" fill=\"#000\"/></svg>',withExternalLayout:true}),visible&&/*#__PURE__*/_jsx(motion.div,{className:\"framer-bwj6as\",layoutDependency:layoutDependency,layoutId:\"cx9MQma6O\",children:/*#__PURE__*/_jsx(SVG,{className:\"framer-1vtoyyw\",\"data-framer-name\":\"graphic\",layout:\"position\",layoutDependency:layoutDependency,layoutId:\"G9BmhpUUi\",opacity:1,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 16 16\"><path d=\"M 11.609 8 L 5.805 13.805 L 4.862 12.862 L 9.724 8 L 4.862 3.138 L 5.805 2.195 Z\" fill=\"rgb(255, 255, 255)\"></path></svg>',svgContentId:10090044221,withExternalLayout:true})})]})})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-4NT53.framer-cjei7k, .framer-4NT53 .framer-cjei7k { display: block; }\",\".framer-4NT53.framer-u11rrh { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; height: 124px; justify-content: space-between; overflow: hidden; padding: 0px; position: relative; width: 220px; will-change: var(--framer-will-change-override, transform); }\",\".framer-4NT53 .framer-v2x4xr { align-content: flex-start; align-items: flex-start; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 4px; height: auto; justify-content: center; overflow: hidden; padding: 12px 0px 0px 12px; position: relative; width: 100%; }\",\".framer-4NT53 .framer-1rxi22u, .framer-4NT53 .framer-phwg3c { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-4NT53 .framer-1unn2xc { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; height: auto; justify-content: space-between; overflow: hidden; padding: 6px 12px 6px 12px; position: relative; text-decoration: none; width: 100%; }\",\".framer-4NT53 .framer-lk6yv { flex: 1 0 0px; height: 18px; overflow: hidden; position: relative; width: 1px; }\",\".framer-4NT53 .framer-16ilquz { aspect-ratio: 1 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 16px); position: relative; width: 16px; }\",\".framer-4NT53 .framer-bwj6as { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: min-content; }\",\".framer-4NT53 .framer-1vtoyyw { flex: none; height: 16px; position: relative; width: 16px; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-4NT53 .framer-v2x4xr, .framer-4NT53 .framer-bwj6as { gap: 0px; } .framer-4NT53 .framer-v2x4xr > * { margin: 0px; margin-bottom: calc(4px / 2); margin-top: calc(4px / 2); } .framer-4NT53 .framer-v2x4xr > :first-child { margin-top: 0px; } .framer-4NT53 .framer-v2x4xr > :last-child { margin-bottom: 0px; } .framer-4NT53 .framer-bwj6as > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-4NT53 .framer-bwj6as > :first-child { margin-left: 0px; } .framer-4NT53 .framer-bwj6as > :last-child { margin-right: 0px; } }\",\".framer-4NT53.framer-v-53iw27.framer-u11rrh { aspect-ratio: 1.7757009345794392 / 1; height: var(--framer-aspect-ratio-supported, 152px); width: 270px; }\",\".framer-4NT53.framer-v-53iw27 .framer-v2x4xr { padding: 20px 0px 0px 20px; }\",\".framer-4NT53.framer-v-53iw27 .framer-1unn2xc { padding: 12px 20px 12px 20px; }\",\".framer-4NT53.framer-v-53iw27 .framer-lk6yv { height: 32px; }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 124\n * @framerIntrinsicWidth 220\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]},\"PoZoea8T4\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerVariables {\"ZzCSuM_Y9\":\"background\",\"YGgaq9ZpE\":\"cardColor\",\"IPQqxIy38\":\"title\",\"ChOOBYCm8\":\"price\",\"SigzId2ik\":\"logo\",\"mFBeyCGUA\":\"link\",\"SFWvDmfwf\":\"iconBlack\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerQLB9kVNqx=withCSS(Component,css,\"framer-4NT53\");export default FramerQLB9kVNqx;FramerQLB9kVNqx.displayName=\"CreditCardPromotionBanner\";FramerQLB9kVNqx.defaultProps={height:124,width:220};addPropertyControls(FramerQLB9kVNqx,{variant:{options:[\"FGn4yOsTU\",\"PoZoea8T4\"],optionTitles:[\"MO\",\"PC\"],title:\"Variant\",type:ControlType.Enum},ZzCSuM_Y9:{defaultValue:\"rgb(244, 244, 244)\",title:\"Background\",type:ControlType.Color},YGgaq9ZpE:{defaultValue:\"rgb(0, 130, 201)\",title:\"CardColor\",type:ControlType.Color},IPQqxIy38:{defaultValue:\"\uC804\uBD81\uC740\uD589 JB\uCE74\uB4DC\uB85C \uACB0\uC81C\uD558\uBA74\",displayTextArea:false,title:\"Title\",type:ControlType.String},ChOOBYCm8:{defaultValue:\"10,000\uC6D0 \uD560\uC778\",displayTextArea:false,title:\"Price\",type:ControlType.String},SigzId2ik:{__defaultAssetReference:\"data:framer/asset-reference,qIfbzBUj7epGZH6ouYs8qItb0Io.png?originalFilename=%C3%A1%C2%84%C2%8C%C3%A1%C2%85%C2%A6%C3%A1%C2%84%C2%86%C3%A1%C2%85%C2%A9%C3%A1%C2%86%C2%A8-%C3%A1%C2%84%C2%8B%C3%A1%C2%85%C2%A5%C3%A1%C2%86%C2%B9%C3%A1%C2%84%C2%8B%C3%A1%C2%85%C2%B3%C3%A1%C2%86%C2%B7-1.png&preferredSize=auto\",title:\"Logo\",type:ControlType.ResponsiveImage},mFBeyCGUA:{title:\"Link\",type:ControlType.Link},SFWvDmfwf:{defaultValue:true,title:\"Icon Black\",type:ControlType.Boolean}});addFonts(FramerQLB9kVNqx,[{explicitInter:true,fonts:[{family:\"Pretendard Regular\",source:\"custom\",url:\"https://framerusercontent.com/assets/Rs6Z4930tvYq1KEhYJKErYwTPE.woff2\"},{family:\"Pretendard Bold\",source:\"custom\",url:\"https://framerusercontent.com/assets/crzkHU25cJonwO6VK1IAv8AG9g.woff2\"}]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerQLB9kVNqx\",\"slots\":[],\"annotations\":{\"framerDisplayContentsDiv\":\"false\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"220\",\"framerIntrinsicHeight\":\"124\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]},\\\"PoZoea8T4\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerImmutableVariables\":\"true\",\"framerVariables\":\"{\\\"ZzCSuM_Y9\\\":\\\"background\\\",\\\"YGgaq9ZpE\\\":\\\"cardColor\\\",\\\"IPQqxIy38\\\":\\\"title\\\",\\\"ChOOBYCm8\\\":\\\"price\\\",\\\"SigzId2ik\\\":\\\"logo\\\",\\\"mFBeyCGUA\\\":\\\"link\\\",\\\"SFWvDmfwf\\\":\\\"iconBlack\\\"}\",\"framerComponentViewportWidth\":\"true\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./QLB9kVNqx.map", "(function() {\n  \"use strict\";\n  try {\n    if (typeof document != \"undefined\") {\n      var elementStyle = document.createElement(\"style\");\n      elementStyle.appendChild(document.createTextNode(\"._container_71cqg_1[data-background-type='gradient'] {\\n  /* NOTE:(\uAE40\uD64D\uB3D9) gradient\uAC00 \uC801\uC6A9\uB418\uC5B4 \uC788\uB294 \uACBD\uC6B0 backgroundColor\uC758 \uC635\uC158 \uAC12\uC774 \uC544\uB2C8\uB77C \uAE30\uC874\uC758 \uC2A4\uD0C0\uC77C\uC774 \uC801\uC6A9\uB420 \uC218 \uC788\uB3C4\uB85D !important\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4. */\\n  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.9) 100%) !important;\\n\\n  &[data-theme='light'] {\\n    background: linear-gradient(180deg, rgba(244, 244, 244, 0) 0%, rgba(244, 244, 244, 0.9) 100%) !important;\\n  }\\n}\\n\\n._status_71cqg_10 {\\n  color: #ffffff;\\n\\n  &[data-campaign-status='ONAIR'] {\\n    color: #ff4800;\\n  }\\n\\n  &[data-campaign-status='CLOSED'] {\\n    color: #a0a0a0;\\n  }\\n}\\n\\n._status_71cqg_10[data-theme='light'] {\\n  color: #000000;\\n\\n  &[data-campaign-status='ONAIR'] {\\n    color: #ff4800;\\n  }\\n\\n  &[data-campaign-status='CLOSED'] {\\n    color: #474747;\\n  }\\n}\\n\\n._title_71cqg_34 {\\n  color: #ffffff;\\n}\\n\\n._title_71cqg_34[data-theme='light'] {\\n  color: #000000;\\n}\\n\\n._notice_71cqg_42 {\\n  color: #a0a0a0;\\n}\\n\\n._notice_71cqg_42[data-theme='light'] {\\n  color: #474747;\\n}\\n\\n._buttonText_71cqg_50 {\\n  color: #000000;\\n}\\n\\n._buttonText_71cqg_50[data-theme='light'] {\\n  color: #ffffff;\\n}\"));\n      document.head.appendChild(elementStyle);\n    }\n  } catch (e) {\n    console.error(\"vite-plugin-css-injected-by-js\", e);\n  }\n})();\nconst container = \"_container_71cqg_1\";\nconst status = \"_status_71cqg_10\";\nconst title = \"_title_71cqg_34\";\nconst notice = \"_notice_71cqg_42\";\nconst buttonText = \"_buttonText_71cqg_50\";\nconst css = {\n  container,\n  status,\n  title,\n  notice,\n  buttonText\n};\nexport {\n  buttonText,\n  container,\n  css as default,\n  notice,\n  status,\n  title\n};\n", "(function() {\n  \"use strict\";\n  try {\n    if (typeof document != \"undefined\") {\n      var elementStyle = document.createElement(\"style\");\n      elementStyle.appendChild(document.createTextNode(\"._root_teqst_1 {\\n  position: relative;\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  width: 20px;\\n  height: 20px;\\n}\\n\\n._outerCircle_teqst_10 {\\n  position: absolute;\\n  z-index: 0;\\n  top: 50%;\\n  left: 50%;\\n  transform: translate(-50%, -50%);\\n  border-radius: 50%;\\n  background-color: #ff4800;\\n  opacity: 0.1;\\n}\\n\\n._innerCircle_teqst_21 {\\n  position: absolute;\\n  z-index: 1;\\n  top: 50%;\\n  left: 50%;\\n  transform: translate(-50%, -50%);\\n  border-radius: 50%;\\n  background-color: #ff4800;\\n  opacity: 0.3;\\n}\\n\\n._indicator_teqst_32 {\\n  position: absolute;\\n  z-index: 2;\\n  top: 50%;\\n  left: 50%;\\n  width: 10px;\\n  height: 10px;\\n  transform: translate(-50%, -50%);\\n  border-radius: 50%;\\n  background-color: #ff4800;\\n}\"));\n      document.head.appendChild(elementStyle);\n    }\n  } catch (e) {\n    console.error(\"vite-plugin-css-injected-by-js\", e);\n  }\n})();\nconst root = \"_root_teqst_1\";\nconst outerCircle = \"_outerCircle_teqst_10\";\nconst innerCircle = \"_innerCircle_teqst_21\";\nconst indicator = \"_indicator_teqst_32\";\nconst styles = {\n  root,\n  outerCircle,\n  innerCircle,\n  indicator\n};\nexport {\n  styles as default,\n  indicator,\n  innerCircle,\n  outerCircle,\n  root\n};\n", "const CIRCLE_SIZES = {\n  SMALL_OUTER_CIRCLE_SIZE: [16, 20, 16],\n  LARGE_OUTER_CIRCLE_SIZE: [18, 24, 18],\n  SMALL_INNER_CIRCLE_SIZE: [10, 20, 10],\n  LARGE_INNER_CIRCLE_SIZE: [12, 24, 12]\n};\nconst CIRCLE_OPACITY = {\n  SMALL_OUTER_CIRCLE_OPACITY: [0.2, 0.1, 0.2]\n};\nconst CIRCLE_TRANSITION = {\n  duration: 2,\n  ease: \"easeOut\",\n  repeat: Infinity\n};\nexport {\n  CIRCLE_OPACITY,\n  CIRCLE_SIZES,\n  CIRCLE_TRANSITION\n};\n", "import { jsxs, jsx } from \"react/jsx-runtime\";\nimport { motion } from \"framer-motion\";\nimport styles from \"./OnAirIndicator.module.css.js\";\nimport { CIRCLE_SIZES, CIRCLE_OPACITY, CIRCLE_TRANSITION } from \"./OnAirIndicator.constants.effect.js\";\nconst OnAirIndicator = ({\n  variant\n}) => {\n  return /* @__PURE__ */ jsxs(motion.div, { className: styles.root, children: [\n    /* @__PURE__ */ jsx(motion.div, { className: styles.outerCircle, animate: {\n      width: variant === \"small\" ? CIRCLE_SIZES.SMALL_OUTER_CIRCLE_SIZE : CIRCLE_SIZES.LARGE_OUTER_CIRCLE_SIZE,\n      height: variant === \"small\" ? CIRCLE_SIZES.SMALL_OUTER_CIRCLE_SIZE : CIRCLE_SIZES.LARGE_OUTER_CIRCLE_SIZE,\n      opacity: variant === \"small\" ? CIRCLE_OPACITY.SMALL_OUTER_CIRCLE_OPACITY : void 0\n    }, transition: CIRCLE_TRANSITION, style: {\n      originX: 0.5,\n      originY: 0.5\n    } }),\n    /* @__PURE__ */ jsx(motion.div, { className: styles.innerCircle, animate: {\n      width: variant === \"small\" ? CIRCLE_SIZES.SMALL_INNER_CIRCLE_SIZE : CIRCLE_SIZES.LARGE_INNER_CIRCLE_SIZE,\n      height: variant === \"small\" ? CIRCLE_SIZES.SMALL_INNER_CIRCLE_SIZE : CIRCLE_SIZES.LARGE_INNER_CIRCLE_SIZE\n    }, transition: CIRCLE_TRANSITION, style: {\n      originX: 0.5,\n      originY: 0.5\n    } }),\n    /* @__PURE__ */ jsx(\"div\", { className: styles.indicator })\n  ] });\n};\nexport {\n  OnAirIndicator\n};\n", "var LIVE_STATUS_TEXT = /* @__PURE__ */ ((LIVE_STATUS_TEXT2) => {\n  LIVE_STATUS_TEXT2[\"ONAIR\"] = \"\uC9C0\uAE08 \uB77C\uC774\uBE0C \uC911\";\n  LIVE_STATUS_TEXT2[\"CLOSED\"] = \"\uC885\uB8CC\uB41C \uB77C\uC774\uBE0C\";\n  return LIVE_STATUS_TEXT2;\n})(LIVE_STATUS_TEXT || {});\nvar LIVE_DATE_FORMAT = /* @__PURE__ */ ((LIVE_DATE_FORMAT2) => {\n  LIVE_DATE_FORMAT2[\"WITH_MINUTE\"] = `MM\uC6D4 dd\uC77C eeee HH\uC2DC mm\uBD84 'LIVE'`;\n  LIVE_DATE_FORMAT2[\"DEFAULT\"] = `MM\uC6D4 dd\uC77C eeee HH\uC2DC 'LIVE'`;\n  return LIVE_DATE_FORMAT2;\n})(LIVE_DATE_FORMAT || {});\nconst ACCESS_FROM_APP_MESSAGE = `\uB77C\uC774\uBE0C \uBC29\uC1A1\uC740 APP\uC5D0\uC11C\uB9CC \uC81C\uACF5\uB418\uB294 \uC11C\uBE44\uC2A4\uC608\uC694.\nAPP\uC744 \uC124\uCE58\uD558\uBA74 \uC6F9\uC5D0\uC11C \uC81C\uACF5\uB418\uC9C0 \uC54A\uB294 \uB354 \uB9CE\uC740 \uAE30\uB2A5\uC744 \uC990\uAE38 \uC218 \uC788\uC5B4\uC694.`;\nconst SIMPLE_ACCESS_FROM_APP_MESSAGE = `'\uB77C\uC774\uBE0C \uBC29\uC1A1\uC740 APP \uC804\uC6A9 \uC11C\uBE44\uC2A4\uC608\uC694!\nAPP\uC5D0\uC11C \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694.`;\nconst APP_DOWNLOAD_MESSAGE = \"APP DOWNLOAD\";\nconst LIVE_CAMPAIGN_NOTICE_LIST = [`Push \uC54C\uB9BC \uD5C8\uC6A9 \uD544\uC218`, `\uD558\uB2E8 \uC8FC\uC758\uC0AC\uD56D\uC744 \uBC18\uB4DC\uC2DC \uD655\uC778\uD574\uC8FC\uC138\uC694`];\nvar LIVE_CAMPAIGN_BUTTON_TEXT = /* @__PURE__ */ ((LIVE_CAMPAIGN_BUTTON_TEXT2) => {\n  LIVE_CAMPAIGN_BUTTON_TEXT2[\"TEASING\"] = \"\uC790\uC138\uD788 \uBCF4\uAE30\";\n  LIVE_CAMPAIGN_BUTTON_TEXT2[\"READY\"] = \"\uC54C\uB9BC \uC2E0\uCCAD\uD558\uACE0 \uD61C\uD0DD \uBC1B\uAE30\";\n  LIVE_CAMPAIGN_BUTTON_TEXT2[\"REHEARSAL\"] = \"\uB9AC\uD5C8\uC124 \uC785\uC7A5\uD558\uAE30\";\n  LIVE_CAMPAIGN_BUTTON_TEXT2[\"ONAIR\"] = \"\uB77C\uC774\uBE0C \uBCF4\uB7EC\uAC00\uAE30\";\n  LIVE_CAMPAIGN_BUTTON_TEXT2[\"CLOSED\"] = \"\uB77C\uC774\uBE0C \uB2E4\uC2DC\uBCF4\uAE30\";\n  return LIVE_CAMPAIGN_BUTTON_TEXT2;\n})(LIVE_CAMPAIGN_BUTTON_TEXT || {});\nexport {\n  ACCESS_FROM_APP_MESSAGE,\n  APP_DOWNLOAD_MESSAGE,\n  LIVE_CAMPAIGN_BUTTON_TEXT,\n  LIVE_CAMPAIGN_NOTICE_LIST,\n  LIVE_DATE_FORMAT,\n  LIVE_STATUS_TEXT,\n  SIMPLE_ACCESS_FROM_APP_MESSAGE\n};\n", "import { LIVE_DATE_FORMAT } from \"./LiveCampaignBanner.constants.js\";\nimport { isValid } from \"../../../node_modules/date-fns/isValid.js\";\nimport { getMinutes } from \"../../../node_modules/date-fns/getMinutes.js\";\nimport { formatDate as format } from \"../../../node_modules/date-fns/format.js\";\nimport { parseISO } from \"../../../node_modules/date-fns/parseISO.js\";\nimport { ko } from \"../../../node_modules/date-fns/locale/ko.js\";\nconst formatLiveDate = (scheduledAt) => {\n  const target = parseISO(scheduledAt);\n  if (!isValid(target)) {\n    return \"\";\n  }\n  const minutes = getMinutes(target);\n  return format(target, minutes === 0 ? LIVE_DATE_FORMAT.DEFAULT : LIVE_DATE_FORMAT.WITH_MINUTE, {\n    locale: ko\n  });\n};\nexport {\n  formatLiveDate\n};\n", "import { differenceInMilliseconds } from \"../node_modules/date-fns/differenceInMilliseconds.js\";\nimport { useState } from \"react\";\nimport useInterval from \"../node_modules/react-use/esm/useInterval.js\";\nconst MS_IN_SECOND = 1e3;\nconst useCountdown = (target) => {\n  const [remaining, setRemaining] = useState(differenceInMilliseconds(target, /* @__PURE__ */ new Date()));\n  const isRunning = remaining !== 0;\n  const intervalCallback = () => {\n    const diff = differenceInMilliseconds(target, /* @__PURE__ */ new Date());\n    const isEnd = diff < MS_IN_SECOND;\n    setRemaining(isEnd ? 0 : diff);\n  };\n  useInterval(intervalCallback, isRunning ? MS_IN_SECOND : null);\n  return remaining;\n};\nexport {\n  useCountdown\n};\n", "import { jsx, Fragment } from \"react/jsx-runtime\";\nimport { formatLiveDate } from \"../LiveCampaignBanner.utils.js\";\nimport { LIVE_STATUS_TEXT } from \"../LiveCampaignBanner.constants.js\";\nimport { useCountdown } from \"../../../../hooks/useCountdown.js\";\nimport { formatLiveCountdown } from \"./LiveCampaignStatusText.utils.js\";\nimport { parseISO } from \"../../../../node_modules/date-fns/parseISO.js\";\nconst LiveCampaignStatusText = ({\n  status,\n  scheduledAt\n}) => {\n  const remaining = useCountdown(parseISO(scheduledAt));\n  if (status === \"NOT_EXIST\") {\n    return null;\n  }\n  if (status === \"READY\" || status === \"TEASING\") {\n    return /* @__PURE__ */ jsx(Fragment, { children: formatLiveDate(scheduledAt) });\n  }\n  if (status === \"REHEARSAL\") {\n    return /* @__PURE__ */ jsx(Fragment, { children: formatLiveCountdown(remaining) });\n  }\n  return /* @__PURE__ */ jsx(Fragment, { children: LIVE_STATUS_TEXT[status] });\n};\nexport {\n  LiveCampaignStatusText\n};\n", "import { LIVE_CAMPAIGN_BUTTON_TEXT } from \"../LiveCampaignBanner.constants.js\";\nconst getLiveCampaignButtonText = (status) => {\n  switch (status) {\n    case \"TEASING\":\n    case \"READY\":\n    case \"REHEARSAL\":\n    case \"ONAIR\":\n    case \"CLOSED\":\n      return LIVE_CAMPAIGN_BUTTON_TEXT[status];\n    default:\n      return \"\";\n  }\n};\nexport {\n  getLiveCampaignButtonText\n};\n", "import { useAnalytics } from \"../../../../hooks/analytics/useAnalytics.js\";\nconst useTrackClickPlayLiveContent = () => {\n  const {\n    trackAmplitude\n  } = useAnalytics();\n  const trackClickPlayLiveContent = (campaignKey) => {\n    const properties = {\n      campaign_key: campaignKey\n    };\n    trackAmplitude(\"click_play_live_content\", properties);\n  };\n  return {\n    trackClickPlayLiveContent\n  };\n};\nconst useTrackSubscribeLiveContent = () => {\n  const {\n    trackAmplitude\n  } = useAnalytics();\n  const trackSubscribeLiveContent = (campaignKey) => {\n    const properties = {\n      campaign_key: campaignKey\n    };\n    trackAmplitude(\"subscribe_live_content\", properties);\n  };\n  return {\n    trackSubscribeLiveContent\n  };\n};\nexport {\n  useTrackClickPlayLiveContent,\n  useTrackSubscribeLiveContent\n};\n", "import { useNotification } from \"../../../primitives/Notification/Notification.hooks.js\";\nimport { isWebview } from \"../../../../utils/device.js\";\nimport { SIMPLE_ACCESS_FROM_APP_MESSAGE } from \"../LiveCampaignBanner.constants.js\";\nimport { useAppLinkDialog } from \"../../../@shared/dialogs/AppLinkDialog/AppLinkDialog.hooks.js\";\nimport { useTrackSubscribeLiveContent, useTrackClickPlayLiveContent } from \"./LiveCampaignbuttonBanner.hooks.event.js\";\nconst useLiveButtonAction = (status, campaign, teasingContent) => {\n  const {\n    trackSubscribeLiveContent\n  } = useTrackSubscribeLiveContent();\n  const {\n    trackClickPlayLiveContent\n  } = useTrackClickPlayLiveContent();\n  const {\n    isRegistered,\n    registerNotification,\n    notifyAlreadyRegistered\n  } = useNotification(campaign == null ? void 0 : campaign.campaignKey, {\n    bypassNotificationEventTracking: true,\n    onNotificationEnabled: () => {\n      if (!campaign) {\n        return;\n      }\n      trackSubscribeLiveContent(campaign.campaignKey);\n    }\n  });\n  const appLinkDialog = useAppLinkDialog({\n    content: SIMPLE_ACCESS_FROM_APP_MESSAGE,\n    displayDesktopQRCode: false\n  });\n  const handleClick = () => {\n    if (status === \"NOT_EXIST\" || !campaign) {\n      return;\n    }\n    if (status === \"TEASING\") {\n      document.location.href = isWebview() ? `app29cm://web/${teasingContent}` : teasingContent;\n      return;\n    }\n    if (status === \"READY\" && !isRegistered) {\n      registerNotification();\n      return;\n    }\n    if (status === \"READY\" && isRegistered) {\n      notifyAlreadyRegistered();\n      return;\n    }\n    if (!isWebview()) {\n      appLinkDialog.show();\n      return;\n    }\n    trackClickPlayLiveContent(campaign.campaignKey);\n    document.location.href = `app29cm://content/live/${campaign.campaignKey}`;\n  };\n  return {\n    handleClick\n  };\n};\nexport {\n  useLiveButtonAction\n};\n", "const spacing = (size, direction) => {\n  return direction === \"horizontal\" ? {\n    width: size\n  } : {\n    height: size\n  };\n};\nexport {\n  spacing\n};\n", "import { jsxs, Fragment, jsx } from \"react/jsx-runtime\";\nimport css from \"./LiveCampaignButtonBanner.module.css.js\";\nimport { OnAirIndicator } from \"../OnAirIndicator/OnAirIndicator.js\";\nimport { LiveCampaignStatusText } from \"../LiveCampaignStatusText/LiveCampaignStatusText.js\";\nimport { LIVE_CAMPAIGN_NOTICE_LIST } from \"../LiveCampaignBanner.constants.js\";\nimport { getLiveCampaignButtonText } from \"./LiveCampaignButtonBanner.utils.js\";\nimport { useLiveButtonAction } from \"./LiveCampaignButtonBanner.hooks.js\";\nimport { createUseStyles } from \"../../../../styles/createUseStyle.js\";\nimport { spacing } from \"../../../../styles/spacing.js\";\nimport { Button as Default } from \"../../../@shared/Button/Button.js\";\nconst LiveCampaignButtonBanner = ({\n  campaign,\n  status,\n  title,\n  backgroundType,\n  backgroundColor,\n  teasingContent,\n  theme\n}) => {\n  const {\n    styles\n  } = useStyles();\n  const buttonText = getLiveCampaignButtonText(status);\n  const {\n    handleClick\n  } = useLiveButtonAction(status, campaign, teasingContent);\n  const shouldRenderNotices = !teasingContent;\n  const hasTitle = Boolean(title);\n  return /* @__PURE__ */ jsxs(\"div\", { className: css.container, style: {\n    ...styles.container,\n    // NOTE:(\uAE40\uD64D\uB3D9) 24. 4Q \uC694\uAD6C\uC0AC\uD56D - \uD0C0\uC774\uD2C0\uC758 \uC720\uBB34\uC5D0 \uB530\uB77C top, bottom \uD328\uB529 \uAC12\uC774 \uB2EC\uB77C\uC9D1\uB2C8\uB2E4.\n    padding: hasTitle ? \"40px 32px 40px\" : \"0px 32px\",\n    backgroundColor\n  }, \"data-background-type\": backgroundType, \"data-theme\": theme, children: [\n    hasTitle ? /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(\"h1\", { className: css.title, style: styles.title, \"data-theme\": theme, children: title }),\n      /* @__PURE__ */ jsx(\"div\", { style: spacing(8) })\n    ] }) : null,\n    /* @__PURE__ */ jsxs(\"div\", { style: styles.statusContainer, children: [\n      status === \"ONAIR\" ? /* @__PURE__ */ jsx(OnAirIndicator, { variant: \"small\" }) : null,\n      /* @__PURE__ */ jsx(\"span\", { className: css.status, style: styles.status, \"data-campaign-status\": status, \"data-theme\": theme, children: /* @__PURE__ */ jsx(LiveCampaignStatusText, { status, scheduledAt: (campaign == null ? void 0 : campaign.scheduledAt) ?? \"\" }) })\n    ] }),\n    /* @__PURE__ */ jsx(\"div\", { style: spacing(14) }),\n    /* @__PURE__ */ jsx(Default, { variant: \"primary\", fill: true, theme, style: {\n      maxWidth: 223\n    }, onClick: handleClick, children: /* @__PURE__ */ jsx(\"span\", { className: css.buttonText, style: styles.buttonText, \"data-theme\": theme, children: buttonText }) }),\n    /* @__PURE__ */ jsx(\"div\", { style: spacing(8) }),\n    /* @__PURE__ */ jsx(Fragment, { children: shouldRenderNotices ? /* @__PURE__ */ jsx(\"ul\", { style: styles.noticeList, children: LIVE_CAMPAIGN_NOTICE_LIST.map((notice, i) => (\n      // eslint-disable-next-line react/no-array-index-key\n      /* @__PURE__ */ jsxs(\"li\", { className: css.notice, style: styles.notice, \"data-theme\": theme, children: [\n        \"*\",\n        notice\n      ] }, i)\n    )) }) : null })\n  ] });\n};\nconst useStyles = createUseStyles()({\n  container: {\n    base: {\n      display: \"flex\",\n      flexDirection: \"column\",\n      justifyContent: \"center\",\n      alignItems: \"center\",\n      width: \"100%\",\n      height: \"100%\",\n      whiteSpace: \"pre-wrap\",\n      wordBreak: \"keep-all\",\n      overflowWrap: \"break-word\",\n      fontFamily: `'Pretendard Medium', Pretendard Medium Placeholder, Pretendard, -apple-system, BlinkMacSystemFont,\n      system-ui, Roboto, 'Helvetica Neue', 'Segoe UI', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Malgun Gothic',\n      'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', sans-serif`\n    }\n  },\n  statusContainer: {\n    base: {\n      display: \"flex\",\n      justifyContent: \"center\",\n      alignItems: \"center\",\n      gap: 8,\n      height: 24\n    }\n  },\n  status: {\n    base: {\n      fontSize: 14,\n      fontWeight: 400,\n      lineHeight: \"24px\",\n      fontFeatureSettings: \"tnum\",\n      fontVariantNumeric: \"tabular-nums\"\n    }\n  },\n  title: {\n    base: {\n      margin: 0,\n      textAlign: \"center\",\n      fontStyle: \"normal\",\n      fontSize: 24,\n      fontWeight: 400,\n      lineHeight: \"36px\",\n      fontFamily: `'Pretendard Bold', 'Pretendard Bold Placeholder', sans-serif`\n    }\n  },\n  noticeList: {\n    base: {\n      margin: 0,\n      padding: 0,\n      listStyle: \"none\"\n    }\n  },\n  notice: {\n    base: {\n      textAlign: \"center\",\n      fontSize: 12,\n      fontWeight: 300,\n      lineHeight: \"16px\"\n    }\n  },\n  buttonText: {\n    base: {\n      minHeight: \"1.2em\",\n      fontStyle: \"normal\",\n      fontSize: 14,\n      fontWeight: 400,\n      lineHeight: \"1.2em\",\n      fontFamily: `'Pretendard Bold', 'Pretendard Bold Placeholder', sans-serif`\n    }\n  }\n});\nexport {\n  LiveCampaignButtonBanner\n};\n", "(function() {\n  \"use strict\";\n  try {\n    if (typeof document != \"undefined\") {\n      var elementStyle = document.createElement(\"style\");\n      elementStyle.appendChild(document.createTextNode(\"._status_97sbv_1 {\\n  color: #ffffff;\\n\\n  &[data-campaign-status='ONAIR'] {\\n    color: #ff4800;\\n  }\\n\\n  &[data-campaign-status='CLOSED'] {\\n    color: #a0a0a0;\\n  }\\n}\"));\n      document.head.appendChild(elementStyle);\n    }\n  } catch (e) {\n    console.error(\"vite-plugin-css-injected-by-js\", e);\n  }\n})();\nconst status = \"_status_97sbv_1\";\nconst css = {\n  status\n};\nexport {\n  css as default,\n  status\n};\n", "import { jsxs, jsx } from \"react/jsx-runtime\";\nimport css from \"./LiveCampaignQRCodeBanner.module.css.js\";\nimport { ACCESS_FROM_APP_MESSAGE, APP_DOWNLOAD_MESSAGE } from \"../LiveCampaignBanner.constants.js\";\nimport { useCreateOneLink } from \"../../../../hooks/useCreateOneLink.js\";\nimport { getCurrentHref } from \"../../../../utils/getCurrentHref.js\";\nimport { QRCodeSVG } from \"../../../../node_modules/qrcode.react/lib/esm/index.js\";\nimport { isContentOrigin } from \"../../../../utils/location.js\";\nimport { OnAirIndicator } from \"../OnAirIndicator/OnAirIndicator.js\";\nimport { LiveCampaignStatusText } from \"../LiveCampaignStatusText/LiveCampaignStatusText.js\";\nimport { createUseStyles } from \"../../../../styles/createUseStyle.js\";\nimport { spacing } from \"../../../../styles/spacing.js\";\nconst QR_CODE_FALLBACK_MESSAGE = `QR \uCF54\uB4DC\uB294\n\uBC1C\uD589 \uCF58\uD150\uCE20 \uB9C1\uD06C\uC5D0\uC11C\n\uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`;\nconst LiveCampaignQRCodeBanner = ({\n  title,\n  campaign,\n  status\n}) => {\n  const {\n    styles\n  } = useStyles();\n  const {\n    oneLink\n  } = useCreateOneLink(getCurrentHref({\n    removeQueryParams: true\n  }));\n  return /* @__PURE__ */ jsxs(\"div\", { style: styles.container, children: [\n    /* @__PURE__ */ jsxs(\"div\", { style: styles.statusContainer, children: [\n      status === \"ONAIR\" ? /* @__PURE__ */ jsx(OnAirIndicator, { variant: \"large\" }) : null,\n      /* @__PURE__ */ jsx(\"span\", { className: css.status, style: styles.status, \"data-campaign-status\": status, children: /* @__PURE__ */ jsx(LiveCampaignStatusText, { status, scheduledAt: (campaign == null ? void 0 : campaign.scheduledAt) ?? \"\" }) })\n    ] }),\n    /* @__PURE__ */ jsx(\"div\", { style: spacing(40) }),\n    /* @__PURE__ */ jsx(\"h1\", { style: styles.title, children: title }),\n    /* @__PURE__ */ jsx(\"div\", { style: spacing(16) }),\n    /* @__PURE__ */ jsx(\"span\", { style: styles.notice, children: ACCESS_FROM_APP_MESSAGE }),\n    /* @__PURE__ */ jsx(\"div\", { style: spacing(100) }),\n    isContentOrigin() ? /* @__PURE__ */ jsx(QRCodeSVG, { value: oneLink, size: 136, fgColor: \"#ffffff\", bgColor: \"#000000\", includeMargin: false }) : /* @__PURE__ */ jsx(\"div\", { style: styles.fallback, children: QR_CODE_FALLBACK_MESSAGE }),\n    /* @__PURE__ */ jsx(\"div\", { style: spacing(14) }),\n    /* @__PURE__ */ jsx(\"span\", { style: styles.text, children: APP_DOWNLOAD_MESSAGE })\n  ] });\n};\nconst useStyles = createUseStyles()({\n  container: {\n    base: {\n      display: \"flex\",\n      flexDirection: \"column\",\n      justifyContent: \"center\",\n      alignItems: \"center\",\n      width: \"100%\",\n      height: \"100vh\",\n      whiteSpace: \"pre-wrap\",\n      wordBreak: \"keep-all\",\n      overflowWrap: \"break-word\",\n      backgroundColor: \"#000000\",\n      fontFamily: `'Pretendard Medium', Pretendard Medium Placeholder, Pretendard, -apple-system, BlinkMacSystemFont,\n      system-ui, Roboto, 'Helvetica Neue', 'Segoe UI', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Malgun Gothic',\n      'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', sans-serif;`\n    }\n  },\n  statusContainer: {\n    base: {\n      display: \"flex\",\n      justifyContent: \"center\",\n      alignItems: \"center\",\n      gap: 8,\n      height: 28\n    }\n  },\n  status: {\n    base: {\n      fontSize: 16,\n      fontWeight: 400,\n      lineHeight: \"24px\",\n      fontFeatureSettings: \"tnum\",\n      fontVariantNumeric: \"tabular-nums\"\n    }\n  },\n  title: {\n    base: {\n      margin: 0,\n      color: \"#ffffff\",\n      textAlign: \"center\",\n      fontStyle: \"normal\",\n      fontSize: 60,\n      fontWeight: 400,\n      lineHeight: \"82px\",\n      fontFamily: `'Pretendard Bold', 'Pretendard Bold Placeholder', sans-serif`\n    }\n  },\n  notice: {\n    base: {\n      color: \"#c4c4c4\",\n      textAlign: \"center\",\n      fontSize: 18,\n      fontWeight: 400,\n      lineHeight: \"26px\"\n    }\n  },\n  text: {\n    base: {\n      color: \"#c4c4c4\",\n      textAlign: \"center\",\n      fontSize: 16,\n      fontWeight: 400,\n      lineHeight: \"24px\",\n      fontFamily: `'Pretendard Bold', 'Pretendard Bold Placeholder', sans-serif`\n    }\n  },\n  fallback: {\n    base: {\n      display: \"flex\",\n      justifyContent: \"center\",\n      alignItems: \"center\",\n      width: 136,\n      height: 136,\n      color: \"#ffffff\",\n      border: \"1px solid #ffffff\"\n    }\n  }\n});\nexport {\n  LiveCampaignQRCodeBanner\n};\n", "import useSWR from \"../../node_modules/swr/core/dist/index.js\";\nimport { liveCampaignApi } from \"../../apis/live-campaign/LiveCampaignApiService.js\";\nconst LIVE_CAMPAIGN_FETCHER_KEY = \"@live-campaign\";\nconst useFetchLiveCampaign = (campaignKey, enabled = true) => {\n  const {\n    isLoading,\n    ...rest\n  } = useSWR(enabled ? [LIVE_CAMPAIGN_FETCHER_KEY, campaignKey] : null, () => liveCampaignApi.getCampaign(campaignKey));\n  return {\n    ...rest,\n    isLoading: isLoading || !enabled\n  };\n};\nexport {\n  LIVE_CAMPAIGN_FETCHER_KEY,\n  useFetchLiveCampaign\n};\n", "import { useState, useRef, useMemo } from \"react\";\nimport { differenceInMilliseconds } from \"../node_modules/date-fns/differenceInMilliseconds.js\";\nimport { parseISO } from \"../node_modules/date-fns/parseISO.js\";\nimport { diffFromNowInMilliseconds } from \"../utils/date-helpers/diffFromNowInMilliseconds.js\";\nimport useInterval from \"../node_modules/react-use/esm/useInterval.js\";\nconst MS_IN_SECOND = 1e3;\nconst MS_IN_MINUTE = MS_IN_SECOND * 60;\nconst getCurrentCampaignStatus = (remaining, duration) => {\n  switch (true) {\n    case remaining < MS_IN_SECOND:\n      return \"CLOSED\";\n    case remaining - duration < MS_IN_SECOND:\n      return \"ONAIR\";\n    case remaining - duration - MS_IN_MINUTE * 10 < MS_IN_SECOND:\n      return \"REHEARSAL\";\n    default:\n      return \"READY\";\n  }\n};\nconst useLiveCampaignStatus = (campaign, teasingContent) => {\n  const [status, setStatus] = useState(\"NOT_EXIST\");\n  const initialRemaining = (campaign == null ? void 0 : campaign.scheduledEndAt) ? diffFromNowInMilliseconds(parseISO(campaign.scheduledEndAt)) : 0;\n  const remaining = useRef(initialRemaining);\n  const duration = useMemo(() => (campaign == null ? void 0 : campaign.scheduledAt) && (campaign == null ? void 0 : campaign.scheduledEndAt) ? differenceInMilliseconds(parseISO(campaign.scheduledEndAt), parseISO(campaign.scheduledAt)) : 0, [campaign]);\n  const intervalCallback = () => {\n    if (!(campaign == null ? void 0 : campaign.scheduledEndAt)) {\n      return;\n    }\n    const incoming = diffFromNowInMilliseconds(parseISO(campaign.scheduledEndAt));\n    const nextStatus = getCurrentCampaignStatus(incoming, duration);\n    const isReady = nextStatus === \"READY\";\n    const isTeasing = isReady && teasingContent;\n    setStatus(isTeasing ? \"TEASING\" : nextStatus);\n    remaining.current = nextStatus !== \"CLOSED\" ? incoming : 0;\n  };\n  useInterval(intervalCallback, status !== \"CLOSED\" ? MS_IN_SECOND : null);\n  return status;\n};\nexport {\n  useLiveCampaignStatus\n};\n", "import { jsx } from \"react/jsx-runtime\";\nimport { LiveCampaignButtonBanner } from \"./LiveCampaignButtonBanner/LiveCampaignButtonBanner.js\";\nimport { LiveCampaignQRCodeBanner } from \"./LiveCampaignQRCodeBanner/LiveCampaignQRCodeBanner.js\";\nimport { addPropertyControls, ControlType, useInView } from \"framer\";\nimport { useRef } from \"react\";\nimport { useFetchLiveCampaign } from \"../../../hooks/fetchers/useFetchLiveCampaign.js\";\nimport { useLiveCampaignStatus } from \"../../../hooks/useLiveStatus.js\";\nconst baseSectionStyle = {\n  minHeight: 210\n};\nconst LiveCampaignBanner = ({\n  style,\n  campaignKey,\n  title,\n  bannerType,\n  backgroundType,\n  backgroundColor,\n  teasingContent,\n  theme\n}) => {\n  const ref = useRef(null);\n  const isInView = useInView(ref, {\n    margin: \"200px 0px\",\n    once: true\n  });\n  const {\n    isLoading,\n    data\n  } = useFetchLiveCampaign(campaignKey, isInView);\n  const campaign = data == null ? void 0 : data.data;\n  const isPending = isLoading || !campaign;\n  const status = useLiveCampaignStatus(campaign, teasingContent);\n  const sectionStyle = {\n    ...style,\n    ...baseSectionStyle\n  };\n  if (isPending) {\n    return /* @__PURE__ */ jsx(\"section\", { ref, style: sectionStyle });\n  }\n  if (bannerType === \"QRCode\") {\n    return /* @__PURE__ */ jsx(\"section\", { ref, style, children: /* @__PURE__ */ jsx(LiveCampaignQRCodeBanner, { campaign, status, title }) });\n  }\n  return /* @__PURE__ */ jsx(\"section\", { ref, style, children: /* @__PURE__ */ jsx(LiveCampaignButtonBanner, { campaign, status, title, backgroundType, backgroundColor, teasingContent, theme }) });\n};\nconst isQRCodeBanner = (props) => props.bannerType === \"QRCode\";\naddPropertyControls(LiveCampaignBanner, {\n  campaignKey: {\n    title: \"\uB77C\uC774\uBE0C \uCEA0\uD398\uC778 \uD0A4\",\n    type: ControlType.String,\n    defaultValue: \"745a9de22f66\"\n  },\n  title: {\n    title: \"\uBC30\uB108 \uD0C0\uC774\uD2C0\",\n    type: ControlType.String,\n    displayTextArea: true\n  },\n  bannerType: {\n    title: \"\uBC30\uB108 \uC720\uD615\",\n    type: ControlType.Enum,\n    displaySegmentedControl: true,\n    options: [\"QRCode\", \"button\"],\n    optionTitles: [\"QR\uCF54\uB4DC\", \"\uBC84\uD2BC\"],\n    defaultValue: \"button\"\n  },\n  backgroundType: {\n    title: \"\uBC30\uB108 \uBC31\uADF8\uB77C\uC6B4\uB4DC\",\n    type: ControlType.Enum,\n    displaySegmentedControl: true,\n    options: [\"fill\", \"gradient\"],\n    optionTitles: [\"Fill\", \"Gradient\"],\n    defaultValue: \"fill\",\n    /**\n     * NOTE:(\uAE40\uD64D\uB3D9) 24. 4Q \uC694\uAD6C \uC0AC\uD56D\uC5D0 \uB530\uB77C \uADF8\uB77C\uB370\uC774\uC774\uC158 \uC635\uC158\uC774 \uC81C\uAC70 \uB418\uC5C8\uC2B5\uB2C8\uB2E4.\n     * \uAE30\uC874 \uC0AC\uC6A9\uD558\uACE0 \uC788\uB358 \uADF8\uB77C\uB370\uC774\uC158 \uC635\uC158\uC758 \uD558\uC704 \uD638\uD658\uC131\uC744 \uC704\uD574 backgroundType \uC635\uC158\uC744 \uC81C\uAC70\uD558\uC9C0 \uC54A\uACE0 hidden\uC73C\uB85C \uC228\uAE40 \uCC98\uB9AC\uD569\uB2C8\uB2E4.\n     * \uB610\uD55C defaultValue\uC744 fill\uB85C \uC720\uC9C0\uD558\uC5EC \uC55E\uC73C\uB85C\uB294 fill + backgroundColor \uAC12\uC73C\uB85C \uBC30\uACBD \uC2A4\uD0C0\uC77C\uC744 \uD578\uB4E4\uB9C1 \uD569\uB2C8\uB2E4.\n     * @see https://docs.google.com/spreadsheets/d/1tuMvPVVGhgBWbmDm8hGKC_yNwZQ1fexEuMW4kgWYKBs/edit?gid=125922033#gid=125922033 - LiveCampaignBanner \uC601\uC5ED \uCC38\uACE0\n     */\n    hidden: () => true\n  },\n  // NOTE:(\uAE40\uD64D\uB3D9) \uBC84\uD2BC \uD0C0\uC785\uC758 \uBC30\uB108 + backgroundType\uC774 fill\uC778 \uACBD\uC6B0 backgroundColor \uC635\uC158\uC744 \uD1B5\uD574 \uBC30\uB108\uC758 \uBC30\uACBD \uC0C9\uC744 \uD578\uB4E4\uD569\uB2C8\uB2E4.\n  backgroundColor: {\n    title: \"\uBC30\uB108 \uBC31\uADF8\uB77C\uC6B4\uB4DC \uC0C9\uC0C1\",\n    type: ControlType.Color,\n    defaultValue: \"#000000\",\n    hidden: ({\n      bannerType,\n      backgroundType\n    }) => bannerType === \"QRCode\" || backgroundType === \"gradient\"\n  },\n  theme: {\n    title: \"\uD14C\uB9C8\",\n    type: ControlType.Enum,\n    displaySegmentedControl: true,\n    options: [\"dark\", \"light\"],\n    optionTitles: [\"\uB2E4\uD06C\", \"\uB77C\uC774\uD2B8\"],\n    defaultValue: \"dark\",\n    hidden: isQRCodeBanner\n  },\n  teasingContent: {\n    title: \"\uD2F0\uC800 \uCF58\uD150\uCE20 \uC8FC\uC18C\",\n    type: ControlType.Link\n  }\n});\nexport {\n  LiveCampaignBanner\n};\n", "// import { LiveCampaignBanner } from \"https://localhost:4173/components/systems/LiveCampaignBanner/LiveCampaignBanner.js\"\nimport{LiveCampaignBanner}from\"https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignBanner/LiveCampaignBanner.js\";LiveCampaignBanner.displayName=\"LiveCampaignBanner\";/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 400\n */export default LiveCampaignBanner;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LiveCampaignBanner\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicWidth\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TestLiveCampaignBanner.map", "function getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar urlToolkit = { exports: {} };\n(function(module, exports) {\n  (function(root) {\n    var URL_REGEX = /^(?=((?:[a-zA-Z0-9+\\-.]+:)?))\\1(?=((?:\\/\\/[^\\/?#]*)?))\\2(?=((?:(?:[^?#\\/]*\\/)*[^;?#\\/]*)?))\\3((?:;[^?#]*)?)(\\?[^#]*)?(#[^]*)?$/;\n    var FIRST_SEGMENT_REGEX = /^(?=([^\\/?#]*))\\1([^]*)$/;\n    var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n    var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n    var URLToolkit = {\n      // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n      // E.g\n      // With opts.alwaysNormalize = false (default, spec compliant)\n      // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n      // With opts.alwaysNormalize = true (not spec compliant)\n      // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n      buildAbsoluteURL: function(baseURL, relativeURL, opts) {\n        opts = opts || {};\n        baseURL = baseURL.trim();\n        relativeURL = relativeURL.trim();\n        if (!relativeURL) {\n          if (!opts.alwaysNormalize) {\n            return baseURL;\n          }\n          var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n          if (!basePartsForNormalise) {\n            throw new Error(\"Error trying to parse base URL.\");\n          }\n          basePartsForNormalise.path = URLToolkit.normalizePath(\n            basePartsForNormalise.path\n          );\n          return URLToolkit.buildURLFromParts(basePartsForNormalise);\n        }\n        var relativeParts = URLToolkit.parseURL(relativeURL);\n        if (!relativeParts) {\n          throw new Error(\"Error trying to parse relative URL.\");\n        }\n        if (relativeParts.scheme) {\n          if (!opts.alwaysNormalize) {\n            return relativeURL;\n          }\n          relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n          return URLToolkit.buildURLFromParts(relativeParts);\n        }\n        var baseParts = URLToolkit.parseURL(baseURL);\n        if (!baseParts) {\n          throw new Error(\"Error trying to parse base URL.\");\n        }\n        if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== \"/\") {\n          var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n          baseParts.netLoc = pathParts[1];\n          baseParts.path = pathParts[2];\n        }\n        if (baseParts.netLoc && !baseParts.path) {\n          baseParts.path = \"/\";\n        }\n        var builtParts = {\n          // 2c) Otherwise, the embedded URL inherits the scheme of\n          // the base URL.\n          scheme: baseParts.scheme,\n          netLoc: relativeParts.netLoc,\n          path: null,\n          params: relativeParts.params,\n          query: relativeParts.query,\n          fragment: relativeParts.fragment\n        };\n        if (!relativeParts.netLoc) {\n          builtParts.netLoc = baseParts.netLoc;\n          if (relativeParts.path[0] !== \"/\") {\n            if (!relativeParts.path) {\n              builtParts.path = baseParts.path;\n              if (!relativeParts.params) {\n                builtParts.params = baseParts.params;\n                if (!relativeParts.query) {\n                  builtParts.query = baseParts.query;\n                }\n              }\n            } else {\n              var baseURLPath = baseParts.path;\n              var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf(\"/\") + 1) + relativeParts.path;\n              builtParts.path = URLToolkit.normalizePath(newPath);\n            }\n          }\n        }\n        if (builtParts.path === null) {\n          builtParts.path = opts.alwaysNormalize ? URLToolkit.normalizePath(relativeParts.path) : relativeParts.path;\n        }\n        return URLToolkit.buildURLFromParts(builtParts);\n      },\n      parseURL: function(url) {\n        var parts = URL_REGEX.exec(url);\n        if (!parts) {\n          return null;\n        }\n        return {\n          scheme: parts[1] || \"\",\n          netLoc: parts[2] || \"\",\n          path: parts[3] || \"\",\n          params: parts[4] || \"\",\n          query: parts[5] || \"\",\n          fragment: parts[6] || \"\"\n        };\n      },\n      normalizePath: function(path) {\n        path = path.split(\"\").reverse().join(\"\").replace(SLASH_DOT_REGEX, \"\");\n        while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, \"\")).length) {\n        }\n        return path.split(\"\").reverse().join(\"\");\n      },\n      buildURLFromParts: function(parts) {\n        return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment;\n      }\n    };\n    module.exports = URLToolkit;\n  })();\n})(urlToolkit);\nvar urlToolkitExports = urlToolkit.exports;\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function(r2) {\n      return Object.getOwnPropertyDescriptor(e, r2).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {\n      _defineProperty(e, r2, t[r2]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {\n      Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));\n    });\n  }\n  return e;\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t)\n    return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i)\n      return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : String(i);\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nconst isFiniteNumber = Number.isFinite || function(value) {\n  return typeof value === \"number\" && isFinite(value);\n};\nconst isSafeInteger = Number.isSafeInteger || function(value) {\n  return typeof value === \"number\" && Math.abs(value) <= MAX_SAFE_INTEGER;\n};\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\nlet Events = /* @__PURE__ */ function(Events2) {\n  Events2[\"MEDIA_ATTACHING\"] = \"hlsMediaAttaching\";\n  Events2[\"MEDIA_ATTACHED\"] = \"hlsMediaAttached\";\n  Events2[\"MEDIA_DETACHING\"] = \"hlsMediaDetaching\";\n  Events2[\"MEDIA_DETACHED\"] = \"hlsMediaDetached\";\n  Events2[\"BUFFER_RESET\"] = \"hlsBufferReset\";\n  Events2[\"BUFFER_CODECS\"] = \"hlsBufferCodecs\";\n  Events2[\"BUFFER_CREATED\"] = \"hlsBufferCreated\";\n  Events2[\"BUFFER_APPENDING\"] = \"hlsBufferAppending\";\n  Events2[\"BUFFER_APPENDED\"] = \"hlsBufferAppended\";\n  Events2[\"BUFFER_EOS\"] = \"hlsBufferEos\";\n  Events2[\"BUFFER_FLUSHING\"] = \"hlsBufferFlushing\";\n  Events2[\"BUFFER_FLUSHED\"] = \"hlsBufferFlushed\";\n  Events2[\"MANIFEST_LOADING\"] = \"hlsManifestLoading\";\n  Events2[\"MANIFEST_LOADED\"] = \"hlsManifestLoaded\";\n  Events2[\"MANIFEST_PARSED\"] = \"hlsManifestParsed\";\n  Events2[\"LEVEL_SWITCHING\"] = \"hlsLevelSwitching\";\n  Events2[\"LEVEL_SWITCHED\"] = \"hlsLevelSwitched\";\n  Events2[\"LEVEL_LOADING\"] = \"hlsLevelLoading\";\n  Events2[\"LEVEL_LOADED\"] = \"hlsLevelLoaded\";\n  Events2[\"LEVEL_UPDATED\"] = \"hlsLevelUpdated\";\n  Events2[\"LEVEL_PTS_UPDATED\"] = \"hlsLevelPtsUpdated\";\n  Events2[\"LEVELS_UPDATED\"] = \"hlsLevelsUpdated\";\n  Events2[\"AUDIO_TRACKS_UPDATED\"] = \"hlsAudioTracksUpdated\";\n  Events2[\"AUDIO_TRACK_SWITCHING\"] = \"hlsAudioTrackSwitching\";\n  Events2[\"AUDIO_TRACK_SWITCHED\"] = \"hlsAudioTrackSwitched\";\n  Events2[\"AUDIO_TRACK_LOADING\"] = \"hlsAudioTrackLoading\";\n  Events2[\"AUDIO_TRACK_LOADED\"] = \"hlsAudioTrackLoaded\";\n  Events2[\"SUBTITLE_TRACKS_UPDATED\"] = \"hlsSubtitleTracksUpdated\";\n  Events2[\"SUBTITLE_TRACKS_CLEARED\"] = \"hlsSubtitleTracksCleared\";\n  Events2[\"SUBTITLE_TRACK_SWITCH\"] = \"hlsSubtitleTrackSwitch\";\n  Events2[\"SUBTITLE_TRACK_LOADING\"] = \"hlsSubtitleTrackLoading\";\n  Events2[\"SUBTITLE_TRACK_LOADED\"] = \"hlsSubtitleTrackLoaded\";\n  Events2[\"SUBTITLE_FRAG_PROCESSED\"] = \"hlsSubtitleFragProcessed\";\n  Events2[\"CUES_PARSED\"] = \"hlsCuesParsed\";\n  Events2[\"NON_NATIVE_TEXT_TRACKS_FOUND\"] = \"hlsNonNativeTextTracksFound\";\n  Events2[\"INIT_PTS_FOUND\"] = \"hlsInitPtsFound\";\n  Events2[\"FRAG_LOADING\"] = \"hlsFragLoading\";\n  Events2[\"FRAG_LOAD_EMERGENCY_ABORTED\"] = \"hlsFragLoadEmergencyAborted\";\n  Events2[\"FRAG_LOADED\"] = \"hlsFragLoaded\";\n  Events2[\"FRAG_DECRYPTED\"] = \"hlsFragDecrypted\";\n  Events2[\"FRAG_PARSING_INIT_SEGMENT\"] = \"hlsFragParsingInitSegment\";\n  Events2[\"FRAG_PARSING_USERDATA\"] = \"hlsFragParsingUserdata\";\n  Events2[\"FRAG_PARSING_METADATA\"] = \"hlsFragParsingMetadata\";\n  Events2[\"FRAG_PARSED\"] = \"hlsFragParsed\";\n  Events2[\"FRAG_BUFFERED\"] = \"hlsFragBuffered\";\n  Events2[\"FRAG_CHANGED\"] = \"hlsFragChanged\";\n  Events2[\"FPS_DROP\"] = \"hlsFpsDrop\";\n  Events2[\"FPS_DROP_LEVEL_CAPPING\"] = \"hlsFpsDropLevelCapping\";\n  Events2[\"MAX_AUTO_LEVEL_UPDATED\"] = \"hlsMaxAutoLevelUpdated\";\n  Events2[\"ERROR\"] = \"hlsError\";\n  Events2[\"DESTROYING\"] = \"hlsDestroying\";\n  Events2[\"KEY_LOADING\"] = \"hlsKeyLoading\";\n  Events2[\"KEY_LOADED\"] = \"hlsKeyLoaded\";\n  Events2[\"LIVE_BACK_BUFFER_REACHED\"] = \"hlsLiveBackBufferReached\";\n  Events2[\"BACK_BUFFER_REACHED\"] = \"hlsBackBufferReached\";\n  Events2[\"STEERING_MANIFEST_LOADED\"] = \"hlsSteeringManifestLoaded\";\n  return Events2;\n}({});\nlet ErrorTypes = /* @__PURE__ */ function(ErrorTypes2) {\n  ErrorTypes2[\"NETWORK_ERROR\"] = \"networkError\";\n  ErrorTypes2[\"MEDIA_ERROR\"] = \"mediaError\";\n  ErrorTypes2[\"KEY_SYSTEM_ERROR\"] = \"keySystemError\";\n  ErrorTypes2[\"MUX_ERROR\"] = \"muxError\";\n  ErrorTypes2[\"OTHER_ERROR\"] = \"otherError\";\n  return ErrorTypes2;\n}({});\nlet ErrorDetails = /* @__PURE__ */ function(ErrorDetails2) {\n  ErrorDetails2[\"KEY_SYSTEM_NO_KEYS\"] = \"keySystemNoKeys\";\n  ErrorDetails2[\"KEY_SYSTEM_NO_ACCESS\"] = \"keySystemNoAccess\";\n  ErrorDetails2[\"KEY_SYSTEM_NO_SESSION\"] = \"keySystemNoSession\";\n  ErrorDetails2[\"KEY_SYSTEM_NO_CONFIGURED_LICENSE\"] = \"keySystemNoConfiguredLicense\";\n  ErrorDetails2[\"KEY_SYSTEM_LICENSE_REQUEST_FAILED\"] = \"keySystemLicenseRequestFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED\"] = \"keySystemServerCertificateRequestFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED\"] = \"keySystemServerCertificateUpdateFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_SESSION_UPDATE_FAILED\"] = \"keySystemSessionUpdateFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED\"] = \"keySystemStatusOutputRestricted\";\n  ErrorDetails2[\"KEY_SYSTEM_STATUS_INTERNAL_ERROR\"] = \"keySystemStatusInternalError\";\n  ErrorDetails2[\"MANIFEST_LOAD_ERROR\"] = \"manifestLoadError\";\n  ErrorDetails2[\"MANIFEST_LOAD_TIMEOUT\"] = \"manifestLoadTimeOut\";\n  ErrorDetails2[\"MANIFEST_PARSING_ERROR\"] = \"manifestParsingError\";\n  ErrorDetails2[\"MANIFEST_INCOMPATIBLE_CODECS_ERROR\"] = \"manifestIncompatibleCodecsError\";\n  ErrorDetails2[\"LEVEL_EMPTY_ERROR\"] = \"levelEmptyError\";\n  ErrorDetails2[\"LEVEL_LOAD_ERROR\"] = \"levelLoadError\";\n  ErrorDetails2[\"LEVEL_LOAD_TIMEOUT\"] = \"levelLoadTimeOut\";\n  ErrorDetails2[\"LEVEL_PARSING_ERROR\"] = \"levelParsingError\";\n  ErrorDetails2[\"LEVEL_SWITCH_ERROR\"] = \"levelSwitchError\";\n  ErrorDetails2[\"AUDIO_TRACK_LOAD_ERROR\"] = \"audioTrackLoadError\";\n  ErrorDetails2[\"AUDIO_TRACK_LOAD_TIMEOUT\"] = \"audioTrackLoadTimeOut\";\n  ErrorDetails2[\"SUBTITLE_LOAD_ERROR\"] = \"subtitleTrackLoadError\";\n  ErrorDetails2[\"SUBTITLE_TRACK_LOAD_TIMEOUT\"] = \"subtitleTrackLoadTimeOut\";\n  ErrorDetails2[\"FRAG_LOAD_ERROR\"] = \"fragLoadError\";\n  ErrorDetails2[\"FRAG_LOAD_TIMEOUT\"] = \"fragLoadTimeOut\";\n  ErrorDetails2[\"FRAG_DECRYPT_ERROR\"] = \"fragDecryptError\";\n  ErrorDetails2[\"FRAG_PARSING_ERROR\"] = \"fragParsingError\";\n  ErrorDetails2[\"FRAG_GAP\"] = \"fragGap\";\n  ErrorDetails2[\"REMUX_ALLOC_ERROR\"] = \"remuxAllocError\";\n  ErrorDetails2[\"KEY_LOAD_ERROR\"] = \"keyLoadError\";\n  ErrorDetails2[\"KEY_LOAD_TIMEOUT\"] = \"keyLoadTimeOut\";\n  ErrorDetails2[\"BUFFER_ADD_CODEC_ERROR\"] = \"bufferAddCodecError\";\n  ErrorDetails2[\"BUFFER_INCOMPATIBLE_CODECS_ERROR\"] = \"bufferIncompatibleCodecsError\";\n  ErrorDetails2[\"BUFFER_APPEND_ERROR\"] = \"bufferAppendError\";\n  ErrorDetails2[\"BUFFER_APPENDING_ERROR\"] = \"bufferAppendingError\";\n  ErrorDetails2[\"BUFFER_STALLED_ERROR\"] = \"bufferStalledError\";\n  ErrorDetails2[\"BUFFER_FULL_ERROR\"] = \"bufferFullError\";\n  ErrorDetails2[\"BUFFER_SEEK_OVER_HOLE\"] = \"bufferSeekOverHole\";\n  ErrorDetails2[\"BUFFER_NUDGE_ON_STALL\"] = \"bufferNudgeOnStall\";\n  ErrorDetails2[\"INTERNAL_EXCEPTION\"] = \"internalException\";\n  ErrorDetails2[\"INTERNAL_ABORTED\"] = \"aborted\";\n  ErrorDetails2[\"UNKNOWN\"] = \"unknown\";\n  return ErrorDetails2;\n}({});\nconst noop = function noop2() {\n};\nconst fakeLogger = {\n  trace: noop,\n  debug: noop,\n  log: noop,\n  warn: noop,\n  info: noop,\n  error: noop\n};\nlet exportedLogger = fakeLogger;\nfunction consolePrintFn(type) {\n  const func = self.console[type];\n  if (func) {\n    return func.bind(self.console, `[${type}] >`);\n  }\n  return noop;\n}\nfunction exportLoggerFunctions(debugConfig, ...functions) {\n  functions.forEach(function(type) {\n    exportedLogger[type] = debugConfig[type] ? debugConfig[type].bind(debugConfig) : consolePrintFn(type);\n  });\n}\nfunction enableLogs(debugConfig, id) {\n  if (typeof console === \"object\" && debugConfig === true || typeof debugConfig === \"object\") {\n    exportLoggerFunctions(\n      debugConfig,\n      // Remove out from list here to hard-disable a log-level\n      // 'trace',\n      \"debug\",\n      \"log\",\n      \"info\",\n      \"warn\",\n      \"error\"\n    );\n    try {\n      exportedLogger.log(`Debug logs enabled for \"${id}\" in hls.js version ${\"1.5.7\"}`);\n    } catch (e) {\n      exportedLogger = fakeLogger;\n    }\n  } else {\n    exportedLogger = fakeLogger;\n  }\n}\nconst logger = exportedLogger;\nconst DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/;\nconst ATTR_LIST_REGEX = /(.+?)=(\".*?\"|.*?)(?:,|$)/g;\nclass AttrList {\n  constructor(attrs) {\n    if (typeof attrs === \"string\") {\n      attrs = AttrList.parseAttrList(attrs);\n    }\n    _extends(this, attrs);\n  }\n  get clientAttrs() {\n    return Object.keys(this).filter((attr) => attr.substring(0, 2) === \"X-\");\n  }\n  decimalInteger(attrName) {\n    const intValue = parseInt(this[attrName], 10);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n  hexadecimalInteger(attrName) {\n    if (this[attrName]) {\n      let stringValue = (this[attrName] || \"0x\").slice(2);\n      stringValue = (stringValue.length & 1 ? \"0\" : \"\") + stringValue;\n      const value = new Uint8Array(stringValue.length / 2);\n      for (let i = 0; i < stringValue.length / 2; i++) {\n        value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n      }\n      return value;\n    } else {\n      return null;\n    }\n  }\n  hexadecimalIntegerAsNumber(attrName) {\n    const intValue = parseInt(this[attrName], 16);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n  decimalFloatingPoint(attrName) {\n    return parseFloat(this[attrName]);\n  }\n  optionalFloat(attrName, defaultValue) {\n    const value = this[attrName];\n    return value ? parseFloat(value) : defaultValue;\n  }\n  enumeratedString(attrName) {\n    return this[attrName];\n  }\n  bool(attrName) {\n    return this[attrName] === \"YES\";\n  }\n  decimalResolution(attrName) {\n    const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n    if (res === null) {\n      return void 0;\n    }\n    return {\n      width: parseInt(res[1], 10),\n      height: parseInt(res[2], 10)\n    };\n  }\n  static parseAttrList(input) {\n    let match;\n    const attrs = {};\n    const quote = '\"';\n    ATTR_LIST_REGEX.lastIndex = 0;\n    while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n      let value = match[2];\n      if (value.indexOf(quote) === 0 && value.lastIndexOf(quote) === value.length - 1) {\n        value = value.slice(1, -1);\n      }\n      const name = match[1].trim();\n      attrs[name] = value;\n    }\n    return attrs;\n  }\n}\nfunction isDateRangeCueAttribute(attrName) {\n  return attrName !== \"ID\" && attrName !== \"CLASS\" && attrName !== \"START-DATE\" && attrName !== \"DURATION\" && attrName !== \"END-DATE\" && attrName !== \"END-ON-NEXT\";\n}\nfunction isSCTE35Attribute(attrName) {\n  return attrName === \"SCTE35-OUT\" || attrName === \"SCTE35-IN\";\n}\nclass DateRange {\n  constructor(dateRangeAttr, dateRangeWithSameId) {\n    this.attr = void 0;\n    this._startDate = void 0;\n    this._endDate = void 0;\n    this._badValueForSameId = void 0;\n    if (dateRangeWithSameId) {\n      const previousAttr = dateRangeWithSameId.attr;\n      for (const key in previousAttr) {\n        if (Object.prototype.hasOwnProperty.call(dateRangeAttr, key) && dateRangeAttr[key] !== previousAttr[key]) {\n          logger.warn(`DATERANGE tag attribute: \"${key}\" does not match for tags with ID: \"${dateRangeAttr.ID}\"`);\n          this._badValueForSameId = key;\n          break;\n        }\n      }\n      dateRangeAttr = _extends(new AttrList({}), previousAttr, dateRangeAttr);\n    }\n    this.attr = dateRangeAttr;\n    this._startDate = new Date(dateRangeAttr[\"START-DATE\"]);\n    if (\"END-DATE\" in this.attr) {\n      const endDate = new Date(this.attr[\"END-DATE\"]);\n      if (isFiniteNumber(endDate.getTime())) {\n        this._endDate = endDate;\n      }\n    }\n  }\n  get id() {\n    return this.attr.ID;\n  }\n  get class() {\n    return this.attr.CLASS;\n  }\n  get startDate() {\n    return this._startDate;\n  }\n  get endDate() {\n    if (this._endDate) {\n      return this._endDate;\n    }\n    const duration = this.duration;\n    if (duration !== null) {\n      return new Date(this._startDate.getTime() + duration * 1e3);\n    }\n    return null;\n  }\n  get duration() {\n    if (\"DURATION\" in this.attr) {\n      const duration = this.attr.decimalFloatingPoint(\"DURATION\");\n      if (isFiniteNumber(duration)) {\n        return duration;\n      }\n    } else if (this._endDate) {\n      return (this._endDate.getTime() - this._startDate.getTime()) / 1e3;\n    }\n    return null;\n  }\n  get plannedDuration() {\n    if (\"PLANNED-DURATION\" in this.attr) {\n      return this.attr.decimalFloatingPoint(\"PLANNED-DURATION\");\n    }\n    return null;\n  }\n  get endOnNext() {\n    return this.attr.bool(\"END-ON-NEXT\");\n  }\n  get isValid() {\n    return !!this.id && !this._badValueForSameId && isFiniteNumber(this.startDate.getTime()) && (this.duration === null || this.duration >= 0) && (!this.endOnNext || !!this.class);\n  }\n}\nclass LoadStats {\n  constructor() {\n    this.aborted = false;\n    this.loaded = 0;\n    this.retry = 0;\n    this.total = 0;\n    this.chunkCount = 0;\n    this.bwEstimate = 0;\n    this.loading = {\n      start: 0,\n      first: 0,\n      end: 0\n    };\n    this.parsing = {\n      start: 0,\n      end: 0\n    };\n    this.buffering = {\n      start: 0,\n      first: 0,\n      end: 0\n    };\n  }\n}\nvar ElementaryStreamTypes = {\n  AUDIO: \"audio\",\n  VIDEO: \"video\",\n  AUDIOVIDEO: \"audiovideo\"\n};\nclass BaseSegment {\n  constructor(baseurl) {\n    this._byteRange = null;\n    this._url = null;\n    this.baseurl = void 0;\n    this.relurl = void 0;\n    this.elementaryStreams = {\n      [ElementaryStreamTypes.AUDIO]: null,\n      [ElementaryStreamTypes.VIDEO]: null,\n      [ElementaryStreamTypes.AUDIOVIDEO]: null\n    };\n    this.baseurl = baseurl;\n  }\n  // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array\n  setByteRange(value, previous) {\n    const params = value.split(\"@\", 2);\n    let start;\n    if (params.length === 1) {\n      start = (previous == null ? void 0 : previous.byteRangeEndOffset) || 0;\n    } else {\n      start = parseInt(params[1]);\n    }\n    this._byteRange = [start, parseInt(params[0]) + start];\n  }\n  get byteRange() {\n    if (!this._byteRange) {\n      return [];\n    }\n    return this._byteRange;\n  }\n  get byteRangeStartOffset() {\n    return this.byteRange[0];\n  }\n  get byteRangeEndOffset() {\n    return this.byteRange[1];\n  }\n  get url() {\n    if (!this._url && this.baseurl && this.relurl) {\n      this._url = urlToolkitExports.buildAbsoluteURL(this.baseurl, this.relurl, {\n        alwaysNormalize: true\n      });\n    }\n    return this._url || \"\";\n  }\n  set url(value) {\n    this._url = value;\n  }\n}\nclass Fragment extends BaseSegment {\n  constructor(type, baseurl) {\n    super(baseurl);\n    this._decryptdata = null;\n    this.rawProgramDateTime = null;\n    this.programDateTime = null;\n    this.tagList = [];\n    this.duration = 0;\n    this.sn = 0;\n    this.levelkeys = void 0;\n    this.type = void 0;\n    this.loader = null;\n    this.keyLoader = null;\n    this.level = -1;\n    this.cc = 0;\n    this.startPTS = void 0;\n    this.endPTS = void 0;\n    this.startDTS = void 0;\n    this.endDTS = void 0;\n    this.start = 0;\n    this.deltaPTS = void 0;\n    this.maxStartPTS = void 0;\n    this.minEndPTS = void 0;\n    this.stats = new LoadStats();\n    this.data = void 0;\n    this.bitrateTest = false;\n    this.title = null;\n    this.initSegment = null;\n    this.endList = void 0;\n    this.gap = void 0;\n    this.urlId = 0;\n    this.type = type;\n  }\n  get decryptdata() {\n    const {\n      levelkeys\n    } = this;\n    if (!levelkeys && !this._decryptdata) {\n      return null;\n    }\n    if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) {\n      const key = this.levelkeys.identity;\n      if (key) {\n        this._decryptdata = key.getDecryptData(this.sn);\n      } else {\n        const keyFormats = Object.keys(this.levelkeys);\n        if (keyFormats.length === 1) {\n          return this._decryptdata = this.levelkeys[keyFormats[0]].getDecryptData(this.sn);\n        }\n      }\n    }\n    return this._decryptdata;\n  }\n  get end() {\n    return this.start + this.duration;\n  }\n  get endProgramDateTime() {\n    if (this.programDateTime === null) {\n      return null;\n    }\n    if (!isFiniteNumber(this.programDateTime)) {\n      return null;\n    }\n    const duration = !isFiniteNumber(this.duration) ? 0 : this.duration;\n    return this.programDateTime + duration * 1e3;\n  }\n  get encrypted() {\n    var _this$_decryptdata;\n    if ((_this$_decryptdata = this._decryptdata) != null && _this$_decryptdata.encrypted) {\n      return true;\n    } else if (this.levelkeys) {\n      const keyFormats = Object.keys(this.levelkeys);\n      const len = keyFormats.length;\n      if (len > 1 || len === 1 && this.levelkeys[keyFormats[0]].encrypted) {\n        return true;\n      }\n    }\n    return false;\n  }\n  setKeyFormat(keyFormat) {\n    if (this.levelkeys) {\n      const key = this.levelkeys[keyFormat];\n      if (key && !this._decryptdata) {\n        this._decryptdata = key.getDecryptData(this.sn);\n      }\n    }\n  }\n  abortRequests() {\n    var _this$loader, _this$keyLoader;\n    (_this$loader = this.loader) == null ? void 0 : _this$loader.abort();\n    (_this$keyLoader = this.keyLoader) == null ? void 0 : _this$keyLoader.abort();\n  }\n  setElementaryStreamInfo(type, startPTS, endPTS, startDTS, endDTS, partial = false) {\n    const {\n      elementaryStreams\n    } = this;\n    const info = elementaryStreams[type];\n    if (!info) {\n      elementaryStreams[type] = {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS,\n        partial\n      };\n      return;\n    }\n    info.startPTS = Math.min(info.startPTS, startPTS);\n    info.endPTS = Math.max(info.endPTS, endPTS);\n    info.startDTS = Math.min(info.startDTS, startDTS);\n    info.endDTS = Math.max(info.endDTS, endDTS);\n  }\n  clearElementaryStreamInfo() {\n    const {\n      elementaryStreams\n    } = this;\n    elementaryStreams[ElementaryStreamTypes.AUDIO] = null;\n    elementaryStreams[ElementaryStreamTypes.VIDEO] = null;\n    elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO] = null;\n  }\n}\nclass Part extends BaseSegment {\n  constructor(partAttrs, frag, baseurl, index, previous) {\n    super(baseurl);\n    this.fragOffset = 0;\n    this.duration = 0;\n    this.gap = false;\n    this.independent = false;\n    this.relurl = void 0;\n    this.fragment = void 0;\n    this.index = void 0;\n    this.stats = new LoadStats();\n    this.duration = partAttrs.decimalFloatingPoint(\"DURATION\");\n    this.gap = partAttrs.bool(\"GAP\");\n    this.independent = partAttrs.bool(\"INDEPENDENT\");\n    this.relurl = partAttrs.enumeratedString(\"URI\");\n    this.fragment = frag;\n    this.index = index;\n    const byteRange = partAttrs.enumeratedString(\"BYTERANGE\");\n    if (byteRange) {\n      this.setByteRange(byteRange, previous);\n    }\n    if (previous) {\n      this.fragOffset = previous.fragOffset + previous.duration;\n    }\n  }\n  get start() {\n    return this.fragment.start + this.fragOffset;\n  }\n  get end() {\n    return this.start + this.duration;\n  }\n  get loaded() {\n    const {\n      elementaryStreams\n    } = this;\n    return !!(elementaryStreams.audio || elementaryStreams.video || elementaryStreams.audiovideo);\n  }\n}\nconst DEFAULT_TARGET_DURATION = 10;\nclass LevelDetails {\n  constructor(baseUrl) {\n    this.PTSKnown = false;\n    this.alignedSliding = false;\n    this.averagetargetduration = void 0;\n    this.endCC = 0;\n    this.endSN = 0;\n    this.fragments = void 0;\n    this.fragmentHint = void 0;\n    this.partList = null;\n    this.dateRanges = void 0;\n    this.live = true;\n    this.ageHeader = 0;\n    this.advancedDateTime = void 0;\n    this.updated = true;\n    this.advanced = true;\n    this.availabilityDelay = void 0;\n    this.misses = 0;\n    this.startCC = 0;\n    this.startSN = 0;\n    this.startTimeOffset = null;\n    this.targetduration = 0;\n    this.totalduration = 0;\n    this.type = null;\n    this.url = void 0;\n    this.m3u8 = \"\";\n    this.version = null;\n    this.canBlockReload = false;\n    this.canSkipUntil = 0;\n    this.canSkipDateRanges = false;\n    this.skippedSegments = 0;\n    this.recentlyRemovedDateranges = void 0;\n    this.partHoldBack = 0;\n    this.holdBack = 0;\n    this.partTarget = 0;\n    this.preloadHint = void 0;\n    this.renditionReports = void 0;\n    this.tuneInGoal = 0;\n    this.deltaUpdateFailed = void 0;\n    this.driftStartTime = 0;\n    this.driftEndTime = 0;\n    this.driftStart = 0;\n    this.driftEnd = 0;\n    this.encryptedFragments = void 0;\n    this.playlistParsingError = null;\n    this.variableList = null;\n    this.hasVariableRefs = false;\n    this.fragments = [];\n    this.encryptedFragments = [];\n    this.dateRanges = {};\n    this.url = baseUrl;\n  }\n  reloaded(previous) {\n    if (!previous) {\n      this.advanced = true;\n      this.updated = true;\n      return;\n    }\n    const partSnDiff = this.lastPartSn - previous.lastPartSn;\n    const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;\n    this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;\n    this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;\n    if (this.updated || this.advanced) {\n      this.misses = Math.floor(previous.misses * 0.6);\n    } else {\n      this.misses = previous.misses + 1;\n    }\n    this.availabilityDelay = previous.availabilityDelay;\n  }\n  get hasProgramDateTime() {\n    if (this.fragments.length) {\n      return isFiniteNumber(this.fragments[this.fragments.length - 1].programDateTime);\n    }\n    return false;\n  }\n  get levelTargetDuration() {\n    return this.averagetargetduration || this.targetduration || DEFAULT_TARGET_DURATION;\n  }\n  get drift() {\n    const runTime = this.driftEndTime - this.driftStartTime;\n    if (runTime > 0) {\n      const runDuration = this.driftEnd - this.driftStart;\n      return runDuration * 1e3 / runTime;\n    }\n    return 1;\n  }\n  get edge() {\n    return this.partEnd || this.fragmentEnd;\n  }\n  get partEnd() {\n    var _this$partList;\n    if ((_this$partList = this.partList) != null && _this$partList.length) {\n      return this.partList[this.partList.length - 1].end;\n    }\n    return this.fragmentEnd;\n  }\n  get fragmentEnd() {\n    var _this$fragments;\n    if ((_this$fragments = this.fragments) != null && _this$fragments.length) {\n      return this.fragments[this.fragments.length - 1].end;\n    }\n    return 0;\n  }\n  get age() {\n    if (this.advancedDateTime) {\n      return Math.max(Date.now() - this.advancedDateTime, 0) / 1e3;\n    }\n    return 0;\n  }\n  get lastPartIndex() {\n    var _this$partList2;\n    if ((_this$partList2 = this.partList) != null && _this$partList2.length) {\n      return this.partList[this.partList.length - 1].index;\n    }\n    return -1;\n  }\n  get lastPartSn() {\n    var _this$partList3;\n    if ((_this$partList3 = this.partList) != null && _this$partList3.length) {\n      return this.partList[this.partList.length - 1].fragment.sn;\n    }\n    return this.endSN;\n  }\n}\nfunction base64Decode(base64encodedStr) {\n  return Uint8Array.from(atob(base64encodedStr), (c) => c.charCodeAt(0));\n}\nfunction getKeyIdBytes(str) {\n  const keyIdbytes = strToUtf8array(str).subarray(0, 16);\n  const paddedkeyIdbytes = new Uint8Array(16);\n  paddedkeyIdbytes.set(keyIdbytes, 16 - keyIdbytes.length);\n  return paddedkeyIdbytes;\n}\nfunction changeEndianness(keyId) {\n  const swap = function swap2(array, from, to) {\n    const cur = array[from];\n    array[from] = array[to];\n    array[to] = cur;\n  };\n  swap(keyId, 0, 3);\n  swap(keyId, 1, 2);\n  swap(keyId, 4, 5);\n  swap(keyId, 6, 7);\n}\nfunction convertDataUriToArrayBytes(uri) {\n  const colonsplit = uri.split(\":\");\n  let keydata = null;\n  if (colonsplit[0] === \"data\" && colonsplit.length === 2) {\n    const semicolonsplit = colonsplit[1].split(\";\");\n    const commasplit = semicolonsplit[semicolonsplit.length - 1].split(\",\");\n    if (commasplit.length === 2) {\n      const isbase64 = commasplit[0] === \"base64\";\n      const data = commasplit[1];\n      if (isbase64) {\n        semicolonsplit.splice(-1, 1);\n        keydata = base64Decode(data);\n      } else {\n        keydata = getKeyIdBytes(data);\n      }\n    }\n  }\n  return keydata;\n}\nfunction strToUtf8array(str) {\n  return Uint8Array.from(unescape(encodeURIComponent(str)), (c) => c.charCodeAt(0));\n}\nconst optionalSelf = typeof self !== \"undefined\" ? self : void 0;\nvar KeySystems = {\n  CLEARKEY: \"org.w3.clearkey\",\n  FAIRPLAY: \"com.apple.fps\",\n  PLAYREADY: \"com.microsoft.playready\",\n  WIDEVINE: \"com.widevine.alpha\"\n};\nvar KeySystemFormats = {\n  CLEARKEY: \"org.w3.clearkey\",\n  FAIRPLAY: \"com.apple.streamingkeydelivery\",\n  PLAYREADY: \"com.microsoft.playready\",\n  WIDEVINE: \"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\"\n};\nfunction keySystemFormatToKeySystemDomain(format2) {\n  switch (format2) {\n    case KeySystemFormats.FAIRPLAY:\n      return KeySystems.FAIRPLAY;\n    case KeySystemFormats.PLAYREADY:\n      return KeySystems.PLAYREADY;\n    case KeySystemFormats.WIDEVINE:\n      return KeySystems.WIDEVINE;\n    case KeySystemFormats.CLEARKEY:\n      return KeySystems.CLEARKEY;\n  }\n}\nvar KeySystemIds = {\n  WIDEVINE: \"edef8ba979d64acea3c827dcd51d21ed\"\n};\nfunction keySystemIdToKeySystemDomain(systemId) {\n  if (systemId === KeySystemIds.WIDEVINE) {\n    return KeySystems.WIDEVINE;\n  }\n}\nfunction keySystemDomainToKeySystemFormat(keySystem) {\n  switch (keySystem) {\n    case KeySystems.FAIRPLAY:\n      return KeySystemFormats.FAIRPLAY;\n    case KeySystems.PLAYREADY:\n      return KeySystemFormats.PLAYREADY;\n    case KeySystems.WIDEVINE:\n      return KeySystemFormats.WIDEVINE;\n    case KeySystems.CLEARKEY:\n      return KeySystemFormats.CLEARKEY;\n  }\n}\nfunction getKeySystemsForConfig(config) {\n  const {\n    drmSystems,\n    widevineLicenseUrl\n  } = config;\n  const keySystemsToAttempt = drmSystems ? [KeySystems.FAIRPLAY, KeySystems.WIDEVINE, KeySystems.PLAYREADY, KeySystems.CLEARKEY].filter((keySystem) => !!drmSystems[keySystem]) : [];\n  if (!keySystemsToAttempt[KeySystems.WIDEVINE] && widevineLicenseUrl) {\n    keySystemsToAttempt.push(KeySystems.WIDEVINE);\n  }\n  return keySystemsToAttempt;\n}\nconst requestMediaKeySystemAccess = function(_optionalSelf$navigat) {\n  if (optionalSelf != null && (_optionalSelf$navigat = optionalSelf.navigator) != null && _optionalSelf$navigat.requestMediaKeySystemAccess) {\n    return self.navigator.requestMediaKeySystemAccess.bind(self.navigator);\n  } else {\n    return null;\n  }\n}();\nfunction getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, drmSystemOptions) {\n  let initDataTypes;\n  switch (keySystem) {\n    case KeySystems.FAIRPLAY:\n      initDataTypes = [\"cenc\", \"sinf\"];\n      break;\n    case KeySystems.WIDEVINE:\n    case KeySystems.PLAYREADY:\n      initDataTypes = [\"cenc\"];\n      break;\n    case KeySystems.CLEARKEY:\n      initDataTypes = [\"cenc\", \"keyids\"];\n      break;\n    default:\n      throw new Error(`Unknown key-system: ${keySystem}`);\n  }\n  return createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions);\n}\nfunction createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions) {\n  const baseConfig = {\n    initDataTypes,\n    persistentState: drmSystemOptions.persistentState || \"optional\",\n    distinctiveIdentifier: drmSystemOptions.distinctiveIdentifier || \"optional\",\n    sessionTypes: drmSystemOptions.sessionTypes || [drmSystemOptions.sessionType || \"temporary\"],\n    audioCapabilities: audioCodecs.map((codec) => ({\n      contentType: `audio/mp4; codecs=\"${codec}\"`,\n      robustness: drmSystemOptions.audioRobustness || \"\",\n      encryptionScheme: drmSystemOptions.audioEncryptionScheme || null\n    })),\n    videoCapabilities: videoCodecs.map((codec) => ({\n      contentType: `video/mp4; codecs=\"${codec}\"`,\n      robustness: drmSystemOptions.videoRobustness || \"\",\n      encryptionScheme: drmSystemOptions.videoEncryptionScheme || null\n    }))\n  };\n  return [baseConfig];\n}\nfunction sliceUint8(array, start, end) {\n  return Uint8Array.prototype.slice ? array.slice(start, end) : new Uint8Array(Array.prototype.slice.call(array, start, end));\n}\nconst isHeader$2 = (data, offset) => {\n  if (offset + 10 <= data.length) {\n    if (data[offset] === 73 && data[offset + 1] === 68 && data[offset + 2] === 51) {\n      if (data[offset + 3] < 255 && data[offset + 4] < 255) {\n        if (data[offset + 6] < 128 && data[offset + 7] < 128 && data[offset + 8] < 128 && data[offset + 9] < 128) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\nconst isFooter = (data, offset) => {\n  if (offset + 10 <= data.length) {\n    if (data[offset] === 51 && data[offset + 1] === 68 && data[offset + 2] === 73) {\n      if (data[offset + 3] < 255 && data[offset + 4] < 255) {\n        if (data[offset + 6] < 128 && data[offset + 7] < 128 && data[offset + 8] < 128 && data[offset + 9] < 128) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\nconst getID3Data = (data, offset) => {\n  const front = offset;\n  let length = 0;\n  while (isHeader$2(data, offset)) {\n    length += 10;\n    const size = readSize(data, offset + 6);\n    length += size;\n    if (isFooter(data, offset + 10)) {\n      length += 10;\n    }\n    offset += length;\n  }\n  if (length > 0) {\n    return data.subarray(front, front + length);\n  }\n  return void 0;\n};\nconst readSize = (data, offset) => {\n  let size = 0;\n  size = (data[offset] & 127) << 21;\n  size |= (data[offset + 1] & 127) << 14;\n  size |= (data[offset + 2] & 127) << 7;\n  size |= data[offset + 3] & 127;\n  return size;\n};\nconst canParse$2 = (data, offset) => {\n  return isHeader$2(data, offset) && readSize(data, offset + 6) + 10 <= data.length - offset;\n};\nconst getTimeStamp = (data) => {\n  const frames = getID3Frames(data);\n  for (let i = 0; i < frames.length; i++) {\n    const frame = frames[i];\n    if (isTimeStampFrame(frame)) {\n      return readTimeStamp(frame);\n    }\n  }\n  return void 0;\n};\nconst isTimeStampFrame = (frame) => {\n  return frame && frame.key === \"PRIV\" && frame.info === \"com.apple.streaming.transportStreamTimestamp\";\n};\nconst getFrameData = (data) => {\n  const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n  const size = readSize(data, 4);\n  const offset = 10;\n  return {\n    type,\n    size,\n    data: data.subarray(offset, offset + size)\n  };\n};\nconst getID3Frames = (id3Data) => {\n  let offset = 0;\n  const frames = [];\n  while (isHeader$2(id3Data, offset)) {\n    const size = readSize(id3Data, offset + 6);\n    offset += 10;\n    const end = offset + size;\n    while (offset + 8 < end) {\n      const frameData = getFrameData(id3Data.subarray(offset));\n      const frame = decodeFrame(frameData);\n      if (frame) {\n        frames.push(frame);\n      }\n      offset += frameData.size + 10;\n    }\n    if (isFooter(id3Data, offset)) {\n      offset += 10;\n    }\n  }\n  return frames;\n};\nconst decodeFrame = (frame) => {\n  if (frame.type === \"PRIV\") {\n    return decodePrivFrame(frame);\n  } else if (frame.type[0] === \"W\") {\n    return decodeURLFrame(frame);\n  }\n  return decodeTextFrame(frame);\n};\nconst decodePrivFrame = (frame) => {\n  if (frame.size < 2) {\n    return void 0;\n  }\n  const owner = utf8ArrayToStr(frame.data, true);\n  const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n  return {\n    key: frame.type,\n    info: owner,\n    data: privateData.buffer\n  };\n};\nconst decodeTextFrame = (frame) => {\n  if (frame.size < 2) {\n    return void 0;\n  }\n  if (frame.type === \"TXXX\") {\n    let index = 1;\n    const description = utf8ArrayToStr(frame.data.subarray(index), true);\n    index += description.length + 1;\n    const value = utf8ArrayToStr(frame.data.subarray(index));\n    return {\n      key: frame.type,\n      info: description,\n      data: value\n    };\n  }\n  const text = utf8ArrayToStr(frame.data.subarray(1));\n  return {\n    key: frame.type,\n    data: text\n  };\n};\nconst decodeURLFrame = (frame) => {\n  if (frame.type === \"WXXX\") {\n    if (frame.size < 2) {\n      return void 0;\n    }\n    let index = 1;\n    const description = utf8ArrayToStr(frame.data.subarray(index), true);\n    index += description.length + 1;\n    const value = utf8ArrayToStr(frame.data.subarray(index));\n    return {\n      key: frame.type,\n      info: description,\n      data: value\n    };\n  }\n  const url = utf8ArrayToStr(frame.data);\n  return {\n    key: frame.type,\n    data: url\n  };\n};\nconst readTimeStamp = (timeStampFrame) => {\n  if (timeStampFrame.data.byteLength === 8) {\n    const data = new Uint8Array(timeStampFrame.data);\n    const pts33Bit = data[3] & 1;\n    let timestamp = (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n    timestamp /= 45;\n    if (pts33Bit) {\n      timestamp += 4772185884e-2;\n    }\n    return Math.round(timestamp);\n  }\n  return void 0;\n};\nconst utf8ArrayToStr = (array, exitOnNull = false) => {\n  const decoder2 = getTextDecoder();\n  if (decoder2) {\n    const decoded = decoder2.decode(array);\n    if (exitOnNull) {\n      const idx = decoded.indexOf(\"\\0\");\n      return idx !== -1 ? decoded.substring(0, idx) : decoded;\n    }\n    return decoded.replace(/\\0/g, \"\");\n  }\n  const len = array.length;\n  let c;\n  let char2;\n  let char3;\n  let out = \"\";\n  let i = 0;\n  while (i < len) {\n    c = array[i++];\n    if (c === 0 && exitOnNull) {\n      return out;\n    } else if (c === 0 || c === 3) {\n      continue;\n    }\n    switch (c >> 4) {\n      case 0:\n      case 1:\n      case 2:\n      case 3:\n      case 4:\n      case 5:\n      case 6:\n      case 7:\n        out += String.fromCharCode(c);\n        break;\n      case 12:\n      case 13:\n        char2 = array[i++];\n        out += String.fromCharCode((c & 31) << 6 | char2 & 63);\n        break;\n      case 14:\n        char2 = array[i++];\n        char3 = array[i++];\n        out += String.fromCharCode((c & 15) << 12 | (char2 & 63) << 6 | (char3 & 63) << 0);\n        break;\n    }\n  }\n  return out;\n};\nlet decoder;\nfunction getTextDecoder() {\n  if (navigator.userAgent.includes(\"PlayStation 4\")) {\n    return;\n  }\n  if (!decoder && typeof self.TextDecoder !== \"undefined\") {\n    decoder = new self.TextDecoder(\"utf-8\");\n  }\n  return decoder;\n}\nconst Hex = {\n  hexDump: function(array) {\n    let str = \"\";\n    for (let i = 0; i < array.length; i++) {\n      let h = array[i].toString(16);\n      if (h.length < 2) {\n        h = \"0\" + h;\n      }\n      str += h;\n    }\n    return str;\n  }\n};\nconst UINT32_MAX$1 = Math.pow(2, 32) - 1;\nconst push = [].push;\nconst RemuxerTrackIdConfig = {\n  video: 1,\n  audio: 2,\n  id3: 3,\n  text: 4\n};\nfunction bin2str(data) {\n  return String.fromCharCode.apply(null, data);\n}\nfunction readUint16(buffer, offset) {\n  const val = buffer[offset] << 8 | buffer[offset + 1];\n  return val < 0 ? 65536 + val : val;\n}\nfunction readUint32(buffer, offset) {\n  const val = readSint32(buffer, offset);\n  return val < 0 ? 4294967296 + val : val;\n}\nfunction readUint64(buffer, offset) {\n  let result = readUint32(buffer, offset);\n  result *= Math.pow(2, 32);\n  result += readUint32(buffer, offset + 4);\n  return result;\n}\nfunction readSint32(buffer, offset) {\n  return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];\n}\nfunction writeUint32(buffer, offset, value) {\n  buffer[offset] = value >> 24;\n  buffer[offset + 1] = value >> 16 & 255;\n  buffer[offset + 2] = value >> 8 & 255;\n  buffer[offset + 3] = value & 255;\n}\nfunction hasMoofData(data) {\n  const end = data.byteLength;\n  for (let i = 0; i < end; ) {\n    const size = readUint32(data, i);\n    if (size > 8 && data[i + 4] === 109 && data[i + 5] === 111 && data[i + 6] === 111 && data[i + 7] === 102) {\n      return true;\n    }\n    i = size > 1 ? i + size : end;\n  }\n  return false;\n}\nfunction findBox(data, path) {\n  const results = [];\n  if (!path.length) {\n    return results;\n  }\n  const end = data.byteLength;\n  for (let i = 0; i < end; ) {\n    const size = readUint32(data, i);\n    const type = bin2str(data.subarray(i + 4, i + 8));\n    const endbox = size > 1 ? i + size : end;\n    if (type === path[0]) {\n      if (path.length === 1) {\n        results.push(data.subarray(i + 8, endbox));\n      } else {\n        const subresults = findBox(data.subarray(i + 8, endbox), path.slice(1));\n        if (subresults.length) {\n          push.apply(results, subresults);\n        }\n      }\n    }\n    i = endbox;\n  }\n  return results;\n}\nfunction parseSegmentIndex(sidx) {\n  const references = [];\n  const version = sidx[0];\n  let index = 8;\n  const timescale = readUint32(sidx, index);\n  index += 4;\n  let earliestPresentationTime = 0;\n  let firstOffset = 0;\n  if (version === 0) {\n    earliestPresentationTime = readUint32(sidx, index);\n    firstOffset = readUint32(sidx, index + 4);\n    index += 8;\n  } else {\n    earliestPresentationTime = readUint64(sidx, index);\n    firstOffset = readUint64(sidx, index + 8);\n    index += 16;\n  }\n  index += 2;\n  let startByte = sidx.length + firstOffset;\n  const referencesCount = readUint16(sidx, index);\n  index += 2;\n  for (let i = 0; i < referencesCount; i++) {\n    let referenceIndex = index;\n    const referenceInfo = readUint32(sidx, referenceIndex);\n    referenceIndex += 4;\n    const referenceSize = referenceInfo & 2147483647;\n    const referenceType = (referenceInfo & 2147483648) >>> 31;\n    if (referenceType === 1) {\n      logger.warn(\"SIDX has hierarchical references (not supported)\");\n      return null;\n    }\n    const subsegmentDuration = readUint32(sidx, referenceIndex);\n    referenceIndex += 4;\n    references.push({\n      referenceSize,\n      subsegmentDuration,\n      // unscaled\n      info: {\n        duration: subsegmentDuration / timescale,\n        start: startByte,\n        end: startByte + referenceSize - 1\n      }\n    });\n    startByte += referenceSize;\n    referenceIndex += 4;\n    index = referenceIndex;\n  }\n  return {\n    earliestPresentationTime,\n    timescale,\n    version,\n    referencesCount,\n    references\n  };\n}\nfunction parseInitSegment(initSegment) {\n  const result = [];\n  const traks = findBox(initSegment, [\"moov\", \"trak\"]);\n  for (let i = 0; i < traks.length; i++) {\n    const trak = traks[i];\n    const tkhd = findBox(trak, [\"tkhd\"])[0];\n    if (tkhd) {\n      let version = tkhd[0];\n      const trackId = readUint32(tkhd, version === 0 ? 12 : 20);\n      const mdhd = findBox(trak, [\"mdia\", \"mdhd\"])[0];\n      if (mdhd) {\n        version = mdhd[0];\n        const timescale = readUint32(mdhd, version === 0 ? 12 : 20);\n        const hdlr = findBox(trak, [\"mdia\", \"hdlr\"])[0];\n        if (hdlr) {\n          const hdlrType = bin2str(hdlr.subarray(8, 12));\n          const type = {\n            soun: ElementaryStreamTypes.AUDIO,\n            vide: ElementaryStreamTypes.VIDEO\n          }[hdlrType];\n          if (type) {\n            const stsd = findBox(trak, [\"mdia\", \"minf\", \"stbl\", \"stsd\"])[0];\n            const stsdData = parseStsd(stsd);\n            result[trackId] = {\n              timescale,\n              type\n            };\n            result[type] = _objectSpread2({\n              timescale,\n              id: trackId\n            }, stsdData);\n          }\n        }\n      }\n    }\n  }\n  const trex = findBox(initSegment, [\"moov\", \"mvex\", \"trex\"]);\n  trex.forEach((trex2) => {\n    const trackId = readUint32(trex2, 4);\n    const track = result[trackId];\n    if (track) {\n      track.default = {\n        duration: readUint32(trex2, 12),\n        flags: readUint32(trex2, 20)\n      };\n    }\n  });\n  return result;\n}\nfunction parseStsd(stsd) {\n  const sampleEntries = stsd.subarray(8);\n  const sampleEntriesEnd = sampleEntries.subarray(8 + 78);\n  const fourCC = bin2str(sampleEntries.subarray(4, 8));\n  let codec = fourCC;\n  const encrypted = fourCC === \"enca\" || fourCC === \"encv\";\n  if (encrypted) {\n    const encBox = findBox(sampleEntries, [fourCC])[0];\n    const encBoxChildren = encBox.subarray(fourCC === \"enca\" ? 28 : 78);\n    const sinfs = findBox(encBoxChildren, [\"sinf\"]);\n    sinfs.forEach((sinf) => {\n      const schm = findBox(sinf, [\"schm\"])[0];\n      if (schm) {\n        const scheme = bin2str(schm.subarray(4, 8));\n        if (scheme === \"cbcs\" || scheme === \"cenc\") {\n          const frma = findBox(sinf, [\"frma\"])[0];\n          if (frma) {\n            codec = bin2str(frma);\n          }\n        }\n      }\n    });\n  }\n  switch (codec) {\n    case \"avc1\":\n    case \"avc2\":\n    case \"avc3\":\n    case \"avc4\": {\n      const avcCBox = findBox(sampleEntriesEnd, [\"avcC\"])[0];\n      codec += \".\" + toHex(avcCBox[1]) + toHex(avcCBox[2]) + toHex(avcCBox[3]);\n      break;\n    }\n    case \"mp4a\": {\n      const codecBox = findBox(sampleEntries, [fourCC])[0];\n      const esdsBox = findBox(codecBox.subarray(28), [\"esds\"])[0];\n      if (esdsBox && esdsBox.length > 12) {\n        let i = 4;\n        if (esdsBox[i++] !== 3) {\n          break;\n        }\n        i = skipBERInteger(esdsBox, i);\n        i += 2;\n        const flags = esdsBox[i++];\n        if (flags & 128) {\n          i += 2;\n        }\n        if (flags & 64) {\n          i += esdsBox[i++];\n        }\n        if (esdsBox[i++] !== 4) {\n          break;\n        }\n        i = skipBERInteger(esdsBox, i);\n        const objectType = esdsBox[i++];\n        if (objectType === 64) {\n          codec += \".\" + toHex(objectType);\n        } else {\n          break;\n        }\n        i += 12;\n        if (esdsBox[i++] !== 5) {\n          break;\n        }\n        i = skipBERInteger(esdsBox, i);\n        const firstByte = esdsBox[i++];\n        let audioObjectType = (firstByte & 248) >> 3;\n        if (audioObjectType === 31) {\n          audioObjectType += 1 + ((firstByte & 7) << 3) + ((esdsBox[i] & 224) >> 5);\n        }\n        codec += \".\" + audioObjectType;\n      }\n      break;\n    }\n    case \"hvc1\":\n    case \"hev1\": {\n      const hvcCBox = findBox(sampleEntriesEnd, [\"hvcC\"])[0];\n      const profileByte = hvcCBox[1];\n      const profileSpace = [\"\", \"A\", \"B\", \"C\"][profileByte >> 6];\n      const generalProfileIdc = profileByte & 31;\n      const profileCompat = readUint32(hvcCBox, 2);\n      const tierFlag = (profileByte & 32) >> 5 ? \"H\" : \"L\";\n      const levelIDC = hvcCBox[12];\n      const constraintIndicator = hvcCBox.subarray(6, 12);\n      codec += \".\" + profileSpace + generalProfileIdc;\n      codec += \".\" + profileCompat.toString(16).toUpperCase();\n      codec += \".\" + tierFlag + levelIDC;\n      let constraintString = \"\";\n      for (let i = constraintIndicator.length; i--; ) {\n        const byte = constraintIndicator[i];\n        if (byte || constraintString) {\n          const encodedByte = byte.toString(16).toUpperCase();\n          constraintString = \".\" + encodedByte + constraintString;\n        }\n      }\n      codec += constraintString;\n      break;\n    }\n    case \"dvh1\":\n    case \"dvhe\": {\n      const dvcCBox = findBox(sampleEntriesEnd, [\"dvcC\"])[0];\n      const profile = dvcCBox[2] >> 1 & 127;\n      const level = dvcCBox[2] << 5 & 32 | dvcCBox[3] >> 3 & 31;\n      codec += \".\" + addLeadingZero(profile) + \".\" + addLeadingZero(level);\n      break;\n    }\n    case \"vp09\": {\n      const vpcCBox = findBox(sampleEntriesEnd, [\"vpcC\"])[0];\n      const profile = vpcCBox[4];\n      const level = vpcCBox[5];\n      const bitDepth = vpcCBox[6] >> 4 & 15;\n      codec += \".\" + addLeadingZero(profile) + \".\" + addLeadingZero(level) + \".\" + addLeadingZero(bitDepth);\n      break;\n    }\n    case \"av01\": {\n      const av1CBox = findBox(sampleEntriesEnd, [\"av1C\"])[0];\n      const profile = av1CBox[1] >>> 5;\n      const level = av1CBox[1] & 31;\n      const tierFlag = av1CBox[2] >>> 7 ? \"H\" : \"M\";\n      const highBitDepth = (av1CBox[2] & 64) >> 6;\n      const twelveBit = (av1CBox[2] & 32) >> 5;\n      const bitDepth = profile === 2 && highBitDepth ? twelveBit ? 12 : 10 : highBitDepth ? 10 : 8;\n      const monochrome = (av1CBox[2] & 16) >> 4;\n      const chromaSubsamplingX = (av1CBox[2] & 8) >> 3;\n      const chromaSubsamplingY = (av1CBox[2] & 4) >> 2;\n      const chromaSamplePosition = av1CBox[2] & 3;\n      const colorPrimaries = 1;\n      const transferCharacteristics = 1;\n      const matrixCoefficients = 1;\n      const videoFullRangeFlag = 0;\n      codec += \".\" + profile + \".\" + addLeadingZero(level) + tierFlag + \".\" + addLeadingZero(bitDepth) + \".\" + monochrome + \".\" + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition + \".\" + addLeadingZero(colorPrimaries) + \".\" + addLeadingZero(transferCharacteristics) + \".\" + addLeadingZero(matrixCoefficients) + \".\" + videoFullRangeFlag;\n      break;\n    }\n  }\n  return {\n    codec,\n    encrypted\n  };\n}\nfunction skipBERInteger(bytes, i) {\n  const limit = i + 5;\n  while (bytes[i++] & 128 && i < limit) {\n  }\n  return i;\n}\nfunction toHex(x) {\n  return (\"0\" + x.toString(16).toUpperCase()).slice(-2);\n}\nfunction addLeadingZero(num) {\n  return (num < 10 ? \"0\" : \"\") + num;\n}\nfunction patchEncyptionData(initSegment, decryptdata) {\n  if (!initSegment || !decryptdata) {\n    return initSegment;\n  }\n  const keyId = decryptdata.keyId;\n  if (keyId && decryptdata.isCommonEncryption) {\n    const traks = findBox(initSegment, [\"moov\", \"trak\"]);\n    traks.forEach((trak) => {\n      const stsd = findBox(trak, [\"mdia\", \"minf\", \"stbl\", \"stsd\"])[0];\n      const sampleEntries = stsd.subarray(8);\n      let encBoxes = findBox(sampleEntries, [\"enca\"]);\n      const isAudio = encBoxes.length > 0;\n      if (!isAudio) {\n        encBoxes = findBox(sampleEntries, [\"encv\"]);\n      }\n      encBoxes.forEach((enc) => {\n        const encBoxChildren = isAudio ? enc.subarray(28) : enc.subarray(78);\n        const sinfBoxes = findBox(encBoxChildren, [\"sinf\"]);\n        sinfBoxes.forEach((sinf) => {\n          const tenc = parseSinf(sinf);\n          if (tenc) {\n            const tencKeyId = tenc.subarray(8, 24);\n            if (!tencKeyId.some((b) => b !== 0)) {\n              logger.log(`[eme] Patching keyId in 'enc${isAudio ? \"a\" : \"v\"}>sinf>>tenc' box: ${Hex.hexDump(tencKeyId)} -> ${Hex.hexDump(keyId)}`);\n              tenc.set(keyId, 8);\n            }\n          }\n        });\n      });\n    });\n  }\n  return initSegment;\n}\nfunction parseSinf(sinf) {\n  const schm = findBox(sinf, [\"schm\"])[0];\n  if (schm) {\n    const scheme = bin2str(schm.subarray(4, 8));\n    if (scheme === \"cbcs\" || scheme === \"cenc\") {\n      return findBox(sinf, [\"schi\", \"tenc\"])[0];\n    }\n  }\n  logger.error(`[eme] missing 'schm' box`);\n  return null;\n}\nfunction getStartDTS(initData, fmp4) {\n  return findBox(fmp4, [\"moof\", \"traf\"]).reduce((result, traf) => {\n    const tfdt = findBox(traf, [\"tfdt\"])[0];\n    const version = tfdt[0];\n    const start = findBox(traf, [\"tfhd\"]).reduce((result2, tfhd) => {\n      const id = readUint32(tfhd, 4);\n      const track = initData[id];\n      if (track) {\n        let baseTime = readUint32(tfdt, 4);\n        if (version === 1) {\n          if (baseTime === UINT32_MAX$1) {\n            logger.warn(`[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time`);\n            return result2;\n          }\n          baseTime *= UINT32_MAX$1 + 1;\n          baseTime += readUint32(tfdt, 8);\n        }\n        const scale = track.timescale || 9e4;\n        const startTime = baseTime / scale;\n        if (isFiniteNumber(startTime) && (result2 === null || startTime < result2)) {\n          return startTime;\n        }\n      }\n      return result2;\n    }, null);\n    if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {\n      return start;\n    }\n    return result;\n  }, null);\n}\nfunction getDuration(data, initData) {\n  let rawDuration = 0;\n  let videoDuration = 0;\n  let audioDuration = 0;\n  const trafs = findBox(data, [\"moof\", \"traf\"]);\n  for (let i = 0; i < trafs.length; i++) {\n    const traf = trafs[i];\n    const tfhd = findBox(traf, [\"tfhd\"])[0];\n    const id = readUint32(tfhd, 4);\n    const track = initData[id];\n    if (!track) {\n      continue;\n    }\n    const trackDefault = track.default;\n    const tfhdFlags = readUint32(tfhd, 0) | (trackDefault == null ? void 0 : trackDefault.flags);\n    let sampleDuration = trackDefault == null ? void 0 : trackDefault.duration;\n    if (tfhdFlags & 8) {\n      if (tfhdFlags & 2) {\n        sampleDuration = readUint32(tfhd, 12);\n      } else {\n        sampleDuration = readUint32(tfhd, 8);\n      }\n    }\n    const timescale = track.timescale || 9e4;\n    const truns = findBox(traf, [\"trun\"]);\n    for (let j = 0; j < truns.length; j++) {\n      rawDuration = computeRawDurationFromSamples(truns[j]);\n      if (!rawDuration && sampleDuration) {\n        const sampleCount = readUint32(truns[j], 4);\n        rawDuration = sampleDuration * sampleCount;\n      }\n      if (track.type === ElementaryStreamTypes.VIDEO) {\n        videoDuration += rawDuration / timescale;\n      } else if (track.type === ElementaryStreamTypes.AUDIO) {\n        audioDuration += rawDuration / timescale;\n      }\n    }\n  }\n  if (videoDuration === 0 && audioDuration === 0) {\n    let sidxMinStart = Infinity;\n    let sidxMaxEnd = 0;\n    let sidxDuration = 0;\n    const sidxs = findBox(data, [\"sidx\"]);\n    for (let i = 0; i < sidxs.length; i++) {\n      const sidx = parseSegmentIndex(sidxs[i]);\n      if (sidx != null && sidx.references) {\n        sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);\n        const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);\n        sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);\n        sidxDuration = sidxMaxEnd - sidxMinStart;\n      }\n    }\n    if (sidxDuration && isFiniteNumber(sidxDuration)) {\n      return sidxDuration;\n    }\n  }\n  if (videoDuration) {\n    return videoDuration;\n  }\n  return audioDuration;\n}\nfunction computeRawDurationFromSamples(trun) {\n  const flags = readUint32(trun, 0);\n  let offset = 8;\n  if (flags & 1) {\n    offset += 4;\n  }\n  if (flags & 4) {\n    offset += 4;\n  }\n  let duration = 0;\n  const sampleCount = readUint32(trun, 4);\n  for (let i = 0; i < sampleCount; i++) {\n    if (flags & 256) {\n      const sampleDuration = readUint32(trun, offset);\n      duration += sampleDuration;\n      offset += 4;\n    }\n    if (flags & 512) {\n      offset += 4;\n    }\n    if (flags & 1024) {\n      offset += 4;\n    }\n    if (flags & 2048) {\n      offset += 4;\n    }\n  }\n  return duration;\n}\nfunction offsetStartDTS(initData, fmp4, timeOffset) {\n  findBox(fmp4, [\"moof\", \"traf\"]).forEach((traf) => {\n    findBox(traf, [\"tfhd\"]).forEach((tfhd) => {\n      const id = readUint32(tfhd, 4);\n      const track = initData[id];\n      if (!track) {\n        return;\n      }\n      const timescale = track.timescale || 9e4;\n      findBox(traf, [\"tfdt\"]).forEach((tfdt) => {\n        const version = tfdt[0];\n        const offset = timeOffset * timescale;\n        if (offset) {\n          let baseMediaDecodeTime = readUint32(tfdt, 4);\n          if (version === 0) {\n            baseMediaDecodeTime -= offset;\n            baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n            writeUint32(tfdt, 4, baseMediaDecodeTime);\n          } else {\n            baseMediaDecodeTime *= Math.pow(2, 32);\n            baseMediaDecodeTime += readUint32(tfdt, 8);\n            baseMediaDecodeTime -= offset;\n            baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n            const upper = Math.floor(baseMediaDecodeTime / (UINT32_MAX$1 + 1));\n            const lower = Math.floor(baseMediaDecodeTime % (UINT32_MAX$1 + 1));\n            writeUint32(tfdt, 4, upper);\n            writeUint32(tfdt, 8, lower);\n          }\n        }\n      });\n    });\n  });\n}\nfunction segmentValidRange(data) {\n  const segmentedRange = {\n    valid: null,\n    remainder: null\n  };\n  const moofs = findBox(data, [\"moof\"]);\n  if (moofs.length < 2) {\n    segmentedRange.remainder = data;\n    return segmentedRange;\n  }\n  const last = moofs[moofs.length - 1];\n  segmentedRange.valid = sliceUint8(data, 0, last.byteOffset - 8);\n  segmentedRange.remainder = sliceUint8(data, last.byteOffset - 8);\n  return segmentedRange;\n}\nfunction appendUint8Array(data1, data2) {\n  const temp = new Uint8Array(data1.length + data2.length);\n  temp.set(data1);\n  temp.set(data2, data1.length);\n  return temp;\n}\nfunction parseSamples(timeOffset, track) {\n  const seiSamples = [];\n  const videoData = track.samples;\n  const timescale = track.timescale;\n  const trackId = track.id;\n  let isHEVCFlavor = false;\n  const moofs = findBox(videoData, [\"moof\"]);\n  moofs.map((moof) => {\n    const moofOffset = moof.byteOffset - 8;\n    const trafs = findBox(moof, [\"traf\"]);\n    trafs.map((traf) => {\n      const baseTime = findBox(traf, [\"tfdt\"]).map((tfdt) => {\n        const version = tfdt[0];\n        let result = readUint32(tfdt, 4);\n        if (version === 1) {\n          result *= Math.pow(2, 32);\n          result += readUint32(tfdt, 8);\n        }\n        return result / timescale;\n      })[0];\n      if (baseTime !== void 0) {\n        timeOffset = baseTime;\n      }\n      return findBox(traf, [\"tfhd\"]).map((tfhd) => {\n        const id = readUint32(tfhd, 4);\n        const tfhdFlags = readUint32(tfhd, 0) & 16777215;\n        const baseDataOffsetPresent = (tfhdFlags & 1) !== 0;\n        const sampleDescriptionIndexPresent = (tfhdFlags & 2) !== 0;\n        const defaultSampleDurationPresent = (tfhdFlags & 8) !== 0;\n        let defaultSampleDuration = 0;\n        const defaultSampleSizePresent = (tfhdFlags & 16) !== 0;\n        let defaultSampleSize = 0;\n        const defaultSampleFlagsPresent = (tfhdFlags & 32) !== 0;\n        let tfhdOffset = 8;\n        if (id === trackId) {\n          if (baseDataOffsetPresent) {\n            tfhdOffset += 8;\n          }\n          if (sampleDescriptionIndexPresent) {\n            tfhdOffset += 4;\n          }\n          if (defaultSampleDurationPresent) {\n            defaultSampleDuration = readUint32(tfhd, tfhdOffset);\n            tfhdOffset += 4;\n          }\n          if (defaultSampleSizePresent) {\n            defaultSampleSize = readUint32(tfhd, tfhdOffset);\n            tfhdOffset += 4;\n          }\n          if (defaultSampleFlagsPresent) {\n            tfhdOffset += 4;\n          }\n          if (track.type === \"video\") {\n            isHEVCFlavor = isHEVC(track.codec);\n          }\n          findBox(traf, [\"trun\"]).map((trun) => {\n            const version = trun[0];\n            const flags = readUint32(trun, 0) & 16777215;\n            const dataOffsetPresent = (flags & 1) !== 0;\n            let dataOffset = 0;\n            const firstSampleFlagsPresent = (flags & 4) !== 0;\n            const sampleDurationPresent = (flags & 256) !== 0;\n            let sampleDuration = 0;\n            const sampleSizePresent = (flags & 512) !== 0;\n            let sampleSize = 0;\n            const sampleFlagsPresent = (flags & 1024) !== 0;\n            const sampleCompositionOffsetsPresent = (flags & 2048) !== 0;\n            let compositionOffset = 0;\n            const sampleCount = readUint32(trun, 4);\n            let trunOffset = 8;\n            if (dataOffsetPresent) {\n              dataOffset = readUint32(trun, trunOffset);\n              trunOffset += 4;\n            }\n            if (firstSampleFlagsPresent) {\n              trunOffset += 4;\n            }\n            let sampleOffset = dataOffset + moofOffset;\n            for (let ix = 0; ix < sampleCount; ix++) {\n              if (sampleDurationPresent) {\n                sampleDuration = readUint32(trun, trunOffset);\n                trunOffset += 4;\n              } else {\n                sampleDuration = defaultSampleDuration;\n              }\n              if (sampleSizePresent) {\n                sampleSize = readUint32(trun, trunOffset);\n                trunOffset += 4;\n              } else {\n                sampleSize = defaultSampleSize;\n              }\n              if (sampleFlagsPresent) {\n                trunOffset += 4;\n              }\n              if (sampleCompositionOffsetsPresent) {\n                if (version === 0) {\n                  compositionOffset = readUint32(trun, trunOffset);\n                } else {\n                  compositionOffset = readSint32(trun, trunOffset);\n                }\n                trunOffset += 4;\n              }\n              if (track.type === ElementaryStreamTypes.VIDEO) {\n                let naluTotalSize = 0;\n                while (naluTotalSize < sampleSize) {\n                  const naluSize = readUint32(videoData, sampleOffset);\n                  sampleOffset += 4;\n                  if (isSEIMessage(isHEVCFlavor, videoData[sampleOffset])) {\n                    const data = videoData.subarray(sampleOffset, sampleOffset + naluSize);\n                    parseSEIMessageFromNALu(data, isHEVCFlavor ? 2 : 1, timeOffset + compositionOffset / timescale, seiSamples);\n                  }\n                  sampleOffset += naluSize;\n                  naluTotalSize += naluSize + 4;\n                }\n              }\n              timeOffset += sampleDuration / timescale;\n            }\n          });\n        }\n      });\n    });\n  });\n  return seiSamples;\n}\nfunction isHEVC(codec) {\n  if (!codec) {\n    return false;\n  }\n  const delimit = codec.indexOf(\".\");\n  const baseCodec = delimit < 0 ? codec : codec.substring(0, delimit);\n  return baseCodec === \"hvc1\" || baseCodec === \"hev1\" || // Dolby Vision\n  baseCodec === \"dvh1\" || baseCodec === \"dvhe\";\n}\nfunction isSEIMessage(isHEVCFlavor, naluHeader) {\n  if (isHEVCFlavor) {\n    const naluType = naluHeader >> 1 & 63;\n    return naluType === 39 || naluType === 40;\n  } else {\n    const naluType = naluHeader & 31;\n    return naluType === 6;\n  }\n}\nfunction parseSEIMessageFromNALu(unescapedData, headerSize, pts, samples) {\n  const data = discardEPB(unescapedData);\n  let seiPtr = 0;\n  seiPtr += headerSize;\n  let payloadType = 0;\n  let payloadSize = 0;\n  let b = 0;\n  while (seiPtr < data.length) {\n    payloadType = 0;\n    do {\n      if (seiPtr >= data.length) {\n        break;\n      }\n      b = data[seiPtr++];\n      payloadType += b;\n    } while (b === 255);\n    payloadSize = 0;\n    do {\n      if (seiPtr >= data.length) {\n        break;\n      }\n      b = data[seiPtr++];\n      payloadSize += b;\n    } while (b === 255);\n    const leftOver = data.length - seiPtr;\n    let payPtr = seiPtr;\n    if (payloadSize < leftOver) {\n      seiPtr += payloadSize;\n    } else if (payloadSize > leftOver) {\n      logger.error(`Malformed SEI payload. ${payloadSize} is too small, only ${leftOver} bytes left to parse.`);\n      break;\n    }\n    if (payloadType === 4) {\n      const countryCode = data[payPtr++];\n      if (countryCode === 181) {\n        const providerCode = readUint16(data, payPtr);\n        payPtr += 2;\n        if (providerCode === 49) {\n          const userStructure = readUint32(data, payPtr);\n          payPtr += 4;\n          if (userStructure === 1195456820) {\n            const userDataType = data[payPtr++];\n            if (userDataType === 3) {\n              const firstByte = data[payPtr++];\n              const totalCCs = 31 & firstByte;\n              const enabled = 64 & firstByte;\n              const totalBytes = enabled ? 2 + totalCCs * 3 : 0;\n              const byteArray = new Uint8Array(totalBytes);\n              if (enabled) {\n                byteArray[0] = firstByte;\n                for (let i = 1; i < totalBytes; i++) {\n                  byteArray[i] = data[payPtr++];\n                }\n              }\n              samples.push({\n                type: userDataType,\n                payloadType,\n                pts,\n                bytes: byteArray\n              });\n            }\n          }\n        }\n      }\n    } else if (payloadType === 5) {\n      if (payloadSize > 16) {\n        const uuidStrArray = [];\n        for (let i = 0; i < 16; i++) {\n          const _b = data[payPtr++].toString(16);\n          uuidStrArray.push(_b.length == 1 ? \"0\" + _b : _b);\n          if (i === 3 || i === 5 || i === 7 || i === 9) {\n            uuidStrArray.push(\"-\");\n          }\n        }\n        const length = payloadSize - 16;\n        const userDataBytes = new Uint8Array(length);\n        for (let i = 0; i < length; i++) {\n          userDataBytes[i] = data[payPtr++];\n        }\n        samples.push({\n          payloadType,\n          pts,\n          uuid: uuidStrArray.join(\"\"),\n          userData: utf8ArrayToStr(userDataBytes),\n          userDataBytes\n        });\n      }\n    }\n  }\n}\nfunction discardEPB(data) {\n  const length = data.byteLength;\n  const EPBPositions = [];\n  let i = 1;\n  while (i < length - 2) {\n    if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 3) {\n      EPBPositions.push(i + 2);\n      i += 2;\n    } else {\n      i++;\n    }\n  }\n  if (EPBPositions.length === 0) {\n    return data;\n  }\n  const newLength = length - EPBPositions.length;\n  const newData = new Uint8Array(newLength);\n  let sourceIndex = 0;\n  for (i = 0; i < newLength; sourceIndex++, i++) {\n    if (sourceIndex === EPBPositions[0]) {\n      sourceIndex++;\n      EPBPositions.shift();\n    }\n    newData[i] = data[sourceIndex];\n  }\n  return newData;\n}\nfunction parseEmsg(data) {\n  const version = data[0];\n  let schemeIdUri = \"\";\n  let value = \"\";\n  let timeScale = 0;\n  let presentationTimeDelta = 0;\n  let presentationTime = 0;\n  let eventDuration = 0;\n  let id = 0;\n  let offset = 0;\n  if (version === 0) {\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      value += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    value += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    timeScale = readUint32(data, 12);\n    presentationTimeDelta = readUint32(data, 16);\n    eventDuration = readUint32(data, 20);\n    id = readUint32(data, 24);\n    offset = 28;\n  } else if (version === 1) {\n    offset += 4;\n    timeScale = readUint32(data, offset);\n    offset += 4;\n    const leftPresentationTime = readUint32(data, offset);\n    offset += 4;\n    const rightPresentationTime = readUint32(data, offset);\n    offset += 4;\n    presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;\n    if (!isSafeInteger(presentationTime)) {\n      presentationTime = Number.MAX_SAFE_INTEGER;\n      logger.warn(\"Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box\");\n    }\n    eventDuration = readUint32(data, offset);\n    offset += 4;\n    id = readUint32(data, offset);\n    offset += 4;\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      value += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    value += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n  }\n  const payload = data.subarray(offset, data.byteLength);\n  return {\n    schemeIdUri,\n    value,\n    timeScale,\n    presentationTime,\n    presentationTimeDelta,\n    eventDuration,\n    id,\n    payload\n  };\n}\nfunction mp4Box(type, ...payload) {\n  const len = payload.length;\n  let size = 8;\n  let i = len;\n  while (i--) {\n    size += payload[i].byteLength;\n  }\n  const result = new Uint8Array(size);\n  result[0] = size >> 24 & 255;\n  result[1] = size >> 16 & 255;\n  result[2] = size >> 8 & 255;\n  result[3] = size & 255;\n  result.set(type, 4);\n  for (i = 0, size = 8; i < len; i++) {\n    result.set(payload[i], size);\n    size += payload[i].byteLength;\n  }\n  return result;\n}\nfunction mp4pssh(systemId, keyids, data) {\n  if (systemId.byteLength !== 16) {\n    throw new RangeError(\"Invalid system id\");\n  }\n  let version;\n  let kids;\n  if (keyids) {\n    version = 1;\n    kids = new Uint8Array(keyids.length * 16);\n    for (let ix = 0; ix < keyids.length; ix++) {\n      const k = keyids[ix];\n      if (k.byteLength !== 16) {\n        throw new RangeError(\"Invalid key\");\n      }\n      kids.set(k, ix * 16);\n    }\n  } else {\n    version = 0;\n    kids = new Uint8Array();\n  }\n  let kidCount;\n  if (version > 0) {\n    kidCount = new Uint8Array(4);\n    if (keyids.length > 0) {\n      new DataView(kidCount.buffer).setUint32(0, keyids.length, false);\n    }\n  } else {\n    kidCount = new Uint8Array();\n  }\n  const dataSize = new Uint8Array(4);\n  if (data && data.byteLength > 0) {\n    new DataView(dataSize.buffer).setUint32(0, data.byteLength, false);\n  }\n  return mp4Box(\n    [112, 115, 115, 104],\n    new Uint8Array([\n      version,\n      0,\n      0,\n      0\n      // Flags\n    ]),\n    systemId,\n    // 16 bytes\n    kidCount,\n    kids,\n    dataSize,\n    data || new Uint8Array()\n  );\n}\nfunction parsePssh(initData) {\n  if (!(initData instanceof ArrayBuffer) || initData.byteLength < 32) {\n    return null;\n  }\n  const result = {\n    version: 0,\n    systemId: \"\",\n    kids: null,\n    data: null\n  };\n  const view = new DataView(initData);\n  const boxSize = view.getUint32(0);\n  if (initData.byteLength !== boxSize && boxSize > 44) {\n    return null;\n  }\n  const type = view.getUint32(4);\n  if (type !== 1886614376) {\n    return null;\n  }\n  result.version = view.getUint32(8) >>> 24;\n  if (result.version > 1) {\n    return null;\n  }\n  result.systemId = Hex.hexDump(new Uint8Array(initData, 12, 16));\n  const dataSizeOrKidCount = view.getUint32(28);\n  if (result.version === 0) {\n    if (boxSize - 32 < dataSizeOrKidCount) {\n      return null;\n    }\n    result.data = new Uint8Array(initData, 32, dataSizeOrKidCount);\n  } else if (result.version === 1) {\n    result.kids = [];\n    for (let i = 0; i < dataSizeOrKidCount; i++) {\n      result.kids.push(new Uint8Array(initData, 32 + i * 16, 16));\n    }\n  }\n  return result;\n}\nlet keyUriToKeyIdMap = {};\nclass LevelKey {\n  static clearKeyUriToKeyIdMap() {\n    keyUriToKeyIdMap = {};\n  }\n  constructor(method, uri, format2, formatversions = [1], iv = null) {\n    this.uri = void 0;\n    this.method = void 0;\n    this.keyFormat = void 0;\n    this.keyFormatVersions = void 0;\n    this.encrypted = void 0;\n    this.isCommonEncryption = void 0;\n    this.iv = null;\n    this.key = null;\n    this.keyId = null;\n    this.pssh = null;\n    this.method = method;\n    this.uri = uri;\n    this.keyFormat = format2;\n    this.keyFormatVersions = formatversions;\n    this.iv = iv;\n    this.encrypted = method ? method !== \"NONE\" : false;\n    this.isCommonEncryption = this.encrypted && method !== \"AES-128\";\n  }\n  isSupported() {\n    if (this.method) {\n      if (this.method === \"AES-128\" || this.method === \"NONE\") {\n        return true;\n      }\n      if (this.keyFormat === \"identity\") {\n        return this.method === \"SAMPLE-AES\";\n      } else {\n        switch (this.keyFormat) {\n          case KeySystemFormats.FAIRPLAY:\n          case KeySystemFormats.WIDEVINE:\n          case KeySystemFormats.PLAYREADY:\n          case KeySystemFormats.CLEARKEY:\n            return [\"ISO-23001-7\", \"SAMPLE-AES\", \"SAMPLE-AES-CENC\", \"SAMPLE-AES-CTR\"].indexOf(this.method) !== -1;\n        }\n      }\n    }\n    return false;\n  }\n  getDecryptData(sn) {\n    if (!this.encrypted || !this.uri) {\n      return null;\n    }\n    if (this.method === \"AES-128\" && this.uri && !this.iv) {\n      if (typeof sn !== \"number\") {\n        if (this.method === \"AES-128\" && !this.iv) {\n          logger.warn(`missing IV for initialization segment with method=\"${this.method}\" - compliance issue`);\n        }\n        sn = 0;\n      }\n      const iv = createInitializationVector(sn);\n      const decryptdata = new LevelKey(this.method, this.uri, \"identity\", this.keyFormatVersions, iv);\n      return decryptdata;\n    }\n    const keyBytes = convertDataUriToArrayBytes(this.uri);\n    if (keyBytes) {\n      switch (this.keyFormat) {\n        case KeySystemFormats.WIDEVINE:\n          this.pssh = keyBytes;\n          if (keyBytes.length >= 22) {\n            this.keyId = keyBytes.subarray(keyBytes.length - 22, keyBytes.length - 6);\n          }\n          break;\n        case KeySystemFormats.PLAYREADY: {\n          const PlayReadyKeySystemUUID = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]);\n          this.pssh = mp4pssh(PlayReadyKeySystemUUID, null, keyBytes);\n          const keyBytesUtf16 = new Uint16Array(keyBytes.buffer, keyBytes.byteOffset, keyBytes.byteLength / 2);\n          const keyByteStr = String.fromCharCode.apply(null, Array.from(keyBytesUtf16));\n          const xmlKeyBytes = keyByteStr.substring(keyByteStr.indexOf(\"<\"), keyByteStr.length);\n          const parser = new DOMParser();\n          const xmlDoc = parser.parseFromString(xmlKeyBytes, \"text/xml\");\n          const keyData = xmlDoc.getElementsByTagName(\"KID\")[0];\n          if (keyData) {\n            const keyId = keyData.childNodes[0] ? keyData.childNodes[0].nodeValue : keyData.getAttribute(\"VALUE\");\n            if (keyId) {\n              const keyIdArray = base64Decode(keyId).subarray(0, 16);\n              changeEndianness(keyIdArray);\n              this.keyId = keyIdArray;\n            }\n          }\n          break;\n        }\n        default: {\n          let keydata = keyBytes.subarray(0, 16);\n          if (keydata.length !== 16) {\n            const padded = new Uint8Array(16);\n            padded.set(keydata, 16 - keydata.length);\n            keydata = padded;\n          }\n          this.keyId = keydata;\n          break;\n        }\n      }\n    }\n    if (!this.keyId || this.keyId.byteLength !== 16) {\n      let keyId = keyUriToKeyIdMap[this.uri];\n      if (!keyId) {\n        const val = Object.keys(keyUriToKeyIdMap).length % Number.MAX_SAFE_INTEGER;\n        keyId = new Uint8Array(16);\n        const dv = new DataView(keyId.buffer, 12, 4);\n        dv.setUint32(0, val);\n        keyUriToKeyIdMap[this.uri] = keyId;\n      }\n      this.keyId = keyId;\n    }\n    return this;\n  }\n}\nfunction createInitializationVector(segmentNumber) {\n  const uint8View = new Uint8Array(16);\n  for (let i = 12; i < 16; i++) {\n    uint8View[i] = segmentNumber >> 8 * (15 - i) & 255;\n  }\n  return uint8View;\n}\nconst VARIABLE_REPLACEMENT_REGEX = /\\{\\$([a-zA-Z0-9-_]+)\\}/g;\nfunction hasVariableReferences(str) {\n  return VARIABLE_REPLACEMENT_REGEX.test(str);\n}\nfunction substituteVariablesInAttributes(parsed, attr, attributeNames) {\n  if (parsed.variableList !== null || parsed.hasVariableRefs) {\n    for (let i = attributeNames.length; i--; ) {\n      const name = attributeNames[i];\n      const value = attr[name];\n      if (value) {\n        attr[name] = substituteVariables(parsed, value);\n      }\n    }\n  }\n}\nfunction substituteVariables(parsed, value) {\n  if (parsed.variableList !== null || parsed.hasVariableRefs) {\n    const variableList = parsed.variableList;\n    return value.replace(VARIABLE_REPLACEMENT_REGEX, (variableReference) => {\n      const variableName = variableReference.substring(2, variableReference.length - 1);\n      const variableValue = variableList == null ? void 0 : variableList[variableName];\n      if (variableValue === void 0) {\n        parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: \"${variableName}\"`));\n        return variableReference;\n      }\n      return variableValue;\n    });\n  }\n  return value;\n}\nfunction addVariableDefinition(parsed, attr, parentUrl) {\n  let variableList = parsed.variableList;\n  if (!variableList) {\n    parsed.variableList = variableList = {};\n  }\n  let NAME;\n  let VALUE;\n  if (\"QUERYPARAM\" in attr) {\n    NAME = attr.QUERYPARAM;\n    try {\n      const searchParams = new self.URL(parentUrl).searchParams;\n      if (searchParams.has(NAME)) {\n        VALUE = searchParams.get(NAME);\n      } else {\n        throw new Error(`\"${NAME}\" does not match any query parameter in URI: \"${parentUrl}\"`);\n      }\n    } catch (error) {\n      parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE QUERYPARAM: ${error.message}`));\n    }\n  } else {\n    NAME = attr.NAME;\n    VALUE = attr.VALUE;\n  }\n  if (NAME in variableList) {\n    parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE duplicate Variable Name declarations: \"${NAME}\"`));\n  } else {\n    variableList[NAME] = VALUE || \"\";\n  }\n}\nfunction importVariableDefinition(parsed, attr, sourceVariableList) {\n  const IMPORT = attr.IMPORT;\n  if (sourceVariableList && IMPORT in sourceVariableList) {\n    let variableList = parsed.variableList;\n    if (!variableList) {\n      parsed.variableList = variableList = {};\n    }\n    variableList[IMPORT] = sourceVariableList[IMPORT];\n  } else {\n    parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: \"${IMPORT}\"`));\n  }\n}\nfunction getMediaSource(preferManagedMediaSource = true) {\n  if (typeof self === \"undefined\")\n    return void 0;\n  const mms = (preferManagedMediaSource || !self.MediaSource) && self.ManagedMediaSource;\n  return mms || self.MediaSource || self.WebKitMediaSource;\n}\nconst sampleEntryCodesISO = {\n  audio: {\n    a3ds: 1,\n    \"ac-3\": 0.95,\n    \"ac-4\": 1,\n    alac: 0.9,\n    alaw: 1,\n    dra1: 1,\n    \"dts+\": 1,\n    \"dts-\": 1,\n    dtsc: 1,\n    dtse: 1,\n    dtsh: 1,\n    \"ec-3\": 0.9,\n    enca: 1,\n    fLaC: 0.9,\n    // MP4-RA listed codec entry for FLAC\n    flac: 0.9,\n    // legacy browser codec name for FLAC\n    FLAC: 0.9,\n    // some manifests may list \"FLAC\" with Apple's tools\n    g719: 1,\n    g726: 1,\n    m4ae: 1,\n    mha1: 1,\n    mha2: 1,\n    mhm1: 1,\n    mhm2: 1,\n    mlpa: 1,\n    mp4a: 1,\n    \"raw \": 1,\n    Opus: 1,\n    opus: 1,\n    // browsers expect this to be lowercase despite MP4RA says 'Opus'\n    samr: 1,\n    sawb: 1,\n    sawp: 1,\n    sevc: 1,\n    sqcp: 1,\n    ssmv: 1,\n    twos: 1,\n    ulaw: 1\n  },\n  video: {\n    avc1: 1,\n    avc2: 1,\n    avc3: 1,\n    avc4: 1,\n    avcp: 1,\n    av01: 0.8,\n    drac: 1,\n    dva1: 1,\n    dvav: 1,\n    dvh1: 0.7,\n    dvhe: 0.7,\n    encv: 1,\n    hev1: 0.75,\n    hvc1: 0.75,\n    mjp2: 1,\n    mp4v: 1,\n    mvc1: 1,\n    mvc2: 1,\n    mvc3: 1,\n    mvc4: 1,\n    resv: 1,\n    rv60: 1,\n    s263: 1,\n    svc1: 1,\n    svc2: 1,\n    \"vc-1\": 1,\n    vp08: 1,\n    vp09: 0.9\n  },\n  text: {\n    stpp: 1,\n    wvtt: 1\n  }\n};\nfunction isCodecType(codec, type) {\n  const typeCodes = sampleEntryCodesISO[type];\n  return !!typeCodes && !!typeCodes[codec.slice(0, 4)];\n}\nfunction areCodecsMediaSourceSupported(codecs, type, preferManagedMediaSource = true) {\n  return !codecs.split(\",\").some((codec) => !isCodecMediaSourceSupported(codec, type, preferManagedMediaSource));\n}\nfunction isCodecMediaSourceSupported(codec, type, preferManagedMediaSource = true) {\n  var _MediaSource$isTypeSu;\n  const MediaSource = getMediaSource(preferManagedMediaSource);\n  return (_MediaSource$isTypeSu = MediaSource == null ? void 0 : MediaSource.isTypeSupported(mimeTypeForCodec(codec, type))) != null ? _MediaSource$isTypeSu : false;\n}\nfunction mimeTypeForCodec(codec, type) {\n  return `${type}/mp4;codecs=\"${codec}\"`;\n}\nfunction videoCodecPreferenceValue(videoCodec) {\n  if (videoCodec) {\n    const fourCC = videoCodec.substring(0, 4);\n    return sampleEntryCodesISO.video[fourCC];\n  }\n  return 2;\n}\nfunction codecsSetSelectionPreferenceValue(codecSet) {\n  return codecSet.split(\",\").reduce((num, fourCC) => {\n    const preferenceValue = sampleEntryCodesISO.video[fourCC];\n    if (preferenceValue) {\n      return (preferenceValue * 2 + num) / (num ? 3 : 2);\n    }\n    return (sampleEntryCodesISO.audio[fourCC] + num) / (num ? 2 : 1);\n  }, 0);\n}\nconst CODEC_COMPATIBLE_NAMES = {};\nfunction getCodecCompatibleNameLower(lowerCaseCodec, preferManagedMediaSource = true) {\n  if (CODEC_COMPATIBLE_NAMES[lowerCaseCodec]) {\n    return CODEC_COMPATIBLE_NAMES[lowerCaseCodec];\n  }\n  const codecsToCheck = {\n    flac: [\"flac\", \"fLaC\", \"FLAC\"],\n    opus: [\"opus\", \"Opus\"]\n  }[lowerCaseCodec];\n  for (let i = 0; i < codecsToCheck.length; i++) {\n    if (isCodecMediaSourceSupported(codecsToCheck[i], \"audio\", preferManagedMediaSource)) {\n      CODEC_COMPATIBLE_NAMES[lowerCaseCodec] = codecsToCheck[i];\n      return codecsToCheck[i];\n    }\n  }\n  return lowerCaseCodec;\n}\nconst AUDIO_CODEC_REGEXP = /flac|opus/i;\nfunction getCodecCompatibleName(codec, preferManagedMediaSource = true) {\n  return codec.replace(AUDIO_CODEC_REGEXP, (m) => getCodecCompatibleNameLower(m.toLowerCase(), preferManagedMediaSource));\n}\nfunction pickMostCompleteCodecName(parsedCodec, levelCodec) {\n  if (parsedCodec && parsedCodec !== \"mp4a\") {\n    return parsedCodec;\n  }\n  return levelCodec;\n}\nfunction convertAVC1ToAVCOTI(codec) {\n  const avcdata = codec.split(\".\");\n  if (avcdata.length > 2) {\n    let result = avcdata.shift() + \".\";\n    result += parseInt(avcdata.shift()).toString(16);\n    result += (\"000\" + parseInt(avcdata.shift()).toString(16)).slice(-4);\n    return result;\n  }\n  return codec;\n}\nconst MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\r\\n]*)(?:[\\r\\n](?:#[^\\r\\n]*)?)*([^\\r\\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\\r\\n]*)[\\r\\n]+/g;\nconst MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\nconst IS_MEDIA_PLAYLIST = /^#EXT(?:INF|-X-TARGETDURATION):/m;\nconst LEVEL_PLAYLIST_REGEX_FAST = new RegExp([\n  /#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source,\n  // duration (#EXTINF:<duration>,<title>), group 1 => duration, group 2 => title\n  /(?!#) *(\\S[\\S ]*)/.source,\n  // segment URI, group 3 => the URI (note newline is not eaten)\n  /#EXT-X-BYTERANGE:*(.+)/.source,\n  // next segment's byterange, group 4 => range spec (x@y)\n  /#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,\n  // next segment's program date/time group 5 => the datetime spec\n  /#.*/.source\n  // All other non-segment oriented tags will match with all groups empty\n].join(\"|\"), \"g\");\nconst LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\\r?\\n?/.source].join(\"|\"));\nclass M3U8Parser {\n  static findGroup(groups, mediaGroupId) {\n    for (let i = 0; i < groups.length; i++) {\n      const group = groups[i];\n      if (group.id === mediaGroupId) {\n        return group;\n      }\n    }\n  }\n  static resolve(url, baseUrl) {\n    return urlToolkitExports.buildAbsoluteURL(baseUrl, url, {\n      alwaysNormalize: true\n    });\n  }\n  static isMediaPlaylist(str) {\n    return IS_MEDIA_PLAYLIST.test(str);\n  }\n  static parseMasterPlaylist(string, baseurl) {\n    const hasVariableRefs = hasVariableReferences(string);\n    const parsed = {\n      contentSteering: null,\n      levels: [],\n      playlistParsingError: null,\n      sessionData: null,\n      sessionKeys: null,\n      startTimeOffset: null,\n      variableList: null,\n      hasVariableRefs\n    };\n    const levelsWithKnownCodecs = [];\n    MASTER_PLAYLIST_REGEX.lastIndex = 0;\n    let result;\n    while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {\n      if (result[1]) {\n        var _level$unknownCodecs;\n        const attrs = new AttrList(result[1]);\n        {\n          substituteVariablesInAttributes(parsed, attrs, [\"CODECS\", \"SUPPLEMENTAL-CODECS\", \"ALLOWED-CPC\", \"PATHWAY-ID\", \"STABLE-VARIANT-ID\", \"AUDIO\", \"VIDEO\", \"SUBTITLES\", \"CLOSED-CAPTIONS\", \"NAME\"]);\n        }\n        const uri = substituteVariables(parsed, result[2]);\n        const level = {\n          attrs,\n          bitrate: attrs.decimalInteger(\"BANDWIDTH\") || attrs.decimalInteger(\"AVERAGE-BANDWIDTH\"),\n          name: attrs.NAME,\n          url: M3U8Parser.resolve(uri, baseurl)\n        };\n        const resolution = attrs.decimalResolution(\"RESOLUTION\");\n        if (resolution) {\n          level.width = resolution.width;\n          level.height = resolution.height;\n        }\n        setCodecs(attrs.CODECS, level);\n        if (!((_level$unknownCodecs = level.unknownCodecs) != null && _level$unknownCodecs.length)) {\n          levelsWithKnownCodecs.push(level);\n        }\n        parsed.levels.push(level);\n      } else if (result[3]) {\n        const tag = result[3];\n        const attributes = result[4];\n        switch (tag) {\n          case \"SESSION-DATA\": {\n            const sessionAttrs = new AttrList(attributes);\n            {\n              substituteVariablesInAttributes(parsed, sessionAttrs, [\"DATA-ID\", \"LANGUAGE\", \"VALUE\", \"URI\"]);\n            }\n            const dataId = sessionAttrs[\"DATA-ID\"];\n            if (dataId) {\n              if (parsed.sessionData === null) {\n                parsed.sessionData = {};\n              }\n              parsed.sessionData[dataId] = sessionAttrs;\n            }\n            break;\n          }\n          case \"SESSION-KEY\": {\n            const sessionKey = parseKey(attributes, baseurl, parsed);\n            if (sessionKey.encrypted && sessionKey.isSupported()) {\n              if (parsed.sessionKeys === null) {\n                parsed.sessionKeys = [];\n              }\n              parsed.sessionKeys.push(sessionKey);\n            } else {\n              logger.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: \"${attributes}\"`);\n            }\n            break;\n          }\n          case \"DEFINE\": {\n            {\n              const variableAttributes = new AttrList(attributes);\n              substituteVariablesInAttributes(parsed, variableAttributes, [\"NAME\", \"VALUE\", \"QUERYPARAM\"]);\n              addVariableDefinition(parsed, variableAttributes, baseurl);\n            }\n            break;\n          }\n          case \"CONTENT-STEERING\": {\n            const contentSteeringAttributes = new AttrList(attributes);\n            {\n              substituteVariablesInAttributes(parsed, contentSteeringAttributes, [\"SERVER-URI\", \"PATHWAY-ID\"]);\n            }\n            parsed.contentSteering = {\n              uri: M3U8Parser.resolve(contentSteeringAttributes[\"SERVER-URI\"], baseurl),\n              pathwayId: contentSteeringAttributes[\"PATHWAY-ID\"] || \".\"\n            };\n            break;\n          }\n          case \"START\": {\n            parsed.startTimeOffset = parseStartTimeOffset(attributes);\n            break;\n          }\n        }\n      }\n    }\n    const stripUnknownCodecLevels = levelsWithKnownCodecs.length > 0 && levelsWithKnownCodecs.length < parsed.levels.length;\n    parsed.levels = stripUnknownCodecLevels ? levelsWithKnownCodecs : parsed.levels;\n    if (parsed.levels.length === 0) {\n      parsed.playlistParsingError = new Error(\"no levels found in manifest\");\n    }\n    return parsed;\n  }\n  static parseMasterPlaylistMedia(string, baseurl, parsed) {\n    let result;\n    const results = {};\n    const levels = parsed.levels;\n    const groupsByType = {\n      AUDIO: levels.map((level) => ({\n        id: level.attrs.AUDIO,\n        audioCodec: level.audioCodec\n      })),\n      SUBTITLES: levels.map((level) => ({\n        id: level.attrs.SUBTITLES,\n        textCodec: level.textCodec\n      })),\n      \"CLOSED-CAPTIONS\": []\n    };\n    let id = 0;\n    MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n    while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {\n      const attrs = new AttrList(result[1]);\n      const type = attrs.TYPE;\n      if (type) {\n        const groups = groupsByType[type];\n        const medias = results[type] || [];\n        results[type] = medias;\n        {\n          substituteVariablesInAttributes(parsed, attrs, [\"URI\", \"GROUP-ID\", \"LANGUAGE\", \"ASSOC-LANGUAGE\", \"STABLE-RENDITION-ID\", \"NAME\", \"INSTREAM-ID\", \"CHARACTERISTICS\", \"CHANNELS\"]);\n        }\n        const lang = attrs.LANGUAGE;\n        const assocLang = attrs[\"ASSOC-LANGUAGE\"];\n        const channels = attrs.CHANNELS;\n        const characteristics = attrs.CHARACTERISTICS;\n        const instreamId = attrs[\"INSTREAM-ID\"];\n        const media = {\n          attrs,\n          bitrate: 0,\n          id: id++,\n          groupId: attrs[\"GROUP-ID\"] || \"\",\n          name: attrs.NAME || lang || \"\",\n          type,\n          default: attrs.bool(\"DEFAULT\"),\n          autoselect: attrs.bool(\"AUTOSELECT\"),\n          forced: attrs.bool(\"FORCED\"),\n          lang,\n          url: attrs.URI ? M3U8Parser.resolve(attrs.URI, baseurl) : \"\"\n        };\n        if (assocLang) {\n          media.assocLang = assocLang;\n        }\n        if (channels) {\n          media.channels = channels;\n        }\n        if (characteristics) {\n          media.characteristics = characteristics;\n        }\n        if (instreamId) {\n          media.instreamId = instreamId;\n        }\n        if (groups != null && groups.length) {\n          const groupCodec = M3U8Parser.findGroup(groups, media.groupId) || groups[0];\n          assignCodec(media, groupCodec, \"audioCodec\");\n          assignCodec(media, groupCodec, \"textCodec\");\n        }\n        medias.push(media);\n      }\n    }\n    return results;\n  }\n  static parseLevelPlaylist(string, baseurl, id, type, levelUrlId, multivariantVariableList) {\n    const level = new LevelDetails(baseurl);\n    const fragments = level.fragments;\n    let currentInitSegment = null;\n    let currentSN = 0;\n    let currentPart = 0;\n    let totalduration = 0;\n    let discontinuityCounter = 0;\n    let prevFrag = null;\n    let frag = new Fragment(type, baseurl);\n    let result;\n    let i;\n    let levelkeys;\n    let firstPdtIndex = -1;\n    let createNextFrag = false;\n    let nextByteRange = null;\n    LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n    level.m3u8 = string;\n    level.hasVariableRefs = hasVariableReferences(string);\n    while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n      if (createNextFrag) {\n        createNextFrag = false;\n        frag = new Fragment(type, baseurl);\n        frag.start = totalduration;\n        frag.sn = currentSN;\n        frag.cc = discontinuityCounter;\n        frag.level = id;\n        if (currentInitSegment) {\n          frag.initSegment = currentInitSegment;\n          frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n          currentInitSegment.rawProgramDateTime = null;\n          if (nextByteRange) {\n            frag.setByteRange(nextByteRange);\n            nextByteRange = null;\n          }\n        }\n      }\n      const duration = result[1];\n      if (duration) {\n        frag.duration = parseFloat(duration);\n        const title = (\" \" + result[2]).slice(1);\n        frag.title = title || null;\n        frag.tagList.push(title ? [\"INF\", duration, title] : [\"INF\", duration]);\n      } else if (result[3]) {\n        if (isFiniteNumber(frag.duration)) {\n          frag.start = totalduration;\n          if (levelkeys) {\n            setFragLevelKeys(frag, levelkeys, level);\n          }\n          frag.sn = currentSN;\n          frag.level = id;\n          frag.cc = discontinuityCounter;\n          fragments.push(frag);\n          const uri = (\" \" + result[3]).slice(1);\n          frag.relurl = substituteVariables(level, uri);\n          assignProgramDateTime(frag, prevFrag);\n          prevFrag = frag;\n          totalduration += frag.duration;\n          currentSN++;\n          currentPart = 0;\n          createNextFrag = true;\n        }\n      } else if (result[4]) {\n        const data = (\" \" + result[4]).slice(1);\n        if (prevFrag) {\n          frag.setByteRange(data, prevFrag);\n        } else {\n          frag.setByteRange(data);\n        }\n      } else if (result[5]) {\n        frag.rawProgramDateTime = (\" \" + result[5]).slice(1);\n        frag.tagList.push([\"PROGRAM-DATE-TIME\", frag.rawProgramDateTime]);\n        if (firstPdtIndex === -1) {\n          firstPdtIndex = fragments.length;\n        }\n      } else {\n        result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n        if (!result) {\n          logger.warn(\"No matches on slow regex match for level playlist!\");\n          continue;\n        }\n        for (i = 1; i < result.length; i++) {\n          if (typeof result[i] !== \"undefined\") {\n            break;\n          }\n        }\n        const tag = (\" \" + result[i]).slice(1);\n        const value1 = (\" \" + result[i + 1]).slice(1);\n        const value2 = result[i + 2] ? (\" \" + result[i + 2]).slice(1) : \"\";\n        switch (tag) {\n          case \"PLAYLIST-TYPE\":\n            level.type = value1.toUpperCase();\n            break;\n          case \"MEDIA-SEQUENCE\":\n            currentSN = level.startSN = parseInt(value1);\n            break;\n          case \"SKIP\": {\n            const skipAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, skipAttrs, [\"RECENTLY-REMOVED-DATERANGES\"]);\n            }\n            const skippedSegments = skipAttrs.decimalInteger(\"SKIPPED-SEGMENTS\");\n            if (isFiniteNumber(skippedSegments)) {\n              level.skippedSegments = skippedSegments;\n              for (let _i = skippedSegments; _i--; ) {\n                fragments.unshift(null);\n              }\n              currentSN += skippedSegments;\n            }\n            const recentlyRemovedDateranges = skipAttrs.enumeratedString(\"RECENTLY-REMOVED-DATERANGES\");\n            if (recentlyRemovedDateranges) {\n              level.recentlyRemovedDateranges = recentlyRemovedDateranges.split(\"\t\");\n            }\n            break;\n          }\n          case \"TARGETDURATION\":\n            level.targetduration = Math.max(parseInt(value1), 1);\n            break;\n          case \"VERSION\":\n            level.version = parseInt(value1);\n            break;\n          case \"INDEPENDENT-SEGMENTS\":\n          case \"EXTM3U\":\n            break;\n          case \"ENDLIST\":\n            level.live = false;\n            break;\n          case \"#\":\n            if (value1 || value2) {\n              frag.tagList.push(value2 ? [value1, value2] : [value1]);\n            }\n            break;\n          case \"DISCONTINUITY\":\n            discontinuityCounter++;\n            frag.tagList.push([\"DIS\"]);\n            break;\n          case \"GAP\":\n            frag.gap = true;\n            frag.tagList.push([tag]);\n            break;\n          case \"BITRATE\":\n            frag.tagList.push([tag, value1]);\n            break;\n          case \"DATERANGE\": {\n            const dateRangeAttr = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, dateRangeAttr, [\"ID\", \"CLASS\", \"START-DATE\", \"END-DATE\", \"SCTE35-CMD\", \"SCTE35-OUT\", \"SCTE35-IN\"]);\n              substituteVariablesInAttributes(level, dateRangeAttr, dateRangeAttr.clientAttrs);\n            }\n            const dateRange = new DateRange(dateRangeAttr, level.dateRanges[dateRangeAttr.ID]);\n            if (dateRange.isValid || level.skippedSegments) {\n              level.dateRanges[dateRange.id] = dateRange;\n            } else {\n              logger.warn(`Ignoring invalid DATERANGE tag: \"${value1}\"`);\n            }\n            frag.tagList.push([\"EXT-X-DATERANGE\", value1]);\n            break;\n          }\n          case \"DEFINE\": {\n            {\n              const variableAttributes = new AttrList(value1);\n              substituteVariablesInAttributes(level, variableAttributes, [\"NAME\", \"VALUE\", \"IMPORT\", \"QUERYPARAM\"]);\n              if (\"IMPORT\" in variableAttributes) {\n                importVariableDefinition(level, variableAttributes, multivariantVariableList);\n              } else {\n                addVariableDefinition(level, variableAttributes, baseurl);\n              }\n            }\n            break;\n          }\n          case \"DISCONTINUITY-SEQUENCE\":\n            discontinuityCounter = parseInt(value1);\n            break;\n          case \"KEY\": {\n            const levelKey = parseKey(value1, baseurl, level);\n            if (levelKey.isSupported()) {\n              if (levelKey.method === \"NONE\") {\n                levelkeys = void 0;\n                break;\n              }\n              if (!levelkeys) {\n                levelkeys = {};\n              }\n              if (levelkeys[levelKey.keyFormat]) {\n                levelkeys = _extends({}, levelkeys);\n              }\n              levelkeys[levelKey.keyFormat] = levelKey;\n            } else {\n              logger.warn(`[Keys] Ignoring invalid EXT-X-KEY tag: \"${value1}\"`);\n            }\n            break;\n          }\n          case \"START\":\n            level.startTimeOffset = parseStartTimeOffset(value1);\n            break;\n          case \"MAP\": {\n            const mapAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, mapAttrs, [\"BYTERANGE\", \"URI\"]);\n            }\n            if (frag.duration) {\n              const init = new Fragment(type, baseurl);\n              setInitSegment(init, mapAttrs, id, levelkeys);\n              currentInitSegment = init;\n              frag.initSegment = currentInitSegment;\n              if (currentInitSegment.rawProgramDateTime && !frag.rawProgramDateTime) {\n                frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n              }\n            } else {\n              const end = frag.byteRangeEndOffset;\n              if (end) {\n                const start = frag.byteRangeStartOffset;\n                nextByteRange = `${end - start}@${start}`;\n              } else {\n                nextByteRange = null;\n              }\n              setInitSegment(frag, mapAttrs, id, levelkeys);\n              currentInitSegment = frag;\n              createNextFrag = true;\n            }\n            break;\n          }\n          case \"SERVER-CONTROL\": {\n            const serverControlAttrs = new AttrList(value1);\n            level.canBlockReload = serverControlAttrs.bool(\"CAN-BLOCK-RELOAD\");\n            level.canSkipUntil = serverControlAttrs.optionalFloat(\"CAN-SKIP-UNTIL\", 0);\n            level.canSkipDateRanges = level.canSkipUntil > 0 && serverControlAttrs.bool(\"CAN-SKIP-DATERANGES\");\n            level.partHoldBack = serverControlAttrs.optionalFloat(\"PART-HOLD-BACK\", 0);\n            level.holdBack = serverControlAttrs.optionalFloat(\"HOLD-BACK\", 0);\n            break;\n          }\n          case \"PART-INF\": {\n            const partInfAttrs = new AttrList(value1);\n            level.partTarget = partInfAttrs.decimalFloatingPoint(\"PART-TARGET\");\n            break;\n          }\n          case \"PART\": {\n            let partList = level.partList;\n            if (!partList) {\n              partList = level.partList = [];\n            }\n            const previousFragmentPart = currentPart > 0 ? partList[partList.length - 1] : void 0;\n            const index = currentPart++;\n            const partAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, partAttrs, [\"BYTERANGE\", \"URI\"]);\n            }\n            const part = new Part(partAttrs, frag, baseurl, index, previousFragmentPart);\n            partList.push(part);\n            frag.duration += part.duration;\n            break;\n          }\n          case \"PRELOAD-HINT\": {\n            const preloadHintAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, preloadHintAttrs, [\"URI\"]);\n            }\n            level.preloadHint = preloadHintAttrs;\n            break;\n          }\n          case \"RENDITION-REPORT\": {\n            const renditionReportAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, renditionReportAttrs, [\"URI\"]);\n            }\n            level.renditionReports = level.renditionReports || [];\n            level.renditionReports.push(renditionReportAttrs);\n            break;\n          }\n          default:\n            logger.warn(`line parsed but not handled: ${result}`);\n            break;\n        }\n      }\n    }\n    if (prevFrag && !prevFrag.relurl) {\n      fragments.pop();\n      totalduration -= prevFrag.duration;\n      if (level.partList) {\n        level.fragmentHint = prevFrag;\n      }\n    } else if (level.partList) {\n      assignProgramDateTime(frag, prevFrag);\n      frag.cc = discontinuityCounter;\n      level.fragmentHint = frag;\n      if (levelkeys) {\n        setFragLevelKeys(frag, levelkeys, level);\n      }\n    }\n    const fragmentLength = fragments.length;\n    const firstFragment = fragments[0];\n    const lastFragment = fragments[fragmentLength - 1];\n    totalduration += level.skippedSegments * level.targetduration;\n    if (totalduration > 0 && fragmentLength && lastFragment) {\n      level.averagetargetduration = totalduration / fragmentLength;\n      const lastSn = lastFragment.sn;\n      level.endSN = lastSn !== \"initSegment\" ? lastSn : 0;\n      if (!level.live) {\n        lastFragment.endList = true;\n      }\n      if (firstFragment) {\n        level.startCC = firstFragment.cc;\n      }\n    } else {\n      level.endSN = 0;\n      level.startCC = 0;\n    }\n    if (level.fragmentHint) {\n      totalduration += level.fragmentHint.duration;\n    }\n    level.totalduration = totalduration;\n    level.endCC = discontinuityCounter;\n    if (firstPdtIndex > 0) {\n      backfillProgramDateTimes(fragments, firstPdtIndex);\n    }\n    return level;\n  }\n}\nfunction parseKey(keyTagAttributes, baseurl, parsed) {\n  var _keyAttrs$METHOD, _keyAttrs$KEYFORMAT;\n  const keyAttrs = new AttrList(keyTagAttributes);\n  {\n    substituteVariablesInAttributes(parsed, keyAttrs, [\"KEYFORMAT\", \"KEYFORMATVERSIONS\", \"URI\", \"IV\", \"URI\"]);\n  }\n  const decryptmethod = (_keyAttrs$METHOD = keyAttrs.METHOD) != null ? _keyAttrs$METHOD : \"\";\n  const decrypturi = keyAttrs.URI;\n  const decryptiv = keyAttrs.hexadecimalInteger(\"IV\");\n  const decryptkeyformatversions = keyAttrs.KEYFORMATVERSIONS;\n  const decryptkeyformat = (_keyAttrs$KEYFORMAT = keyAttrs.KEYFORMAT) != null ? _keyAttrs$KEYFORMAT : \"identity\";\n  if (decrypturi && keyAttrs.IV && !decryptiv) {\n    logger.error(`Invalid IV: ${keyAttrs.IV}`);\n  }\n  const resolvedUri = decrypturi ? M3U8Parser.resolve(decrypturi, baseurl) : \"\";\n  const keyFormatVersions = (decryptkeyformatversions ? decryptkeyformatversions : \"1\").split(\"/\").map(Number).filter(Number.isFinite);\n  return new LevelKey(decryptmethod, resolvedUri, decryptkeyformat, keyFormatVersions, decryptiv);\n}\nfunction parseStartTimeOffset(startAttributes) {\n  const startAttrs = new AttrList(startAttributes);\n  const startTimeOffset = startAttrs.decimalFloatingPoint(\"TIME-OFFSET\");\n  if (isFiniteNumber(startTimeOffset)) {\n    return startTimeOffset;\n  }\n  return null;\n}\nfunction setCodecs(codecsAttributeValue, level) {\n  let codecs = (codecsAttributeValue || \"\").split(/[ ,]+/).filter((c) => c);\n  [\"video\", \"audio\", \"text\"].forEach((type) => {\n    const filtered = codecs.filter((codec) => isCodecType(codec, type));\n    if (filtered.length) {\n      level[`${type}Codec`] = filtered.join(\",\");\n      codecs = codecs.filter((codec) => filtered.indexOf(codec) === -1);\n    }\n  });\n  level.unknownCodecs = codecs;\n}\nfunction assignCodec(media, groupItem, codecProperty) {\n  const codecValue = groupItem[codecProperty];\n  if (codecValue) {\n    media[codecProperty] = codecValue;\n  }\n}\nfunction backfillProgramDateTimes(fragments, firstPdtIndex) {\n  let fragPrev = fragments[firstPdtIndex];\n  for (let i = firstPdtIndex; i--; ) {\n    const frag = fragments[i];\n    if (!frag) {\n      return;\n    }\n    frag.programDateTime = fragPrev.programDateTime - frag.duration * 1e3;\n    fragPrev = frag;\n  }\n}\nfunction assignProgramDateTime(frag, prevFrag) {\n  if (frag.rawProgramDateTime) {\n    frag.programDateTime = Date.parse(frag.rawProgramDateTime);\n  } else if (prevFrag != null && prevFrag.programDateTime) {\n    frag.programDateTime = prevFrag.endProgramDateTime;\n  }\n  if (!isFiniteNumber(frag.programDateTime)) {\n    frag.programDateTime = null;\n    frag.rawProgramDateTime = null;\n  }\n}\nfunction setInitSegment(frag, mapAttrs, id, levelkeys) {\n  frag.relurl = mapAttrs.URI;\n  if (mapAttrs.BYTERANGE) {\n    frag.setByteRange(mapAttrs.BYTERANGE);\n  }\n  frag.level = id;\n  frag.sn = \"initSegment\";\n  if (levelkeys) {\n    frag.levelkeys = levelkeys;\n  }\n  frag.initSegment = null;\n}\nfunction setFragLevelKeys(frag, levelkeys, level) {\n  frag.levelkeys = levelkeys;\n  const {\n    encryptedFragments\n  } = level;\n  if ((!encryptedFragments.length || encryptedFragments[encryptedFragments.length - 1].levelkeys !== levelkeys) && Object.keys(levelkeys).some((format2) => levelkeys[format2].isCommonEncryption)) {\n    encryptedFragments.push(frag);\n  }\n}\nvar PlaylistContextType = {\n  MANIFEST: \"manifest\",\n  LEVEL: \"level\",\n  AUDIO_TRACK: \"audioTrack\",\n  SUBTITLE_TRACK: \"subtitleTrack\"\n};\nvar PlaylistLevelType = {\n  MAIN: \"main\",\n  AUDIO: \"audio\",\n  SUBTITLE: \"subtitle\"\n};\nfunction mapContextToLevelType(context) {\n  const {\n    type\n  } = context;\n  switch (type) {\n    case PlaylistContextType.AUDIO_TRACK:\n      return PlaylistLevelType.AUDIO;\n    case PlaylistContextType.SUBTITLE_TRACK:\n      return PlaylistLevelType.SUBTITLE;\n    default:\n      return PlaylistLevelType.MAIN;\n  }\n}\nfunction getResponseUrl(response, context) {\n  let url = response.url;\n  if (url === void 0 || url.indexOf(\"data:\") === 0) {\n    url = context.url;\n  }\n  return url;\n}\nclass PlaylistLoader {\n  constructor(hls) {\n    this.hls = void 0;\n    this.loaders = /* @__PURE__ */ Object.create(null);\n    this.variableList = null;\n    this.hls = hls;\n    this.registerListeners();\n  }\n  startLoad(startPosition) {\n  }\n  stopLoad() {\n    this.destroyInternalLoaders();\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n  }\n  /**\n   * Returns defaults or configured loader-type overloads (pLoader and loader config params)\n   */\n  createInternalLoader(context) {\n    const config = this.hls.config;\n    const PLoader = config.pLoader;\n    const Loader = config.loader;\n    const InternalLoader = PLoader || Loader;\n    const loader = new InternalLoader(config);\n    this.loaders[context.type] = loader;\n    return loader;\n  }\n  getInternalLoader(context) {\n    return this.loaders[context.type];\n  }\n  resetInternalLoader(contextType) {\n    if (this.loaders[contextType]) {\n      delete this.loaders[contextType];\n    }\n  }\n  /**\n   * Call `destroy` on all internal loader instances mapped (one per context type)\n   */\n  destroyInternalLoaders() {\n    for (const contextType in this.loaders) {\n      const loader = this.loaders[contextType];\n      if (loader) {\n        loader.destroy();\n      }\n      this.resetInternalLoader(contextType);\n    }\n  }\n  destroy() {\n    this.variableList = null;\n    this.unregisterListeners();\n    this.destroyInternalLoaders();\n  }\n  onManifestLoading(event, data) {\n    const {\n      url\n    } = data;\n    this.variableList = null;\n    this.load({\n      id: null,\n      level: 0,\n      responseType: \"text\",\n      type: PlaylistContextType.MANIFEST,\n      url,\n      deliveryDirectives: null\n    });\n  }\n  onLevelLoading(event, data) {\n    const {\n      id,\n      level,\n      pathwayId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      level,\n      pathwayId,\n      responseType: \"text\",\n      type: PlaylistContextType.LEVEL,\n      url,\n      deliveryDirectives\n    });\n  }\n  onAudioTrackLoading(event, data) {\n    const {\n      id,\n      groupId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      groupId,\n      level: null,\n      responseType: \"text\",\n      type: PlaylistContextType.AUDIO_TRACK,\n      url,\n      deliveryDirectives\n    });\n  }\n  onSubtitleTrackLoading(event, data) {\n    const {\n      id,\n      groupId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      groupId,\n      level: null,\n      responseType: \"text\",\n      type: PlaylistContextType.SUBTITLE_TRACK,\n      url,\n      deliveryDirectives\n    });\n  }\n  load(context) {\n    var _context$deliveryDire;\n    const config = this.hls.config;\n    let loader = this.getInternalLoader(context);\n    if (loader) {\n      const loaderContext = loader.context;\n      if (loaderContext && loaderContext.url === context.url && loaderContext.level === context.level) {\n        logger.trace(\"[playlist-loader]: playlist request ongoing\");\n        return;\n      }\n      logger.log(`[playlist-loader]: aborting previous loader for type: ${context.type}`);\n      loader.abort();\n    }\n    let loadPolicy;\n    if (context.type === PlaylistContextType.MANIFEST) {\n      loadPolicy = config.manifestLoadPolicy.default;\n    } else {\n      loadPolicy = _extends({}, config.playlistLoadPolicy.default, {\n        timeoutRetry: null,\n        errorRetry: null\n      });\n    }\n    loader = this.createInternalLoader(context);\n    if (isFiniteNumber((_context$deliveryDire = context.deliveryDirectives) == null ? void 0 : _context$deliveryDire.part)) {\n      let levelDetails;\n      if (context.type === PlaylistContextType.LEVEL && context.level !== null) {\n        levelDetails = this.hls.levels[context.level].details;\n      } else if (context.type === PlaylistContextType.AUDIO_TRACK && context.id !== null) {\n        levelDetails = this.hls.audioTracks[context.id].details;\n      } else if (context.type === PlaylistContextType.SUBTITLE_TRACK && context.id !== null) {\n        levelDetails = this.hls.subtitleTracks[context.id].details;\n      }\n      if (levelDetails) {\n        const partTarget = levelDetails.partTarget;\n        const targetDuration = levelDetails.targetduration;\n        if (partTarget && targetDuration) {\n          const maxLowLatencyPlaylistRefresh = Math.max(partTarget * 3, targetDuration * 0.8) * 1e3;\n          loadPolicy = _extends({}, loadPolicy, {\n            maxTimeToFirstByteMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs),\n            maxLoadTimeMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs)\n          });\n        }\n      }\n    }\n    const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n    const loaderConfig = {\n      loadPolicy,\n      timeout: loadPolicy.maxLoadTimeMs,\n      maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n      retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n      maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n    };\n    const loaderCallbacks = {\n      onSuccess: (response, stats, context2, networkDetails) => {\n        const loader2 = this.getInternalLoader(context2);\n        this.resetInternalLoader(context2.type);\n        const string = response.data;\n        if (string.indexOf(\"#EXTM3U\") !== 0) {\n          this.handleManifestParsingError(response, context2, new Error(\"no EXTM3U delimiter\"), networkDetails || null, stats);\n          return;\n        }\n        stats.parsing.start = performance.now();\n        if (M3U8Parser.isMediaPlaylist(string)) {\n          this.handleTrackOrLevelPlaylist(response, stats, context2, networkDetails || null, loader2);\n        } else {\n          this.handleMasterPlaylist(response, stats, context2, networkDetails);\n        }\n      },\n      onError: (response, context2, networkDetails, stats) => {\n        this.handleNetworkError(context2, networkDetails, false, response, stats);\n      },\n      onTimeout: (stats, context2, networkDetails) => {\n        this.handleNetworkError(context2, networkDetails, true, void 0, stats);\n      }\n    };\n    loader.load(context, loaderConfig, loaderCallbacks);\n  }\n  handleMasterPlaylist(response, stats, context, networkDetails) {\n    const hls = this.hls;\n    const string = response.data;\n    const url = getResponseUrl(response, context);\n    const parsedResult = M3U8Parser.parseMasterPlaylist(string, url);\n    if (parsedResult.playlistParsingError) {\n      this.handleManifestParsingError(response, context, parsedResult.playlistParsingError, networkDetails, stats);\n      return;\n    }\n    const {\n      contentSteering,\n      levels,\n      sessionData,\n      sessionKeys,\n      startTimeOffset,\n      variableList\n    } = parsedResult;\n    this.variableList = variableList;\n    const {\n      AUDIO: audioTracks = [],\n      SUBTITLES: subtitles,\n      \"CLOSED-CAPTIONS\": captions\n    } = M3U8Parser.parseMasterPlaylistMedia(string, url, parsedResult);\n    if (audioTracks.length) {\n      const embeddedAudioFound = audioTracks.some((audioTrack) => !audioTrack.url);\n      if (!embeddedAudioFound && levels[0].audioCodec && !levels[0].attrs.AUDIO) {\n        logger.log(\"[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one\");\n        audioTracks.unshift({\n          type: \"main\",\n          name: \"main\",\n          groupId: \"main\",\n          default: false,\n          autoselect: false,\n          forced: false,\n          id: -1,\n          attrs: new AttrList({}),\n          bitrate: 0,\n          url: \"\"\n        });\n      }\n    }\n    hls.trigger(Events.MANIFEST_LOADED, {\n      levels,\n      audioTracks,\n      subtitles,\n      captions,\n      contentSteering,\n      url,\n      stats,\n      networkDetails,\n      sessionData,\n      sessionKeys,\n      startTimeOffset,\n      variableList\n    });\n  }\n  handleTrackOrLevelPlaylist(response, stats, context, networkDetails, loader) {\n    const hls = this.hls;\n    const {\n      id,\n      level,\n      type\n    } = context;\n    const url = getResponseUrl(response, context);\n    const levelUrlId = 0;\n    const levelId = isFiniteNumber(level) ? level : isFiniteNumber(id) ? id : 0;\n    const levelType = mapContextToLevelType(context);\n    const levelDetails = M3U8Parser.parseLevelPlaylist(response.data, url, levelId, levelType, levelUrlId, this.variableList);\n    if (type === PlaylistContextType.MANIFEST) {\n      const singleLevel = {\n        attrs: new AttrList({}),\n        bitrate: 0,\n        details: levelDetails,\n        name: \"\",\n        url\n      };\n      hls.trigger(Events.MANIFEST_LOADED, {\n        levels: [singleLevel],\n        audioTracks: [],\n        url,\n        stats,\n        networkDetails,\n        sessionData: null,\n        sessionKeys: null,\n        contentSteering: null,\n        startTimeOffset: null,\n        variableList: null\n      });\n    }\n    stats.parsing.end = performance.now();\n    context.levelDetails = levelDetails;\n    this.handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader);\n  }\n  handleManifestParsingError(response, context, error, networkDetails, stats) {\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.NETWORK_ERROR,\n      details: ErrorDetails.MANIFEST_PARSING_ERROR,\n      fatal: context.type === PlaylistContextType.MANIFEST,\n      url: response.url,\n      err: error,\n      error,\n      reason: error.message,\n      response,\n      context,\n      networkDetails,\n      stats\n    });\n  }\n  handleNetworkError(context, networkDetails, timeout = false, response, stats) {\n    let message = `A network ${timeout ? \"timeout\" : \"error\" + (response ? \" (status \" + response.code + \")\" : \"\")} occurred while loading ${context.type}`;\n    if (context.type === PlaylistContextType.LEVEL) {\n      message += `: ${context.level} id: ${context.id}`;\n    } else if (context.type === PlaylistContextType.AUDIO_TRACK || context.type === PlaylistContextType.SUBTITLE_TRACK) {\n      message += ` id: ${context.id} group-id: \"${context.groupId}\"`;\n    }\n    const error = new Error(message);\n    logger.warn(`[playlist-loader]: ${message}`);\n    let details = ErrorDetails.UNKNOWN;\n    let fatal = false;\n    const loader = this.getInternalLoader(context);\n    switch (context.type) {\n      case PlaylistContextType.MANIFEST:\n        details = timeout ? ErrorDetails.MANIFEST_LOAD_TIMEOUT : ErrorDetails.MANIFEST_LOAD_ERROR;\n        fatal = true;\n        break;\n      case PlaylistContextType.LEVEL:\n        details = timeout ? ErrorDetails.LEVEL_LOAD_TIMEOUT : ErrorDetails.LEVEL_LOAD_ERROR;\n        fatal = false;\n        break;\n      case PlaylistContextType.AUDIO_TRACK:\n        details = timeout ? ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT : ErrorDetails.AUDIO_TRACK_LOAD_ERROR;\n        fatal = false;\n        break;\n      case PlaylistContextType.SUBTITLE_TRACK:\n        details = timeout ? ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT : ErrorDetails.SUBTITLE_LOAD_ERROR;\n        fatal = false;\n        break;\n    }\n    if (loader) {\n      this.resetInternalLoader(context.type);\n    }\n    const errorData = {\n      type: ErrorTypes.NETWORK_ERROR,\n      details,\n      fatal,\n      url: context.url,\n      loader,\n      context,\n      error,\n      networkDetails,\n      stats\n    };\n    if (response) {\n      const url = (networkDetails == null ? void 0 : networkDetails.url) || context.url;\n      errorData.response = _objectSpread2({\n        url,\n        data: void 0\n      }, response);\n    }\n    this.hls.trigger(Events.ERROR, errorData);\n  }\n  handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader) {\n    const hls = this.hls;\n    const {\n      type,\n      level,\n      id,\n      groupId,\n      deliveryDirectives\n    } = context;\n    const url = getResponseUrl(response, context);\n    const parent = mapContextToLevelType(context);\n    const levelIndex = typeof context.level === \"number\" && parent === PlaylistLevelType.MAIN ? level : void 0;\n    if (!levelDetails.fragments.length) {\n      const _error = new Error(\"No Segments found in Playlist\");\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.LEVEL_EMPTY_ERROR,\n        fatal: false,\n        url,\n        error: _error,\n        reason: _error.message,\n        response,\n        context,\n        level: levelIndex,\n        parent,\n        networkDetails,\n        stats\n      });\n      return;\n    }\n    if (!levelDetails.targetduration) {\n      levelDetails.playlistParsingError = new Error(\"Missing Target Duration\");\n    }\n    const error = levelDetails.playlistParsingError;\n    if (error) {\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.LEVEL_PARSING_ERROR,\n        fatal: false,\n        url,\n        error,\n        reason: error.message,\n        response,\n        context,\n        level: levelIndex,\n        parent,\n        networkDetails,\n        stats\n      });\n      return;\n    }\n    if (levelDetails.live && loader) {\n      if (loader.getCacheAge) {\n        levelDetails.ageHeader = loader.getCacheAge() || 0;\n      }\n      if (!loader.getCacheAge || isNaN(levelDetails.ageHeader)) {\n        levelDetails.ageHeader = 0;\n      }\n    }\n    switch (type) {\n      case PlaylistContextType.MANIFEST:\n      case PlaylistContextType.LEVEL:\n        hls.trigger(Events.LEVEL_LOADED, {\n          details: levelDetails,\n          level: levelIndex || 0,\n          id: id || 0,\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n      case PlaylistContextType.AUDIO_TRACK:\n        hls.trigger(Events.AUDIO_TRACK_LOADED, {\n          details: levelDetails,\n          id: id || 0,\n          groupId: groupId || \"\",\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n      case PlaylistContextType.SUBTITLE_TRACK:\n        hls.trigger(Events.SUBTITLE_TRACK_LOADED, {\n          details: levelDetails,\n          id: id || 0,\n          groupId: groupId || \"\",\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n    }\n  }\n}\nfunction sendAddTrackEvent(track, videoEl) {\n  let event;\n  try {\n    event = new Event(\"addtrack\");\n  } catch (err) {\n    event = document.createEvent(\"Event\");\n    event.initEvent(\"addtrack\", false, false);\n  }\n  event.track = track;\n  videoEl.dispatchEvent(event);\n}\nfunction addCueToTrack(track, cue) {\n  const mode = track.mode;\n  if (mode === \"disabled\") {\n    track.mode = \"hidden\";\n  }\n  if (track.cues && !track.cues.getCueById(cue.id)) {\n    try {\n      track.addCue(cue);\n      if (!track.cues.getCueById(cue.id)) {\n        throw new Error(`addCue is failed for: ${cue}`);\n      }\n    } catch (err) {\n      logger.debug(`[texttrack-utils]: ${err}`);\n      try {\n        const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);\n        textTrackCue.id = cue.id;\n        track.addCue(textTrackCue);\n      } catch (err2) {\n        logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);\n      }\n    }\n  }\n  if (mode === \"disabled\") {\n    track.mode = mode;\n  }\n}\nfunction clearCurrentCues(track) {\n  const mode = track.mode;\n  if (mode === \"disabled\") {\n    track.mode = \"hidden\";\n  }\n  if (track.cues) {\n    for (let i = track.cues.length; i--; ) {\n      track.removeCue(track.cues[i]);\n    }\n  }\n  if (mode === \"disabled\") {\n    track.mode = mode;\n  }\n}\nfunction removeCuesInRange(track, start, end, predicate) {\n  const mode = track.mode;\n  if (mode === \"disabled\") {\n    track.mode = \"hidden\";\n  }\n  if (track.cues && track.cues.length > 0) {\n    const cues = getCuesInRange(track.cues, start, end);\n    for (let i = 0; i < cues.length; i++) {\n      if (!predicate || predicate(cues[i])) {\n        track.removeCue(cues[i]);\n      }\n    }\n  }\n  if (mode === \"disabled\") {\n    track.mode = mode;\n  }\n}\nfunction getFirstCueIndexAfterTime(cues, time) {\n  if (time < cues[0].startTime) {\n    return 0;\n  }\n  const len = cues.length - 1;\n  if (time > cues[len].endTime) {\n    return -1;\n  }\n  let left = 0;\n  let right = len;\n  while (left <= right) {\n    const mid = Math.floor((right + left) / 2);\n    if (time < cues[mid].startTime) {\n      right = mid - 1;\n    } else if (time > cues[mid].startTime && left < len) {\n      left = mid + 1;\n    } else {\n      return mid;\n    }\n  }\n  return cues[left].startTime - time < time - cues[right].startTime ? left : right;\n}\nfunction getCuesInRange(cues, start, end) {\n  const cuesFound = [];\n  const firstCueInRange = getFirstCueIndexAfterTime(cues, start);\n  if (firstCueInRange > -1) {\n    for (let i = firstCueInRange, len = cues.length; i < len; i++) {\n      const cue = cues[i];\n      if (cue.startTime >= start && cue.endTime <= end) {\n        cuesFound.push(cue);\n      } else if (cue.startTime > end) {\n        return cuesFound;\n      }\n    }\n  }\n  return cuesFound;\n}\nfunction filterSubtitleTracks(textTrackList) {\n  const tracks = [];\n  for (let i = 0; i < textTrackList.length; i++) {\n    const track = textTrackList[i];\n    if ((track.kind === \"subtitles\" || track.kind === \"captions\") && track.label) {\n      tracks.push(textTrackList[i]);\n    }\n  }\n  return tracks;\n}\nvar MetadataSchema = {\n  audioId3: \"org.id3\",\n  dateRange: \"com.apple.quicktime.HLS\",\n  emsg: \"https://aomedia.org/emsg/ID3\"\n};\nconst MIN_CUE_DURATION = 0.25;\nfunction getCueClass() {\n  if (typeof self === \"undefined\")\n    return void 0;\n  return self.VTTCue || self.TextTrackCue;\n}\nfunction createCueWithDataFields(Cue, startTime, endTime, data, type) {\n  let cue = new Cue(startTime, endTime, \"\");\n  try {\n    cue.value = data;\n    if (type) {\n      cue.type = type;\n    }\n  } catch (e) {\n    cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({\n      type\n    }, data) : data));\n  }\n  return cue;\n}\nconst MAX_CUE_ENDTIME = (() => {\n  const Cue = getCueClass();\n  try {\n    Cue && new Cue(0, Number.POSITIVE_INFINITY, \"\");\n  } catch (e) {\n    return Number.MAX_VALUE;\n  }\n  return Number.POSITIVE_INFINITY;\n})();\nfunction dateRangeDateToTimelineSeconds(date, offset) {\n  return date.getTime() / 1e3 - offset;\n}\nfunction hexToArrayBuffer(str) {\n  return Uint8Array.from(str.replace(/^0x/, \"\").replace(/([\\da-fA-F]{2}) ?/g, \"0x$1 \").replace(/ +$/, \"\").split(\" \")).buffer;\n}\nclass ID3TrackController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n    this.hls = hls;\n    this._registerListeners();\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n    this.hls = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  // Add ID3 metatadata text track.\n  onMediaAttached(event, data) {\n    this.media = data.media;\n  }\n  onMediaDetaching() {\n    if (!this.id3Track) {\n      return;\n    }\n    clearCurrentCues(this.id3Track);\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n  }\n  onManifestLoading() {\n    this.dateRangeCuesAppended = {};\n  }\n  createTrack(media) {\n    const track = this.getID3Track(media.textTracks);\n    track.mode = \"hidden\";\n    return track;\n  }\n  getID3Track(textTracks) {\n    if (!this.media) {\n      return;\n    }\n    for (let i = 0; i < textTracks.length; i++) {\n      const textTrack = textTracks[i];\n      if (textTrack.kind === \"metadata\" && textTrack.label === \"id3\") {\n        sendAddTrackEvent(textTrack, this.media);\n        return textTrack;\n      }\n    }\n    return this.media.addTextTrack(\"metadata\", \"id3\");\n  }\n  onFragParsingMetadata(event, data) {\n    if (!this.media) {\n      return;\n    }\n    const {\n      hls: {\n        config: {\n          enableEmsgMetadataCues,\n          enableID3MetadataCues\n        }\n      }\n    } = this;\n    if (!enableEmsgMetadataCues && !enableID3MetadataCues) {\n      return;\n    }\n    const {\n      samples\n    } = data;\n    if (!this.id3Track) {\n      this.id3Track = this.createTrack(this.media);\n    }\n    const Cue = getCueClass();\n    if (!Cue) {\n      return;\n    }\n    for (let i = 0; i < samples.length; i++) {\n      const type = samples[i].type;\n      if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {\n        continue;\n      }\n      const frames = getID3Frames(samples[i].data);\n      if (frames) {\n        const startTime = samples[i].pts;\n        let endTime = startTime + samples[i].duration;\n        if (endTime > MAX_CUE_ENDTIME) {\n          endTime = MAX_CUE_ENDTIME;\n        }\n        const timeDiff = endTime - startTime;\n        if (timeDiff <= 0) {\n          endTime = startTime + MIN_CUE_DURATION;\n        }\n        for (let j = 0; j < frames.length; j++) {\n          const frame = frames[j];\n          if (!isTimeStampFrame(frame)) {\n            this.updateId3CueEnds(startTime, type);\n            const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);\n            if (cue) {\n              this.id3Track.addCue(cue);\n            }\n          }\n        }\n      }\n    }\n  }\n  updateId3CueEnds(startTime, type) {\n    var _this$id3Track;\n    const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;\n    if (cues) {\n      for (let i = cues.length; i--; ) {\n        const cue = cues[i];\n        if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {\n          cue.endTime = startTime;\n        }\n      }\n    }\n  }\n  onBufferFlushing(event, {\n    startOffset,\n    endOffset,\n    type\n  }) {\n    const {\n      id3Track,\n      hls\n    } = this;\n    if (!hls) {\n      return;\n    }\n    const {\n      config: {\n        enableEmsgMetadataCues,\n        enableID3MetadataCues\n      }\n    } = hls;\n    if (id3Track && (enableEmsgMetadataCues || enableID3MetadataCues)) {\n      let predicate;\n      if (type === \"audio\") {\n        predicate = (cue) => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues;\n      } else if (type === \"video\") {\n        predicate = (cue) => cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n      } else {\n        predicate = (cue) => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues || cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n      }\n      removeCuesInRange(id3Track, startOffset, endOffset, predicate);\n    }\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    if (!this.media || !details.hasProgramDateTime || !this.hls.config.enableDateRangeMetadataCues) {\n      return;\n    }\n    const {\n      dateRangeCuesAppended,\n      id3Track\n    } = this;\n    const {\n      dateRanges\n    } = details;\n    const ids = Object.keys(dateRanges);\n    if (id3Track) {\n      const idsToRemove = Object.keys(dateRangeCuesAppended).filter((id) => !ids.includes(id));\n      for (let i = idsToRemove.length; i--; ) {\n        const id = idsToRemove[i];\n        Object.keys(dateRangeCuesAppended[id].cues).forEach((key) => {\n          id3Track.removeCue(dateRangeCuesAppended[id].cues[key]);\n        });\n        delete dateRangeCuesAppended[id];\n      }\n    }\n    const lastFragment = details.fragments[details.fragments.length - 1];\n    if (ids.length === 0 || !isFiniteNumber(lastFragment == null ? void 0 : lastFragment.programDateTime)) {\n      return;\n    }\n    if (!this.id3Track) {\n      this.id3Track = this.createTrack(this.media);\n    }\n    const dateTimeOffset = lastFragment.programDateTime / 1e3 - lastFragment.start;\n    const Cue = getCueClass();\n    for (let i = 0; i < ids.length; i++) {\n      const id = ids[i];\n      const dateRange = dateRanges[id];\n      const startTime = dateRangeDateToTimelineSeconds(dateRange.startDate, dateTimeOffset);\n      const appendedDateRangeCues = dateRangeCuesAppended[id];\n      const cues = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.cues) || {};\n      let durationKnown = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.durationKnown) || false;\n      let endTime = MAX_CUE_ENDTIME;\n      const endDate = dateRange.endDate;\n      if (endDate) {\n        endTime = dateRangeDateToTimelineSeconds(endDate, dateTimeOffset);\n        durationKnown = true;\n      } else if (dateRange.endOnNext && !durationKnown) {\n        const nextDateRangeWithSameClass = ids.reduce((candidateDateRange, id2) => {\n          if (id2 !== dateRange.id) {\n            const otherDateRange = dateRanges[id2];\n            if (otherDateRange.class === dateRange.class && otherDateRange.startDate > dateRange.startDate && (!candidateDateRange || dateRange.startDate < candidateDateRange.startDate)) {\n              return otherDateRange;\n            }\n          }\n          return candidateDateRange;\n        }, null);\n        if (nextDateRangeWithSameClass) {\n          endTime = dateRangeDateToTimelineSeconds(nextDateRangeWithSameClass.startDate, dateTimeOffset);\n          durationKnown = true;\n        }\n      }\n      const attributes = Object.keys(dateRange.attr);\n      for (let j = 0; j < attributes.length; j++) {\n        const key = attributes[j];\n        if (!isDateRangeCueAttribute(key)) {\n          continue;\n        }\n        const cue = cues[key];\n        if (cue) {\n          if (durationKnown && !appendedDateRangeCues.durationKnown) {\n            cue.endTime = endTime;\n          }\n        } else if (Cue) {\n          let data = dateRange.attr[key];\n          if (isSCTE35Attribute(key)) {\n            data = hexToArrayBuffer(data);\n          }\n          const _cue = createCueWithDataFields(Cue, startTime, endTime, {\n            key,\n            data\n          }, MetadataSchema.dateRange);\n          if (_cue) {\n            _cue.id = id;\n            this.id3Track.addCue(_cue);\n            cues[key] = _cue;\n          }\n        }\n      }\n      dateRangeCuesAppended[id] = {\n        cues,\n        dateRange,\n        durationKnown\n      };\n    }\n  }\n}\nclass LatencyController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = null;\n    this.levelDetails = null;\n    this.currentTime = 0;\n    this.stallCount = 0;\n    this._latency = null;\n    this.timeupdateHandler = () => this.timeupdate();\n    this.hls = hls;\n    this.config = hls.config;\n    this.registerListeners();\n  }\n  get latency() {\n    return this._latency || 0;\n  }\n  get maxLatency() {\n    const {\n      config,\n      levelDetails\n    } = this;\n    if (config.liveMaxLatencyDuration !== void 0) {\n      return config.liveMaxLatencyDuration;\n    }\n    return levelDetails ? config.liveMaxLatencyDurationCount * levelDetails.targetduration : 0;\n  }\n  get targetLatency() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return null;\n    }\n    const {\n      holdBack,\n      partHoldBack,\n      targetduration\n    } = levelDetails;\n    const {\n      liveSyncDuration,\n      liveSyncDurationCount,\n      lowLatencyMode\n    } = this.config;\n    const userConfig = this.hls.userConfig;\n    let targetLatency = lowLatencyMode ? partHoldBack || holdBack : holdBack;\n    if (userConfig.liveSyncDuration || userConfig.liveSyncDurationCount || targetLatency === 0) {\n      targetLatency = liveSyncDuration !== void 0 ? liveSyncDuration : liveSyncDurationCount * targetduration;\n    }\n    const maxLiveSyncOnStallIncrease = targetduration;\n    const liveSyncOnStallIncrease = 1;\n    return targetLatency + Math.min(this.stallCount * liveSyncOnStallIncrease, maxLiveSyncOnStallIncrease);\n  }\n  get liveSyncPosition() {\n    const liveEdge = this.estimateLiveEdge();\n    const targetLatency = this.targetLatency;\n    const levelDetails = this.levelDetails;\n    if (liveEdge === null || targetLatency === null || levelDetails === null) {\n      return null;\n    }\n    const edge = levelDetails.edge;\n    const syncPosition = liveEdge - targetLatency - this.edgeStalled;\n    const min = edge - levelDetails.totalduration;\n    const max = edge - (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration);\n    return Math.min(Math.max(min, syncPosition), max);\n  }\n  get drift() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return 1;\n    }\n    return levelDetails.drift;\n  }\n  get edgeStalled() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return 0;\n    }\n    const maxLevelUpdateAge = (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration) * 3;\n    return Math.max(levelDetails.age - maxLevelUpdateAge, 0);\n  }\n  get forwardBufferLength() {\n    const {\n      media,\n      levelDetails\n    } = this;\n    if (!media || !levelDetails) {\n      return 0;\n    }\n    const bufferedRanges = media.buffered.length;\n    return (bufferedRanges ? media.buffered.end(bufferedRanges - 1) : levelDetails.edge) - this.currentTime;\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetaching();\n    this.levelDetails = null;\n    this.hls = this.timeupdateHandler = null;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    this.hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    this.hls.off(Events.ERROR, this.onError, this);\n  }\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    this.media.addEventListener(\"timeupdate\", this.timeupdateHandler);\n  }\n  onMediaDetaching() {\n    if (this.media) {\n      this.media.removeEventListener(\"timeupdate\", this.timeupdateHandler);\n      this.media = null;\n    }\n  }\n  onManifestLoading() {\n    this.levelDetails = null;\n    this._latency = null;\n    this.stallCount = 0;\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    this.levelDetails = details;\n    if (details.advanced) {\n      this.timeupdate();\n    }\n    if (!details.live && this.media) {\n      this.media.removeEventListener(\"timeupdate\", this.timeupdateHandler);\n    }\n  }\n  onError(event, data) {\n    var _this$levelDetails;\n    if (data.details !== ErrorDetails.BUFFER_STALLED_ERROR) {\n      return;\n    }\n    this.stallCount++;\n    if ((_this$levelDetails = this.levelDetails) != null && _this$levelDetails.live) {\n      logger.warn(\"[playback-rate-controller]: Stall detected, adjusting target latency\");\n    }\n  }\n  timeupdate() {\n    const {\n      media,\n      levelDetails\n    } = this;\n    if (!media || !levelDetails) {\n      return;\n    }\n    this.currentTime = media.currentTime;\n    const latency = this.computeLatency();\n    if (latency === null) {\n      return;\n    }\n    this._latency = latency;\n    const {\n      lowLatencyMode,\n      maxLiveSyncPlaybackRate\n    } = this.config;\n    if (!lowLatencyMode || maxLiveSyncPlaybackRate === 1 || !levelDetails.live) {\n      return;\n    }\n    const targetLatency = this.targetLatency;\n    if (targetLatency === null) {\n      return;\n    }\n    const distanceFromTarget = latency - targetLatency;\n    const liveMinLatencyDuration = Math.min(this.maxLatency, targetLatency + levelDetails.targetduration);\n    const inLiveRange = distanceFromTarget < liveMinLatencyDuration;\n    if (inLiveRange && distanceFromTarget > 0.05 && this.forwardBufferLength > 1) {\n      const max = Math.min(2, Math.max(1, maxLiveSyncPlaybackRate));\n      const rate = Math.round(2 / (1 + Math.exp(-0.75 * distanceFromTarget - this.edgeStalled)) * 20) / 20;\n      media.playbackRate = Math.min(max, Math.max(1, rate));\n    } else if (media.playbackRate !== 1 && media.playbackRate !== 0) {\n      media.playbackRate = 1;\n    }\n  }\n  estimateLiveEdge() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return null;\n    }\n    return levelDetails.edge + levelDetails.age;\n  }\n  computeLatency() {\n    const liveEdge = this.estimateLiveEdge();\n    if (liveEdge === null) {\n      return null;\n    }\n    return liveEdge - this.currentTime;\n  }\n}\nconst HdcpLevels = [\"NONE\", \"TYPE-0\", \"TYPE-1\", null];\nfunction isHdcpLevel(value) {\n  return HdcpLevels.indexOf(value) > -1;\n}\nconst VideoRangeValues = [\"SDR\", \"PQ\", \"HLG\"];\nfunction isVideoRange(value) {\n  return !!value && VideoRangeValues.indexOf(value) > -1;\n}\nvar HlsSkip = {\n  No: \"\",\n  Yes: \"YES\",\n  v2: \"v2\"\n};\nfunction getSkipValue(details, msn) {\n  const {\n    canSkipUntil,\n    canSkipDateRanges,\n    endSN\n  } = details;\n  const snChangeGoal = msn !== void 0 ? msn - endSN : 0;\n  if (canSkipUntil && snChangeGoal < canSkipUntil) {\n    if (canSkipDateRanges) {\n      return HlsSkip.v2;\n    }\n    return HlsSkip.Yes;\n  }\n  return HlsSkip.No;\n}\nclass HlsUrlParameters {\n  constructor(msn, part, skip) {\n    this.msn = void 0;\n    this.part = void 0;\n    this.skip = void 0;\n    this.msn = msn;\n    this.part = part;\n    this.skip = skip;\n  }\n  addDirectives(uri) {\n    const url = new self.URL(uri);\n    if (this.msn !== void 0) {\n      url.searchParams.set(\"_HLS_msn\", this.msn.toString());\n    }\n    if (this.part !== void 0) {\n      url.searchParams.set(\"_HLS_part\", this.part.toString());\n    }\n    if (this.skip) {\n      url.searchParams.set(\"_HLS_skip\", this.skip);\n    }\n    return url.href;\n  }\n}\nclass Level {\n  constructor(data) {\n    this._attrs = void 0;\n    this.audioCodec = void 0;\n    this.bitrate = void 0;\n    this.codecSet = void 0;\n    this.url = void 0;\n    this.frameRate = void 0;\n    this.height = void 0;\n    this.id = void 0;\n    this.name = void 0;\n    this.videoCodec = void 0;\n    this.width = void 0;\n    this.details = void 0;\n    this.fragmentError = 0;\n    this.loadError = 0;\n    this.loaded = void 0;\n    this.realBitrate = 0;\n    this.supportedPromise = void 0;\n    this.supportedResult = void 0;\n    this._avgBitrate = 0;\n    this._audioGroups = void 0;\n    this._subtitleGroups = void 0;\n    this._urlId = 0;\n    this.url = [data.url];\n    this._attrs = [data.attrs];\n    this.bitrate = data.bitrate;\n    if (data.details) {\n      this.details = data.details;\n    }\n    this.id = data.id || 0;\n    this.name = data.name;\n    this.width = data.width || 0;\n    this.height = data.height || 0;\n    this.frameRate = data.attrs.optionalFloat(\"FRAME-RATE\", 0);\n    this._avgBitrate = data.attrs.decimalInteger(\"AVERAGE-BANDWIDTH\");\n    this.audioCodec = data.audioCodec;\n    this.videoCodec = data.videoCodec;\n    this.codecSet = [data.videoCodec, data.audioCodec].filter((c) => !!c).map((s) => s.substring(0, 4)).join(\",\");\n    this.addGroupId(\"audio\", data.attrs.AUDIO);\n    this.addGroupId(\"text\", data.attrs.SUBTITLES);\n  }\n  get maxBitrate() {\n    return Math.max(this.realBitrate, this.bitrate);\n  }\n  get averageBitrate() {\n    return this._avgBitrate || this.realBitrate || this.bitrate;\n  }\n  get attrs() {\n    return this._attrs[0];\n  }\n  get codecs() {\n    return this.attrs.CODECS || \"\";\n  }\n  get pathwayId() {\n    return this.attrs[\"PATHWAY-ID\"] || \".\";\n  }\n  get videoRange() {\n    return this.attrs[\"VIDEO-RANGE\"] || \"SDR\";\n  }\n  get score() {\n    return this.attrs.optionalFloat(\"SCORE\", 0);\n  }\n  get uri() {\n    return this.url[0] || \"\";\n  }\n  hasAudioGroup(groupId) {\n    return hasGroup(this._audioGroups, groupId);\n  }\n  hasSubtitleGroup(groupId) {\n    return hasGroup(this._subtitleGroups, groupId);\n  }\n  get audioGroups() {\n    return this._audioGroups;\n  }\n  get subtitleGroups() {\n    return this._subtitleGroups;\n  }\n  addGroupId(type, groupId) {\n    if (!groupId) {\n      return;\n    }\n    if (type === \"audio\") {\n      let audioGroups = this._audioGroups;\n      if (!audioGroups) {\n        audioGroups = this._audioGroups = [];\n      }\n      if (audioGroups.indexOf(groupId) === -1) {\n        audioGroups.push(groupId);\n      }\n    } else if (type === \"text\") {\n      let subtitleGroups = this._subtitleGroups;\n      if (!subtitleGroups) {\n        subtitleGroups = this._subtitleGroups = [];\n      }\n      if (subtitleGroups.indexOf(groupId) === -1) {\n        subtitleGroups.push(groupId);\n      }\n    }\n  }\n  // Deprecated methods (retained for backwards compatibility)\n  get urlId() {\n    return 0;\n  }\n  set urlId(value) {\n  }\n  get audioGroupIds() {\n    return this.audioGroups ? [this.audioGroupId] : void 0;\n  }\n  get textGroupIds() {\n    return this.subtitleGroups ? [this.textGroupId] : void 0;\n  }\n  get audioGroupId() {\n    var _this$audioGroups;\n    return (_this$audioGroups = this.audioGroups) == null ? void 0 : _this$audioGroups[0];\n  }\n  get textGroupId() {\n    var _this$subtitleGroups;\n    return (_this$subtitleGroups = this.subtitleGroups) == null ? void 0 : _this$subtitleGroups[0];\n  }\n  addFallback() {\n  }\n}\nfunction hasGroup(groups, groupId) {\n  if (!groupId || !groups) {\n    return false;\n  }\n  return groups.indexOf(groupId) !== -1;\n}\nfunction updateFromToPTS(fragFrom, fragTo) {\n  const fragToPTS = fragTo.startPTS;\n  if (isFiniteNumber(fragToPTS)) {\n    let duration = 0;\n    let frag;\n    if (fragTo.sn > fragFrom.sn) {\n      duration = fragToPTS - fragFrom.start;\n      frag = fragFrom;\n    } else {\n      duration = fragFrom.start - fragToPTS;\n      frag = fragTo;\n    }\n    if (frag.duration !== duration) {\n      frag.duration = duration;\n    }\n  } else if (fragTo.sn > fragFrom.sn) {\n    const contiguous = fragFrom.cc === fragTo.cc;\n    if (contiguous && fragFrom.minEndPTS) {\n      fragTo.start = fragFrom.start + (fragFrom.minEndPTS - fragFrom.start);\n    } else {\n      fragTo.start = fragFrom.start + fragFrom.duration;\n    }\n  } else {\n    fragTo.start = Math.max(fragFrom.start - fragTo.duration, 0);\n  }\n}\nfunction updateFragPTSDTS(details, frag, startPTS, endPTS, startDTS, endDTS) {\n  const parsedMediaDuration = endPTS - startPTS;\n  if (parsedMediaDuration <= 0) {\n    logger.warn(\"Fragment should have a positive duration\", frag);\n    endPTS = startPTS + frag.duration;\n    endDTS = startDTS + frag.duration;\n  }\n  let maxStartPTS = startPTS;\n  let minEndPTS = endPTS;\n  const fragStartPts = frag.startPTS;\n  const fragEndPts = frag.endPTS;\n  if (isFiniteNumber(fragStartPts)) {\n    const deltaPTS = Math.abs(fragStartPts - startPTS);\n    if (!isFiniteNumber(frag.deltaPTS)) {\n      frag.deltaPTS = deltaPTS;\n    } else {\n      frag.deltaPTS = Math.max(deltaPTS, frag.deltaPTS);\n    }\n    maxStartPTS = Math.max(startPTS, fragStartPts);\n    startPTS = Math.min(startPTS, fragStartPts);\n    startDTS = Math.min(startDTS, frag.startDTS);\n    minEndPTS = Math.min(endPTS, fragEndPts);\n    endPTS = Math.max(endPTS, fragEndPts);\n    endDTS = Math.max(endDTS, frag.endDTS);\n  }\n  const drift = startPTS - frag.start;\n  if (frag.start !== 0) {\n    frag.start = startPTS;\n  }\n  frag.duration = endPTS - frag.start;\n  frag.startPTS = startPTS;\n  frag.maxStartPTS = maxStartPTS;\n  frag.startDTS = startDTS;\n  frag.endPTS = endPTS;\n  frag.minEndPTS = minEndPTS;\n  frag.endDTS = endDTS;\n  const sn = frag.sn;\n  if (!details || sn < details.startSN || sn > details.endSN) {\n    return 0;\n  }\n  let i;\n  const fragIdx = sn - details.startSN;\n  const fragments = details.fragments;\n  fragments[fragIdx] = frag;\n  for (i = fragIdx; i > 0; i--) {\n    updateFromToPTS(fragments[i], fragments[i - 1]);\n  }\n  for (i = fragIdx; i < fragments.length - 1; i++) {\n    updateFromToPTS(fragments[i], fragments[i + 1]);\n  }\n  if (details.fragmentHint) {\n    updateFromToPTS(fragments[fragments.length - 1], details.fragmentHint);\n  }\n  details.PTSKnown = details.alignedSliding = true;\n  return drift;\n}\nfunction mergeDetails(oldDetails, newDetails) {\n  let currentInitSegment = null;\n  const oldFragments = oldDetails.fragments;\n  for (let i = oldFragments.length - 1; i >= 0; i--) {\n    const oldInit = oldFragments[i].initSegment;\n    if (oldInit) {\n      currentInitSegment = oldInit;\n      break;\n    }\n  }\n  if (oldDetails.fragmentHint) {\n    delete oldDetails.fragmentHint.endPTS;\n  }\n  let ccOffset = 0;\n  let PTSFrag;\n  mapFragmentIntersection(oldDetails, newDetails, (oldFrag, newFrag) => {\n    if (oldFrag.relurl) {\n      ccOffset = oldFrag.cc - newFrag.cc;\n    }\n    if (isFiniteNumber(oldFrag.startPTS) && isFiniteNumber(oldFrag.endPTS)) {\n      newFrag.start = newFrag.startPTS = oldFrag.startPTS;\n      newFrag.startDTS = oldFrag.startDTS;\n      newFrag.maxStartPTS = oldFrag.maxStartPTS;\n      newFrag.endPTS = oldFrag.endPTS;\n      newFrag.endDTS = oldFrag.endDTS;\n      newFrag.minEndPTS = oldFrag.minEndPTS;\n      newFrag.duration = oldFrag.endPTS - oldFrag.startPTS;\n      if (newFrag.duration) {\n        PTSFrag = newFrag;\n      }\n      newDetails.PTSKnown = newDetails.alignedSliding = true;\n    }\n    newFrag.elementaryStreams = oldFrag.elementaryStreams;\n    newFrag.loader = oldFrag.loader;\n    newFrag.stats = oldFrag.stats;\n    if (oldFrag.initSegment) {\n      newFrag.initSegment = oldFrag.initSegment;\n      currentInitSegment = oldFrag.initSegment;\n    }\n  });\n  if (currentInitSegment) {\n    const fragmentsToCheck = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n    fragmentsToCheck.forEach((frag) => {\n      var _currentInitSegment;\n      if (frag && (!frag.initSegment || frag.initSegment.relurl === ((_currentInitSegment = currentInitSegment) == null ? void 0 : _currentInitSegment.relurl))) {\n        frag.initSegment = currentInitSegment;\n      }\n    });\n  }\n  if (newDetails.skippedSegments) {\n    newDetails.deltaUpdateFailed = newDetails.fragments.some((frag) => !frag);\n    if (newDetails.deltaUpdateFailed) {\n      logger.warn(\"[level-helper] Previous playlist missing segments skipped in delta playlist\");\n      for (let i = newDetails.skippedSegments; i--; ) {\n        newDetails.fragments.shift();\n      }\n      newDetails.startSN = newDetails.fragments[0].sn;\n      newDetails.startCC = newDetails.fragments[0].cc;\n    } else if (newDetails.canSkipDateRanges) {\n      newDetails.dateRanges = mergeDateRanges(oldDetails.dateRanges, newDetails.dateRanges, newDetails.recentlyRemovedDateranges);\n    }\n  }\n  const newFragments = newDetails.fragments;\n  if (ccOffset) {\n    logger.warn(\"discontinuity sliding from playlist, take drift into account\");\n    for (let i = 0; i < newFragments.length; i++) {\n      newFragments[i].cc += ccOffset;\n    }\n  }\n  if (newDetails.skippedSegments) {\n    newDetails.startCC = newDetails.fragments[0].cc;\n  }\n  mapPartIntersection(oldDetails.partList, newDetails.partList, (oldPart, newPart) => {\n    newPart.elementaryStreams = oldPart.elementaryStreams;\n    newPart.stats = oldPart.stats;\n  });\n  if (PTSFrag) {\n    updateFragPTSDTS(newDetails, PTSFrag, PTSFrag.startPTS, PTSFrag.endPTS, PTSFrag.startDTS, PTSFrag.endDTS);\n  } else {\n    adjustSliding(oldDetails, newDetails);\n  }\n  if (newFragments.length) {\n    newDetails.totalduration = newDetails.edge - newFragments[0].start;\n  }\n  newDetails.driftStartTime = oldDetails.driftStartTime;\n  newDetails.driftStart = oldDetails.driftStart;\n  const advancedDateTime = newDetails.advancedDateTime;\n  if (newDetails.advanced && advancedDateTime) {\n    const edge = newDetails.edge;\n    if (!newDetails.driftStart) {\n      newDetails.driftStartTime = advancedDateTime;\n      newDetails.driftStart = edge;\n    }\n    newDetails.driftEndTime = advancedDateTime;\n    newDetails.driftEnd = edge;\n  } else {\n    newDetails.driftEndTime = oldDetails.driftEndTime;\n    newDetails.driftEnd = oldDetails.driftEnd;\n    newDetails.advancedDateTime = oldDetails.advancedDateTime;\n  }\n}\nfunction mergeDateRanges(oldDateRanges, deltaDateRanges, recentlyRemovedDateranges) {\n  const dateRanges = _extends({}, oldDateRanges);\n  if (recentlyRemovedDateranges) {\n    recentlyRemovedDateranges.forEach((id) => {\n      delete dateRanges[id];\n    });\n  }\n  Object.keys(deltaDateRanges).forEach((id) => {\n    const dateRange = new DateRange(deltaDateRanges[id].attr, dateRanges[id]);\n    if (dateRange.isValid) {\n      dateRanges[id] = dateRange;\n    } else {\n      logger.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: \"${JSON.stringify(deltaDateRanges[id].attr)}\"`);\n    }\n  });\n  return dateRanges;\n}\nfunction mapPartIntersection(oldParts, newParts, intersectionFn) {\n  if (oldParts && newParts) {\n    let delta = 0;\n    for (let i = 0, len = oldParts.length; i <= len; i++) {\n      const oldPart = oldParts[i];\n      const newPart = newParts[i + delta];\n      if (oldPart && newPart && oldPart.index === newPart.index && oldPart.fragment.sn === newPart.fragment.sn) {\n        intersectionFn(oldPart, newPart);\n      } else {\n        delta--;\n      }\n    }\n  }\n}\nfunction mapFragmentIntersection(oldDetails, newDetails, intersectionFn) {\n  const skippedSegments = newDetails.skippedSegments;\n  const start = Math.max(oldDetails.startSN, newDetails.startSN) - newDetails.startSN;\n  const end = (oldDetails.fragmentHint ? 1 : 0) + (skippedSegments ? newDetails.endSN : Math.min(oldDetails.endSN, newDetails.endSN)) - newDetails.startSN;\n  const delta = newDetails.startSN - oldDetails.startSN;\n  const newFrags = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n  const oldFrags = oldDetails.fragmentHint ? oldDetails.fragments.concat(oldDetails.fragmentHint) : oldDetails.fragments;\n  for (let i = start; i <= end; i++) {\n    const oldFrag = oldFrags[delta + i];\n    let newFrag = newFrags[i];\n    if (skippedSegments && !newFrag && i < skippedSegments) {\n      newFrag = newDetails.fragments[i] = oldFrag;\n    }\n    if (oldFrag && newFrag) {\n      intersectionFn(oldFrag, newFrag);\n    }\n  }\n}\nfunction adjustSliding(oldDetails, newDetails) {\n  const delta = newDetails.startSN + newDetails.skippedSegments - oldDetails.startSN;\n  const oldFragments = oldDetails.fragments;\n  if (delta < 0 || delta >= oldFragments.length) {\n    return;\n  }\n  addSliding(newDetails, oldFragments[delta].start);\n}\nfunction addSliding(details, start) {\n  if (start) {\n    const fragments = details.fragments;\n    for (let i = details.skippedSegments; i < fragments.length; i++) {\n      fragments[i].start += start;\n    }\n    if (details.fragmentHint) {\n      details.fragmentHint.start += start;\n    }\n  }\n}\nfunction computeReloadInterval(newDetails, distanceToLiveEdgeMs = Infinity) {\n  let reloadInterval = 1e3 * newDetails.targetduration;\n  if (newDetails.updated) {\n    const fragments = newDetails.fragments;\n    const liveEdgeMaxTargetDurations = 4;\n    if (fragments.length && reloadInterval * liveEdgeMaxTargetDurations > distanceToLiveEdgeMs) {\n      const lastSegmentDuration = fragments[fragments.length - 1].duration * 1e3;\n      if (lastSegmentDuration < reloadInterval) {\n        reloadInterval = lastSegmentDuration;\n      }\n    }\n  } else {\n    reloadInterval /= 2;\n  }\n  return Math.round(reloadInterval);\n}\nfunction getFragmentWithSN(level, sn, fragCurrent) {\n  if (!(level != null && level.details)) {\n    return null;\n  }\n  const levelDetails = level.details;\n  let fragment = levelDetails.fragments[sn - levelDetails.startSN];\n  if (fragment) {\n    return fragment;\n  }\n  fragment = levelDetails.fragmentHint;\n  if (fragment && fragment.sn === sn) {\n    return fragment;\n  }\n  if (sn < levelDetails.startSN && fragCurrent && fragCurrent.sn === sn) {\n    return fragCurrent;\n  }\n  return null;\n}\nfunction getPartWith(level, sn, partIndex) {\n  var _level$details;\n  if (!(level != null && level.details)) {\n    return null;\n  }\n  return findPart((_level$details = level.details) == null ? void 0 : _level$details.partList, sn, partIndex);\n}\nfunction findPart(partList, sn, partIndex) {\n  if (partList) {\n    for (let i = partList.length; i--; ) {\n      const part = partList[i];\n      if (part.index === partIndex && part.fragment.sn === sn) {\n        return part;\n      }\n    }\n  }\n  return null;\n}\nfunction reassignFragmentLevelIndexes(levels) {\n  levels.forEach((level, index) => {\n    const {\n      details\n    } = level;\n    if (details != null && details.fragments) {\n      details.fragments.forEach((fragment) => {\n        fragment.level = index;\n      });\n    }\n  });\n}\nfunction isTimeoutError(error) {\n  switch (error.details) {\n    case ErrorDetails.FRAG_LOAD_TIMEOUT:\n    case ErrorDetails.KEY_LOAD_TIMEOUT:\n    case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n    case ErrorDetails.MANIFEST_LOAD_TIMEOUT:\n      return true;\n  }\n  return false;\n}\nfunction getRetryConfig(loadPolicy, error) {\n  const isTimeout = isTimeoutError(error);\n  return loadPolicy.default[`${isTimeout ? \"timeout\" : \"error\"}Retry`];\n}\nfunction getRetryDelay(retryConfig, retryCount) {\n  const backoffFactor = retryConfig.backoff === \"linear\" ? 1 : Math.pow(2, retryCount);\n  return Math.min(backoffFactor * retryConfig.retryDelayMs, retryConfig.maxRetryDelayMs);\n}\nfunction getLoaderConfigWithoutReties(loderConfig) {\n  return _objectSpread2(_objectSpread2({}, loderConfig), {\n    errorRetry: null,\n    timeoutRetry: null\n  });\n}\nfunction shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse) {\n  if (!retryConfig) {\n    return false;\n  }\n  const httpStatus = loaderResponse == null ? void 0 : loaderResponse.code;\n  const retry = retryCount < retryConfig.maxNumRetry && (retryForHttpStatus(httpStatus) || !!isTimeout);\n  return retryConfig.shouldRetry ? retryConfig.shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse, retry) : retry;\n}\nfunction retryForHttpStatus(httpStatus) {\n  return httpStatus === 0 && navigator.onLine === false || !!httpStatus && (httpStatus < 400 || httpStatus > 499);\n}\nconst BinarySearch = {\n  /**\n   * Searches for an item in an array which matches a certain condition.\n   * This requires the condition to only match one item in the array,\n   * and for the array to be ordered.\n   *\n   * @param list The array to search.\n   * @param comparisonFn\n   *      Called and provided a candidate item as the first argument.\n   *      Should return:\n   *          > -1 if the item should be located at a lower index than the provided item.\n   *          > 1 if the item should be located at a higher index than the provided item.\n   *          > 0 if the item is the item you're looking for.\n   *\n   * @returns the object if found, otherwise returns null\n   */\n  search: function(list, comparisonFn) {\n    let minIndex = 0;\n    let maxIndex = list.length - 1;\n    let currentIndex = null;\n    let currentElement = null;\n    while (minIndex <= maxIndex) {\n      currentIndex = (minIndex + maxIndex) / 2 | 0;\n      currentElement = list[currentIndex];\n      const comparisonResult = comparisonFn(currentElement);\n      if (comparisonResult > 0) {\n        minIndex = currentIndex + 1;\n      } else if (comparisonResult < 0) {\n        maxIndex = currentIndex - 1;\n      } else {\n        return currentElement;\n      }\n    }\n    return null;\n  }\n};\nfunction findFragmentByPDT(fragments, PDTValue, maxFragLookUpTolerance) {\n  if (PDTValue === null || !Array.isArray(fragments) || !fragments.length || !isFiniteNumber(PDTValue)) {\n    return null;\n  }\n  const startPDT = fragments[0].programDateTime;\n  if (PDTValue < (startPDT || 0)) {\n    return null;\n  }\n  const endPDT = fragments[fragments.length - 1].endProgramDateTime;\n  if (PDTValue >= (endPDT || 0)) {\n    return null;\n  }\n  maxFragLookUpTolerance = maxFragLookUpTolerance || 0;\n  for (let seg = 0; seg < fragments.length; ++seg) {\n    const frag = fragments[seg];\n    if (pdtWithinToleranceTest(PDTValue, maxFragLookUpTolerance, frag)) {\n      return frag;\n    }\n  }\n  return null;\n}\nfunction findFragmentByPTS(fragPrevious, fragments, bufferEnd = 0, maxFragLookUpTolerance = 0) {\n  let fragNext = null;\n  if (fragPrevious) {\n    fragNext = fragments[fragPrevious.sn - fragments[0].sn + 1] || null;\n    const bufferEdgeError = fragPrevious.endDTS - bufferEnd;\n    if (bufferEdgeError > 0 && bufferEdgeError < 15e-7) {\n      bufferEnd += 15e-7;\n    }\n  } else if (bufferEnd === 0 && fragments[0].start === 0) {\n    fragNext = fragments[0];\n  }\n  if (fragNext && (!fragPrevious || fragPrevious.level === fragNext.level) && fragmentWithinToleranceTest(bufferEnd, maxFragLookUpTolerance, fragNext) === 0) {\n    return fragNext;\n  }\n  const foundFragment = BinarySearch.search(fragments, fragmentWithinToleranceTest.bind(null, bufferEnd, maxFragLookUpTolerance));\n  if (foundFragment && (foundFragment !== fragPrevious || !fragNext)) {\n    return foundFragment;\n  }\n  return fragNext;\n}\nfunction fragmentWithinToleranceTest(bufferEnd = 0, maxFragLookUpTolerance = 0, candidate) {\n  if (candidate.start <= bufferEnd && candidate.start + candidate.duration > bufferEnd) {\n    return 0;\n  }\n  const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0));\n  if (candidate.start + candidate.duration - candidateLookupTolerance <= bufferEnd) {\n    return 1;\n  } else if (candidate.start - candidateLookupTolerance > bufferEnd && candidate.start) {\n    return -1;\n  }\n  return 0;\n}\nfunction pdtWithinToleranceTest(pdtBufferEnd, maxFragLookUpTolerance, candidate) {\n  const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0)) * 1e3;\n  const endProgramDateTime = candidate.endProgramDateTime || 0;\n  return endProgramDateTime - candidateLookupTolerance > pdtBufferEnd;\n}\nfunction findFragWithCC(fragments, cc) {\n  return BinarySearch.search(fragments, (candidate) => {\n    if (candidate.cc < cc) {\n      return 1;\n    } else if (candidate.cc > cc) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n}\nvar NetworkErrorAction = {\n  DoNothing: 0,\n  SendEndCallback: 1,\n  SendAlternateToPenaltyBox: 2,\n  RemoveAlternatePermanently: 3,\n  InsertDiscontinuity: 4,\n  RetryRequest: 5\n};\nvar ErrorActionFlags = {\n  None: 0,\n  MoveAllAlternatesMatchingHost: 1,\n  MoveAllAlternatesMatchingHDCP: 2,\n  SwitchToSDR: 4\n};\nclass ErrorController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.playlistError = 0;\n    this.penalizedRenditions = {};\n    this.log = void 0;\n    this.warn = void 0;\n    this.error = void 0;\n    this.hls = hls;\n    this.log = logger.log.bind(logger, `[info]:`);\n    this.warn = logger.warn.bind(logger, `[warning]:`);\n    this.error = logger.error.bind(logger, `[error]:`);\n    this.registerListeners();\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.ERROR, this.onErrorOut, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.hls = null;\n    this.penalizedRenditions = {};\n  }\n  startLoad(startPosition) {\n  }\n  stopLoad() {\n    this.playlistError = 0;\n  }\n  getVariantLevelIndex(frag) {\n    return (frag == null ? void 0 : frag.type) === PlaylistLevelType.MAIN ? frag.level : this.hls.loadLevel;\n  }\n  onManifestLoading() {\n    this.playlistError = 0;\n    this.penalizedRenditions = {};\n  }\n  onLevelUpdated() {\n    this.playlistError = 0;\n  }\n  onError(event, data) {\n    var _data$frag, _data$level;\n    if (data.fatal) {\n      return;\n    }\n    const hls = this.hls;\n    const context = data.context;\n    switch (data.details) {\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        data.errorAction = this.getFragRetryOrSwitchAction(data);\n        return;\n      case ErrorDetails.FRAG_PARSING_ERROR:\n        if ((_data$frag = data.frag) != null && _data$frag.gap) {\n          data.errorAction = {\n            action: NetworkErrorAction.DoNothing,\n            flags: ErrorActionFlags.None\n          };\n          return;\n        }\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_DECRYPT_ERROR: {\n        data.errorAction = this.getFragRetryOrSwitchAction(data);\n        data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n        return;\n      }\n      case ErrorDetails.LEVEL_EMPTY_ERROR:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        {\n          var _data$context, _data$context$levelDe;\n          const levelIndex = data.parent === PlaylistLevelType.MAIN ? data.level : hls.loadLevel;\n          if (data.details === ErrorDetails.LEVEL_EMPTY_ERROR && !!((_data$context = data.context) != null && (_data$context$levelDe = _data$context.levelDetails) != null && _data$context$levelDe.live)) {\n            data.errorAction = this.getPlaylistRetryOrSwitchAction(data, levelIndex);\n          } else {\n            data.levelRetry = false;\n            data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n          }\n        }\n        return;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n        if (typeof (context == null ? void 0 : context.level) === \"number\") {\n          data.errorAction = this.getPlaylistRetryOrSwitchAction(data, context.level);\n        }\n        return;\n      case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n      case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n      case ErrorDetails.SUBTITLE_LOAD_ERROR:\n      case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:\n        if (context) {\n          const level = hls.levels[hls.loadLevel];\n          if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {\n            data.errorAction = this.getPlaylistRetryOrSwitchAction(data, hls.loadLevel);\n            data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n            data.errorAction.flags = ErrorActionFlags.MoveAllAlternatesMatchingHost;\n            return;\n          }\n        }\n        return;\n      case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:\n        {\n          const level = hls.levels[hls.loadLevel];\n          const restrictedHdcpLevel = level == null ? void 0 : level.attrs[\"HDCP-LEVEL\"];\n          if (restrictedHdcpLevel) {\n            data.errorAction = {\n              action: NetworkErrorAction.SendAlternateToPenaltyBox,\n              flags: ErrorActionFlags.MoveAllAlternatesMatchingHDCP,\n              hdcpLevel: restrictedHdcpLevel\n            };\n          } else {\n            this.keySystemError(data);\n          }\n        }\n        return;\n      case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n      case ErrorDetails.REMUX_ALLOC_ERROR:\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n        data.errorAction = this.getLevelSwitchAction(data, (_data$level = data.level) != null ? _data$level : hls.loadLevel);\n        return;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n      case ErrorDetails.BUFFER_APPENDING_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n      case ErrorDetails.LEVEL_SWITCH_ERROR:\n      case ErrorDetails.BUFFER_STALLED_ERROR:\n      case ErrorDetails.BUFFER_SEEK_OVER_HOLE:\n      case ErrorDetails.BUFFER_NUDGE_ON_STALL:\n        data.errorAction = {\n          action: NetworkErrorAction.DoNothing,\n          flags: ErrorActionFlags.None\n        };\n        return;\n    }\n    if (data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n      this.keySystemError(data);\n    }\n  }\n  keySystemError(data) {\n    const levelIndex = this.getVariantLevelIndex(data.frag);\n    data.levelRetry = false;\n    data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n  }\n  getPlaylistRetryOrSwitchAction(data, levelIndex) {\n    const hls = this.hls;\n    const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);\n    const retryCount = this.playlistError++;\n    const retry = shouldRetry(retryConfig, retryCount, isTimeoutError(data), data.response);\n    if (retry) {\n      return {\n        action: NetworkErrorAction.RetryRequest,\n        flags: ErrorActionFlags.None,\n        retryConfig,\n        retryCount\n      };\n    }\n    const errorAction = this.getLevelSwitchAction(data, levelIndex);\n    if (retryConfig) {\n      errorAction.retryConfig = retryConfig;\n      errorAction.retryCount = retryCount;\n    }\n    return errorAction;\n  }\n  getFragRetryOrSwitchAction(data) {\n    const hls = this.hls;\n    const variantLevelIndex = this.getVariantLevelIndex(data.frag);\n    const level = hls.levels[variantLevelIndex];\n    const {\n      fragLoadPolicy,\n      keyLoadPolicy\n    } = hls.config;\n    const retryConfig = getRetryConfig(data.details.startsWith(\"key\") ? keyLoadPolicy : fragLoadPolicy, data);\n    const fragmentErrors = hls.levels.reduce((acc, level2) => acc + level2.fragmentError, 0);\n    if (level) {\n      if (data.details !== ErrorDetails.FRAG_GAP) {\n        level.fragmentError++;\n      }\n      const retry = shouldRetry(retryConfig, fragmentErrors, isTimeoutError(data), data.response);\n      if (retry) {\n        return {\n          action: NetworkErrorAction.RetryRequest,\n          flags: ErrorActionFlags.None,\n          retryConfig,\n          retryCount: fragmentErrors\n        };\n      }\n    }\n    const errorAction = this.getLevelSwitchAction(data, variantLevelIndex);\n    if (retryConfig) {\n      errorAction.retryConfig = retryConfig;\n      errorAction.retryCount = fragmentErrors;\n    }\n    return errorAction;\n  }\n  getLevelSwitchAction(data, levelIndex) {\n    const hls = this.hls;\n    if (levelIndex === null || levelIndex === void 0) {\n      levelIndex = hls.loadLevel;\n    }\n    const level = this.hls.levels[levelIndex];\n    if (level) {\n      var _data$frag2, _data$context2;\n      const errorDetails = data.details;\n      level.loadError++;\n      if (errorDetails === ErrorDetails.BUFFER_APPEND_ERROR) {\n        level.fragmentError++;\n      }\n      let nextLevel = -1;\n      const {\n        levels,\n        loadLevel,\n        minAutoLevel,\n        maxAutoLevel\n      } = hls;\n      if (!hls.autoLevelEnabled) {\n        hls.loadLevel = -1;\n      }\n      const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;\n      const isAudioCodecError = fragErrorType === PlaylistLevelType.AUDIO && errorDetails === ErrorDetails.FRAG_PARSING_ERROR || data.sourceBufferName === \"audio\" && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n      const findAudioCodecAlternate = isAudioCodecError && levels.some(({\n        audioCodec\n      }) => level.audioCodec !== audioCodec);\n      const isVideoCodecError = data.sourceBufferName === \"video\" && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n      const findVideoCodecAlternate = isVideoCodecError && levels.some(({\n        codecSet,\n        audioCodec\n      }) => level.codecSet !== codecSet && level.audioCodec === audioCodec);\n      const {\n        type: playlistErrorType,\n        groupId: playlistErrorGroupId\n      } = (_data$context2 = data.context) != null ? _data$context2 : {};\n      for (let i = levels.length; i--; ) {\n        const candidate = (i + loadLevel) % levels.length;\n        if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {\n          var _level$audioGroups, _level$subtitleGroups;\n          const levelCandidate = levels[candidate];\n          if (errorDetails === ErrorDetails.FRAG_GAP && data.frag) {\n            const levelDetails = levels[candidate].details;\n            if (levelDetails) {\n              const fragCandidate = findFragmentByPTS(data.frag, levelDetails.fragments, data.frag.start);\n              if (fragCandidate != null && fragCandidate.gap) {\n                continue;\n              }\n            }\n          } else if (playlistErrorType === PlaylistContextType.AUDIO_TRACK && levelCandidate.hasAudioGroup(playlistErrorGroupId) || playlistErrorType === PlaylistContextType.SUBTITLE_TRACK && levelCandidate.hasSubtitleGroup(playlistErrorGroupId)) {\n            continue;\n          } else if (fragErrorType === PlaylistLevelType.AUDIO && (_level$audioGroups = level.audioGroups) != null && _level$audioGroups.some((groupId) => levelCandidate.hasAudioGroup(groupId)) || fragErrorType === PlaylistLevelType.SUBTITLE && (_level$subtitleGroups = level.subtitleGroups) != null && _level$subtitleGroups.some((groupId) => levelCandidate.hasSubtitleGroup(groupId)) || findAudioCodecAlternate && level.audioCodec === levelCandidate.audioCodec || !findAudioCodecAlternate && level.audioCodec !== levelCandidate.audioCodec || findVideoCodecAlternate && level.codecSet === levelCandidate.codecSet) {\n            continue;\n          }\n          nextLevel = candidate;\n          break;\n        }\n      }\n      if (nextLevel > -1 && hls.loadLevel !== nextLevel) {\n        data.levelRetry = true;\n        this.playlistError = 0;\n        return {\n          action: NetworkErrorAction.SendAlternateToPenaltyBox,\n          flags: ErrorActionFlags.None,\n          nextAutoLevel: nextLevel\n        };\n      }\n    }\n    return {\n      action: NetworkErrorAction.SendAlternateToPenaltyBox,\n      flags: ErrorActionFlags.MoveAllAlternatesMatchingHost\n    };\n  }\n  onErrorOut(event, data) {\n    var _data$errorAction;\n    switch ((_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.action) {\n      case NetworkErrorAction.DoNothing:\n        break;\n      case NetworkErrorAction.SendAlternateToPenaltyBox:\n        this.sendAlternateToPenaltyBox(data);\n        if (!data.errorAction.resolved && data.details !== ErrorDetails.FRAG_GAP) {\n          data.fatal = true;\n        } else if (/MediaSource readyState: ended/.test(data.error.message)) {\n          this.warn(`MediaSource ended after \"${data.sourceBufferName}\" sourceBuffer append error. Attempting to recover from media error.`);\n          this.hls.recoverMediaError();\n        }\n        break;\n    }\n    if (data.fatal) {\n      this.hls.stopLoad();\n      return;\n    }\n  }\n  sendAlternateToPenaltyBox(data) {\n    const hls = this.hls;\n    const errorAction = data.errorAction;\n    if (!errorAction) {\n      return;\n    }\n    const {\n      flags,\n      hdcpLevel,\n      nextAutoLevel\n    } = errorAction;\n    switch (flags) {\n      case ErrorActionFlags.None:\n        this.switchLevel(data, nextAutoLevel);\n        break;\n      case ErrorActionFlags.MoveAllAlternatesMatchingHDCP:\n        if (hdcpLevel) {\n          hls.maxHdcpLevel = HdcpLevels[HdcpLevels.indexOf(hdcpLevel) - 1];\n          errorAction.resolved = true;\n        }\n        this.warn(`Restricting playback to HDCP-LEVEL of \"${hls.maxHdcpLevel}\" or lower`);\n        break;\n    }\n    if (!errorAction.resolved) {\n      this.switchLevel(data, nextAutoLevel);\n    }\n  }\n  switchLevel(data, levelIndex) {\n    if (levelIndex !== void 0 && data.errorAction) {\n      this.warn(`switching to level ${levelIndex} after ${data.details}`);\n      this.hls.nextAutoLevel = levelIndex;\n      data.errorAction.resolved = true;\n      this.hls.nextLoadLevel = this.hls.nextAutoLevel;\n    }\n  }\n}\nclass BasePlaylistController {\n  constructor(hls, logPrefix) {\n    this.hls = void 0;\n    this.timer = -1;\n    this.requestScheduled = -1;\n    this.canLoad = false;\n    this.log = void 0;\n    this.warn = void 0;\n    this.log = logger.log.bind(logger, `${logPrefix}:`);\n    this.warn = logger.warn.bind(logger, `${logPrefix}:`);\n    this.hls = hls;\n  }\n  destroy() {\n    this.clearTimer();\n    this.hls = this.log = this.warn = null;\n  }\n  clearTimer() {\n    if (this.timer !== -1) {\n      self.clearTimeout(this.timer);\n      this.timer = -1;\n    }\n  }\n  startLoad() {\n    this.canLoad = true;\n    this.requestScheduled = -1;\n    this.loadPlaylist();\n  }\n  stopLoad() {\n    this.canLoad = false;\n    this.clearTimer();\n  }\n  switchParams(playlistUri, previous) {\n    const renditionReports = previous == null ? void 0 : previous.renditionReports;\n    if (renditionReports) {\n      let foundIndex = -1;\n      for (let i = 0; i < renditionReports.length; i++) {\n        const attr = renditionReports[i];\n        let uri;\n        try {\n          uri = new self.URL(attr.URI, previous.url).href;\n        } catch (error) {\n          logger.warn(`Could not construct new URL for Rendition Report: ${error}`);\n          uri = attr.URI || \"\";\n        }\n        if (uri === playlistUri) {\n          foundIndex = i;\n          break;\n        } else if (uri === playlistUri.substring(0, uri.length)) {\n          foundIndex = i;\n        }\n      }\n      if (foundIndex !== -1) {\n        const attr = renditionReports[foundIndex];\n        const msn = parseInt(attr[\"LAST-MSN\"]) || (previous == null ? void 0 : previous.lastPartSn);\n        let part = parseInt(attr[\"LAST-PART\"]) || (previous == null ? void 0 : previous.lastPartIndex);\n        if (this.hls.config.lowLatencyMode) {\n          const currentGoal = Math.min(previous.age - previous.partTarget, previous.targetduration);\n          if (part >= 0 && currentGoal > previous.partTarget) {\n            part += 1;\n          }\n        }\n        return new HlsUrlParameters(msn, part >= 0 ? part : void 0, HlsSkip.No);\n      }\n    }\n  }\n  loadPlaylist(hlsUrlParameters) {\n    if (this.requestScheduled === -1) {\n      this.requestScheduled = self.performance.now();\n    }\n  }\n  shouldLoadPlaylist(playlist) {\n    return this.canLoad && !!playlist && !!playlist.url && (!playlist.details || playlist.details.live);\n  }\n  shouldReloadPlaylist(playlist) {\n    return this.timer === -1 && this.requestScheduled === -1 && this.shouldLoadPlaylist(playlist);\n  }\n  playlistLoaded(index, data, previousDetails) {\n    const {\n      details,\n      stats\n    } = data;\n    const now2 = self.performance.now();\n    const elapsed = stats.loading.first ? Math.max(0, now2 - stats.loading.first) : 0;\n    details.advancedDateTime = Date.now() - elapsed;\n    if (details.live || previousDetails != null && previousDetails.live) {\n      details.reloaded(previousDetails);\n      if (previousDetails) {\n        this.log(`live playlist ${index} ${details.advanced ? \"REFRESHED \" + details.lastPartSn + \"-\" + details.lastPartIndex : details.updated ? \"UPDATED\" : \"MISSED\"}`);\n      }\n      if (previousDetails && details.fragments.length > 0) {\n        mergeDetails(previousDetails, details);\n      }\n      if (!this.canLoad || !details.live) {\n        return;\n      }\n      let deliveryDirectives;\n      let msn = void 0;\n      let part = void 0;\n      if (details.canBlockReload && details.endSN && details.advanced) {\n        const lowLatencyMode = this.hls.config.lowLatencyMode;\n        const lastPartSn = details.lastPartSn;\n        const endSn = details.endSN;\n        const lastPartIndex = details.lastPartIndex;\n        const hasParts = lastPartIndex !== -1;\n        const lastPart = lastPartSn === endSn;\n        const nextSnStartIndex = lowLatencyMode ? 0 : lastPartIndex;\n        if (hasParts) {\n          msn = lastPart ? endSn + 1 : lastPartSn;\n          part = lastPart ? nextSnStartIndex : lastPartIndex + 1;\n        } else {\n          msn = endSn + 1;\n        }\n        const lastAdvanced = details.age;\n        const cdnAge = lastAdvanced + details.ageHeader;\n        let currentGoal = Math.min(cdnAge - details.partTarget, details.targetduration * 1.5);\n        if (currentGoal > 0) {\n          if (previousDetails && currentGoal > previousDetails.tuneInGoal) {\n            this.warn(`CDN Tune-in goal increased from: ${previousDetails.tuneInGoal} to: ${currentGoal} with playlist age: ${details.age}`);\n            currentGoal = 0;\n          } else {\n            const segments = Math.floor(currentGoal / details.targetduration);\n            msn += segments;\n            if (part !== void 0) {\n              const parts = Math.round(currentGoal % details.targetduration / details.partTarget);\n              part += parts;\n            }\n            this.log(`CDN Tune-in age: ${details.ageHeader}s last advanced ${lastAdvanced.toFixed(2)}s goal: ${currentGoal} skip sn ${segments} to part ${part}`);\n          }\n          details.tuneInGoal = currentGoal;\n        }\n        deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n        if (lowLatencyMode || !lastPart) {\n          this.loadPlaylist(deliveryDirectives);\n          return;\n        }\n      } else if (details.canBlockReload || details.canSkipUntil) {\n        deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n      }\n      const bufferInfo = this.hls.mainForwardBufferInfo;\n      const position = bufferInfo ? bufferInfo.end - bufferInfo.len : 0;\n      const distanceToLiveEdgeMs = (details.edge - position) * 1e3;\n      const reloadInterval = computeReloadInterval(details, distanceToLiveEdgeMs);\n      if (details.updated && now2 > this.requestScheduled + reloadInterval) {\n        this.requestScheduled = stats.loading.start;\n      }\n      if (msn !== void 0 && details.canBlockReload) {\n        this.requestScheduled = stats.loading.first + reloadInterval - (details.partTarget * 1e3 || 1e3);\n      } else if (this.requestScheduled === -1 || this.requestScheduled + reloadInterval < now2) {\n        this.requestScheduled = now2;\n      } else if (this.requestScheduled - now2 <= 0) {\n        this.requestScheduled += reloadInterval;\n      }\n      let estimatedTimeUntilUpdate = this.requestScheduled - now2;\n      estimatedTimeUntilUpdate = Math.max(0, estimatedTimeUntilUpdate);\n      this.log(`reload live playlist ${index} in ${Math.round(estimatedTimeUntilUpdate)} ms`);\n      this.timer = self.setTimeout(() => this.loadPlaylist(deliveryDirectives), estimatedTimeUntilUpdate);\n    } else {\n      this.clearTimer();\n    }\n  }\n  getDeliveryDirectives(details, previousDeliveryDirectives, msn, part) {\n    let skip = getSkipValue(details, msn);\n    if (previousDeliveryDirectives != null && previousDeliveryDirectives.skip && details.deltaUpdateFailed) {\n      msn = previousDeliveryDirectives.msn;\n      part = previousDeliveryDirectives.part;\n      skip = HlsSkip.No;\n    }\n    return new HlsUrlParameters(msn, part, skip);\n  }\n  checkRetry(errorEvent) {\n    const errorDetails = errorEvent.details;\n    const isTimeout = isTimeoutError(errorEvent);\n    const errorAction = errorEvent.errorAction;\n    const {\n      action,\n      retryCount = 0,\n      retryConfig\n    } = errorAction || {};\n    const retry = !!errorAction && !!retryConfig && (action === NetworkErrorAction.RetryRequest || !errorAction.resolved && action === NetworkErrorAction.SendAlternateToPenaltyBox);\n    if (retry) {\n      var _errorEvent$context;\n      this.requestScheduled = -1;\n      if (retryCount >= retryConfig.maxNumRetry) {\n        return false;\n      }\n      if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {\n        this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" without delivery-directives`);\n        this.loadPlaylist();\n      } else {\n        const delay = getRetryDelay(retryConfig, retryCount);\n        this.timer = self.setTimeout(() => this.loadPlaylist(), delay);\n        this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" in ${delay}ms`);\n      }\n      errorEvent.levelRetry = true;\n      errorAction.resolved = true;\n    }\n    return retry;\n  }\n}\nclass EWMA {\n  //  About half of the estimated value will be from the last |halfLife| samples by weight.\n  constructor(halfLife, estimate = 0, weight = 0) {\n    this.halfLife = void 0;\n    this.alpha_ = void 0;\n    this.estimate_ = void 0;\n    this.totalWeight_ = void 0;\n    this.halfLife = halfLife;\n    this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;\n    this.estimate_ = estimate;\n    this.totalWeight_ = weight;\n  }\n  sample(weight, value) {\n    const adjAlpha = Math.pow(this.alpha_, weight);\n    this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n    this.totalWeight_ += weight;\n  }\n  getTotalWeight() {\n    return this.totalWeight_;\n  }\n  getEstimate() {\n    if (this.alpha_) {\n      const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n      if (zeroFactor) {\n        return this.estimate_ / zeroFactor;\n      }\n    }\n    return this.estimate_;\n  }\n}\nclass EwmaBandWidthEstimator {\n  constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {\n    this.defaultEstimate_ = void 0;\n    this.minWeight_ = void 0;\n    this.minDelayMs_ = void 0;\n    this.slow_ = void 0;\n    this.fast_ = void 0;\n    this.defaultTTFB_ = void 0;\n    this.ttfb_ = void 0;\n    this.defaultEstimate_ = defaultEstimate;\n    this.minWeight_ = 1e-3;\n    this.minDelayMs_ = 50;\n    this.slow_ = new EWMA(slow);\n    this.fast_ = new EWMA(fast);\n    this.defaultTTFB_ = defaultTTFB;\n    this.ttfb_ = new EWMA(slow);\n  }\n  update(slow, fast) {\n    const {\n      slow_,\n      fast_,\n      ttfb_\n    } = this;\n    if (slow_.halfLife !== slow) {\n      this.slow_ = new EWMA(slow, slow_.getEstimate(), slow_.getTotalWeight());\n    }\n    if (fast_.halfLife !== fast) {\n      this.fast_ = new EWMA(fast, fast_.getEstimate(), fast_.getTotalWeight());\n    }\n    if (ttfb_.halfLife !== slow) {\n      this.ttfb_ = new EWMA(slow, ttfb_.getEstimate(), ttfb_.getTotalWeight());\n    }\n  }\n  sample(durationMs, numBytes) {\n    durationMs = Math.max(durationMs, this.minDelayMs_);\n    const numBits = 8 * numBytes;\n    const durationS = durationMs / 1e3;\n    const bandwidthInBps = numBits / durationS;\n    this.fast_.sample(durationS, bandwidthInBps);\n    this.slow_.sample(durationS, bandwidthInBps);\n  }\n  sampleTTFB(ttfb) {\n    const seconds = ttfb / 1e3;\n    const weight = Math.sqrt(2) * Math.exp(-Math.pow(seconds, 2) / 2);\n    this.ttfb_.sample(weight, Math.max(ttfb, 5));\n  }\n  canEstimate() {\n    return this.fast_.getTotalWeight() >= this.minWeight_;\n  }\n  getEstimate() {\n    if (this.canEstimate()) {\n      return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n    } else {\n      return this.defaultEstimate_;\n    }\n  }\n  getEstimateTTFB() {\n    if (this.ttfb_.getTotalWeight() >= this.minWeight_) {\n      return this.ttfb_.getEstimate();\n    } else {\n      return this.defaultTTFB_;\n    }\n  }\n  destroy() {\n  }\n}\nconst SUPPORTED_INFO_DEFAULT = {\n  supported: true,\n  configurations: [],\n  decodingInfoResults: [{\n    supported: true,\n    powerEfficient: true,\n    smooth: true\n  }]\n};\nconst SUPPORTED_INFO_CACHE = {};\nfunction requiresMediaCapabilitiesDecodingInfo(level, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference) {\n  const audioGroups = level.audioCodec ? level.audioGroups : null;\n  const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n  const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n  const maxChannels = channelsPreference ? parseInt(channelsPreference) : audioCodecPreference ? Infinity : 2;\n  let audioChannels = null;\n  if (audioGroups != null && audioGroups.length) {\n    try {\n      if (audioGroups.length === 1 && audioGroups[0]) {\n        audioChannels = audioTracksByGroup.groups[audioGroups[0]].channels;\n      } else {\n        audioChannels = audioGroups.reduce((acc, groupId) => {\n          if (groupId) {\n            const audioTrackGroup = audioTracksByGroup.groups[groupId];\n            if (!audioTrackGroup) {\n              throw new Error(`Audio track group ${groupId} not found`);\n            }\n            Object.keys(audioTrackGroup.channels).forEach((key) => {\n              acc[key] = (acc[key] || 0) + audioTrackGroup.channels[key];\n            });\n          }\n          return acc;\n        }, {\n          2: 0\n        });\n      }\n    } catch (error) {\n      return true;\n    }\n  }\n  return level.videoCodec !== void 0 && (level.width > 1920 && level.height > 1088 || level.height > 1920 && level.width > 1088 || level.frameRate > Math.max(currentFrameRate, 30) || level.videoRange !== \"SDR\" && level.videoRange !== currentVideoRange || level.bitrate > Math.max(currentBw, 8e6)) || !!audioChannels && isFiniteNumber(maxChannels) && Object.keys(audioChannels).some((channels) => parseInt(channels) > maxChannels);\n}\nfunction getMediaDecodingInfoPromise(level, audioTracksByGroup, mediaCapabilities) {\n  const videoCodecs = level.videoCodec;\n  const audioCodecs = level.audioCodec;\n  if (!videoCodecs || !audioCodecs || !mediaCapabilities) {\n    return Promise.resolve(SUPPORTED_INFO_DEFAULT);\n  }\n  const baseVideoConfiguration = {\n    width: level.width,\n    height: level.height,\n    bitrate: Math.ceil(Math.max(level.bitrate * 0.9, level.averageBitrate)),\n    // Assume a framerate of 30fps since MediaCapabilities will not accept Level default of 0.\n    framerate: level.frameRate || 30\n  };\n  const videoRange = level.videoRange;\n  if (videoRange !== \"SDR\") {\n    baseVideoConfiguration.transferFunction = videoRange.toLowerCase();\n  }\n  const configurations = videoCodecs.split(\",\").map((videoCodec) => ({\n    type: \"media-source\",\n    video: _objectSpread2(_objectSpread2({}, baseVideoConfiguration), {}, {\n      contentType: mimeTypeForCodec(videoCodec, \"video\")\n    })\n  }));\n  if (audioCodecs && level.audioGroups) {\n    level.audioGroups.forEach((audioGroupId) => {\n      var _audioTracksByGroup$g;\n      if (!audioGroupId) {\n        return;\n      }\n      (_audioTracksByGroup$g = audioTracksByGroup.groups[audioGroupId]) == null ? void 0 : _audioTracksByGroup$g.tracks.forEach((audioTrack) => {\n        if (audioTrack.groupId === audioGroupId) {\n          const channels = audioTrack.channels || \"\";\n          const channelsNumber = parseFloat(channels);\n          if (isFiniteNumber(channelsNumber) && channelsNumber > 2) {\n            configurations.push.apply(configurations, audioCodecs.split(\",\").map((audioCodec) => ({\n              type: \"media-source\",\n              audio: {\n                contentType: mimeTypeForCodec(audioCodec, \"audio\"),\n                channels: \"\" + channelsNumber\n                // spatialRendering:\n                //   audioCodec === 'ec-3' && channels.indexOf('JOC'),\n              }\n            })));\n          }\n        }\n      });\n    });\n  }\n  return Promise.all(configurations.map((configuration) => {\n    const decodingInfoKey = getMediaDecodingInfoKey(configuration);\n    return SUPPORTED_INFO_CACHE[decodingInfoKey] || (SUPPORTED_INFO_CACHE[decodingInfoKey] = mediaCapabilities.decodingInfo(configuration));\n  })).then((decodingInfoResults) => ({\n    supported: !decodingInfoResults.some((info) => !info.supported),\n    configurations,\n    decodingInfoResults\n  })).catch((error) => ({\n    supported: false,\n    configurations,\n    decodingInfoResults: [],\n    error\n  }));\n}\nfunction getMediaDecodingInfoKey(config) {\n  const {\n    audio,\n    video\n  } = config;\n  const mediaConfig = video || audio;\n  if (mediaConfig) {\n    const codec = mediaConfig.contentType.split('\"')[1];\n    if (video) {\n      return `r${video.height}x${video.width}f${Math.ceil(video.framerate)}${video.transferFunction || \"sd\"}_${codec}_${Math.ceil(video.bitrate / 1e5)}`;\n    }\n    if (audio) {\n      return `c${audio.channels}${audio.spatialRendering ? \"s\" : \"n\"}_${codec}`;\n    }\n  }\n  return \"\";\n}\nfunction isHdrSupported() {\n  if (typeof matchMedia === \"function\") {\n    const mediaQueryList = matchMedia(\"(dynamic-range: high)\");\n    const badQuery = matchMedia(\"bad query\");\n    if (mediaQueryList.media !== badQuery.media) {\n      return mediaQueryList.matches === true;\n    }\n  }\n  return false;\n}\nfunction getVideoSelectionOptions(currentVideoRange, videoPreference) {\n  let preferHDR = false;\n  let allowedVideoRanges = [];\n  if (currentVideoRange) {\n    preferHDR = currentVideoRange !== \"SDR\";\n    allowedVideoRanges = [currentVideoRange];\n  }\n  if (videoPreference) {\n    allowedVideoRanges = videoPreference.allowedVideoRanges || VideoRangeValues.slice(0);\n    preferHDR = videoPreference.preferHDR !== void 0 ? videoPreference.preferHDR : isHdrSupported();\n    if (preferHDR) {\n      allowedVideoRanges = allowedVideoRanges.filter((range) => range !== \"SDR\");\n    } else {\n      allowedVideoRanges = [\"SDR\"];\n    }\n  }\n  return {\n    preferHDR,\n    allowedVideoRanges\n  };\n}\nfunction getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference) {\n  const codecSets = Object.keys(codecTiers);\n  const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n  const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n  const preferStereo = channelsPreference && parseInt(channelsPreference) === 2;\n  let hasStereo = true;\n  let hasCurrentVideoRange = false;\n  let minHeight = Infinity;\n  let minFramerate = Infinity;\n  let minBitrate = Infinity;\n  let selectedScore = 0;\n  let videoRanges = [];\n  const {\n    preferHDR,\n    allowedVideoRanges\n  } = getVideoSelectionOptions(currentVideoRange, videoPreference);\n  for (let i = codecSets.length; i--; ) {\n    const tier = codecTiers[codecSets[i]];\n    hasStereo = tier.channels[2] > 0;\n    minHeight = Math.min(minHeight, tier.minHeight);\n    minFramerate = Math.min(minFramerate, tier.minFramerate);\n    minBitrate = Math.min(minBitrate, tier.minBitrate);\n    const matchingVideoRanges = allowedVideoRanges.filter((range) => tier.videoRanges[range] > 0);\n    if (matchingVideoRanges.length > 0) {\n      hasCurrentVideoRange = true;\n      videoRanges = matchingVideoRanges;\n    }\n  }\n  minHeight = isFiniteNumber(minHeight) ? minHeight : 0;\n  minFramerate = isFiniteNumber(minFramerate) ? minFramerate : 0;\n  const maxHeight = Math.max(1080, minHeight);\n  const maxFramerate = Math.max(30, minFramerate);\n  minBitrate = isFiniteNumber(minBitrate) ? minBitrate : currentBw;\n  currentBw = Math.max(minBitrate, currentBw);\n  if (!hasCurrentVideoRange) {\n    currentVideoRange = void 0;\n    videoRanges = [];\n  }\n  const codecSet = codecSets.reduce((selected, candidate) => {\n    const candidateTier = codecTiers[candidate];\n    if (candidate === selected) {\n      return selected;\n    }\n    if (candidateTier.minBitrate > currentBw) {\n      logStartCodecCandidateIgnored(candidate, `min bitrate of ${candidateTier.minBitrate} > current estimate of ${currentBw}`);\n      return selected;\n    }\n    if (!candidateTier.hasDefaultAudio) {\n      logStartCodecCandidateIgnored(candidate, `no renditions with default or auto-select sound found`);\n      return selected;\n    }\n    if (audioCodecPreference && candidate.indexOf(audioCodecPreference.substring(0, 4)) % 5 !== 0) {\n      logStartCodecCandidateIgnored(candidate, `audio codec preference \"${audioCodecPreference}\" not found`);\n      return selected;\n    }\n    if (channelsPreference && !preferStereo) {\n      if (!candidateTier.channels[channelsPreference]) {\n        logStartCodecCandidateIgnored(candidate, `no renditions with ${channelsPreference} channel sound found (channels options: ${Object.keys(candidateTier.channels)})`);\n        return selected;\n      }\n    } else if ((!audioCodecPreference || preferStereo) && hasStereo && candidateTier.channels[\"2\"] === 0) {\n      logStartCodecCandidateIgnored(candidate, `no renditions with stereo sound found`);\n      return selected;\n    }\n    if (candidateTier.minHeight > maxHeight) {\n      logStartCodecCandidateIgnored(candidate, `min resolution of ${candidateTier.minHeight} > maximum of ${maxHeight}`);\n      return selected;\n    }\n    if (candidateTier.minFramerate > maxFramerate) {\n      logStartCodecCandidateIgnored(candidate, `min framerate of ${candidateTier.minFramerate} > maximum of ${maxFramerate}`);\n      return selected;\n    }\n    if (!videoRanges.some((range) => candidateTier.videoRanges[range] > 0)) {\n      logStartCodecCandidateIgnored(candidate, `no variants with VIDEO-RANGE of ${JSON.stringify(videoRanges)} found`);\n      return selected;\n    }\n    if (candidateTier.maxScore < selectedScore) {\n      logStartCodecCandidateIgnored(candidate, `max score of ${candidateTier.maxScore} < selected max of ${selectedScore}`);\n      return selected;\n    }\n    if (selected && (codecsSetSelectionPreferenceValue(candidate) >= codecsSetSelectionPreferenceValue(selected) || candidateTier.fragmentError > codecTiers[selected].fragmentError)) {\n      return selected;\n    }\n    selectedScore = candidateTier.maxScore;\n    return candidate;\n  }, void 0);\n  return {\n    codecSet,\n    videoRanges,\n    preferHDR,\n    minFramerate,\n    minBitrate\n  };\n}\nfunction logStartCodecCandidateIgnored(codeSet, reason) {\n  logger.log(`[abr] start candidates with \"${codeSet}\" ignored because ${reason}`);\n}\nfunction getAudioTracksByGroup(allAudioTracks) {\n  return allAudioTracks.reduce((audioTracksByGroup, track) => {\n    let trackGroup = audioTracksByGroup.groups[track.groupId];\n    if (!trackGroup) {\n      trackGroup = audioTracksByGroup.groups[track.groupId] = {\n        tracks: [],\n        channels: {\n          2: 0\n        },\n        hasDefault: false,\n        hasAutoSelect: false\n      };\n    }\n    trackGroup.tracks.push(track);\n    const channelsKey = track.channels || \"2\";\n    trackGroup.channels[channelsKey] = (trackGroup.channels[channelsKey] || 0) + 1;\n    trackGroup.hasDefault = trackGroup.hasDefault || track.default;\n    trackGroup.hasAutoSelect = trackGroup.hasAutoSelect || track.autoselect;\n    if (trackGroup.hasDefault) {\n      audioTracksByGroup.hasDefaultAudio = true;\n    }\n    if (trackGroup.hasAutoSelect) {\n      audioTracksByGroup.hasAutoSelectAudio = true;\n    }\n    return audioTracksByGroup;\n  }, {\n    hasDefaultAudio: false,\n    hasAutoSelectAudio: false,\n    groups: {}\n  });\n}\nfunction getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel) {\n  return levels.slice(minAutoLevel, maxAutoLevel + 1).reduce((tiers, level) => {\n    if (!level.codecSet) {\n      return tiers;\n    }\n    const audioGroups = level.audioGroups;\n    let tier = tiers[level.codecSet];\n    if (!tier) {\n      tiers[level.codecSet] = tier = {\n        minBitrate: Infinity,\n        minHeight: Infinity,\n        minFramerate: Infinity,\n        maxScore: 0,\n        videoRanges: {\n          SDR: 0\n        },\n        channels: {\n          \"2\": 0\n        },\n        hasDefaultAudio: !audioGroups,\n        fragmentError: 0\n      };\n    }\n    tier.minBitrate = Math.min(tier.minBitrate, level.bitrate);\n    const lesserWidthOrHeight = Math.min(level.height, level.width);\n    tier.minHeight = Math.min(tier.minHeight, lesserWidthOrHeight);\n    tier.minFramerate = Math.min(tier.minFramerate, level.frameRate);\n    tier.maxScore = Math.max(tier.maxScore, level.score);\n    tier.fragmentError += level.fragmentError;\n    tier.videoRanges[level.videoRange] = (tier.videoRanges[level.videoRange] || 0) + 1;\n    if (audioGroups) {\n      audioGroups.forEach((audioGroupId) => {\n        if (!audioGroupId) {\n          return;\n        }\n        const audioGroup = audioTracksByGroup.groups[audioGroupId];\n        tier.hasDefaultAudio = tier.hasDefaultAudio || audioTracksByGroup.hasDefaultAudio ? audioGroup.hasDefault : audioGroup.hasAutoSelect || !audioTracksByGroup.hasDefaultAudio && !audioTracksByGroup.hasAutoSelectAudio;\n        Object.keys(audioGroup.channels).forEach((channels) => {\n          tier.channels[channels] = (tier.channels[channels] || 0) + audioGroup.channels[channels];\n        });\n      });\n    }\n    return tiers;\n  }, {});\n}\nfunction findMatchingOption(option, tracks, matchPredicate) {\n  if (\"attrs\" in option) {\n    const index = tracks.indexOf(option);\n    if (index !== -1) {\n      return index;\n    }\n  }\n  for (let i = 0; i < tracks.length; i++) {\n    const track = tracks[i];\n    if (matchesOption(option, track, matchPredicate)) {\n      return i;\n    }\n  }\n  return -1;\n}\nfunction matchesOption(option, track, matchPredicate) {\n  const {\n    groupId,\n    name,\n    lang,\n    assocLang,\n    characteristics,\n    default: isDefault\n  } = option;\n  const forced = option.forced;\n  return (groupId === void 0 || track.groupId === groupId) && (name === void 0 || track.name === name) && (lang === void 0 || track.lang === lang) && (lang === void 0 || track.assocLang === assocLang) && (isDefault === void 0 || track.default === isDefault) && (forced === void 0 || track.forced === forced) && (characteristics === void 0 || characteristicsMatch(characteristics, track.characteristics)) && (matchPredicate === void 0 || matchPredicate(option, track));\n}\nfunction characteristicsMatch(characteristicsA, characteristicsB = \"\") {\n  const arrA = characteristicsA.split(\",\");\n  const arrB = characteristicsB.split(\",\");\n  return arrA.length === arrB.length && !arrA.some((el) => arrB.indexOf(el) === -1);\n}\nfunction audioMatchPredicate(option, track) {\n  const {\n    audioCodec,\n    channels\n  } = option;\n  return (audioCodec === void 0 || (track.audioCodec || \"\").substring(0, 4) === audioCodec.substring(0, 4)) && (channels === void 0 || channels === (track.channels || \"2\"));\n}\nfunction findClosestLevelWithAudioGroup(option, levels, allAudioTracks, searchIndex, matchPredicate) {\n  const currentLevel = levels[searchIndex];\n  const variants = levels.reduce((variantMap, level, index) => {\n    const uri = level.uri;\n    const renditions2 = variantMap[uri] || (variantMap[uri] = []);\n    renditions2.push(index);\n    return variantMap;\n  }, {});\n  const renditions = variants[currentLevel.uri];\n  if (renditions.length > 1) {\n    searchIndex = Math.max.apply(Math, renditions);\n  }\n  const currentVideoRange = currentLevel.videoRange;\n  const currentFrameRate = currentLevel.frameRate;\n  const currentVideoCodec = currentLevel.codecSet.substring(0, 4);\n  const matchingVideo = searchDownAndUpList(levels, searchIndex, (level) => {\n    if (level.videoRange !== currentVideoRange || level.frameRate !== currentFrameRate || level.codecSet.substring(0, 4) !== currentVideoCodec) {\n      return false;\n    }\n    const audioGroups = level.audioGroups;\n    const tracks = allAudioTracks.filter((track) => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n    return findMatchingOption(option, tracks, matchPredicate) > -1;\n  });\n  if (matchingVideo > -1) {\n    return matchingVideo;\n  }\n  return searchDownAndUpList(levels, searchIndex, (level) => {\n    const audioGroups = level.audioGroups;\n    const tracks = allAudioTracks.filter((track) => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n    return findMatchingOption(option, tracks, matchPredicate) > -1;\n  });\n}\nfunction searchDownAndUpList(arr, searchIndex, predicate) {\n  for (let i = searchIndex; i; i--) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  for (let i = searchIndex + 1; i < arr.length; i++) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\nclass AbrController {\n  constructor(_hls) {\n    this.hls = void 0;\n    this.lastLevelLoadSec = 0;\n    this.lastLoadedFragLevel = -1;\n    this.firstSelection = -1;\n    this._nextAutoLevel = -1;\n    this.nextAutoLevelKey = \"\";\n    this.audioTracksByGroup = null;\n    this.codecTiers = null;\n    this.timer = -1;\n    this.fragCurrent = null;\n    this.partCurrent = null;\n    this.bitrateTestDelay = 0;\n    this.bwEstimator = void 0;\n    this._abandonRulesCheck = () => {\n      const {\n        fragCurrent: frag,\n        partCurrent: part,\n        hls\n      } = this;\n      const {\n        autoLevelEnabled,\n        media\n      } = hls;\n      if (!frag || !media) {\n        return;\n      }\n      const now2 = performance.now();\n      const stats = part ? part.stats : frag.stats;\n      const duration = part ? part.duration : frag.duration;\n      const timeLoading = now2 - stats.loading.start;\n      const minAutoLevel = hls.minAutoLevel;\n      if (stats.aborted || stats.loaded && stats.loaded === stats.total || frag.level <= minAutoLevel) {\n        this.clearTimer();\n        this._nextAutoLevel = -1;\n        return;\n      }\n      if (!autoLevelEnabled || media.paused || !media.playbackRate || !media.readyState) {\n        return;\n      }\n      const bufferInfo = hls.mainForwardBufferInfo;\n      if (bufferInfo === null) {\n        return;\n      }\n      const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n      const playbackRate = Math.abs(media.playbackRate);\n      if (timeLoading <= Math.max(ttfbEstimate, 1e3 * (duration / (playbackRate * 2)))) {\n        return;\n      }\n      const bufferStarvationDelay = bufferInfo.len / playbackRate;\n      const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n      const loadedFirstByte = stats.loaded && ttfb > -1;\n      const bwEstimate = this.getBwEstimate();\n      const levels = hls.levels;\n      const level = levels[frag.level];\n      const expectedLen = stats.total || Math.max(stats.loaded, Math.round(duration * level.averageBitrate / 8));\n      let timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;\n      if (timeStreaming < 1 && loadedFirstByte) {\n        timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);\n      }\n      const loadRate = loadedFirstByte ? stats.loaded * 1e3 / timeStreaming : 0;\n      const fragLoadedDelay = loadRate ? (expectedLen - stats.loaded) / loadRate : expectedLen * 8 / bwEstimate + ttfbEstimate / 1e3;\n      if (fragLoadedDelay <= bufferStarvationDelay) {\n        return;\n      }\n      const bwe = loadRate ? loadRate * 8 : bwEstimate;\n      let fragLevelNextLoadedDelay = Number.POSITIVE_INFINITY;\n      let nextLoadLevel;\n      for (nextLoadLevel = frag.level - 1; nextLoadLevel > minAutoLevel; nextLoadLevel--) {\n        const levelNextBitrate = levels[nextLoadLevel].maxBitrate;\n        fragLevelNextLoadedDelay = this.getTimeToLoadFrag(ttfbEstimate / 1e3, bwe, duration * levelNextBitrate, !levels[nextLoadLevel].details);\n        if (fragLevelNextLoadedDelay < bufferStarvationDelay) {\n          break;\n        }\n      }\n      if (fragLevelNextLoadedDelay >= fragLoadedDelay) {\n        return;\n      }\n      if (fragLevelNextLoadedDelay > duration * 10) {\n        return;\n      }\n      hls.nextLoadLevel = hls.nextAutoLevel = nextLoadLevel;\n      if (loadedFirstByte) {\n        this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n      } else {\n        this.bwEstimator.sampleTTFB(timeLoading);\n      }\n      const nextLoadLevelBitrate = levels[nextLoadLevel].maxBitrate;\n      if (this.getBwEstimate() * this.hls.config.abrBandWidthUpFactor > nextLoadLevelBitrate) {\n        this.resetEstimator(nextLoadLevelBitrate);\n      }\n      this.clearTimer();\n      logger.warn(`[abr] Fragment ${frag.sn}${part ? \" part \" + part.index : \"\"} of level ${frag.level} is loading too slowly;\n      Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s\n      Estimated load time for current fragment: ${fragLoadedDelay.toFixed(3)} s\n      Estimated load time for down switch fragment: ${fragLevelNextLoadedDelay.toFixed(3)} s\n      TTFB estimate: ${ttfb | 0} ms\n      Current BW estimate: ${isFiniteNumber(bwEstimate) ? bwEstimate | 0 : \"Unknown\"} bps\n      New BW estimate: ${this.getBwEstimate() | 0} bps\n      Switching to level ${nextLoadLevel} @ ${nextLoadLevelBitrate | 0} bps`);\n      hls.trigger(Events.FRAG_LOAD_EMERGENCY_ABORTED, {\n        frag,\n        part,\n        stats\n      });\n    };\n    this.hls = _hls;\n    this.bwEstimator = this.initEstimator();\n    this.registerListeners();\n  }\n  resetEstimator(abrEwmaDefaultEstimate) {\n    if (abrEwmaDefaultEstimate) {\n      logger.log(`setting initial bwe to ${abrEwmaDefaultEstimate}`);\n      this.hls.config.abrEwmaDefaultEstimate = abrEwmaDefaultEstimate;\n    }\n    this.firstSelection = -1;\n    this.bwEstimator = this.initEstimator();\n  }\n  initEstimator() {\n    const config = this.hls.config;\n    return new EwmaBandWidthEstimator(config.abrEwmaSlowVoD, config.abrEwmaFastVoD, config.abrEwmaDefaultEstimate);\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.clearTimer();\n    this.hls = this._abandonRulesCheck = null;\n    this.fragCurrent = this.partCurrent = null;\n  }\n  onManifestLoading(event, data) {\n    this.lastLoadedFragLevel = -1;\n    this.firstSelection = -1;\n    this.lastLevelLoadSec = 0;\n    this.fragCurrent = this.partCurrent = null;\n    this.onLevelsUpdated();\n    this.clearTimer();\n  }\n  onLevelsUpdated() {\n    if (this.lastLoadedFragLevel > -1 && this.fragCurrent) {\n      this.lastLoadedFragLevel = this.fragCurrent.level;\n    }\n    this._nextAutoLevel = -1;\n    this.onMaxAutoLevelUpdated();\n    this.codecTiers = null;\n    this.audioTracksByGroup = null;\n  }\n  onMaxAutoLevelUpdated() {\n    this.firstSelection = -1;\n    this.nextAutoLevelKey = \"\";\n  }\n  onFragLoading(event, data) {\n    const frag = data.frag;\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    if (!frag.bitrateTest) {\n      var _data$part;\n      this.fragCurrent = frag;\n      this.partCurrent = (_data$part = data.part) != null ? _data$part : null;\n    }\n    this.clearTimer();\n    this.timer = self.setInterval(this._abandonRulesCheck, 100);\n  }\n  onLevelSwitching(event, data) {\n    this.clearTimer();\n  }\n  onError(event, data) {\n    if (data.fatal) {\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n        this.lastLoadedFragLevel = -1;\n        this.firstSelection = -1;\n        break;\n      case ErrorDetails.FRAG_LOAD_TIMEOUT: {\n        const frag = data.frag;\n        const {\n          fragCurrent,\n          partCurrent: part\n        } = this;\n        if (frag && fragCurrent && frag.sn === fragCurrent.sn && frag.level === fragCurrent.level) {\n          const now2 = performance.now();\n          const stats = part ? part.stats : frag.stats;\n          const timeLoading = now2 - stats.loading.start;\n          const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n          const loadedFirstByte = stats.loaded && ttfb > -1;\n          if (loadedFirstByte) {\n            const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n            this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n          } else {\n            this.bwEstimator.sampleTTFB(timeLoading);\n          }\n        }\n        break;\n      }\n    }\n  }\n  getTimeToLoadFrag(timeToFirstByteSec, bandwidth, fragSizeBits, isSwitch) {\n    const fragLoadSec = timeToFirstByteSec + fragSizeBits / bandwidth;\n    const playlistLoadSec = isSwitch ? this.lastLevelLoadSec : 0;\n    return fragLoadSec + playlistLoadSec;\n  }\n  onLevelLoaded(event, data) {\n    const config = this.hls.config;\n    const {\n      loading\n    } = data.stats;\n    const timeLoadingMs = loading.end - loading.start;\n    if (isFiniteNumber(timeLoadingMs)) {\n      this.lastLevelLoadSec = timeLoadingMs / 1e3;\n    }\n    if (data.details.live) {\n      this.bwEstimator.update(config.abrEwmaSlowLive, config.abrEwmaFastLive);\n    } else {\n      this.bwEstimator.update(config.abrEwmaSlowVoD, config.abrEwmaFastVoD);\n    }\n  }\n  onFragLoaded(event, {\n    frag,\n    part\n  }) {\n    const stats = part ? part.stats : frag.stats;\n    if (frag.type === PlaylistLevelType.MAIN) {\n      this.bwEstimator.sampleTTFB(stats.loading.first - stats.loading.start);\n    }\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    this.clearTimer();\n    if (frag.level === this._nextAutoLevel) {\n      this._nextAutoLevel = -1;\n    }\n    this.firstSelection = -1;\n    if (this.hls.config.abrMaxWithRealBitrate) {\n      const duration = part ? part.duration : frag.duration;\n      const level = this.hls.levels[frag.level];\n      const loadedBytes = (level.loaded ? level.loaded.bytes : 0) + stats.loaded;\n      const loadedDuration = (level.loaded ? level.loaded.duration : 0) + duration;\n      level.loaded = {\n        bytes: loadedBytes,\n        duration: loadedDuration\n      };\n      level.realBitrate = Math.round(8 * loadedBytes / loadedDuration);\n    }\n    if (frag.bitrateTest) {\n      const fragBufferedData = {\n        stats,\n        frag,\n        part,\n        id: frag.type\n      };\n      this.onFragBuffered(Events.FRAG_BUFFERED, fragBufferedData);\n      frag.bitrateTest = false;\n    } else {\n      this.lastLoadedFragLevel = frag.level;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    const stats = part != null && part.stats.loaded ? part.stats : frag.stats;\n    if (stats.aborted) {\n      return;\n    }\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    const processingMs = stats.parsing.end - stats.loading.start - Math.min(stats.loading.first - stats.loading.start, this.bwEstimator.getEstimateTTFB());\n    this.bwEstimator.sample(processingMs, stats.loaded);\n    stats.bwEstimate = this.getBwEstimate();\n    if (frag.bitrateTest) {\n      this.bitrateTestDelay = processingMs / 1e3;\n    } else {\n      this.bitrateTestDelay = 0;\n    }\n  }\n  ignoreFragment(frag) {\n    return frag.type !== PlaylistLevelType.MAIN || frag.sn === \"initSegment\";\n  }\n  clearTimer() {\n    if (this.timer > -1) {\n      self.clearInterval(this.timer);\n      this.timer = -1;\n    }\n  }\n  get firstAutoLevel() {\n    const {\n      maxAutoLevel,\n      minAutoLevel\n    } = this.hls;\n    const bwEstimate = this.getBwEstimate();\n    const maxStartDelay = this.hls.config.maxStarvationDelay;\n    const abrAutoLevel = this.findBestLevel(bwEstimate, minAutoLevel, maxAutoLevel, 0, maxStartDelay, 1, 1);\n    if (abrAutoLevel > -1) {\n      return abrAutoLevel;\n    }\n    const firstLevel = this.hls.firstLevel;\n    const clamped = Math.min(Math.max(firstLevel, minAutoLevel), maxAutoLevel);\n    logger.warn(`[abr] Could not find best starting auto level. Defaulting to first in playlist ${firstLevel} clamped to ${clamped}`);\n    return clamped;\n  }\n  get forcedAutoLevel() {\n    if (this.nextAutoLevelKey) {\n      return -1;\n    }\n    return this._nextAutoLevel;\n  }\n  // return next auto level\n  get nextAutoLevel() {\n    const forcedAutoLevel = this.forcedAutoLevel;\n    const bwEstimator = this.bwEstimator;\n    const useEstimate = bwEstimator.canEstimate();\n    const loadedFirstFrag = this.lastLoadedFragLevel > -1;\n    if (forcedAutoLevel !== -1 && (!useEstimate || !loadedFirstFrag || this.nextAutoLevelKey === this.getAutoLevelKey())) {\n      return forcedAutoLevel;\n    }\n    const nextABRAutoLevel = useEstimate && loadedFirstFrag ? this.getNextABRAutoLevel() : this.firstAutoLevel;\n    if (forcedAutoLevel !== -1) {\n      const levels = this.hls.levels;\n      if (levels.length > Math.max(forcedAutoLevel, nextABRAutoLevel) && levels[forcedAutoLevel].loadError <= levels[nextABRAutoLevel].loadError) {\n        return forcedAutoLevel;\n      }\n    }\n    this._nextAutoLevel = nextABRAutoLevel;\n    this.nextAutoLevelKey = this.getAutoLevelKey();\n    return nextABRAutoLevel;\n  }\n  getAutoLevelKey() {\n    return `${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`;\n  }\n  getNextABRAutoLevel() {\n    const {\n      fragCurrent,\n      partCurrent,\n      hls\n    } = this;\n    const {\n      maxAutoLevel,\n      config,\n      minAutoLevel\n    } = hls;\n    const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n    const avgbw = this.getBwEstimate();\n    const bufferStarvationDelay = this.getStarvationDelay();\n    let bwFactor = config.abrBandWidthFactor;\n    let bwUpFactor = config.abrBandWidthUpFactor;\n    if (bufferStarvationDelay) {\n      const _bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, 0, bwFactor, bwUpFactor);\n      if (_bestLevel >= 0) {\n        return _bestLevel;\n      }\n    }\n    let maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxStarvationDelay) : config.maxStarvationDelay;\n    if (!bufferStarvationDelay) {\n      const bitrateTestDelay = this.bitrateTestDelay;\n      if (bitrateTestDelay) {\n        const maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxLoadingDelay) : config.maxLoadingDelay;\n        maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;\n        logger.info(`[abr] bitrate test took ${Math.round(1e3 * bitrateTestDelay)}ms, set first fragment max fetchDuration to ${Math.round(1e3 * maxStarvationDelay)} ms`);\n        bwFactor = bwUpFactor = 1;\n      }\n    }\n    const bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor);\n    logger.info(`[abr] ${bufferStarvationDelay ? \"rebuffering expected\" : \"buffer is empty\"}, optimal quality level ${bestLevel}`);\n    if (bestLevel > -1) {\n      return bestLevel;\n    }\n    const minLevel = hls.levels[minAutoLevel];\n    const autoLevel = hls.levels[hls.loadLevel];\n    if ((minLevel == null ? void 0 : minLevel.bitrate) < (autoLevel == null ? void 0 : autoLevel.bitrate)) {\n      return minAutoLevel;\n    }\n    return hls.loadLevel;\n  }\n  getStarvationDelay() {\n    const hls = this.hls;\n    const media = hls.media;\n    if (!media) {\n      return Infinity;\n    }\n    const playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1;\n    const bufferInfo = hls.mainForwardBufferInfo;\n    return (bufferInfo ? bufferInfo.len : 0) / playbackRate;\n  }\n  getBwEstimate() {\n    return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate;\n  }\n  findBestLevel(currentBw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor) {\n    var _level$details;\n    const maxFetchDuration = bufferStarvationDelay + maxStarvationDelay;\n    const lastLoadedFragLevel = this.lastLoadedFragLevel;\n    const selectionBaseLevel = lastLoadedFragLevel === -1 ? this.hls.firstLevel : lastLoadedFragLevel;\n    const {\n      fragCurrent,\n      partCurrent\n    } = this;\n    const {\n      levels,\n      allAudioTracks,\n      loadLevel,\n      config\n    } = this.hls;\n    if (levels.length === 1) {\n      return 0;\n    }\n    const level = levels[selectionBaseLevel];\n    const live = !!(level != null && (_level$details = level.details) != null && _level$details.live);\n    const firstSelection = loadLevel === -1 || lastLoadedFragLevel === -1;\n    let currentCodecSet;\n    let currentVideoRange = \"SDR\";\n    let currentFrameRate = (level == null ? void 0 : level.frameRate) || 0;\n    const {\n      audioPreference,\n      videoPreference\n    } = config;\n    const audioTracksByGroup = this.audioTracksByGroup || (this.audioTracksByGroup = getAudioTracksByGroup(allAudioTracks));\n    if (firstSelection) {\n      if (this.firstSelection !== -1) {\n        return this.firstSelection;\n      }\n      const codecTiers = this.codecTiers || (this.codecTiers = getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel));\n      const startTier = getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference);\n      const {\n        codecSet,\n        videoRanges,\n        minFramerate,\n        minBitrate,\n        preferHDR\n      } = startTier;\n      currentCodecSet = codecSet;\n      currentVideoRange = preferHDR ? videoRanges[videoRanges.length - 1] : videoRanges[0];\n      currentFrameRate = minFramerate;\n      currentBw = Math.max(currentBw, minBitrate);\n      logger.log(`[abr] picked start tier ${JSON.stringify(startTier)}`);\n    } else {\n      currentCodecSet = level == null ? void 0 : level.codecSet;\n      currentVideoRange = level == null ? void 0 : level.videoRange;\n    }\n    const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n    const ttfbEstimateSec = this.bwEstimator.getEstimateTTFB() / 1e3;\n    const levelsSkipped = [];\n    for (let i = maxAutoLevel; i >= minAutoLevel; i--) {\n      var _levelInfo$supportedR;\n      const levelInfo = levels[i];\n      const upSwitch = i > selectionBaseLevel;\n      if (!levelInfo) {\n        continue;\n      }\n      if (config.useMediaCapabilities && !levelInfo.supportedResult && !levelInfo.supportedPromise) {\n        const mediaCapabilities = navigator.mediaCapabilities;\n        if (typeof (mediaCapabilities == null ? void 0 : mediaCapabilities.decodingInfo) === \"function\" && requiresMediaCapabilitiesDecodingInfo(levelInfo, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference)) {\n          levelInfo.supportedPromise = getMediaDecodingInfoPromise(levelInfo, audioTracksByGroup, mediaCapabilities);\n          levelInfo.supportedPromise.then((decodingInfo) => {\n            if (!this.hls) {\n              return;\n            }\n            levelInfo.supportedResult = decodingInfo;\n            const levels2 = this.hls.levels;\n            const index = levels2.indexOf(levelInfo);\n            if (decodingInfo.error) {\n              logger.warn(`[abr] MediaCapabilities decodingInfo error: \"${decodingInfo.error}\" for level ${index} ${JSON.stringify(decodingInfo)}`);\n            } else if (!decodingInfo.supported) {\n              logger.warn(`[abr] Unsupported MediaCapabilities decodingInfo result for level ${index} ${JSON.stringify(decodingInfo)}`);\n              if (index > -1 && levels2.length > 1) {\n                logger.log(`[abr] Removing unsupported level ${index}`);\n                this.hls.removeLevel(index);\n              }\n            }\n          });\n        } else {\n          levelInfo.supportedResult = SUPPORTED_INFO_DEFAULT;\n        }\n      }\n      if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate || levelInfo.supportedResult && !((_levelInfo$supportedR = levelInfo.supportedResult.decodingInfoResults) != null && _levelInfo$supportedR[0].smooth)) {\n        levelsSkipped.push(i);\n        continue;\n      }\n      const levelDetails = levelInfo.details;\n      const avgDuration = (partCurrent ? levelDetails == null ? void 0 : levelDetails.partTarget : levelDetails == null ? void 0 : levelDetails.averagetargetduration) || currentFragDuration;\n      let adjustedbw;\n      if (!upSwitch) {\n        adjustedbw = bwFactor * currentBw;\n      } else {\n        adjustedbw = bwUpFactor * currentBw;\n      }\n      const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levels[i].averageBitrate : levels[i].maxBitrate;\n      const fetchDuration = this.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === void 0);\n      const canSwitchWithinTolerance = (\n        // if adjusted bw is greater than level bitrate AND\n        adjustedbw >= bitrate && // no level change, or new level has no error history\n        (i === lastLoadedFragLevel || levelInfo.loadError === 0 && levelInfo.fragmentError === 0) && // fragment fetchDuration unknown OR live stream OR fragment fetchDuration less than max allowed fetch duration, then this level matches\n        // we don't account for max Fetch Duration for live streams, this is to avoid switching down when near the edge of live sliding window ...\n        // special case to support startLevel = -1 (bitrateTest) on live streams : in that case we should not exit loop so that findBestLevel will return -1\n        (fetchDuration <= ttfbEstimateSec || !isFiniteNumber(fetchDuration) || live && !this.bitrateTestDelay || fetchDuration < maxFetchDuration)\n      );\n      if (canSwitchWithinTolerance) {\n        const forcedAutoLevel = this.forcedAutoLevel;\n        if (i !== loadLevel && (forcedAutoLevel === -1 || forcedAutoLevel !== loadLevel)) {\n          if (levelsSkipped.length) {\n            logger.trace(`[abr] Skipped level(s) ${levelsSkipped.join(\",\")} of ${maxAutoLevel} max with CODECS and VIDEO-RANGE:\"${levels[levelsSkipped[0]].codecs}\" ${levels[levelsSkipped[0]].videoRange}; not compatible with \"${level.codecs}\" ${currentVideoRange}`);\n          }\n          logger.info(`[abr] switch candidate:${selectionBaseLevel}->${i} adjustedbw(${Math.round(adjustedbw)})-bitrate=${Math.round(adjustedbw - bitrate)} ttfb:${ttfbEstimateSec.toFixed(1)} avgDuration:${avgDuration.toFixed(1)} maxFetchDuration:${maxFetchDuration.toFixed(1)} fetchDuration:${fetchDuration.toFixed(1)} firstSelection:${firstSelection} codecSet:${currentCodecSet} videoRange:${currentVideoRange} hls.loadLevel:${loadLevel}`);\n        }\n        if (firstSelection) {\n          this.firstSelection = i;\n        }\n        return i;\n      }\n    }\n    return -1;\n  }\n  set nextAutoLevel(nextLevel) {\n    const {\n      maxAutoLevel,\n      minAutoLevel\n    } = this.hls;\n    const value = Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);\n    if (this._nextAutoLevel !== value) {\n      this.nextAutoLevelKey = \"\";\n      this._nextAutoLevel = value;\n    }\n  }\n}\nclass TaskLoop {\n  constructor() {\n    this._boundTick = void 0;\n    this._tickTimer = null;\n    this._tickInterval = null;\n    this._tickCallCount = 0;\n    this._boundTick = this.tick.bind(this);\n  }\n  destroy() {\n    this.onHandlerDestroying();\n    this.onHandlerDestroyed();\n  }\n  onHandlerDestroying() {\n    this.clearNextTick();\n    this.clearInterval();\n  }\n  onHandlerDestroyed() {\n  }\n  hasInterval() {\n    return !!this._tickInterval;\n  }\n  hasNextTick() {\n    return !!this._tickTimer;\n  }\n  /**\n   * @param millis - Interval time (ms)\n   * @eturns True when interval has been scheduled, false when already scheduled (no effect)\n   */\n  setInterval(millis) {\n    if (!this._tickInterval) {\n      this._tickCallCount = 0;\n      this._tickInterval = self.setInterval(this._boundTick, millis);\n      return true;\n    }\n    return false;\n  }\n  /**\n   * @returns True when interval was cleared, false when none was set (no effect)\n   */\n  clearInterval() {\n    if (this._tickInterval) {\n      self.clearInterval(this._tickInterval);\n      this._tickInterval = null;\n      return true;\n    }\n    return false;\n  }\n  /**\n   * @returns True when timeout was cleared, false when none was set (no effect)\n   */\n  clearNextTick() {\n    if (this._tickTimer) {\n      self.clearTimeout(this._tickTimer);\n      this._tickTimer = null;\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Will call the subclass doTick implementation in this main loop tick\n   * or in the next one (via setTimeout(,0)) in case it has already been called\n   * in this tick (in case this is a re-entrant call).\n   */\n  tick() {\n    this._tickCallCount++;\n    if (this._tickCallCount === 1) {\n      this.doTick();\n      if (this._tickCallCount > 1) {\n        this.tickImmediate();\n      }\n      this._tickCallCount = 0;\n    }\n  }\n  tickImmediate() {\n    this.clearNextTick();\n    this._tickTimer = self.setTimeout(this._boundTick, 0);\n  }\n  /**\n   * For subclass to implement task logic\n   * @abstract\n   */\n  doTick() {\n  }\n}\nvar FragmentState = {\n  NOT_LOADED: \"NOT_LOADED\",\n  APPENDING: \"APPENDING\",\n  PARTIAL: \"PARTIAL\",\n  OK: \"OK\"\n};\nclass FragmentTracker {\n  constructor(hls) {\n    this.activePartLists = /* @__PURE__ */ Object.create(null);\n    this.endListFragments = /* @__PURE__ */ Object.create(null);\n    this.fragments = /* @__PURE__ */ Object.create(null);\n    this.timeRanges = /* @__PURE__ */ Object.create(null);\n    this.bufferPadding = 0.2;\n    this.hls = void 0;\n    this.hasGaps = false;\n    this.hls = hls;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.fragments = // @ts-ignore\n    this.activePartLists = // @ts-ignore\n    this.endListFragments = this.timeRanges = null;\n  }\n  /**\n   * Return a Fragment or Part with an appended range that matches the position and levelType\n   * Otherwise, return null\n   */\n  getAppendedFrag(position, levelType) {\n    const activeParts = this.activePartLists[levelType];\n    if (activeParts) {\n      for (let i = activeParts.length; i--; ) {\n        const activePart = activeParts[i];\n        if (!activePart) {\n          break;\n        }\n        const appendedPTS = activePart.end;\n        if (activePart.start <= position && appendedPTS !== null && position <= appendedPTS) {\n          return activePart;\n        }\n      }\n    }\n    return this.getBufferedFrag(position, levelType);\n  }\n  /**\n   * Return a buffered Fragment that matches the position and levelType.\n   * A buffered Fragment is one whose loading, parsing and appending is done (completed or \"partial\" meaning aborted).\n   * If not found any Fragment, return null\n   */\n  getBufferedFrag(position, levelType) {\n    const {\n      fragments\n    } = this;\n    const keys = Object.keys(fragments);\n    for (let i = keys.length; i--; ) {\n      const fragmentEntity = fragments[keys[i]];\n      if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === levelType && fragmentEntity.buffered) {\n        const frag = fragmentEntity.body;\n        if (frag.start <= position && position <= frag.end) {\n          return frag;\n        }\n      }\n    }\n    return null;\n  }\n  /**\n   * Partial fragments effected by coded frame eviction will be removed\n   * The browser will unload parts of the buffer to free up memory for new buffer data\n   * Fragments will need to be reloaded when the buffer is freed up, removing partial fragments will allow them to reload(since there might be parts that are still playable)\n   */\n  detectEvictedFragments(elementaryStream, timeRange, playlistType, appendedPart) {\n    if (this.timeRanges) {\n      this.timeRanges[elementaryStream] = timeRange;\n    }\n    const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;\n    Object.keys(this.fragments).forEach((key) => {\n      const fragmentEntity = this.fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      if (appendedPartSn >= fragmentEntity.body.sn) {\n        return;\n      }\n      if (!fragmentEntity.buffered && !fragmentEntity.loaded) {\n        if (fragmentEntity.body.type === playlistType) {\n          this.removeFragment(fragmentEntity.body);\n        }\n        return;\n      }\n      const esData = fragmentEntity.range[elementaryStream];\n      if (!esData) {\n        return;\n      }\n      esData.time.some((time) => {\n        const isNotBuffered = !this.isTimeBuffered(time.startPTS, time.endPTS, timeRange);\n        if (isNotBuffered) {\n          this.removeFragment(fragmentEntity.body);\n        }\n        return isNotBuffered;\n      });\n    });\n  }\n  /**\n   * Checks if the fragment passed in is loaded in the buffer properly\n   * Partially loaded fragments will be registered as a partial fragment\n   */\n  detectPartialFragments(data) {\n    const timeRanges = this.timeRanges;\n    const {\n      frag,\n      part\n    } = data;\n    if (!timeRanges || frag.sn === \"initSegment\") {\n      return;\n    }\n    const fragKey = getFragmentKey(frag);\n    const fragmentEntity = this.fragments[fragKey];\n    if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {\n      return;\n    }\n    const isFragHint = !frag.relurl;\n    Object.keys(timeRanges).forEach((elementaryStream) => {\n      const streamInfo = frag.elementaryStreams[elementaryStream];\n      if (!streamInfo) {\n        return;\n      }\n      const timeRange = timeRanges[elementaryStream];\n      const partial = isFragHint || streamInfo.partial === true;\n      fragmentEntity.range[elementaryStream] = this.getBufferedTimes(frag, part, partial, timeRange);\n    });\n    fragmentEntity.loaded = null;\n    if (Object.keys(fragmentEntity.range).length) {\n      fragmentEntity.buffered = true;\n      const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;\n      if (endList) {\n        this.endListFragments[fragmentEntity.body.type] = fragmentEntity;\n      }\n      if (!isPartial(fragmentEntity)) {\n        this.removeParts(frag.sn - 1, frag.type);\n      }\n    } else {\n      this.removeFragment(fragmentEntity.body);\n    }\n  }\n  removeParts(snToKeep, levelType) {\n    const activeParts = this.activePartLists[levelType];\n    if (!activeParts) {\n      return;\n    }\n    this.activePartLists[levelType] = activeParts.filter((part) => part.fragment.sn >= snToKeep);\n  }\n  fragBuffered(frag, force) {\n    const fragKey = getFragmentKey(frag);\n    let fragmentEntity = this.fragments[fragKey];\n    if (!fragmentEntity && force) {\n      fragmentEntity = this.fragments[fragKey] = {\n        body: frag,\n        appendedPTS: null,\n        loaded: null,\n        buffered: false,\n        range: /* @__PURE__ */ Object.create(null)\n      };\n      if (frag.gap) {\n        this.hasGaps = true;\n      }\n    }\n    if (fragmentEntity) {\n      fragmentEntity.loaded = null;\n      fragmentEntity.buffered = true;\n    }\n  }\n  getBufferedTimes(fragment, part, partial, timeRange) {\n    const buffered = {\n      time: [],\n      partial\n    };\n    const startPTS = fragment.start;\n    const endPTS = fragment.end;\n    const minEndPTS = fragment.minEndPTS || endPTS;\n    const maxStartPTS = fragment.maxStartPTS || startPTS;\n    for (let i = 0; i < timeRange.length; i++) {\n      const startTime = timeRange.start(i) - this.bufferPadding;\n      const endTime = timeRange.end(i) + this.bufferPadding;\n      if (maxStartPTS >= startTime && minEndPTS <= endTime) {\n        buffered.time.push({\n          startPTS: Math.max(startPTS, timeRange.start(i)),\n          endPTS: Math.min(endPTS, timeRange.end(i))\n        });\n        break;\n      } else if (startPTS < endTime && endPTS > startTime) {\n        const start = Math.max(startPTS, timeRange.start(i));\n        const end = Math.min(endPTS, timeRange.end(i));\n        if (end > start) {\n          buffered.partial = true;\n          buffered.time.push({\n            startPTS: start,\n            endPTS: end\n          });\n        }\n      } else if (endPTS <= startTime) {\n        break;\n      }\n    }\n    return buffered;\n  }\n  /**\n   * Gets the partial fragment for a certain time\n   */\n  getPartialFragment(time) {\n    let bestFragment = null;\n    let timePadding;\n    let startTime;\n    let endTime;\n    let bestOverlap = 0;\n    const {\n      bufferPadding,\n      fragments\n    } = this;\n    Object.keys(fragments).forEach((key) => {\n      const fragmentEntity = fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      if (isPartial(fragmentEntity)) {\n        startTime = fragmentEntity.body.start - bufferPadding;\n        endTime = fragmentEntity.body.end + bufferPadding;\n        if (time >= startTime && time <= endTime) {\n          timePadding = Math.min(time - startTime, endTime - time);\n          if (bestOverlap <= timePadding) {\n            bestFragment = fragmentEntity.body;\n            bestOverlap = timePadding;\n          }\n        }\n      }\n    });\n    return bestFragment;\n  }\n  isEndListAppended(type) {\n    const lastFragmentEntity = this.endListFragments[type];\n    return lastFragmentEntity !== void 0 && (lastFragmentEntity.buffered || isPartial(lastFragmentEntity));\n  }\n  getState(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    const fragmentEntity = this.fragments[fragKey];\n    if (fragmentEntity) {\n      if (!fragmentEntity.buffered) {\n        return FragmentState.APPENDING;\n      } else if (isPartial(fragmentEntity)) {\n        return FragmentState.PARTIAL;\n      } else {\n        return FragmentState.OK;\n      }\n    }\n    return FragmentState.NOT_LOADED;\n  }\n  isTimeBuffered(startPTS, endPTS, timeRange) {\n    let startTime;\n    let endTime;\n    for (let i = 0; i < timeRange.length; i++) {\n      startTime = timeRange.start(i) - this.bufferPadding;\n      endTime = timeRange.end(i) + this.bufferPadding;\n      if (startPTS >= startTime && endPTS <= endTime) {\n        return true;\n      }\n      if (endPTS <= startTime) {\n        return false;\n      }\n    }\n    return false;\n  }\n  onFragLoaded(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag.sn === \"initSegment\" || frag.bitrateTest) {\n      return;\n    }\n    const loaded = part ? null : data;\n    const fragKey = getFragmentKey(frag);\n    this.fragments[fragKey] = {\n      body: frag,\n      appendedPTS: null,\n      loaded,\n      buffered: false,\n      range: /* @__PURE__ */ Object.create(null)\n    };\n  }\n  onBufferAppended(event, data) {\n    const {\n      frag,\n      part,\n      timeRanges\n    } = data;\n    if (frag.sn === \"initSegment\") {\n      return;\n    }\n    const playlistType = frag.type;\n    if (part) {\n      let activeParts = this.activePartLists[playlistType];\n      if (!activeParts) {\n        this.activePartLists[playlistType] = activeParts = [];\n      }\n      activeParts.push(part);\n    }\n    this.timeRanges = timeRanges;\n    Object.keys(timeRanges).forEach((elementaryStream) => {\n      const timeRange = timeRanges[elementaryStream];\n      this.detectEvictedFragments(elementaryStream, timeRange, playlistType, part);\n    });\n  }\n  onFragBuffered(event, data) {\n    this.detectPartialFragments(data);\n  }\n  hasFragment(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    return !!this.fragments[fragKey];\n  }\n  hasParts(type) {\n    var _this$activePartLists;\n    return !!((_this$activePartLists = this.activePartLists[type]) != null && _this$activePartLists.length);\n  }\n  removeFragmentsInRange(start, end, playlistType, withGapOnly, unbufferedOnly) {\n    if (withGapOnly && !this.hasGaps) {\n      return;\n    }\n    Object.keys(this.fragments).forEach((key) => {\n      const fragmentEntity = this.fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      const frag = fragmentEntity.body;\n      if (frag.type !== playlistType || withGapOnly && !frag.gap) {\n        return;\n      }\n      if (frag.start < end && frag.end > start && (fragmentEntity.buffered || unbufferedOnly)) {\n        this.removeFragment(frag);\n      }\n    });\n  }\n  removeFragment(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    fragment.stats.loaded = 0;\n    fragment.clearElementaryStreamInfo();\n    const activeParts = this.activePartLists[fragment.type];\n    if (activeParts) {\n      const snToRemove = fragment.sn;\n      this.activePartLists[fragment.type] = activeParts.filter((part) => part.fragment.sn !== snToRemove);\n    }\n    delete this.fragments[fragKey];\n    if (fragment.endList) {\n      delete this.endListFragments[fragment.type];\n    }\n  }\n  removeAllFragments() {\n    this.fragments = /* @__PURE__ */ Object.create(null);\n    this.endListFragments = /* @__PURE__ */ Object.create(null);\n    this.activePartLists = /* @__PURE__ */ Object.create(null);\n    this.hasGaps = false;\n  }\n}\nfunction isPartial(fragmentEntity) {\n  var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;\n  return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial) || ((_fragmentEntity$range3 = fragmentEntity.range.audiovideo) == null ? void 0 : _fragmentEntity$range3.partial));\n}\nfunction getFragmentKey(fragment) {\n  return `${fragment.type}_${fragment.level}_${fragment.sn}`;\n}\nconst noopBuffered = {\n  length: 0,\n  start: () => 0,\n  end: () => 0\n};\nclass BufferHelper {\n  /**\n   * Return true if `media`'s buffered include `position`\n   */\n  static isBuffered(media, position) {\n    try {\n      if (media) {\n        const buffered = BufferHelper.getBuffered(media);\n        for (let i = 0; i < buffered.length; i++) {\n          if (position >= buffered.start(i) && position <= buffered.end(i)) {\n            return true;\n          }\n        }\n      }\n    } catch (error) {\n    }\n    return false;\n  }\n  static bufferInfo(media, pos, maxHoleDuration) {\n    try {\n      if (media) {\n        const vbuffered = BufferHelper.getBuffered(media);\n        const buffered = [];\n        let i;\n        for (i = 0; i < vbuffered.length; i++) {\n          buffered.push({\n            start: vbuffered.start(i),\n            end: vbuffered.end(i)\n          });\n        }\n        return this.bufferedInfo(buffered, pos, maxHoleDuration);\n      }\n    } catch (error) {\n    }\n    return {\n      len: 0,\n      start: pos,\n      end: pos,\n      nextStart: void 0\n    };\n  }\n  static bufferedInfo(buffered, pos, maxHoleDuration) {\n    pos = Math.max(0, pos);\n    buffered.sort(function(a, b) {\n      const diff = a.start - b.start;\n      if (diff) {\n        return diff;\n      } else {\n        return b.end - a.end;\n      }\n    });\n    let buffered2 = [];\n    if (maxHoleDuration) {\n      for (let i = 0; i < buffered.length; i++) {\n        const buf2len = buffered2.length;\n        if (buf2len) {\n          const buf2end = buffered2[buf2len - 1].end;\n          if (buffered[i].start - buf2end < maxHoleDuration) {\n            if (buffered[i].end > buf2end) {\n              buffered2[buf2len - 1].end = buffered[i].end;\n            }\n          } else {\n            buffered2.push(buffered[i]);\n          }\n        } else {\n          buffered2.push(buffered[i]);\n        }\n      }\n    } else {\n      buffered2 = buffered;\n    }\n    let bufferLen = 0;\n    let bufferStartNext;\n    let bufferStart = pos;\n    let bufferEnd = pos;\n    for (let i = 0; i < buffered2.length; i++) {\n      const start = buffered2[i].start;\n      const end = buffered2[i].end;\n      if (pos + maxHoleDuration >= start && pos < end) {\n        bufferStart = start;\n        bufferEnd = end;\n        bufferLen = bufferEnd - pos;\n      } else if (pos + maxHoleDuration < start) {\n        bufferStartNext = start;\n        break;\n      }\n    }\n    return {\n      len: bufferLen,\n      start: bufferStart || 0,\n      end: bufferEnd || 0,\n      nextStart: bufferStartNext\n    };\n  }\n  /**\n   * Safe method to get buffered property.\n   * SourceBuffer.buffered may throw if SourceBuffer is removed from it's MediaSource\n   */\n  static getBuffered(media) {\n    try {\n      return media.buffered;\n    } catch (e) {\n      logger.log(\"failed to get media.buffered\", e);\n      return noopBuffered;\n    }\n  }\n}\nclass ChunkMetadata {\n  constructor(level, sn, id, size = 0, part = -1, partial = false) {\n    this.level = void 0;\n    this.sn = void 0;\n    this.part = void 0;\n    this.id = void 0;\n    this.size = void 0;\n    this.partial = void 0;\n    this.transmuxing = getNewPerformanceTiming();\n    this.buffering = {\n      audio: getNewPerformanceTiming(),\n      video: getNewPerformanceTiming(),\n      audiovideo: getNewPerformanceTiming()\n    };\n    this.level = level;\n    this.sn = sn;\n    this.id = id;\n    this.size = size;\n    this.part = part;\n    this.partial = partial;\n  }\n}\nfunction getNewPerformanceTiming() {\n  return {\n    start: 0,\n    executeStart: 0,\n    executeEnd: 0,\n    end: 0\n  };\n}\nfunction findFirstFragWithCC(fragments, cc) {\n  for (let i = 0, len = fragments.length; i < len; i++) {\n    var _fragments$i;\n    if (((_fragments$i = fragments[i]) == null ? void 0 : _fragments$i.cc) === cc) {\n      return fragments[i];\n    }\n  }\n  return null;\n}\nfunction shouldAlignOnDiscontinuities(lastFrag, switchDetails, details) {\n  if (switchDetails) {\n    if (details.endCC > details.startCC || lastFrag && lastFrag.cc < details.startCC) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction findDiscontinuousReferenceFrag(prevDetails, curDetails) {\n  const prevFrags = prevDetails.fragments;\n  const curFrags = curDetails.fragments;\n  if (!curFrags.length || !prevFrags.length) {\n    logger.log(\"No fragments to align\");\n    return;\n  }\n  const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);\n  if (!prevStartFrag || prevStartFrag && !prevStartFrag.startPTS) {\n    logger.log(\"No frag in previous level to align on\");\n    return;\n  }\n  return prevStartFrag;\n}\nfunction adjustFragmentStart(frag, sliding) {\n  if (frag) {\n    const start = frag.start + sliding;\n    frag.start = frag.startPTS = start;\n    frag.endPTS = start + frag.duration;\n  }\n}\nfunction adjustSlidingStart(sliding, details) {\n  const fragments = details.fragments;\n  for (let i = 0, len = fragments.length; i < len; i++) {\n    adjustFragmentStart(fragments[i], sliding);\n  }\n  if (details.fragmentHint) {\n    adjustFragmentStart(details.fragmentHint, sliding);\n  }\n  details.alignedSliding = true;\n}\nfunction alignStream(lastFrag, switchDetails, details) {\n  if (!switchDetails) {\n    return;\n  }\n  alignDiscontinuities(lastFrag, details, switchDetails);\n  if (!details.alignedSliding && switchDetails) {\n    alignMediaPlaylistByPDT(details, switchDetails);\n  }\n  if (!details.alignedSliding && switchDetails && !details.skippedSegments) {\n    adjustSliding(switchDetails, details);\n  }\n}\nfunction alignDiscontinuities(lastFrag, details, switchDetails) {\n  if (shouldAlignOnDiscontinuities(lastFrag, switchDetails, details)) {\n    const referenceFrag = findDiscontinuousReferenceFrag(switchDetails, details);\n    if (referenceFrag && isFiniteNumber(referenceFrag.start)) {\n      logger.log(`Adjusting PTS using last level due to CC increase within current level ${details.url}`);\n      adjustSlidingStart(referenceFrag.start, details);\n    }\n  }\n}\nfunction alignMediaPlaylistByPDT(details, refDetails) {\n  if (!details.hasProgramDateTime || !refDetails.hasProgramDateTime) {\n    return;\n  }\n  const fragments = details.fragments;\n  const refFragments = refDetails.fragments;\n  if (!fragments.length || !refFragments.length) {\n    return;\n  }\n  let refFrag;\n  let frag;\n  const targetCC = Math.min(refDetails.endCC, details.endCC);\n  if (refDetails.startCC < targetCC && details.startCC < targetCC) {\n    refFrag = findFirstFragWithCC(refFragments, targetCC);\n    frag = findFirstFragWithCC(fragments, targetCC);\n  }\n  if (!refFrag || !frag) {\n    refFrag = refFragments[Math.floor(refFragments.length / 2)];\n    frag = findFirstFragWithCC(fragments, refFrag.cc) || fragments[Math.floor(fragments.length / 2)];\n  }\n  const refPDT = refFrag.programDateTime;\n  const targetPDT = frag.programDateTime;\n  if (!refPDT || !targetPDT) {\n    return;\n  }\n  const delta = (targetPDT - refPDT) / 1e3 - (frag.start - refFrag.start);\n  adjustSlidingStart(delta, details);\n}\nconst MIN_CHUNK_SIZE = Math.pow(2, 17);\nclass FragmentLoader {\n  constructor(config) {\n    this.config = void 0;\n    this.loader = null;\n    this.partLoadTimeout = -1;\n    this.config = config;\n  }\n  destroy() {\n    if (this.loader) {\n      this.loader.destroy();\n      this.loader = null;\n    }\n  }\n  abort() {\n    if (this.loader) {\n      this.loader.abort();\n    }\n  }\n  load(frag, onProgress) {\n    const url = frag.url;\n    if (!url) {\n      return Promise.reject(new LoadError({\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.FRAG_LOAD_ERROR,\n        fatal: false,\n        frag,\n        error: new Error(`Fragment does not have a ${url ? \"part list\" : \"url\"}`),\n        networkDetails: null\n      }));\n    }\n    this.abort();\n    const config = this.config;\n    const FragmentILoader = config.fLoader;\n    const DefaultILoader = config.loader;\n    return new Promise((resolve, reject) => {\n      if (this.loader) {\n        this.loader.destroy();\n      }\n      if (frag.gap) {\n        if (frag.tagList.some((tags) => tags[0] === \"GAP\")) {\n          reject(createGapLoadError(frag));\n          return;\n        } else {\n          frag.gap = false;\n        }\n      }\n      const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n      const loaderContext = createLoaderContext(frag);\n      const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0,\n        highWaterMark: frag.sn === \"initSegment\" ? Infinity : MIN_CHUNK_SIZE\n      };\n      frag.stats = loader.stats;\n      loader.load(loaderContext, loaderConfig, {\n        onSuccess: (response, stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          let payload = response.data;\n          if (context.resetIV && frag.decryptdata) {\n            frag.decryptdata.iv = new Uint8Array(payload.slice(0, 16));\n            payload = payload.slice(16);\n          }\n          resolve({\n            frag,\n            part: null,\n            payload,\n            networkDetails\n          });\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_ERROR,\n            fatal: false,\n            frag,\n            response: _objectSpread2({\n              url,\n              data: void 0\n            }, response),\n            error: new Error(`HTTP Error ${response.code} ${response.text}`),\n            networkDetails,\n            stats\n          }));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.INTERNAL_ABORTED,\n            fatal: false,\n            frag,\n            error: new Error(\"Aborted\"),\n            networkDetails,\n            stats\n          }));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n            fatal: false,\n            frag,\n            error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n            networkDetails,\n            stats\n          }));\n        },\n        onProgress: (stats, context, data, networkDetails) => {\n          if (onProgress) {\n            onProgress({\n              frag,\n              part: null,\n              payload: data,\n              networkDetails\n            });\n          }\n        }\n      });\n    });\n  }\n  loadPart(frag, part, onProgress) {\n    this.abort();\n    const config = this.config;\n    const FragmentILoader = config.fLoader;\n    const DefaultILoader = config.loader;\n    return new Promise((resolve, reject) => {\n      if (this.loader) {\n        this.loader.destroy();\n      }\n      if (frag.gap || part.gap) {\n        reject(createGapLoadError(frag, part));\n        return;\n      }\n      const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n      const loaderContext = createLoaderContext(frag, part);\n      const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0,\n        highWaterMark: MIN_CHUNK_SIZE\n      };\n      part.stats = loader.stats;\n      loader.load(loaderContext, loaderConfig, {\n        onSuccess: (response, stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          this.updateStatsFromPart(frag, part);\n          const partLoadedData = {\n            frag,\n            part,\n            payload: response.data,\n            networkDetails\n          };\n          onProgress(partLoadedData);\n          resolve(partLoadedData);\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_ERROR,\n            fatal: false,\n            frag,\n            part,\n            response: _objectSpread2({\n              url: loaderContext.url,\n              data: void 0\n            }, response),\n            error: new Error(`HTTP Error ${response.code} ${response.text}`),\n            networkDetails,\n            stats\n          }));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          frag.stats.aborted = part.stats.aborted;\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.INTERNAL_ABORTED,\n            fatal: false,\n            frag,\n            part,\n            error: new Error(\"Aborted\"),\n            networkDetails,\n            stats\n          }));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n            fatal: false,\n            frag,\n            part,\n            error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n            networkDetails,\n            stats\n          }));\n        }\n      });\n    });\n  }\n  updateStatsFromPart(frag, part) {\n    const fragStats = frag.stats;\n    const partStats = part.stats;\n    const partTotal = partStats.total;\n    fragStats.loaded += partStats.loaded;\n    if (partTotal) {\n      const estTotalParts = Math.round(frag.duration / part.duration);\n      const estLoadedParts = Math.min(Math.round(fragStats.loaded / partTotal), estTotalParts);\n      const estRemainingParts = estTotalParts - estLoadedParts;\n      const estRemainingBytes = estRemainingParts * Math.round(fragStats.loaded / estLoadedParts);\n      fragStats.total = fragStats.loaded + estRemainingBytes;\n    } else {\n      fragStats.total = Math.max(fragStats.loaded, fragStats.total);\n    }\n    const fragLoading = fragStats.loading;\n    const partLoading = partStats.loading;\n    if (fragLoading.start) {\n      fragLoading.first += partLoading.first - partLoading.start;\n    } else {\n      fragLoading.start = partLoading.start;\n      fragLoading.first = partLoading.first;\n    }\n    fragLoading.end = partLoading.end;\n  }\n  resetLoader(frag, loader) {\n    frag.loader = null;\n    if (this.loader === loader) {\n      self.clearTimeout(this.partLoadTimeout);\n      this.loader = null;\n    }\n    loader.destroy();\n  }\n}\nfunction createLoaderContext(frag, part = null) {\n  const segment = part || frag;\n  const loaderContext = {\n    frag,\n    part,\n    responseType: \"arraybuffer\",\n    url: segment.url,\n    headers: {},\n    rangeStart: 0,\n    rangeEnd: 0\n  };\n  const start = segment.byteRangeStartOffset;\n  const end = segment.byteRangeEndOffset;\n  if (isFiniteNumber(start) && isFiniteNumber(end)) {\n    var _frag$decryptdata;\n    let byteRangeStart = start;\n    let byteRangeEnd = end;\n    if (frag.sn === \"initSegment\" && ((_frag$decryptdata = frag.decryptdata) == null ? void 0 : _frag$decryptdata.method) === \"AES-128\") {\n      const fragmentLen = end - start;\n      if (fragmentLen % 16) {\n        byteRangeEnd = end + (16 - fragmentLen % 16);\n      }\n      if (start !== 0) {\n        loaderContext.resetIV = true;\n        byteRangeStart = start - 16;\n      }\n    }\n    loaderContext.rangeStart = byteRangeStart;\n    loaderContext.rangeEnd = byteRangeEnd;\n  }\n  return loaderContext;\n}\nfunction createGapLoadError(frag, part) {\n  const error = new Error(`GAP ${frag.gap ? \"tag\" : \"attribute\"} found`);\n  const errorData = {\n    type: ErrorTypes.MEDIA_ERROR,\n    details: ErrorDetails.FRAG_GAP,\n    fatal: false,\n    frag,\n    error,\n    networkDetails: null\n  };\n  if (part) {\n    errorData.part = part;\n  }\n  (part ? part : frag).stats.aborted = true;\n  return new LoadError(errorData);\n}\nclass LoadError extends Error {\n  constructor(data) {\n    super(data.error.message);\n    this.data = void 0;\n    this.data = data;\n  }\n}\nclass AESCrypto {\n  constructor(subtle, iv) {\n    this.subtle = void 0;\n    this.aesIV = void 0;\n    this.subtle = subtle;\n    this.aesIV = iv;\n  }\n  decrypt(data, key) {\n    return this.subtle.decrypt({\n      name: \"AES-CBC\",\n      iv: this.aesIV\n    }, key, data);\n  }\n}\nclass FastAESKey {\n  constructor(subtle, key) {\n    this.subtle = void 0;\n    this.key = void 0;\n    this.subtle = subtle;\n    this.key = key;\n  }\n  expandKey() {\n    return this.subtle.importKey(\"raw\", this.key, {\n      name: \"AES-CBC\"\n    }, false, [\"encrypt\", \"decrypt\"]);\n  }\n}\nfunction removePadding(array) {\n  const outputBytes = array.byteLength;\n  const paddingBytes = outputBytes && new DataView(array.buffer).getUint8(outputBytes - 1);\n  if (paddingBytes) {\n    return sliceUint8(array, 0, outputBytes - paddingBytes);\n  }\n  return array;\n}\nclass AESDecryptor {\n  constructor() {\n    this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];\n    this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n    this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n    this.sBox = new Uint32Array(256);\n    this.invSBox = new Uint32Array(256);\n    this.key = new Uint32Array(0);\n    this.ksRows = 0;\n    this.keySize = 0;\n    this.keySchedule = void 0;\n    this.invKeySchedule = void 0;\n    this.initTable();\n  }\n  // Using view.getUint32() also swaps the byte order.\n  uint8ArrayToUint32Array_(arrayBuffer) {\n    const view = new DataView(arrayBuffer);\n    const newArray = new Uint32Array(4);\n    for (let i = 0; i < 4; i++) {\n      newArray[i] = view.getUint32(i * 4);\n    }\n    return newArray;\n  }\n  initTable() {\n    const sBox = this.sBox;\n    const invSBox = this.invSBox;\n    const subMix = this.subMix;\n    const subMix0 = subMix[0];\n    const subMix1 = subMix[1];\n    const subMix2 = subMix[2];\n    const subMix3 = subMix[3];\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    const d = new Uint32Array(256);\n    let x = 0;\n    let xi = 0;\n    let i = 0;\n    for (i = 0; i < 256; i++) {\n      if (i < 128) {\n        d[i] = i << 1;\n      } else {\n        d[i] = i << 1 ^ 283;\n      }\n    }\n    for (i = 0; i < 256; i++) {\n      let sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n      sx = sx >>> 8 ^ sx & 255 ^ 99;\n      sBox[x] = sx;\n      invSBox[sx] = x;\n      const x2 = d[x];\n      const x4 = d[x2];\n      const x8 = d[x4];\n      let t = d[sx] * 257 ^ sx * 16843008;\n      subMix0[x] = t << 24 | t >>> 8;\n      subMix1[x] = t << 16 | t >>> 16;\n      subMix2[x] = t << 8 | t >>> 24;\n      subMix3[x] = t;\n      t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;\n      invSubMix0[sx] = t << 24 | t >>> 8;\n      invSubMix1[sx] = t << 16 | t >>> 16;\n      invSubMix2[sx] = t << 8 | t >>> 24;\n      invSubMix3[sx] = t;\n      if (!x) {\n        x = xi = 1;\n      } else {\n        x = x2 ^ d[d[d[x8 ^ x2]]];\n        xi ^= d[d[xi]];\n      }\n    }\n  }\n  expandKey(keyBuffer) {\n    const key = this.uint8ArrayToUint32Array_(keyBuffer);\n    let sameKey = true;\n    let offset = 0;\n    while (offset < key.length && sameKey) {\n      sameKey = key[offset] === this.key[offset];\n      offset++;\n    }\n    if (sameKey) {\n      return;\n    }\n    this.key = key;\n    const keySize = this.keySize = key.length;\n    if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n      throw new Error(\"Invalid aes key size=\" + keySize);\n    }\n    const ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n    let ksRow;\n    let invKsRow;\n    const keySchedule = this.keySchedule = new Uint32Array(ksRows);\n    const invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n    const sbox = this.sBox;\n    const rcon = this.rcon;\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    let prev;\n    let t;\n    for (ksRow = 0; ksRow < ksRows; ksRow++) {\n      if (ksRow < keySize) {\n        prev = keySchedule[ksRow] = key[ksRow];\n        continue;\n      }\n      t = prev;\n      if (ksRow % keySize === 0) {\n        t = t << 8 | t >>> 24;\n        t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 255] << 16 | sbox[t >>> 8 & 255] << 8 | sbox[t & 255];\n        t ^= rcon[ksRow / keySize | 0] << 24;\n      } else if (keySize > 6 && ksRow % keySize === 4) {\n        t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 255] << 16 | sbox[t >>> 8 & 255] << 8 | sbox[t & 255];\n      }\n      keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t) >>> 0;\n    }\n    for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n      ksRow = ksRows - invKsRow;\n      if (invKsRow & 3) {\n        t = keySchedule[ksRow];\n      } else {\n        t = keySchedule[ksRow - 4];\n      }\n      if (invKsRow < 4 || ksRow <= 4) {\n        invKeySchedule[invKsRow] = t;\n      } else {\n        invKeySchedule[invKsRow] = invSubMix0[sbox[t >>> 24]] ^ invSubMix1[sbox[t >>> 16 & 255]] ^ invSubMix2[sbox[t >>> 8 & 255]] ^ invSubMix3[sbox[t & 255]];\n      }\n      invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n    }\n  }\n  // Adding this as a method greatly improves performance.\n  networkToHostOrderSwap(word) {\n    return word << 24 | (word & 65280) << 8 | (word & 16711680) >> 8 | word >>> 24;\n  }\n  decrypt(inputArrayBuffer, offset, aesIV) {\n    const nRounds = this.keySize + 6;\n    const invKeySchedule = this.invKeySchedule;\n    const invSBOX = this.invSBox;\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    const initVector = this.uint8ArrayToUint32Array_(aesIV);\n    let initVector0 = initVector[0];\n    let initVector1 = initVector[1];\n    let initVector2 = initVector[2];\n    let initVector3 = initVector[3];\n    const inputInt32 = new Int32Array(inputArrayBuffer);\n    const outputInt32 = new Int32Array(inputInt32.length);\n    let t0, t1, t2, t3;\n    let s0, s1, s2, s3;\n    let inputWords0, inputWords1, inputWords2, inputWords3;\n    let ksRow, i;\n    const swapWord = this.networkToHostOrderSwap;\n    while (offset < inputInt32.length) {\n      inputWords0 = swapWord(inputInt32[offset]);\n      inputWords1 = swapWord(inputInt32[offset + 1]);\n      inputWords2 = swapWord(inputInt32[offset + 2]);\n      inputWords3 = swapWord(inputInt32[offset + 3]);\n      s0 = inputWords0 ^ invKeySchedule[0];\n      s1 = inputWords3 ^ invKeySchedule[1];\n      s2 = inputWords2 ^ invKeySchedule[2];\n      s3 = inputWords1 ^ invKeySchedule[3];\n      ksRow = 4;\n      for (i = 1; i < nRounds; i++) {\n        t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[s1 >> 16 & 255] ^ invSubMix2[s2 >> 8 & 255] ^ invSubMix3[s3 & 255] ^ invKeySchedule[ksRow];\n        t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[s2 >> 16 & 255] ^ invSubMix2[s3 >> 8 & 255] ^ invSubMix3[s0 & 255] ^ invKeySchedule[ksRow + 1];\n        t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[s3 >> 16 & 255] ^ invSubMix2[s0 >> 8 & 255] ^ invSubMix3[s1 & 255] ^ invKeySchedule[ksRow + 2];\n        t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[s0 >> 16 & 255] ^ invSubMix2[s1 >> 8 & 255] ^ invSubMix3[s2 & 255] ^ invKeySchedule[ksRow + 3];\n        s0 = t0;\n        s1 = t1;\n        s2 = t2;\n        s3 = t3;\n        ksRow = ksRow + 4;\n      }\n      t0 = invSBOX[s0 >>> 24] << 24 ^ invSBOX[s1 >> 16 & 255] << 16 ^ invSBOX[s2 >> 8 & 255] << 8 ^ invSBOX[s3 & 255] ^ invKeySchedule[ksRow];\n      t1 = invSBOX[s1 >>> 24] << 24 ^ invSBOX[s2 >> 16 & 255] << 16 ^ invSBOX[s3 >> 8 & 255] << 8 ^ invSBOX[s0 & 255] ^ invKeySchedule[ksRow + 1];\n      t2 = invSBOX[s2 >>> 24] << 24 ^ invSBOX[s3 >> 16 & 255] << 16 ^ invSBOX[s0 >> 8 & 255] << 8 ^ invSBOX[s1 & 255] ^ invKeySchedule[ksRow + 2];\n      t3 = invSBOX[s3 >>> 24] << 24 ^ invSBOX[s0 >> 16 & 255] << 16 ^ invSBOX[s1 >> 8 & 255] << 8 ^ invSBOX[s2 & 255] ^ invKeySchedule[ksRow + 3];\n      outputInt32[offset] = swapWord(t0 ^ initVector0);\n      outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n      outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n      outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n      initVector0 = inputWords0;\n      initVector1 = inputWords1;\n      initVector2 = inputWords2;\n      initVector3 = inputWords3;\n      offset = offset + 4;\n    }\n    return outputInt32.buffer;\n  }\n}\nconst CHUNK_SIZE = 16;\nclass Decrypter {\n  constructor(config, {\n    removePKCS7Padding = true\n  } = {}) {\n    this.logEnabled = true;\n    this.removePKCS7Padding = void 0;\n    this.subtle = null;\n    this.softwareDecrypter = null;\n    this.key = null;\n    this.fastAesKey = null;\n    this.remainderData = null;\n    this.currentIV = null;\n    this.currentResult = null;\n    this.useSoftware = void 0;\n    this.useSoftware = config.enableSoftwareAES;\n    this.removePKCS7Padding = removePKCS7Padding;\n    if (removePKCS7Padding) {\n      try {\n        const browserCrypto = self.crypto;\n        if (browserCrypto) {\n          this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n        }\n      } catch (e) {\n      }\n    }\n    if (this.subtle === null) {\n      this.useSoftware = true;\n    }\n  }\n  destroy() {\n    this.subtle = null;\n    this.softwareDecrypter = null;\n    this.key = null;\n    this.fastAesKey = null;\n    this.remainderData = null;\n    this.currentIV = null;\n    this.currentResult = null;\n  }\n  isSync() {\n    return this.useSoftware;\n  }\n  flush() {\n    const {\n      currentResult,\n      remainderData\n    } = this;\n    if (!currentResult || remainderData) {\n      this.reset();\n      return null;\n    }\n    const data = new Uint8Array(currentResult);\n    this.reset();\n    if (this.removePKCS7Padding) {\n      return removePadding(data);\n    }\n    return data;\n  }\n  reset() {\n    this.currentResult = null;\n    this.currentIV = null;\n    this.remainderData = null;\n    if (this.softwareDecrypter) {\n      this.softwareDecrypter = null;\n    }\n  }\n  decrypt(data, key, iv) {\n    if (this.useSoftware) {\n      return new Promise((resolve, reject) => {\n        this.softwareDecrypt(new Uint8Array(data), key, iv);\n        const decryptResult = this.flush();\n        if (decryptResult) {\n          resolve(decryptResult.buffer);\n        } else {\n          reject(new Error(\"[softwareDecrypt] Failed to decrypt data\"));\n        }\n      });\n    }\n    return this.webCryptoDecrypt(new Uint8Array(data), key, iv);\n  }\n  // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n  // data is handled in the flush() call\n  softwareDecrypt(data, key, iv) {\n    const {\n      currentIV,\n      currentResult,\n      remainderData\n    } = this;\n    this.logOnce(\"JS AES decrypt\");\n    if (remainderData) {\n      data = appendUint8Array(remainderData, data);\n      this.remainderData = null;\n    }\n    const currentChunk = this.getValidChunk(data);\n    if (!currentChunk.length) {\n      return null;\n    }\n    if (currentIV) {\n      iv = currentIV;\n    }\n    let softwareDecrypter = this.softwareDecrypter;\n    if (!softwareDecrypter) {\n      softwareDecrypter = this.softwareDecrypter = new AESDecryptor();\n    }\n    softwareDecrypter.expandKey(key);\n    const result = currentResult;\n    this.currentResult = softwareDecrypter.decrypt(currentChunk.buffer, 0, iv);\n    this.currentIV = sliceUint8(currentChunk, -16).buffer;\n    if (!result) {\n      return null;\n    }\n    return result;\n  }\n  webCryptoDecrypt(data, key, iv) {\n    const subtle = this.subtle;\n    if (this.key !== key || !this.fastAesKey) {\n      this.key = key;\n      this.fastAesKey = new FastAESKey(subtle, key);\n    }\n    return this.fastAesKey.expandKey().then((aesKey) => {\n      if (!subtle) {\n        return Promise.reject(new Error(\"web crypto not initialized\"));\n      }\n      this.logOnce(\"WebCrypto AES decrypt\");\n      const crypto2 = new AESCrypto(subtle, new Uint8Array(iv));\n      return crypto2.decrypt(data.buffer, aesKey);\n    }).catch((err) => {\n      logger.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${err.name}: ${err.message}`);\n      return this.onWebCryptoError(data, key, iv);\n    });\n  }\n  onWebCryptoError(data, key, iv) {\n    this.useSoftware = true;\n    this.logEnabled = true;\n    this.softwareDecrypt(data, key, iv);\n    const decryptResult = this.flush();\n    if (decryptResult) {\n      return decryptResult.buffer;\n    }\n    throw new Error(\"WebCrypto and softwareDecrypt: failed to decrypt data\");\n  }\n  getValidChunk(data) {\n    let currentChunk = data;\n    const splitPoint = data.length - data.length % CHUNK_SIZE;\n    if (splitPoint !== data.length) {\n      currentChunk = sliceUint8(data, 0, splitPoint);\n      this.remainderData = sliceUint8(data, splitPoint);\n    }\n    return currentChunk;\n  }\n  logOnce(msg) {\n    if (!this.logEnabled) {\n      return;\n    }\n    logger.log(`[decrypter]: ${msg}`);\n    this.logEnabled = false;\n  }\n}\nconst TimeRanges = {\n  toString: function(r) {\n    let log = \"\";\n    const len = r.length;\n    for (let i = 0; i < len; i++) {\n      log += `[${r.start(i).toFixed(3)}-${r.end(i).toFixed(3)}]`;\n    }\n    return log;\n  }\n};\nconst State = {\n  STOPPED: \"STOPPED\",\n  IDLE: \"IDLE\",\n  KEY_LOADING: \"KEY_LOADING\",\n  FRAG_LOADING: \"FRAG_LOADING\",\n  FRAG_LOADING_WAITING_RETRY: \"FRAG_LOADING_WAITING_RETRY\",\n  WAITING_TRACK: \"WAITING_TRACK\",\n  PARSING: \"PARSING\",\n  PARSED: \"PARSED\",\n  ENDED: \"ENDED\",\n  ERROR: \"ERROR\",\n  WAITING_INIT_PTS: \"WAITING_INIT_PTS\",\n  WAITING_LEVEL: \"WAITING_LEVEL\"\n};\nclass BaseStreamController extends TaskLoop {\n  constructor(hls, fragmentTracker, keyLoader, logPrefix, playlistType) {\n    super();\n    this.hls = void 0;\n    this.fragPrevious = null;\n    this.fragCurrent = null;\n    this.fragmentTracker = void 0;\n    this.transmuxer = null;\n    this._state = State.STOPPED;\n    this.playlistType = void 0;\n    this.media = null;\n    this.mediaBuffer = null;\n    this.config = void 0;\n    this.bitrateTest = false;\n    this.lastCurrentTime = 0;\n    this.nextLoadPosition = 0;\n    this.startPosition = 0;\n    this.startTimeOffset = null;\n    this.loadedmetadata = false;\n    this.retryDate = 0;\n    this.levels = null;\n    this.fragmentLoader = void 0;\n    this.keyLoader = void 0;\n    this.levelLastLoaded = null;\n    this.startFragRequested = false;\n    this.decrypter = void 0;\n    this.initPTS = [];\n    this.onvseeking = null;\n    this.onvended = null;\n    this.logPrefix = \"\";\n    this.log = void 0;\n    this.warn = void 0;\n    this.playlistType = playlistType;\n    this.logPrefix = logPrefix;\n    this.log = logger.log.bind(logger, `${logPrefix}:`);\n    this.warn = logger.warn.bind(logger, `${logPrefix}:`);\n    this.hls = hls;\n    this.fragmentLoader = new FragmentLoader(hls.config);\n    this.keyLoader = keyLoader;\n    this.fragmentTracker = fragmentTracker;\n    this.config = hls.config;\n    this.decrypter = new Decrypter(hls.config);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  doTick() {\n    this.onTickEnd();\n  }\n  onTickEnd() {\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  startLoad(startPosition) {\n  }\n  stopLoad() {\n    this.fragmentLoader.abort();\n    this.keyLoader.abort(this.playlistType);\n    const frag = this.fragCurrent;\n    if (frag != null && frag.loader) {\n      frag.abortRequests();\n      this.fragmentTracker.removeFragment(frag);\n    }\n    this.resetTransmuxer();\n    this.fragCurrent = null;\n    this.fragPrevious = null;\n    this.clearInterval();\n    this.clearNextTick();\n    this.state = State.STOPPED;\n  }\n  _streamEnded(bufferInfo, levelDetails) {\n    if (levelDetails.live || bufferInfo.nextStart || !bufferInfo.end || !this.media) {\n      return false;\n    }\n    const partList = levelDetails.partList;\n    if (partList != null && partList.length) {\n      const lastPart = partList[partList.length - 1];\n      const lastPartBuffered = BufferHelper.isBuffered(this.media, lastPart.start + lastPart.duration / 2);\n      return lastPartBuffered;\n    }\n    const playlistType = levelDetails.fragments[levelDetails.fragments.length - 1].type;\n    return this.fragmentTracker.isEndListAppended(playlistType);\n  }\n  getLevelDetails() {\n    if (this.levels && this.levelLastLoaded !== null) {\n      var _this$levelLastLoaded;\n      return (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details;\n    }\n  }\n  onMediaAttached(event, data) {\n    const media = this.media = this.mediaBuffer = data.media;\n    this.onvseeking = this.onMediaSeeking.bind(this);\n    this.onvended = this.onMediaEnded.bind(this);\n    media.addEventListener(\"seeking\", this.onvseeking);\n    media.addEventListener(\"ended\", this.onvended);\n    const config = this.config;\n    if (this.levels && config.autoStartLoad && this.state === State.STOPPED) {\n      this.startLoad(config.startPosition);\n    }\n  }\n  onMediaDetaching() {\n    const media = this.media;\n    if (media != null && media.ended) {\n      this.log(\"MSE detaching and video ended, reset startPosition\");\n      this.startPosition = this.lastCurrentTime = 0;\n    }\n    if (media && this.onvseeking && this.onvended) {\n      media.removeEventListener(\"seeking\", this.onvseeking);\n      media.removeEventListener(\"ended\", this.onvended);\n      this.onvseeking = this.onvended = null;\n    }\n    if (this.keyLoader) {\n      this.keyLoader.detach();\n    }\n    this.media = this.mediaBuffer = null;\n    this.loadedmetadata = false;\n    this.fragmentTracker.removeAllFragments();\n    this.stopLoad();\n  }\n  onMediaSeeking() {\n    const {\n      config,\n      fragCurrent,\n      media,\n      mediaBuffer,\n      state\n    } = this;\n    const currentTime = media ? media.currentTime : 0;\n    const bufferInfo = BufferHelper.bufferInfo(mediaBuffer ? mediaBuffer : media, currentTime, config.maxBufferHole);\n    this.log(`media seeking to ${isFiniteNumber(currentTime) ? currentTime.toFixed(3) : currentTime}, state: ${state}`);\n    if (this.state === State.ENDED) {\n      this.resetLoadingState();\n    } else if (fragCurrent) {\n      const tolerance = config.maxFragLookUpTolerance;\n      const fragStartOffset = fragCurrent.start - tolerance;\n      const fragEndOffset = fragCurrent.start + fragCurrent.duration + tolerance;\n      if (!bufferInfo.len || fragEndOffset < bufferInfo.start || fragStartOffset > bufferInfo.end) {\n        const pastFragment = currentTime > fragEndOffset;\n        if (currentTime < fragStartOffset || pastFragment) {\n          if (pastFragment && fragCurrent.loader) {\n            this.log(\"seeking outside of buffer while fragment load in progress, cancel fragment load\");\n            fragCurrent.abortRequests();\n            this.resetLoadingState();\n          }\n          this.fragPrevious = null;\n        }\n      }\n    }\n    if (media) {\n      this.fragmentTracker.removeFragmentsInRange(currentTime, Infinity, this.playlistType, true);\n      this.lastCurrentTime = currentTime;\n    }\n    if (!this.loadedmetadata && !bufferInfo.len) {\n      this.nextLoadPosition = this.startPosition = currentTime;\n    }\n    this.tickImmediate();\n  }\n  onMediaEnded() {\n    this.startPosition = this.lastCurrentTime = 0;\n  }\n  onManifestLoaded(event, data) {\n    this.startTimeOffset = data.startTimeOffset;\n    this.initPTS = [];\n  }\n  onHandlerDestroying() {\n    this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    this.stopLoad();\n    super.onHandlerDestroying();\n    this.hls = null;\n  }\n  onHandlerDestroyed() {\n    this.state = State.STOPPED;\n    if (this.fragmentLoader) {\n      this.fragmentLoader.destroy();\n    }\n    if (this.keyLoader) {\n      this.keyLoader.destroy();\n    }\n    if (this.decrypter) {\n      this.decrypter.destroy();\n    }\n    this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null;\n    super.onHandlerDestroyed();\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    this._loadFragForPlayback(frag, level, targetBufferTime);\n  }\n  _loadFragForPlayback(frag, level, targetBufferTime) {\n    const progressCallback = (data) => {\n      if (this.fragContextChanged(frag)) {\n        this.warn(`Fragment ${frag.sn}${data.part ? \" p: \" + data.part.index : \"\"} of level ${frag.level} was dropped during download.`);\n        this.fragmentTracker.removeFragment(frag);\n        return;\n      }\n      frag.stats.chunkCount++;\n      this._handleFragmentLoadProgress(data);\n    };\n    this._doFragLoad(frag, level, targetBufferTime, progressCallback).then((data) => {\n      if (!data) {\n        return;\n      }\n      const state = this.state;\n      if (this.fragContextChanged(frag)) {\n        if (state === State.FRAG_LOADING || !this.fragCurrent && state === State.PARSING) {\n          this.fragmentTracker.removeFragment(frag);\n          this.state = State.IDLE;\n        }\n        return;\n      }\n      if (\"payload\" in data) {\n        this.log(`Loaded fragment ${frag.sn} of level ${frag.level}`);\n        this.hls.trigger(Events.FRAG_LOADED, data);\n      }\n      this._handleFragmentLoadComplete(data);\n    }).catch((reason) => {\n      if (this.state === State.STOPPED || this.state === State.ERROR) {\n        return;\n      }\n      this.warn(reason);\n      this.resetFragmentLoading(frag);\n    });\n  }\n  clearTrackerIfNeeded(frag) {\n    var _this$mediaBuffer;\n    const {\n      fragmentTracker\n    } = this;\n    const fragState = fragmentTracker.getState(frag);\n    if (fragState === FragmentState.APPENDING) {\n      const playlistType = frag.type;\n      const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n      const minForwardBufferLength = Math.max(frag.duration, bufferedInfo ? bufferedInfo.len : this.config.maxBufferLength);\n      if (this.reduceMaxBufferLength(minForwardBufferLength)) {\n        fragmentTracker.removeFragment(frag);\n      }\n    } else if (((_this$mediaBuffer = this.mediaBuffer) == null ? void 0 : _this$mediaBuffer.buffered.length) === 0) {\n      fragmentTracker.removeAllFragments();\n    } else if (fragmentTracker.hasParts(frag.type)) {\n      fragmentTracker.detectPartialFragments({\n        frag,\n        part: null,\n        stats: frag.stats,\n        id: frag.type\n      });\n      if (fragmentTracker.getState(frag) === FragmentState.PARTIAL) {\n        fragmentTracker.removeFragment(frag);\n      }\n    }\n  }\n  checkLiveUpdate(details) {\n    if (details.updated && !details.live) {\n      const lastFragment = details.fragments[details.fragments.length - 1];\n      this.fragmentTracker.detectPartialFragments({\n        frag: lastFragment,\n        part: null,\n        stats: lastFragment.stats,\n        id: lastFragment.type\n      });\n    }\n    if (!details.fragments[0]) {\n      details.deltaUpdateFailed = true;\n    }\n  }\n  flushMainBuffer(startOffset, endOffset, type = null) {\n    if (!(startOffset - endOffset)) {\n      return;\n    }\n    const flushScope = {\n      startOffset,\n      endOffset,\n      type\n    };\n    this.hls.trigger(Events.BUFFER_FLUSHING, flushScope);\n  }\n  _loadInitSegment(frag, level) {\n    this._doFragLoad(frag, level).then((data) => {\n      if (!data || this.fragContextChanged(frag) || !this.levels) {\n        throw new Error(\"init load aborted\");\n      }\n      return data;\n    }).then((data) => {\n      const {\n        hls\n      } = this;\n      const {\n        payload\n      } = data;\n      const decryptData = frag.decryptdata;\n      if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && decryptData.method === \"AES-128\") {\n        const startTime = self.performance.now();\n        return this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer).catch((err) => {\n          hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.FRAG_DECRYPT_ERROR,\n            fatal: false,\n            error: err,\n            reason: err.message,\n            frag\n          });\n          throw err;\n        }).then((decryptedData) => {\n          const endTime = self.performance.now();\n          hls.trigger(Events.FRAG_DECRYPTED, {\n            frag,\n            payload: decryptedData,\n            stats: {\n              tstart: startTime,\n              tdecrypt: endTime\n            }\n          });\n          data.payload = decryptedData;\n          return this.completeInitSegmentLoad(data);\n        });\n      }\n      return this.completeInitSegmentLoad(data);\n    }).catch((reason) => {\n      if (this.state === State.STOPPED || this.state === State.ERROR) {\n        return;\n      }\n      this.warn(reason);\n      this.resetFragmentLoading(frag);\n    });\n  }\n  completeInitSegmentLoad(data) {\n    const {\n      levels\n    } = this;\n    if (!levels) {\n      throw new Error(\"init load aborted, missing levels\");\n    }\n    const stats = data.frag.stats;\n    this.state = State.IDLE;\n    data.frag.data = new Uint8Array(data.payload);\n    stats.parsing.start = stats.buffering.start = self.performance.now();\n    stats.parsing.end = stats.buffering.end = self.performance.now();\n    this.tick();\n  }\n  fragContextChanged(frag) {\n    const {\n      fragCurrent\n    } = this;\n    return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;\n  }\n  fragBufferedComplete(frag, part) {\n    var _frag$startPTS, _frag$endPTS, _this$fragCurrent, _this$fragPrevious;\n    const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n    this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? \" part: \" + part.index : \"\"} of ${this.playlistType === PlaylistLevelType.MAIN ? \"level\" : \"track\"} ${frag.level} (frag:[${((_frag$startPTS = frag.startPTS) != null ? _frag$startPTS : NaN).toFixed(3)}-${((_frag$endPTS = frag.endPTS) != null ? _frag$endPTS : NaN).toFixed(3)}] > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : \"(detached)\"})`);\n    if (frag.sn !== \"initSegment\") {\n      var _this$levels;\n      if (frag.type !== PlaylistLevelType.SUBTITLE) {\n        const el = frag.elementaryStreams;\n        if (!Object.keys(el).some((type) => !!el[type])) {\n          this.state = State.IDLE;\n          return;\n        }\n      }\n      const level = (_this$levels = this.levels) == null ? void 0 : _this$levels[frag.level];\n      if (level != null && level.fragmentError) {\n        this.log(`Resetting level fragment error count of ${level.fragmentError} on frag buffered`);\n        level.fragmentError = 0;\n      }\n    }\n    this.state = State.IDLE;\n    if (!media) {\n      return;\n    }\n    if (!this.loadedmetadata && frag.type == PlaylistLevelType.MAIN && media.buffered.length && ((_this$fragCurrent = this.fragCurrent) == null ? void 0 : _this$fragCurrent.sn) === ((_this$fragPrevious = this.fragPrevious) == null ? void 0 : _this$fragPrevious.sn)) {\n      this.loadedmetadata = true;\n      this.seekToStartPos();\n    }\n    this.tick();\n  }\n  seekToStartPos() {\n  }\n  _handleFragmentLoadComplete(fragLoadedEndData) {\n    const {\n      transmuxer\n    } = this;\n    if (!transmuxer) {\n      return;\n    }\n    const {\n      frag,\n      part,\n      partsLoaded\n    } = fragLoadedEndData;\n    const complete = !partsLoaded || partsLoaded.length === 0 || partsLoaded.some((fragLoaded) => !fragLoaded);\n    const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount + 1, 0, part ? part.index : -1, !complete);\n    transmuxer.flush(chunkMeta);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  _handleFragmentLoadProgress(frag) {\n  }\n  _doFragLoad(frag, level, targetBufferTime = null, progressCallback) {\n    var _frag$decryptdata;\n    const details = level == null ? void 0 : level.details;\n    if (!this.levels || !details) {\n      throw new Error(`frag load aborted, missing level${details ? \"\" : \" detail\"}s`);\n    }\n    let keyLoadingPromise = null;\n    if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {\n      this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.logPrefix === \"[stream-controller]\" ? \"level\" : \"track\"} ${frag.level}`);\n      this.state = State.KEY_LOADING;\n      this.fragCurrent = frag;\n      keyLoadingPromise = this.keyLoader.load(frag).then((keyLoadedData) => {\n        if (!this.fragContextChanged(keyLoadedData.frag)) {\n          this.hls.trigger(Events.KEY_LOADED, keyLoadedData);\n          if (this.state === State.KEY_LOADING) {\n            this.state = State.IDLE;\n          }\n          return keyLoadedData;\n        }\n      });\n      this.hls.trigger(Events.KEY_LOADING, {\n        frag\n      });\n      if (this.fragCurrent === null) {\n        keyLoadingPromise = Promise.reject(new Error(`frag load aborted, context changed in KEY_LOADING`));\n      }\n    } else if (!frag.encrypted && details.encryptedFragments.length) {\n      this.keyLoader.loadClear(frag, details.encryptedFragments);\n    }\n    targetBufferTime = Math.max(frag.start, targetBufferTime || 0);\n    if (this.config.lowLatencyMode && frag.sn !== \"initSegment\") {\n      const partList = details.partList;\n      if (partList && progressCallback) {\n        if (targetBufferTime > frag.end && details.fragmentHint) {\n          frag = details.fragmentHint;\n        }\n        const partIndex = this.getNextPart(partList, frag, targetBufferTime);\n        if (partIndex > -1) {\n          const part = partList[partIndex];\n          this.log(`Loading part sn: ${frag.sn} p: ${part.index} cc: ${frag.cc} of playlist [${details.startSN}-${details.endSN}] parts [0-${partIndex}-${partList.length - 1}] ${this.logPrefix === \"[stream-controller]\" ? \"level\" : \"track\"}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n          this.nextLoadPosition = part.start + part.duration;\n          this.state = State.FRAG_LOADING;\n          let _result;\n          if (keyLoadingPromise) {\n            _result = keyLoadingPromise.then((keyLoadedData) => {\n              if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n                return null;\n              }\n              return this.doFragPartsLoad(frag, part, level, progressCallback);\n            }).catch((error) => this.handleFragLoadError(error));\n          } else {\n            _result = this.doFragPartsLoad(frag, part, level, progressCallback).catch((error) => this.handleFragLoadError(error));\n          }\n          this.hls.trigger(Events.FRAG_LOADING, {\n            frag,\n            part,\n            targetBufferTime\n          });\n          if (this.fragCurrent === null) {\n            return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING parts`));\n          }\n          return _result;\n        } else if (!frag.url || this.loadedEndOfParts(partList, targetBufferTime)) {\n          return Promise.resolve(null);\n        }\n      }\n    }\n    this.log(`Loading fragment ${frag.sn} cc: ${frag.cc} ${details ? \"of [\" + details.startSN + \"-\" + details.endSN + \"] \" : \"\"}${this.logPrefix === \"[stream-controller]\" ? \"level\" : \"track\"}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n    if (isFiniteNumber(frag.sn) && !this.bitrateTest) {\n      this.nextLoadPosition = frag.start + frag.duration;\n    }\n    this.state = State.FRAG_LOADING;\n    const dataOnProgress = this.config.progressive;\n    let result;\n    if (dataOnProgress && keyLoadingPromise) {\n      result = keyLoadingPromise.then((keyLoadedData) => {\n        if (!keyLoadedData || this.fragContextChanged(keyLoadedData == null ? void 0 : keyLoadedData.frag)) {\n          return null;\n        }\n        return this.fragmentLoader.load(frag, progressCallback);\n      }).catch((error) => this.handleFragLoadError(error));\n    } else {\n      result = Promise.all([this.fragmentLoader.load(frag, dataOnProgress ? progressCallback : void 0), keyLoadingPromise]).then(([fragLoadedData]) => {\n        if (!dataOnProgress && fragLoadedData && progressCallback) {\n          progressCallback(fragLoadedData);\n        }\n        return fragLoadedData;\n      }).catch((error) => this.handleFragLoadError(error));\n    }\n    this.hls.trigger(Events.FRAG_LOADING, {\n      frag,\n      targetBufferTime\n    });\n    if (this.fragCurrent === null) {\n      return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING`));\n    }\n    return result;\n  }\n  doFragPartsLoad(frag, fromPart, level, progressCallback) {\n    return new Promise((resolve, reject) => {\n      var _level$details;\n      const partsLoaded = [];\n      const initialPartList = (_level$details = level.details) == null ? void 0 : _level$details.partList;\n      const loadPart = (part) => {\n        this.fragmentLoader.loadPart(frag, part, progressCallback).then((partLoadedData) => {\n          partsLoaded[part.index] = partLoadedData;\n          const loadedPart = partLoadedData.part;\n          this.hls.trigger(Events.FRAG_LOADED, partLoadedData);\n          const nextPart = getPartWith(level, frag.sn, part.index + 1) || findPart(initialPartList, frag.sn, part.index + 1);\n          if (nextPart) {\n            loadPart(nextPart);\n          } else {\n            return resolve({\n              frag,\n              part: loadedPart,\n              partsLoaded\n            });\n          }\n        }).catch(reject);\n      };\n      loadPart(fromPart);\n    });\n  }\n  handleFragLoadError(error) {\n    if (\"data\" in error) {\n      const data = error.data;\n      if (error.data && data.details === ErrorDetails.INTERNAL_ABORTED) {\n        this.handleFragLoadAborted(data.frag, data.part);\n      } else {\n        this.hls.trigger(Events.ERROR, data);\n      }\n    } else {\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.OTHER_ERROR,\n        details: ErrorDetails.INTERNAL_EXCEPTION,\n        err: error,\n        error,\n        fatal: true\n      });\n    }\n    return null;\n  }\n  _handleTransmuxerFlush(chunkMeta) {\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context || this.state !== State.PARSING) {\n      if (!this.fragCurrent && this.state !== State.STOPPED && this.state !== State.ERROR) {\n        this.state = State.IDLE;\n      }\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const now2 = self.performance.now();\n    frag.stats.parsing.end = now2;\n    if (part) {\n      part.stats.parsing.end = now2;\n    }\n    this.updateLevelTiming(frag, part, level, chunkMeta.partial);\n  }\n  getCurrentContext(chunkMeta) {\n    const {\n      levels,\n      fragCurrent\n    } = this;\n    const {\n      level: levelIndex,\n      sn,\n      part: partIndex\n    } = chunkMeta;\n    if (!(levels != null && levels[levelIndex])) {\n      this.warn(`Levels object was unset while buffering fragment ${sn} of level ${levelIndex}. The current chunk will not be buffered.`);\n      return null;\n    }\n    const level = levels[levelIndex];\n    const part = partIndex > -1 ? getPartWith(level, sn, partIndex) : null;\n    const frag = part ? part.fragment : getFragmentWithSN(level, sn, fragCurrent);\n    if (!frag) {\n      return null;\n    }\n    if (fragCurrent && fragCurrent !== frag) {\n      frag.stats = fragCurrent.stats;\n    }\n    return {\n      frag,\n      part,\n      level\n    };\n  }\n  bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {\n    var _buffer;\n    if (!data || this.state !== State.PARSING) {\n      return;\n    }\n    const {\n      data1,\n      data2\n    } = data;\n    let buffer = data1;\n    if (data1 && data2) {\n      buffer = appendUint8Array(data1, data2);\n    }\n    if (!((_buffer = buffer) != null && _buffer.length)) {\n      return;\n    }\n    const segment = {\n      type: data.type,\n      frag,\n      part,\n      chunkMeta,\n      parent: frag.type,\n      data: buffer\n    };\n    this.hls.trigger(Events.BUFFER_APPENDING, segment);\n    if (data.dropped && data.independent && !part) {\n      if (noBacktracking) {\n        return;\n      }\n      this.flushBufferGap(frag);\n    }\n  }\n  flushBufferGap(frag) {\n    const media = this.media;\n    if (!media) {\n      return;\n    }\n    if (!BufferHelper.isBuffered(media, media.currentTime)) {\n      this.flushMainBuffer(0, frag.start);\n      return;\n    }\n    const currentTime = media.currentTime;\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const fragDuration = frag.duration;\n    const segmentFraction = Math.min(this.config.maxFragLookUpTolerance * 2, fragDuration * 0.25);\n    const start = Math.max(Math.min(frag.start - segmentFraction, bufferInfo.end - segmentFraction), currentTime + segmentFraction);\n    if (frag.start - start > segmentFraction) {\n      this.flushMainBuffer(start, frag.start);\n    }\n  }\n  getFwdBufferInfo(bufferable, type) {\n    const pos = this.getLoadPosition();\n    if (!isFiniteNumber(pos)) {\n      return null;\n    }\n    return this.getFwdBufferInfoAtPos(bufferable, pos, type);\n  }\n  getFwdBufferInfoAtPos(bufferable, pos, type) {\n    const {\n      config: {\n        maxBufferHole\n      }\n    } = this;\n    const bufferInfo = BufferHelper.bufferInfo(bufferable, pos, maxBufferHole);\n    if (bufferInfo.len === 0 && bufferInfo.nextStart !== void 0) {\n      const bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);\n      if (bufferedFragAtPos && bufferInfo.nextStart < bufferedFragAtPos.end) {\n        return BufferHelper.bufferInfo(bufferable, pos, Math.max(bufferInfo.nextStart, maxBufferHole));\n      }\n    }\n    return bufferInfo;\n  }\n  getMaxBufferLength(levelBitrate) {\n    const {\n      config\n    } = this;\n    let maxBufLen;\n    if (levelBitrate) {\n      maxBufLen = Math.max(8 * config.maxBufferSize / levelBitrate, config.maxBufferLength);\n    } else {\n      maxBufLen = config.maxBufferLength;\n    }\n    return Math.min(maxBufLen, config.maxMaxBufferLength);\n  }\n  reduceMaxBufferLength(threshold) {\n    const config = this.config;\n    const minLength = threshold || config.maxBufferLength;\n    if (config.maxMaxBufferLength >= minLength) {\n      config.maxMaxBufferLength /= 2;\n      this.warn(`Reduce max buffer length to ${config.maxMaxBufferLength}s`);\n      return true;\n    }\n    return false;\n  }\n  getAppendedFrag(position, playlistType = PlaylistLevelType.MAIN) {\n    const fragOrPart = this.fragmentTracker.getAppendedFrag(position, PlaylistLevelType.MAIN);\n    if (fragOrPart && \"fragment\" in fragOrPart) {\n      return fragOrPart.fragment;\n    }\n    return fragOrPart;\n  }\n  getNextFragment(pos, levelDetails) {\n    const fragments = levelDetails.fragments;\n    const fragLen = fragments.length;\n    if (!fragLen) {\n      return null;\n    }\n    const {\n      config\n    } = this;\n    const start = fragments[0].start;\n    let frag;\n    if (levelDetails.live) {\n      const initialLiveManifestSize = config.initialLiveManifestSize;\n      if (fragLen < initialLiveManifestSize) {\n        this.warn(`Not enough fragments to start playback (have: ${fragLen}, need: ${initialLiveManifestSize})`);\n        return null;\n      }\n      if (!levelDetails.PTSKnown && !this.startFragRequested && this.startPosition === -1 || pos < start) {\n        frag = this.getInitialLiveFragment(levelDetails, fragments);\n        this.startPosition = this.nextLoadPosition = frag ? this.hls.liveSyncPosition || frag.start : pos;\n      }\n    } else if (pos <= start) {\n      frag = fragments[0];\n    }\n    if (!frag) {\n      const end = config.lowLatencyMode ? levelDetails.partEnd : levelDetails.fragmentEnd;\n      frag = this.getFragmentAtPosition(pos, end, levelDetails);\n    }\n    return this.mapToInitFragWhenRequired(frag);\n  }\n  isLoopLoading(frag, targetBufferTime) {\n    const trackerState = this.fragmentTracker.getState(frag);\n    return (trackerState === FragmentState.OK || trackerState === FragmentState.PARTIAL && !!frag.gap) && this.nextLoadPosition > targetBufferTime;\n  }\n  getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, playlistType, maxBufLen) {\n    const gapStart = frag.gap;\n    const nextFragment = this.getNextFragment(this.nextLoadPosition, levelDetails);\n    if (nextFragment === null) {\n      return nextFragment;\n    }\n    frag = nextFragment;\n    if (gapStart && frag && !frag.gap && bufferInfo.nextStart) {\n      const nextbufferInfo = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, bufferInfo.nextStart, playlistType);\n      if (nextbufferInfo !== null && bufferInfo.len + nextbufferInfo.len >= maxBufLen) {\n        this.log(`buffer full after gaps in \"${playlistType}\" playlist starting at sn: ${frag.sn}`);\n        return null;\n      }\n    }\n    return frag;\n  }\n  mapToInitFragWhenRequired(frag) {\n    if (frag != null && frag.initSegment && !(frag != null && frag.initSegment.data) && !this.bitrateTest) {\n      return frag.initSegment;\n    }\n    return frag;\n  }\n  getNextPart(partList, frag, targetBufferTime) {\n    let nextPart = -1;\n    let contiguous = false;\n    let independentAttrOmitted = true;\n    for (let i = 0, len = partList.length; i < len; i++) {\n      const part = partList[i];\n      independentAttrOmitted = independentAttrOmitted && !part.independent;\n      if (nextPart > -1 && targetBufferTime < part.start) {\n        break;\n      }\n      const loaded = part.loaded;\n      if (loaded) {\n        nextPart = -1;\n      } else if ((contiguous || part.independent || independentAttrOmitted) && part.fragment === frag) {\n        nextPart = i;\n      }\n      contiguous = loaded;\n    }\n    return nextPart;\n  }\n  loadedEndOfParts(partList, targetBufferTime) {\n    const lastPart = partList[partList.length - 1];\n    return lastPart && targetBufferTime > lastPart.start && lastPart.loaded;\n  }\n  /*\n   This method is used find the best matching first fragment for a live playlist. This fragment is used to calculate the\n   \"sliding\" of the playlist, which is its offset from the start of playback. After sliding we can compute the real\n   start and end times for each fragment in the playlist (after which this method will not need to be called).\n  */\n  getInitialLiveFragment(levelDetails, fragments) {\n    const fragPrevious = this.fragPrevious;\n    let frag = null;\n    if (fragPrevious) {\n      if (levelDetails.hasProgramDateTime) {\n        this.log(`Live playlist, switching playlist, load frag with same PDT: ${fragPrevious.programDateTime}`);\n        frag = findFragmentByPDT(fragments, fragPrevious.endProgramDateTime, this.config.maxFragLookUpTolerance);\n      }\n      if (!frag) {\n        const targetSN = fragPrevious.sn + 1;\n        if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n          const fragNext = fragments[targetSN - levelDetails.startSN];\n          if (fragPrevious.cc === fragNext.cc) {\n            frag = fragNext;\n            this.log(`Live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n          }\n        }\n        if (!frag) {\n          frag = findFragWithCC(fragments, fragPrevious.cc);\n          if (frag) {\n            this.log(`Live playlist, switching playlist, load frag with same CC: ${frag.sn}`);\n          }\n        }\n      }\n    } else {\n      const liveStart = this.hls.liveSyncPosition;\n      if (liveStart !== null) {\n        frag = this.getFragmentAtPosition(liveStart, this.bitrateTest ? levelDetails.fragmentEnd : levelDetails.edge, levelDetails);\n      }\n    }\n    return frag;\n  }\n  /*\n  This method finds the best matching fragment given the provided position.\n   */\n  getFragmentAtPosition(bufferEnd, end, levelDetails) {\n    const {\n      config\n    } = this;\n    let {\n      fragPrevious\n    } = this;\n    let {\n      fragments,\n      endSN\n    } = levelDetails;\n    const {\n      fragmentHint\n    } = levelDetails;\n    const tolerance = config.maxFragLookUpTolerance;\n    const partList = levelDetails.partList;\n    const loadingParts = !!(config.lowLatencyMode && partList != null && partList.length && fragmentHint);\n    if (loadingParts && fragmentHint && !this.bitrateTest) {\n      fragments = fragments.concat(fragmentHint);\n      endSN = fragmentHint.sn;\n    }\n    let frag;\n    if (bufferEnd < end) {\n      const lookupTolerance = bufferEnd > end - tolerance ? 0 : tolerance;\n      frag = findFragmentByPTS(fragPrevious, fragments, bufferEnd, lookupTolerance);\n    } else {\n      frag = fragments[fragments.length - 1];\n    }\n    if (frag) {\n      const curSNIdx = frag.sn - levelDetails.startSN;\n      const fragState = this.fragmentTracker.getState(frag);\n      if (fragState === FragmentState.OK || fragState === FragmentState.PARTIAL && frag.gap) {\n        fragPrevious = frag;\n      }\n      if (fragPrevious && frag.sn === fragPrevious.sn && (!loadingParts || partList[0].fragment.sn > frag.sn)) {\n        const sameLevel = fragPrevious && frag.level === fragPrevious.level;\n        if (sameLevel) {\n          const nextFrag = fragments[curSNIdx + 1];\n          if (frag.sn < endSN && this.fragmentTracker.getState(nextFrag) !== FragmentState.OK) {\n            frag = nextFrag;\n          } else {\n            frag = null;\n          }\n        }\n      }\n    }\n    return frag;\n  }\n  synchronizeToLiveEdge(levelDetails) {\n    const {\n      config,\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const liveSyncPosition = this.hls.liveSyncPosition;\n    const currentTime = media.currentTime;\n    const start = levelDetails.fragments[0].start;\n    const end = levelDetails.edge;\n    const withinSlidingWindow = currentTime >= start - config.maxFragLookUpTolerance && currentTime <= end;\n    if (liveSyncPosition !== null && media.duration > liveSyncPosition && (currentTime < liveSyncPosition || !withinSlidingWindow)) {\n      const maxLatency = config.liveMaxLatencyDuration !== void 0 ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount * levelDetails.targetduration;\n      if (!withinSlidingWindow && media.readyState < 4 || currentTime < end - maxLatency) {\n        if (!this.loadedmetadata) {\n          this.nextLoadPosition = liveSyncPosition;\n        }\n        if (media.readyState) {\n          this.warn(`Playback: ${currentTime.toFixed(3)} is located too far from the end of live sliding playlist: ${end}, reset currentTime to : ${liveSyncPosition.toFixed(3)}`);\n          media.currentTime = liveSyncPosition;\n        }\n      }\n    }\n  }\n  alignPlaylists(details, previousDetails, switchDetails) {\n    const length = details.fragments.length;\n    if (!length) {\n      this.warn(`No fragments in live playlist`);\n      return 0;\n    }\n    const slidingStart = details.fragments[0].start;\n    const firstLevelLoad = !previousDetails;\n    const aligned = details.alignedSliding && isFiniteNumber(slidingStart);\n    if (firstLevelLoad || !aligned && !slidingStart) {\n      const {\n        fragPrevious\n      } = this;\n      alignStream(fragPrevious, switchDetails, details);\n      const alignedSlidingStart = details.fragments[0].start;\n      this.log(`Live playlist sliding: ${alignedSlidingStart.toFixed(2)} start-sn: ${previousDetails ? previousDetails.startSN : \"na\"}->${details.startSN} prev-sn: ${fragPrevious ? fragPrevious.sn : \"na\"} fragments: ${length}`);\n      return alignedSlidingStart;\n    }\n    return slidingStart;\n  }\n  waitForCdnTuneIn(details) {\n    const advancePartLimit = 3;\n    return details.live && details.canBlockReload && details.partTarget && details.tuneInGoal > Math.max(details.partHoldBack, details.partTarget * advancePartLimit);\n  }\n  setStartPosition(details, sliding) {\n    let startPosition = this.startPosition;\n    if (startPosition < sliding) {\n      startPosition = -1;\n    }\n    if (startPosition === -1 || this.lastCurrentTime === -1) {\n      const offsetInMultivariantPlaylist = this.startTimeOffset !== null;\n      const startTimeOffset = offsetInMultivariantPlaylist ? this.startTimeOffset : details.startTimeOffset;\n      if (startTimeOffset !== null && isFiniteNumber(startTimeOffset)) {\n        startPosition = sliding + startTimeOffset;\n        if (startTimeOffset < 0) {\n          startPosition += details.totalduration;\n        }\n        startPosition = Math.min(Math.max(sliding, startPosition), sliding + details.totalduration);\n        this.log(`Start time offset ${startTimeOffset} found in ${offsetInMultivariantPlaylist ? \"multivariant\" : \"media\"} playlist, adjust startPosition to ${startPosition}`);\n        this.startPosition = startPosition;\n      } else if (details.live) {\n        startPosition = this.hls.liveSyncPosition || sliding;\n      } else {\n        this.startPosition = startPosition = 0;\n      }\n      this.lastCurrentTime = startPosition;\n    }\n    this.nextLoadPosition = startPosition;\n  }\n  getLoadPosition() {\n    const {\n      media\n    } = this;\n    let pos = 0;\n    if (this.loadedmetadata && media) {\n      pos = media.currentTime;\n    } else if (this.nextLoadPosition) {\n      pos = this.nextLoadPosition;\n    }\n    return pos;\n  }\n  handleFragLoadAborted(frag, part) {\n    if (this.transmuxer && frag.sn !== \"initSegment\" && frag.stats.aborted) {\n      this.warn(`Fragment ${frag.sn}${part ? \" part \" + part.index : \"\"} of level ${frag.level} was aborted`);\n      this.resetFragmentLoading(frag);\n    }\n  }\n  resetFragmentLoading(frag) {\n    if (!this.fragCurrent || !this.fragContextChanged(frag) && this.state !== State.FRAG_LOADING_WAITING_RETRY) {\n      this.state = State.IDLE;\n    }\n  }\n  onFragmentOrKeyLoadError(filterType, data) {\n    if (data.chunkMeta && !data.frag) {\n      const context = this.getCurrentContext(data.chunkMeta);\n      if (context) {\n        data.frag = context.frag;\n      }\n    }\n    const frag = data.frag;\n    if (!frag || frag.type !== filterType || !this.levels) {\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      var _this$fragCurrent2;\n      this.warn(`Frag load error must match current frag to retry ${frag.url} > ${(_this$fragCurrent2 = this.fragCurrent) == null ? void 0 : _this$fragCurrent2.url}`);\n      return;\n    }\n    const gapTagEncountered = data.details === ErrorDetails.FRAG_GAP;\n    if (gapTagEncountered) {\n      this.fragmentTracker.fragBuffered(frag, true);\n    }\n    const errorAction = data.errorAction;\n    const {\n      action,\n      retryCount = 0,\n      retryConfig\n    } = errorAction || {};\n    if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {\n      this.resetStartWhenNotLoaded(this.levelLastLoaded);\n      const delay = getRetryDelay(retryConfig, retryCount);\n      this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);\n      errorAction.resolved = true;\n      this.retryDate = self.performance.now() + delay;\n      this.state = State.FRAG_LOADING_WAITING_RETRY;\n    } else if (retryConfig && errorAction) {\n      this.resetFragmentErrors(filterType);\n      if (retryCount < retryConfig.maxNumRetry) {\n        if (!gapTagEncountered && action !== NetworkErrorAction.RemoveAlternatePermanently) {\n          errorAction.resolved = true;\n        }\n      } else {\n        logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);\n        return;\n      }\n    } else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {\n      this.state = State.WAITING_LEVEL;\n    } else {\n      this.state = State.ERROR;\n    }\n    this.tickImmediate();\n  }\n  reduceLengthAndFlushBuffer(data) {\n    if (this.state === State.PARSING || this.state === State.PARSED) {\n      const playlistType = data.parent;\n      const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n      const buffered = bufferedInfo && bufferedInfo.len > 0.5;\n      if (buffered) {\n        this.reduceMaxBufferLength(bufferedInfo.len);\n      }\n      const flushBuffer = !buffered;\n      if (flushBuffer) {\n        this.warn(`Buffer full error while media.currentTime is not buffered, flush ${playlistType} buffer`);\n      }\n      if (data.frag) {\n        this.fragmentTracker.removeFragment(data.frag);\n        this.nextLoadPosition = data.frag.start;\n      }\n      this.resetLoadingState();\n      return flushBuffer;\n    }\n    return false;\n  }\n  resetFragmentErrors(filterType) {\n    if (filterType === PlaylistLevelType.AUDIO) {\n      this.fragCurrent = null;\n    }\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n    }\n    if (this.state !== State.STOPPED) {\n      this.state = State.IDLE;\n    }\n  }\n  afterBufferFlushed(media, bufferType, playlistType) {\n    if (!media) {\n      return;\n    }\n    const bufferedTimeRanges = BufferHelper.getBuffered(media);\n    this.fragmentTracker.detectEvictedFragments(bufferType, bufferedTimeRanges, playlistType);\n    if (this.state === State.ENDED) {\n      this.resetLoadingState();\n    }\n  }\n  resetLoadingState() {\n    this.log(\"Reset loading state\");\n    this.fragCurrent = null;\n    this.fragPrevious = null;\n    this.state = State.IDLE;\n  }\n  resetStartWhenNotLoaded(level) {\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n      const details = level ? level.details : null;\n      if (details != null && details.live) {\n        this.startPosition = -1;\n        this.setStartPosition(details, 0);\n        this.resetLoadingState();\n      } else {\n        this.nextLoadPosition = this.startPosition;\n      }\n    }\n  }\n  resetWhenMissingContext(chunkMeta) {\n    this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);\n    this.removeUnbufferedFrags();\n    this.resetStartWhenNotLoaded(this.levelLastLoaded);\n    this.resetLoadingState();\n  }\n  removeUnbufferedFrags(start = 0) {\n    this.fragmentTracker.removeFragmentsInRange(start, Infinity, this.playlistType, false, true);\n  }\n  updateLevelTiming(frag, part, level, partial) {\n    var _this$transmuxer;\n    const details = level.details;\n    if (!details) {\n      this.warn(\"level.details undefined\");\n      return;\n    }\n    const parsed = Object.keys(frag.elementaryStreams).reduce((result, type) => {\n      const info = frag.elementaryStreams[type];\n      if (info) {\n        const parsedDuration = info.endPTS - info.startPTS;\n        if (parsedDuration <= 0) {\n          this.warn(`Could not parse fragment ${frag.sn} ${type} duration reliably (${parsedDuration})`);\n          return result || false;\n        }\n        const drift = partial ? 0 : updateFragPTSDTS(details, frag, info.startPTS, info.endPTS, info.startDTS, info.endDTS);\n        this.hls.trigger(Events.LEVEL_PTS_UPDATED, {\n          details,\n          level,\n          drift,\n          type,\n          frag,\n          start: info.startPTS,\n          end: info.endPTS\n        });\n        return true;\n      }\n      return result;\n    }, false);\n    if (!parsed && ((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {\n      const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);\n      if (level.fragmentError === 0) {\n        level.fragmentError++;\n        frag.gap = true;\n        this.fragmentTracker.removeFragment(frag);\n        this.fragmentTracker.fragBuffered(frag, true);\n      }\n      this.warn(error.message);\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.FRAG_PARSING_ERROR,\n        fatal: false,\n        error,\n        frag,\n        reason: `Found no media in msn ${frag.sn} of level \"${level.url}\"`\n      });\n      if (!this.hls) {\n        return;\n      }\n      this.resetTransmuxer();\n    }\n    this.state = State.PARSED;\n    this.hls.trigger(Events.FRAG_PARSED, {\n      frag,\n      part\n    });\n  }\n  resetTransmuxer() {\n    if (this.transmuxer) {\n      this.transmuxer.destroy();\n      this.transmuxer = null;\n    }\n  }\n  recoverWorkerError(data) {\n    if (data.event === \"demuxerWorker\") {\n      this.fragmentTracker.removeAllFragments();\n      this.resetTransmuxer();\n      this.resetStartWhenNotLoaded(this.levelLastLoaded);\n      this.resetLoadingState();\n    }\n  }\n  set state(nextState) {\n    const previousState = this._state;\n    if (previousState !== nextState) {\n      this._state = nextState;\n      this.log(`${previousState}->${nextState}`);\n    }\n  }\n  get state() {\n    return this._state;\n  }\n}\nclass ChunkCache {\n  constructor() {\n    this.chunks = [];\n    this.dataLength = 0;\n  }\n  push(chunk) {\n    this.chunks.push(chunk);\n    this.dataLength += chunk.length;\n  }\n  flush() {\n    const {\n      chunks,\n      dataLength\n    } = this;\n    let result;\n    if (!chunks.length) {\n      return new Uint8Array(0);\n    } else if (chunks.length === 1) {\n      result = chunks[0];\n    } else {\n      result = concatUint8Arrays(chunks, dataLength);\n    }\n    this.reset();\n    return result;\n  }\n  reset() {\n    this.chunks.length = 0;\n    this.dataLength = 0;\n  }\n}\nfunction concatUint8Arrays(chunks, dataLength) {\n  const result = new Uint8Array(dataLength);\n  let offset = 0;\n  for (let i = 0; i < chunks.length; i++) {\n    const chunk = chunks[i];\n    result.set(chunk, offset);\n    offset += chunk.length;\n  }\n  return result;\n}\nfunction hasUMDWorker() {\n  return typeof __HLS_WORKER_BUNDLE__ === \"function\";\n}\nfunction injectWorker() {\n  const blob = new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`], {\n    type: \"text/javascript\"\n  });\n  const objectURL = self.URL.createObjectURL(blob);\n  const worker = new self.Worker(objectURL);\n  return {\n    worker,\n    objectURL\n  };\n}\nfunction loadWorker(path) {\n  const scriptURL = new self.URL(path, self.location.href).href;\n  const worker = new self.Worker(scriptURL);\n  return {\n    worker,\n    scriptURL\n  };\n}\nfunction dummyTrack(type = \"\", inputTimeScale = 9e4) {\n  return {\n    type,\n    id: -1,\n    pid: -1,\n    inputTimeScale,\n    sequenceNumber: -1,\n    samples: [],\n    dropped: 0\n  };\n}\nclass BaseAudioDemuxer {\n  constructor() {\n    this._audioTrack = void 0;\n    this._id3Track = void 0;\n    this.frameIndex = 0;\n    this.cachedData = null;\n    this.basePTS = null;\n    this.initPTS = null;\n    this.lastPTS = null;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    this._id3Track = {\n      type: \"id3\",\n      id: 3,\n      pid: -1,\n      inputTimeScale: 9e4,\n      sequenceNumber: 0,\n      samples: [],\n      dropped: 0\n    };\n  }\n  resetTimeStamp(deaultTimestamp) {\n    this.initPTS = deaultTimestamp;\n    this.resetContiguity();\n  }\n  resetContiguity() {\n    this.basePTS = null;\n    this.lastPTS = null;\n    this.frameIndex = 0;\n  }\n  canParse(data, offset) {\n    return false;\n  }\n  appendFrame(track, data, offset) {\n  }\n  // feed incoming data to the front of the parsing pipeline\n  demux(data, timeOffset) {\n    if (this.cachedData) {\n      data = appendUint8Array(this.cachedData, data);\n      this.cachedData = null;\n    }\n    let id3Data = getID3Data(data, 0);\n    let offset = id3Data ? id3Data.length : 0;\n    let lastDataIndex;\n    const track = this._audioTrack;\n    const id3Track = this._id3Track;\n    const timestamp = id3Data ? getTimeStamp(id3Data) : void 0;\n    const length = data.length;\n    if (this.basePTS === null || this.frameIndex === 0 && isFiniteNumber(timestamp)) {\n      this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);\n      this.lastPTS = this.basePTS;\n    }\n    if (this.lastPTS === null) {\n      this.lastPTS = this.basePTS;\n    }\n    if (id3Data && id3Data.length > 0) {\n      id3Track.samples.push({\n        pts: this.lastPTS,\n        dts: this.lastPTS,\n        data: id3Data,\n        type: MetadataSchema.audioId3,\n        duration: Number.POSITIVE_INFINITY\n      });\n    }\n    while (offset < length) {\n      if (this.canParse(data, offset)) {\n        const frame = this.appendFrame(track, data, offset);\n        if (frame) {\n          this.frameIndex++;\n          this.lastPTS = frame.sample.pts;\n          offset += frame.length;\n          lastDataIndex = offset;\n        } else {\n          offset = length;\n        }\n      } else if (canParse$2(data, offset)) {\n        id3Data = getID3Data(data, offset);\n        id3Track.samples.push({\n          pts: this.lastPTS,\n          dts: this.lastPTS,\n          data: id3Data,\n          type: MetadataSchema.audioId3,\n          duration: Number.POSITIVE_INFINITY\n        });\n        offset += id3Data.length;\n        lastDataIndex = offset;\n      } else {\n        offset++;\n      }\n      if (offset === length && lastDataIndex !== length) {\n        const partialData = sliceUint8(data, lastDataIndex);\n        if (this.cachedData) {\n          this.cachedData = appendUint8Array(this.cachedData, partialData);\n        } else {\n          this.cachedData = partialData;\n        }\n      }\n    }\n    return {\n      audioTrack: track,\n      videoTrack: dummyTrack(),\n      id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`));\n  }\n  flush(timeOffset) {\n    const cachedData = this.cachedData;\n    if (cachedData) {\n      this.cachedData = null;\n      this.demux(cachedData, 0);\n    }\n    return {\n      audioTrack: this._audioTrack,\n      videoTrack: dummyTrack(),\n      id3Track: this._id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  destroy() {\n  }\n}\nconst initPTSFn = (timestamp, timeOffset, initPTS) => {\n  if (isFiniteNumber(timestamp)) {\n    return timestamp * 90;\n  }\n  const init90kHz = initPTS ? initPTS.baseTime * 9e4 / initPTS.timescale : 0;\n  return timeOffset * 9e4 + init90kHz;\n};\nfunction getAudioConfig(observer, data, offset, audioCodec) {\n  let adtsObjectType;\n  let adtsExtensionSamplingIndex;\n  let adtsChannelConfig;\n  let config;\n  const userAgent = navigator.userAgent.toLowerCase();\n  const manifestCodec = audioCodec;\n  const adtsSamplingRates = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];\n  adtsObjectType = ((data[offset + 2] & 192) >>> 6) + 1;\n  const adtsSamplingIndex = (data[offset + 2] & 60) >>> 2;\n  if (adtsSamplingIndex > adtsSamplingRates.length - 1) {\n    const error = new Error(`invalid ADTS sampling index:${adtsSamplingIndex}`);\n    observer.emit(Events.ERROR, Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.FRAG_PARSING_ERROR,\n      fatal: true,\n      error,\n      reason: error.message\n    });\n    return;\n  }\n  adtsChannelConfig = (data[offset + 2] & 1) << 2;\n  adtsChannelConfig |= (data[offset + 3] & 192) >>> 6;\n  logger.log(`manifest codec:${audioCodec}, ADTS type:${adtsObjectType}, samplingIndex:${adtsSamplingIndex}`);\n  if (/firefox/i.test(userAgent)) {\n    if (adtsSamplingIndex >= 6) {\n      adtsObjectType = 5;\n      config = new Array(4);\n      adtsExtensionSamplingIndex = adtsSamplingIndex - 3;\n    } else {\n      adtsObjectType = 2;\n      config = new Array(2);\n      adtsExtensionSamplingIndex = adtsSamplingIndex;\n    }\n  } else if (userAgent.indexOf(\"android\") !== -1) {\n    adtsObjectType = 2;\n    config = new Array(2);\n    adtsExtensionSamplingIndex = adtsSamplingIndex;\n  } else {\n    adtsObjectType = 5;\n    config = new Array(4);\n    if (audioCodec && (audioCodec.indexOf(\"mp4a.40.29\") !== -1 || audioCodec.indexOf(\"mp4a.40.5\") !== -1) || !audioCodec && adtsSamplingIndex >= 6) {\n      adtsExtensionSamplingIndex = adtsSamplingIndex - 3;\n    } else {\n      if (audioCodec && audioCodec.indexOf(\"mp4a.40.2\") !== -1 && (adtsSamplingIndex >= 6 && adtsChannelConfig === 1 || /vivaldi/i.test(userAgent)) || !audioCodec && adtsChannelConfig === 1) {\n        adtsObjectType = 2;\n        config = new Array(2);\n      }\n      adtsExtensionSamplingIndex = adtsSamplingIndex;\n    }\n  }\n  config[0] = adtsObjectType << 3;\n  config[0] |= (adtsSamplingIndex & 14) >> 1;\n  config[1] |= (adtsSamplingIndex & 1) << 7;\n  config[1] |= adtsChannelConfig << 3;\n  if (adtsObjectType === 5) {\n    config[1] |= (adtsExtensionSamplingIndex & 14) >> 1;\n    config[2] = (adtsExtensionSamplingIndex & 1) << 7;\n    config[2] |= 2 << 2;\n    config[3] = 0;\n  }\n  return {\n    config,\n    samplerate: adtsSamplingRates[adtsSamplingIndex],\n    channelCount: adtsChannelConfig,\n    codec: \"mp4a.40.\" + adtsObjectType,\n    manifestCodec\n  };\n}\nfunction isHeaderPattern$1(data, offset) {\n  return data[offset] === 255 && (data[offset + 1] & 246) === 240;\n}\nfunction getHeaderLength(data, offset) {\n  return data[offset + 1] & 1 ? 7 : 9;\n}\nfunction getFullFrameLength(data, offset) {\n  return (data[offset + 3] & 3) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 224) >>> 5;\n}\nfunction canGetFrameLength(data, offset) {\n  return offset + 5 < data.length;\n}\nfunction isHeader$1(data, offset) {\n  return offset + 1 < data.length && isHeaderPattern$1(data, offset);\n}\nfunction canParse$1(data, offset) {\n  return canGetFrameLength(data, offset) && isHeaderPattern$1(data, offset) && getFullFrameLength(data, offset) <= data.length - offset;\n}\nfunction probe$1(data, offset) {\n  if (isHeader$1(data, offset)) {\n    const headerLength = getHeaderLength(data, offset);\n    if (offset + headerLength >= data.length) {\n      return false;\n    }\n    const frameLength = getFullFrameLength(data, offset);\n    if (frameLength <= headerLength) {\n      return false;\n    }\n    const newOffset = offset + frameLength;\n    return newOffset === data.length || isHeader$1(data, newOffset);\n  }\n  return false;\n}\nfunction initTrackConfig(track, observer, data, offset, audioCodec) {\n  if (!track.samplerate) {\n    const config = getAudioConfig(observer, data, offset, audioCodec);\n    if (!config) {\n      return;\n    }\n    track.config = config.config;\n    track.samplerate = config.samplerate;\n    track.channelCount = config.channelCount;\n    track.codec = config.codec;\n    track.manifestCodec = config.manifestCodec;\n    logger.log(`parsed codec:${track.codec}, rate:${config.samplerate}, channels:${config.channelCount}`);\n  }\n}\nfunction getFrameDuration(samplerate) {\n  return 1024 * 9e4 / samplerate;\n}\nfunction parseFrameHeader(data, offset) {\n  const headerLength = getHeaderLength(data, offset);\n  if (offset + headerLength <= data.length) {\n    const frameLength = getFullFrameLength(data, offset) - headerLength;\n    if (frameLength > 0) {\n      return {\n        headerLength,\n        frameLength\n      };\n    }\n  }\n}\nfunction appendFrame$2(track, data, offset, pts, frameIndex) {\n  const frameDuration = getFrameDuration(track.samplerate);\n  const stamp = pts + frameIndex * frameDuration;\n  const header = parseFrameHeader(data, offset);\n  let unit;\n  if (header) {\n    const {\n      frameLength,\n      headerLength\n    } = header;\n    const _length = headerLength + frameLength;\n    const missing = Math.max(0, offset + _length - data.length);\n    if (missing) {\n      unit = new Uint8Array(_length - headerLength);\n      unit.set(data.subarray(offset + headerLength, data.length), 0);\n    } else {\n      unit = data.subarray(offset + headerLength, offset + _length);\n    }\n    const _sample = {\n      unit,\n      pts: stamp\n    };\n    if (!missing) {\n      track.samples.push(_sample);\n    }\n    return {\n      sample: _sample,\n      length: _length,\n      missing\n    };\n  }\n  const length = data.length - offset;\n  unit = new Uint8Array(length);\n  unit.set(data.subarray(offset, data.length), 0);\n  const sample = {\n    unit,\n    pts: stamp\n  };\n  return {\n    sample,\n    length,\n    missing: -1\n  };\n}\nlet chromeVersion$1 = null;\nconst BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];\nconst SamplingRateMap = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3];\nconst SamplesCoefficients = [\n  // MPEG 2.5\n  [\n    0,\n    // Reserved\n    72,\n    // Layer3\n    144,\n    // Layer2\n    12\n    // Layer1\n  ],\n  // Reserved\n  [\n    0,\n    // Reserved\n    0,\n    // Layer3\n    0,\n    // Layer2\n    0\n    // Layer1\n  ],\n  // MPEG 2\n  [\n    0,\n    // Reserved\n    72,\n    // Layer3\n    144,\n    // Layer2\n    12\n    // Layer1\n  ],\n  // MPEG 1\n  [\n    0,\n    // Reserved\n    144,\n    // Layer3\n    144,\n    // Layer2\n    12\n    // Layer1\n  ]\n];\nconst BytesInSlot = [\n  0,\n  // Reserved\n  1,\n  // Layer3\n  1,\n  // Layer2\n  4\n  // Layer1\n];\nfunction appendFrame$1(track, data, offset, pts, frameIndex) {\n  if (offset + 24 > data.length) {\n    return;\n  }\n  const header = parseHeader(data, offset);\n  if (header && offset + header.frameLength <= data.length) {\n    const frameDuration = header.samplesPerFrame * 9e4 / header.sampleRate;\n    const stamp = pts + frameIndex * frameDuration;\n    const sample = {\n      unit: data.subarray(offset, offset + header.frameLength),\n      pts: stamp,\n      dts: stamp\n    };\n    track.config = [];\n    track.channelCount = header.channelCount;\n    track.samplerate = header.sampleRate;\n    track.samples.push(sample);\n    return {\n      sample,\n      length: header.frameLength,\n      missing: 0\n    };\n  }\n}\nfunction parseHeader(data, offset) {\n  const mpegVersion = data[offset + 1] >> 3 & 3;\n  const mpegLayer = data[offset + 1] >> 1 & 3;\n  const bitRateIndex = data[offset + 2] >> 4 & 15;\n  const sampleRateIndex = data[offset + 2] >> 2 & 3;\n  if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {\n    const paddingBit = data[offset + 2] >> 1 & 1;\n    const channelMode = data[offset + 3] >> 6;\n    const columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;\n    const bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1e3;\n    const columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;\n    const sampleRate = SamplingRateMap[columnInSampleRates * 3 + sampleRateIndex];\n    const channelCount = channelMode === 3 ? 1 : 2;\n    const sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];\n    const bytesInSlot = BytesInSlot[mpegLayer];\n    const samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;\n    const frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;\n    if (chromeVersion$1 === null) {\n      const userAgent = navigator.userAgent || \"\";\n      const result = userAgent.match(/Chrome\\/(\\d+)/i);\n      chromeVersion$1 = result ? parseInt(result[1]) : 0;\n    }\n    const needChromeFix = !!chromeVersion$1 && chromeVersion$1 <= 87;\n    if (needChromeFix && mpegLayer === 2 && bitRate >= 224e3 && channelMode === 0) {\n      data[offset + 3] = data[offset + 3] | 128;\n    }\n    return {\n      sampleRate,\n      channelCount,\n      frameLength,\n      samplesPerFrame\n    };\n  }\n}\nfunction isHeaderPattern(data, offset) {\n  return data[offset] === 255 && (data[offset + 1] & 224) === 224 && (data[offset + 1] & 6) !== 0;\n}\nfunction isHeader(data, offset) {\n  return offset + 1 < data.length && isHeaderPattern(data, offset);\n}\nfunction canParse(data, offset) {\n  const headerSize = 4;\n  return isHeaderPattern(data, offset) && headerSize <= data.length - offset;\n}\nfunction probe(data, offset) {\n  if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n    const headerLength = 4;\n    const header = parseHeader(data, offset);\n    let frameLength = headerLength;\n    if (header != null && header.frameLength) {\n      frameLength = header.frameLength;\n    }\n    const newOffset = offset + frameLength;\n    return newOffset === data.length || isHeader(data, newOffset);\n  }\n  return false;\n}\nclass AACDemuxer extends BaseAudioDemuxer {\n  constructor(observer, config) {\n    super();\n    this.observer = void 0;\n    this.config = void 0;\n    this.observer = observer;\n    this.config = config;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: \"audio/adts\",\n      type: \"audio\",\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: \"aac\",\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 9e4,\n      dropped: 0\n    };\n  }\n  // Source for probe info - https://wiki.multimedia.cx/index.php?title=ADTS\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n    if (probe(data, offset)) {\n      return false;\n    }\n    for (let length = data.length; offset < length; offset++) {\n      if (probe$1(data, offset)) {\n        logger.log(\"ADTS sync word found !\");\n        return true;\n      }\n    }\n    return false;\n  }\n  canParse(data, offset) {\n    return canParse$1(data, offset);\n  }\n  appendFrame(track, data, offset) {\n    initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n    const frame = appendFrame$2(track, data, offset, this.basePTS, this.frameIndex);\n    if (frame && frame.missing === 0) {\n      return frame;\n    }\n  }\n}\nconst emsgSchemePattern = /\\/emsg[-/]ID3/i;\nclass MP4Demuxer {\n  constructor(observer, config) {\n    this.remainderData = null;\n    this.timeOffset = 0;\n    this.config = void 0;\n    this.videoTrack = void 0;\n    this.audioTrack = void 0;\n    this.id3Track = void 0;\n    this.txtTrack = void 0;\n    this.config = config;\n  }\n  resetTimeStamp() {\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    const videoTrack = this.videoTrack = dummyTrack(\"video\", 1);\n    const audioTrack = this.audioTrack = dummyTrack(\"audio\", 1);\n    const captionTrack = this.txtTrack = dummyTrack(\"text\", 1);\n    this.id3Track = dummyTrack(\"id3\", 1);\n    this.timeOffset = 0;\n    if (!(initSegment != null && initSegment.byteLength)) {\n      return;\n    }\n    const initData = parseInitSegment(initSegment);\n    if (initData.video) {\n      const {\n        id,\n        timescale,\n        codec\n      } = initData.video;\n      videoTrack.id = id;\n      videoTrack.timescale = captionTrack.timescale = timescale;\n      videoTrack.codec = codec;\n    }\n    if (initData.audio) {\n      const {\n        id,\n        timescale,\n        codec\n      } = initData.audio;\n      audioTrack.id = id;\n      audioTrack.timescale = timescale;\n      audioTrack.codec = codec;\n    }\n    captionTrack.id = RemuxerTrackIdConfig.text;\n    videoTrack.sampleDuration = 0;\n    videoTrack.duration = audioTrack.duration = trackDuration;\n  }\n  resetContiguity() {\n    this.remainderData = null;\n  }\n  static probe(data) {\n    return hasMoofData(data);\n  }\n  demux(data, timeOffset) {\n    this.timeOffset = timeOffset;\n    let videoSamples = data;\n    const videoTrack = this.videoTrack;\n    const textTrack = this.txtTrack;\n    if (this.config.progressive) {\n      if (this.remainderData) {\n        videoSamples = appendUint8Array(this.remainderData, data);\n      }\n      const segmentedData = segmentValidRange(videoSamples);\n      this.remainderData = segmentedData.remainder;\n      videoTrack.samples = segmentedData.valid || new Uint8Array();\n    } else {\n      videoTrack.samples = videoSamples;\n    }\n    const id3Track = this.extractID3Track(videoTrack, timeOffset);\n    textTrack.samples = parseSamples(timeOffset, videoTrack);\n    return {\n      videoTrack,\n      audioTrack: this.audioTrack,\n      id3Track,\n      textTrack: this.txtTrack\n    };\n  }\n  flush() {\n    const timeOffset = this.timeOffset;\n    const videoTrack = this.videoTrack;\n    const textTrack = this.txtTrack;\n    videoTrack.samples = this.remainderData || new Uint8Array();\n    this.remainderData = null;\n    const id3Track = this.extractID3Track(videoTrack, this.timeOffset);\n    textTrack.samples = parseSamples(timeOffset, videoTrack);\n    return {\n      videoTrack,\n      audioTrack: dummyTrack(),\n      id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  extractID3Track(videoTrack, timeOffset) {\n    const id3Track = this.id3Track;\n    if (videoTrack.samples.length) {\n      const emsgs = findBox(videoTrack.samples, [\"emsg\"]);\n      if (emsgs) {\n        emsgs.forEach((data) => {\n          const emsgInfo = parseEmsg(data);\n          if (emsgSchemePattern.test(emsgInfo.schemeIdUri)) {\n            const pts = isFiniteNumber(emsgInfo.presentationTime) ? emsgInfo.presentationTime / emsgInfo.timeScale : timeOffset + emsgInfo.presentationTimeDelta / emsgInfo.timeScale;\n            let duration = emsgInfo.eventDuration === 4294967295 ? Number.POSITIVE_INFINITY : emsgInfo.eventDuration / emsgInfo.timeScale;\n            if (duration <= 1e-3) {\n              duration = Number.POSITIVE_INFINITY;\n            }\n            const payload = emsgInfo.payload;\n            id3Track.samples.push({\n              data: payload,\n              len: payload.byteLength,\n              dts: pts,\n              pts,\n              type: MetadataSchema.emsg,\n              duration\n            });\n          }\n        });\n      }\n    }\n    return id3Track;\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    return Promise.reject(new Error(\"The MP4 demuxer does not support SAMPLE-AES decryption\"));\n  }\n  destroy() {\n  }\n}\nconst getAudioBSID = (data, offset) => {\n  let bsid = 0;\n  let numBits = 5;\n  offset += numBits;\n  const temp = new Uint32Array(1);\n  const mask = new Uint32Array(1);\n  const byte = new Uint8Array(1);\n  while (numBits > 0) {\n    byte[0] = data[offset];\n    const bits = Math.min(numBits, 8);\n    const shift = 8 - bits;\n    mask[0] = 4278190080 >>> 24 + shift << shift;\n    temp[0] = (byte[0] & mask[0]) >> shift;\n    bsid = !bsid ? temp[0] : bsid << bits | temp[0];\n    offset += 1;\n    numBits -= bits;\n  }\n  return bsid;\n};\nclass AC3Demuxer extends BaseAudioDemuxer {\n  constructor(observer) {\n    super();\n    this.observer = void 0;\n    this.observer = observer;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: \"audio/ac-3\",\n      type: \"audio\",\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: \"ac3\",\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 9e4,\n      dropped: 0\n    };\n  }\n  canParse(data, offset) {\n    return offset + 64 < data.length;\n  }\n  appendFrame(track, data, offset) {\n    const frameLength = appendFrame(track, data, offset, this.basePTS, this.frameIndex);\n    if (frameLength !== -1) {\n      const sample = track.samples[track.samples.length - 1];\n      return {\n        sample,\n        length: frameLength,\n        missing: 0\n      };\n    }\n  }\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    if (!id3Data) {\n      return false;\n    }\n    const offset = id3Data.length;\n    if (data[offset] === 11 && data[offset + 1] === 119 && getTimeStamp(id3Data) !== void 0 && // check the bsid to confirm ac-3\n    getAudioBSID(data, offset) < 16) {\n      return true;\n    }\n    return false;\n  }\n}\nfunction appendFrame(track, data, start, pts, frameIndex) {\n  if (start + 8 > data.length) {\n    return -1;\n  }\n  if (data[start] !== 11 || data[start + 1] !== 119) {\n    return -1;\n  }\n  const samplingRateCode = data[start + 4] >> 6;\n  if (samplingRateCode >= 3) {\n    return -1;\n  }\n  const samplingRateMap = [48e3, 44100, 32e3];\n  const sampleRate = samplingRateMap[samplingRateCode];\n  const frameSizeCode = data[start + 4] & 63;\n  const frameSizeMap = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920];\n  const frameLength = frameSizeMap[frameSizeCode * 3 + samplingRateCode] * 2;\n  if (start + frameLength > data.length) {\n    return -1;\n  }\n  const channelMode = data[start + 6] >> 5;\n  let skipCount = 0;\n  if (channelMode === 2) {\n    skipCount += 2;\n  } else {\n    if (channelMode & 1 && channelMode !== 1) {\n      skipCount += 2;\n    }\n    if (channelMode & 4) {\n      skipCount += 2;\n    }\n  }\n  const lfeon = (data[start + 6] << 8 | data[start + 7]) >> 12 - skipCount & 1;\n  const channelsMap = [2, 1, 2, 3, 3, 4, 4, 5];\n  const channelCount = channelsMap[channelMode] + lfeon;\n  const bsid = data[start + 5] >> 3;\n  const bsmod = data[start + 5] & 7;\n  const config = new Uint8Array([samplingRateCode << 6 | bsid << 1 | bsmod >> 2, (bsmod & 3) << 6 | channelMode << 3 | lfeon << 2 | frameSizeCode >> 4, frameSizeCode << 4 & 224]);\n  const frameDuration = 1536 / sampleRate * 9e4;\n  const stamp = pts + frameIndex * frameDuration;\n  const unit = data.subarray(start, start + frameLength);\n  track.config = config;\n  track.channelCount = channelCount;\n  track.samplerate = sampleRate;\n  track.samples.push({\n    unit,\n    pts: stamp\n  });\n  return frameLength;\n}\nclass BaseVideoParser {\n  constructor() {\n    this.VideoSample = null;\n  }\n  createVideoSample(key, pts, dts, debug) {\n    return {\n      key,\n      frame: false,\n      pts,\n      dts,\n      units: [],\n      debug,\n      length: 0\n    };\n  }\n  getLastNalUnit(samples) {\n    var _VideoSample;\n    let VideoSample = this.VideoSample;\n    let lastUnit;\n    if (!VideoSample || VideoSample.units.length === 0) {\n      VideoSample = samples[samples.length - 1];\n    }\n    if ((_VideoSample = VideoSample) != null && _VideoSample.units) {\n      const units = VideoSample.units;\n      lastUnit = units[units.length - 1];\n    }\n    return lastUnit;\n  }\n  pushAccessUnit(VideoSample, videoTrack) {\n    if (VideoSample.units.length && VideoSample.frame) {\n      if (VideoSample.pts === void 0) {\n        const samples = videoTrack.samples;\n        const nbSamples = samples.length;\n        if (nbSamples) {\n          const lastSample = samples[nbSamples - 1];\n          VideoSample.pts = lastSample.pts;\n          VideoSample.dts = lastSample.dts;\n        } else {\n          videoTrack.dropped++;\n          return;\n        }\n      }\n      videoTrack.samples.push(VideoSample);\n    }\n    if (VideoSample.debug.length) {\n      logger.log(VideoSample.pts + \"/\" + VideoSample.dts + \":\" + VideoSample.debug);\n    }\n  }\n}\nclass ExpGolomb {\n  constructor(data) {\n    this.data = void 0;\n    this.bytesAvailable = void 0;\n    this.word = void 0;\n    this.bitsAvailable = void 0;\n    this.data = data;\n    this.bytesAvailable = data.byteLength;\n    this.word = 0;\n    this.bitsAvailable = 0;\n  }\n  // ():void\n  loadWord() {\n    const data = this.data;\n    const bytesAvailable = this.bytesAvailable;\n    const position = data.byteLength - bytesAvailable;\n    const workingBytes = new Uint8Array(4);\n    const availableBytes = Math.min(4, bytesAvailable);\n    if (availableBytes === 0) {\n      throw new Error(\"no bytes available\");\n    }\n    workingBytes.set(data.subarray(position, position + availableBytes));\n    this.word = new DataView(workingBytes.buffer).getUint32(0);\n    this.bitsAvailable = availableBytes * 8;\n    this.bytesAvailable -= availableBytes;\n  }\n  // (count:int):void\n  skipBits(count) {\n    let skipBytes;\n    count = Math.min(count, this.bytesAvailable * 8 + this.bitsAvailable);\n    if (this.bitsAvailable > count) {\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    } else {\n      count -= this.bitsAvailable;\n      skipBytes = count >> 3;\n      count -= skipBytes << 3;\n      this.bytesAvailable -= skipBytes;\n      this.loadWord();\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    }\n  }\n  // (size:int):uint\n  readBits(size) {\n    let bits = Math.min(this.bitsAvailable, size);\n    const valu = this.word >>> 32 - bits;\n    if (size > 32) {\n      logger.error(\"Cannot read more than 32 bits at a time\");\n    }\n    this.bitsAvailable -= bits;\n    if (this.bitsAvailable > 0) {\n      this.word <<= bits;\n    } else if (this.bytesAvailable > 0) {\n      this.loadWord();\n    } else {\n      throw new Error(\"no bits available\");\n    }\n    bits = size - bits;\n    if (bits > 0 && this.bitsAvailable) {\n      return valu << bits | this.readBits(bits);\n    } else {\n      return valu;\n    }\n  }\n  // ():uint\n  skipLZ() {\n    let leadingZeroCount;\n    for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n      if ((this.word & 2147483648 >>> leadingZeroCount) !== 0) {\n        this.word <<= leadingZeroCount;\n        this.bitsAvailable -= leadingZeroCount;\n        return leadingZeroCount;\n      }\n    }\n    this.loadWord();\n    return leadingZeroCount + this.skipLZ();\n  }\n  // ():void\n  skipUEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n  // ():void\n  skipEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n  // ():uint\n  readUEG() {\n    const clz = this.skipLZ();\n    return this.readBits(clz + 1) - 1;\n  }\n  // ():int\n  readEG() {\n    const valu = this.readUEG();\n    if (1 & valu) {\n      return 1 + valu >>> 1;\n    } else {\n      return -1 * (valu >>> 1);\n    }\n  }\n  // Some convenience functions\n  // :Boolean\n  readBoolean() {\n    return this.readBits(1) === 1;\n  }\n  // ():int\n  readUByte() {\n    return this.readBits(8);\n  }\n  // ():int\n  readUShort() {\n    return this.readBits(16);\n  }\n  // ():int\n  readUInt() {\n    return this.readBits(32);\n  }\n  /**\n   * Advance the ExpGolomb decoder past a scaling list. The scaling\n   * list is optionally transmitted as part of a sequence parameter\n   * set and is not relevant to transmuxing.\n   * @param count the number of entries in this scaling list\n   * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n   */\n  skipScalingList(count) {\n    let lastScale = 8;\n    let nextScale = 8;\n    let deltaScale;\n    for (let j = 0; j < count; j++) {\n      if (nextScale !== 0) {\n        deltaScale = this.readEG();\n        nextScale = (lastScale + deltaScale + 256) % 256;\n      }\n      lastScale = nextScale === 0 ? lastScale : nextScale;\n    }\n  }\n  /**\n   * Read a sequence parameter set and return some interesting video\n   * properties. A sequence parameter set is the H264 metadata that\n   * describes the properties of upcoming video frames.\n   * @returns an object with configuration parsed from the\n   * sequence parameter set, including the dimensions of the\n   * associated video frames.\n   */\n  readSPS() {\n    let frameCropLeftOffset = 0;\n    let frameCropRightOffset = 0;\n    let frameCropTopOffset = 0;\n    let frameCropBottomOffset = 0;\n    let numRefFramesInPicOrderCntCycle;\n    let scalingListCount;\n    let i;\n    const readUByte = this.readUByte.bind(this);\n    const readBits = this.readBits.bind(this);\n    const readUEG = this.readUEG.bind(this);\n    const readBoolean = this.readBoolean.bind(this);\n    const skipBits = this.skipBits.bind(this);\n    const skipEG = this.skipEG.bind(this);\n    const skipUEG = this.skipUEG.bind(this);\n    const skipScalingList = this.skipScalingList.bind(this);\n    readUByte();\n    const profileIdc = readUByte();\n    readBits(5);\n    skipBits(3);\n    readUByte();\n    skipUEG();\n    if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128) {\n      const chromaFormatIdc = readUEG();\n      if (chromaFormatIdc === 3) {\n        skipBits(1);\n      }\n      skipUEG();\n      skipUEG();\n      skipBits(1);\n      if (readBoolean()) {\n        scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n        for (i = 0; i < scalingListCount; i++) {\n          if (readBoolean()) {\n            if (i < 6) {\n              skipScalingList(16);\n            } else {\n              skipScalingList(64);\n            }\n          }\n        }\n      }\n    }\n    skipUEG();\n    const picOrderCntType = readUEG();\n    if (picOrderCntType === 0) {\n      readUEG();\n    } else if (picOrderCntType === 1) {\n      skipBits(1);\n      skipEG();\n      skipEG();\n      numRefFramesInPicOrderCntCycle = readUEG();\n      for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n        skipEG();\n      }\n    }\n    skipUEG();\n    skipBits(1);\n    const picWidthInMbsMinus1 = readUEG();\n    const picHeightInMapUnitsMinus1 = readUEG();\n    const frameMbsOnlyFlag = readBits(1);\n    if (frameMbsOnlyFlag === 0) {\n      skipBits(1);\n    }\n    skipBits(1);\n    if (readBoolean()) {\n      frameCropLeftOffset = readUEG();\n      frameCropRightOffset = readUEG();\n      frameCropTopOffset = readUEG();\n      frameCropBottomOffset = readUEG();\n    }\n    let pixelRatio = [1, 1];\n    if (readBoolean()) {\n      if (readBoolean()) {\n        const aspectRatioIdc = readUByte();\n        switch (aspectRatioIdc) {\n          case 1:\n            pixelRatio = [1, 1];\n            break;\n          case 2:\n            pixelRatio = [12, 11];\n            break;\n          case 3:\n            pixelRatio = [10, 11];\n            break;\n          case 4:\n            pixelRatio = [16, 11];\n            break;\n          case 5:\n            pixelRatio = [40, 33];\n            break;\n          case 6:\n            pixelRatio = [24, 11];\n            break;\n          case 7:\n            pixelRatio = [20, 11];\n            break;\n          case 8:\n            pixelRatio = [32, 11];\n            break;\n          case 9:\n            pixelRatio = [80, 33];\n            break;\n          case 10:\n            pixelRatio = [18, 11];\n            break;\n          case 11:\n            pixelRatio = [15, 11];\n            break;\n          case 12:\n            pixelRatio = [64, 33];\n            break;\n          case 13:\n            pixelRatio = [160, 99];\n            break;\n          case 14:\n            pixelRatio = [4, 3];\n            break;\n          case 15:\n            pixelRatio = [3, 2];\n            break;\n          case 16:\n            pixelRatio = [2, 1];\n            break;\n          case 255: {\n            pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n            break;\n          }\n        }\n      }\n    }\n    return {\n      width: Math.ceil((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2),\n      height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - (frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset),\n      pixelRatio\n    };\n  }\n  readSliceType() {\n    this.readUByte();\n    this.readUEG();\n    return this.readUEG();\n  }\n}\nclass AvcVideoParser extends BaseVideoParser {\n  parseAVCPES(track, textTrack, pes, last, duration) {\n    const units = this.parseAVCNALu(track, pes.data);\n    let VideoSample = this.VideoSample;\n    let push2;\n    let spsfound = false;\n    pes.data = null;\n    if (VideoSample && units.length && !track.audFound) {\n      this.pushAccessUnit(VideoSample, track);\n      VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts, \"\");\n    }\n    units.forEach((unit) => {\n      var _VideoSample2;\n      switch (unit.type) {\n        case 1: {\n          let iskey = false;\n          push2 = true;\n          const data = unit.data;\n          if (spsfound && data.length > 4) {\n            const sliceType = new ExpGolomb(data).readSliceType();\n            if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n              iskey = true;\n            }\n          }\n          if (iskey) {\n            var _VideoSample;\n            if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n              this.pushAccessUnit(VideoSample, track);\n              VideoSample = this.VideoSample = null;\n            }\n          }\n          if (!VideoSample) {\n            VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts, \"\");\n          }\n          VideoSample.frame = true;\n          VideoSample.key = iskey;\n          break;\n        }\n        case 5:\n          push2 = true;\n          if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n            this.pushAccessUnit(VideoSample, track);\n            VideoSample = this.VideoSample = null;\n          }\n          if (!VideoSample) {\n            VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts, \"\");\n          }\n          VideoSample.key = true;\n          VideoSample.frame = true;\n          break;\n        case 6: {\n          push2 = true;\n          parseSEIMessageFromNALu(unit.data, 1, pes.pts, textTrack.samples);\n          break;\n        }\n        case 7: {\n          var _track$pixelRatio, _track$pixelRatio2;\n          push2 = true;\n          spsfound = true;\n          const sps = unit.data;\n          const expGolombDecoder = new ExpGolomb(sps);\n          const config = expGolombDecoder.readSPS();\n          if (!track.sps || track.width !== config.width || track.height !== config.height || ((_track$pixelRatio = track.pixelRatio) == null ? void 0 : _track$pixelRatio[0]) !== config.pixelRatio[0] || ((_track$pixelRatio2 = track.pixelRatio) == null ? void 0 : _track$pixelRatio2[1]) !== config.pixelRatio[1]) {\n            track.width = config.width;\n            track.height = config.height;\n            track.pixelRatio = config.pixelRatio;\n            track.sps = [sps];\n            track.duration = duration;\n            const codecarray = sps.subarray(1, 4);\n            let codecstring = \"avc1.\";\n            for (let i = 0; i < 3; i++) {\n              let h = codecarray[i].toString(16);\n              if (h.length < 2) {\n                h = \"0\" + h;\n              }\n              codecstring += h;\n            }\n            track.codec = codecstring;\n          }\n          break;\n        }\n        case 8:\n          push2 = true;\n          track.pps = [unit.data];\n          break;\n        case 9:\n          push2 = true;\n          track.audFound = true;\n          if (VideoSample) {\n            this.pushAccessUnit(VideoSample, track);\n          }\n          VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts, \"\");\n          break;\n        case 12:\n          push2 = true;\n          break;\n        default:\n          push2 = false;\n          if (VideoSample) {\n            VideoSample.debug += \"unknown NAL \" + unit.type + \" \";\n          }\n          break;\n      }\n      if (VideoSample && push2) {\n        const units2 = VideoSample.units;\n        units2.push(unit);\n      }\n    });\n    if (last && VideoSample) {\n      this.pushAccessUnit(VideoSample, track);\n      this.VideoSample = null;\n    }\n  }\n  parseAVCNALu(track, array) {\n    const len = array.byteLength;\n    let state = track.naluState || 0;\n    const lastState = state;\n    const units = [];\n    let i = 0;\n    let value;\n    let overflow;\n    let unitType;\n    let lastUnitStart = -1;\n    let lastUnitType = 0;\n    if (state === -1) {\n      lastUnitStart = 0;\n      lastUnitType = array[0] & 31;\n      state = 0;\n      i = 1;\n    }\n    while (i < len) {\n      value = array[i++];\n      if (!state) {\n        state = value ? 0 : 1;\n        continue;\n      }\n      if (state === 1) {\n        state = value ? 0 : 2;\n        continue;\n      }\n      if (!value) {\n        state = 3;\n      } else if (value === 1) {\n        overflow = i - state - 1;\n        if (lastUnitStart >= 0) {\n          const unit = {\n            data: array.subarray(lastUnitStart, overflow),\n            type: lastUnitType\n          };\n          units.push(unit);\n        } else {\n          const lastUnit = this.getLastNalUnit(track.samples);\n          if (lastUnit) {\n            if (lastState && i <= 4 - lastState) {\n              if (lastUnit.state) {\n                lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n              }\n            }\n            if (overflow > 0) {\n              lastUnit.data = appendUint8Array(lastUnit.data, array.subarray(0, overflow));\n              lastUnit.state = 0;\n            }\n          }\n        }\n        if (i < len) {\n          unitType = array[i] & 31;\n          lastUnitStart = i;\n          lastUnitType = unitType;\n          state = 0;\n        } else {\n          state = -1;\n        }\n      } else {\n        state = 0;\n      }\n    }\n    if (lastUnitStart >= 0 && state >= 0) {\n      const unit = {\n        data: array.subarray(lastUnitStart, len),\n        type: lastUnitType,\n        state\n      };\n      units.push(unit);\n    }\n    if (units.length === 0) {\n      const lastUnit = this.getLastNalUnit(track.samples);\n      if (lastUnit) {\n        lastUnit.data = appendUint8Array(lastUnit.data, array);\n      }\n    }\n    track.naluState = state;\n    return units;\n  }\n}\nclass SampleAesDecrypter {\n  constructor(observer, config, keyData) {\n    this.keyData = void 0;\n    this.decrypter = void 0;\n    this.keyData = keyData;\n    this.decrypter = new Decrypter(config, {\n      removePKCS7Padding: false\n    });\n  }\n  decryptBuffer(encryptedData) {\n    return this.decrypter.decrypt(encryptedData, this.keyData.key.buffer, this.keyData.iv.buffer);\n  }\n  // AAC - encrypt all full 16 bytes blocks starting from offset 16\n  decryptAacSample(samples, sampleIndex, callback) {\n    const curUnit = samples[sampleIndex].unit;\n    if (curUnit.length <= 16) {\n      return;\n    }\n    const encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n    const encryptedBuffer = encryptedData.buffer.slice(encryptedData.byteOffset, encryptedData.byteOffset + encryptedData.length);\n    this.decryptBuffer(encryptedBuffer).then((decryptedBuffer) => {\n      const decryptedData = new Uint8Array(decryptedBuffer);\n      curUnit.set(decryptedData, 16);\n      if (!this.decrypter.isSync()) {\n        this.decryptAacSamples(samples, sampleIndex + 1, callback);\n      }\n    });\n  }\n  decryptAacSamples(samples, sampleIndex, callback) {\n    for (; ; sampleIndex++) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n      if (samples[sampleIndex].unit.length < 32) {\n        continue;\n      }\n      this.decryptAacSample(samples, sampleIndex, callback);\n      if (!this.decrypter.isSync()) {\n        return;\n      }\n    }\n  }\n  // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n  getAvcEncryptedData(decodedData) {\n    const encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n    const encryptedData = new Int8Array(encryptedDataLen);\n    let outputPos = 0;\n    for (let inputPos = 32; inputPos < decodedData.length - 16; inputPos += 160, outputPos += 16) {\n      encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return encryptedData;\n  }\n  getAvcDecryptedUnit(decodedData, decryptedData) {\n    const uint8DecryptedData = new Uint8Array(decryptedData);\n    let inputPos = 0;\n    for (let outputPos = 32; outputPos < decodedData.length - 16; outputPos += 160, inputPos += 16) {\n      decodedData.set(uint8DecryptedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return decodedData;\n  }\n  decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit) {\n    const decodedData = discardEPB(curUnit.data);\n    const encryptedData = this.getAvcEncryptedData(decodedData);\n    this.decryptBuffer(encryptedData.buffer).then((decryptedBuffer) => {\n      curUnit.data = this.getAvcDecryptedUnit(decodedData, decryptedBuffer);\n      if (!this.decrypter.isSync()) {\n        this.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n      }\n    });\n  }\n  decryptAvcSamples(samples, sampleIndex, unitIndex, callback) {\n    if (samples instanceof Uint8Array) {\n      throw new Error(\"Cannot decrypt samples of type Uint8Array\");\n    }\n    for (; ; sampleIndex++, unitIndex = 0) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n      const curUnits = samples[sampleIndex].units;\n      for (; ; unitIndex++) {\n        if (unitIndex >= curUnits.length) {\n          break;\n        }\n        const curUnit = curUnits[unitIndex];\n        if (curUnit.data.length <= 48 || curUnit.type !== 1 && curUnit.type !== 5) {\n          continue;\n        }\n        this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit);\n        if (!this.decrypter.isSync()) {\n          return;\n        }\n      }\n    }\n  }\n}\nconst PACKET_LENGTH = 188;\nclass TSDemuxer {\n  constructor(observer, config, typeSupported) {\n    this.observer = void 0;\n    this.config = void 0;\n    this.typeSupported = void 0;\n    this.sampleAes = null;\n    this.pmtParsed = false;\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this._duration = 0;\n    this._pmtId = -1;\n    this._videoTrack = void 0;\n    this._audioTrack = void 0;\n    this._id3Track = void 0;\n    this._txtTrack = void 0;\n    this.aacOverFlow = null;\n    this.remainderData = null;\n    this.videoParser = void 0;\n    this.observer = observer;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.videoParser = new AvcVideoParser();\n  }\n  static probe(data) {\n    const syncOffset = TSDemuxer.syncOffset(data);\n    if (syncOffset > 0) {\n      logger.warn(`MPEG2-TS detected but first sync word found @ offset ${syncOffset}`);\n    }\n    return syncOffset !== -1;\n  }\n  static syncOffset(data) {\n    const length = data.length;\n    let scanwindow = Math.min(PACKET_LENGTH * 5, length - PACKET_LENGTH) + 1;\n    let i = 0;\n    while (i < scanwindow) {\n      let foundPat = false;\n      let packetStart = -1;\n      let tsPackets = 0;\n      for (let j = i; j < length; j += PACKET_LENGTH) {\n        if (data[j] === 71 && (length - j === PACKET_LENGTH || data[j + PACKET_LENGTH] === 71)) {\n          tsPackets++;\n          if (packetStart === -1) {\n            packetStart = j;\n            if (packetStart !== 0) {\n              scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;\n            }\n          }\n          if (!foundPat) {\n            foundPat = parsePID(data, j) === 0;\n          }\n          if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {\n            return packetStart;\n          }\n        } else if (tsPackets) {\n          return -1;\n        } else {\n          break;\n        }\n      }\n      i++;\n    }\n    return -1;\n  }\n  /**\n   * Creates a track model internal to demuxer used to drive remuxing input\n   */\n  static createTrack(type, duration) {\n    return {\n      container: type === \"video\" || type === \"audio\" ? \"video/mp2t\" : void 0,\n      type,\n      id: RemuxerTrackIdConfig[type],\n      pid: -1,\n      inputTimeScale: 9e4,\n      sequenceNumber: 0,\n      samples: [],\n      dropped: 0,\n      duration: type === \"audio\" ? duration : void 0\n    };\n  }\n  /**\n   * Initializes a new init segment on the demuxer/remuxer interface. Needed for discontinuities/track-switches (or at stream start)\n   * Resets all internal track instances of the demuxer.\n   */\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    this.pmtParsed = false;\n    this._pmtId = -1;\n    this._videoTrack = TSDemuxer.createTrack(\"video\");\n    this._audioTrack = TSDemuxer.createTrack(\"audio\", trackDuration);\n    this._id3Track = TSDemuxer.createTrack(\"id3\");\n    this._txtTrack = TSDemuxer.createTrack(\"text\");\n    this._audioTrack.segmentCodec = \"aac\";\n    this.aacOverFlow = null;\n    this.remainderData = null;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this._duration = trackDuration;\n  }\n  resetTimeStamp() {\n  }\n  resetContiguity() {\n    const {\n      _audioTrack,\n      _videoTrack,\n      _id3Track\n    } = this;\n    if (_audioTrack) {\n      _audioTrack.pesData = null;\n    }\n    if (_videoTrack) {\n      _videoTrack.pesData = null;\n    }\n    if (_id3Track) {\n      _id3Track.pesData = null;\n    }\n    this.aacOverFlow = null;\n    this.remainderData = null;\n  }\n  demux(data, timeOffset, isSampleAes = false, flush = false) {\n    if (!isSampleAes) {\n      this.sampleAes = null;\n    }\n    let pes;\n    const videoTrack = this._videoTrack;\n    const audioTrack = this._audioTrack;\n    const id3Track = this._id3Track;\n    const textTrack = this._txtTrack;\n    let videoPid = videoTrack.pid;\n    let videoData = videoTrack.pesData;\n    let audioPid = audioTrack.pid;\n    let id3Pid = id3Track.pid;\n    let audioData = audioTrack.pesData;\n    let id3Data = id3Track.pesData;\n    let unknownPID = null;\n    let pmtParsed = this.pmtParsed;\n    let pmtId = this._pmtId;\n    let len = data.length;\n    if (this.remainderData) {\n      data = appendUint8Array(this.remainderData, data);\n      len = data.length;\n      this.remainderData = null;\n    }\n    if (len < PACKET_LENGTH && !flush) {\n      this.remainderData = data;\n      return {\n        audioTrack,\n        videoTrack,\n        id3Track,\n        textTrack\n      };\n    }\n    const syncOffset = Math.max(0, TSDemuxer.syncOffset(data));\n    len -= (len - syncOffset) % PACKET_LENGTH;\n    if (len < data.byteLength && !flush) {\n      this.remainderData = new Uint8Array(data.buffer, len, data.buffer.byteLength - len);\n    }\n    let tsPacketErrors = 0;\n    for (let start = syncOffset; start < len; start += PACKET_LENGTH) {\n      if (data[start] === 71) {\n        const stt = !!(data[start + 1] & 64);\n        const pid = parsePID(data, start);\n        const atf = (data[start + 3] & 48) >> 4;\n        let offset;\n        if (atf > 1) {\n          offset = start + 5 + data[start + 4];\n          if (offset === start + PACKET_LENGTH) {\n            continue;\n          }\n        } else {\n          offset = start + 4;\n        }\n        switch (pid) {\n          case videoPid:\n            if (stt) {\n              if (videoData && (pes = parsePES(videoData))) {\n                this.videoParser.parseAVCPES(videoTrack, textTrack, pes, false, this._duration);\n              }\n              videoData = {\n                data: [],\n                size: 0\n              };\n            }\n            if (videoData) {\n              videoData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              videoData.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case audioPid:\n            if (stt) {\n              if (audioData && (pes = parsePES(audioData))) {\n                switch (audioTrack.segmentCodec) {\n                  case \"aac\":\n                    this.parseAACPES(audioTrack, pes);\n                    break;\n                  case \"mp3\":\n                    this.parseMPEGPES(audioTrack, pes);\n                    break;\n                  case \"ac3\":\n                    {\n                      this.parseAC3PES(audioTrack, pes);\n                    }\n                    break;\n                }\n              }\n              audioData = {\n                data: [],\n                size: 0\n              };\n            }\n            if (audioData) {\n              audioData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              audioData.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case id3Pid:\n            if (stt) {\n              if (id3Data && (pes = parsePES(id3Data))) {\n                this.parseID3PES(id3Track, pes);\n              }\n              id3Data = {\n                data: [],\n                size: 0\n              };\n            }\n            if (id3Data) {\n              id3Data.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              id3Data.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case 0:\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            pmtId = this._pmtId = parsePAT(data, offset);\n            break;\n          case pmtId: {\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            const parsedPIDs = parsePMT(data, offset, this.typeSupported, isSampleAes);\n            videoPid = parsedPIDs.videoPid;\n            if (videoPid > 0) {\n              videoTrack.pid = videoPid;\n              videoTrack.segmentCodec = parsedPIDs.segmentVideoCodec;\n            }\n            audioPid = parsedPIDs.audioPid;\n            if (audioPid > 0) {\n              audioTrack.pid = audioPid;\n              audioTrack.segmentCodec = parsedPIDs.segmentAudioCodec;\n            }\n            id3Pid = parsedPIDs.id3Pid;\n            if (id3Pid > 0) {\n              id3Track.pid = id3Pid;\n            }\n            if (unknownPID !== null && !pmtParsed) {\n              logger.warn(`MPEG-TS PMT found at ${start} after unknown PID '${unknownPID}'. Backtracking to sync byte @${syncOffset} to parse all TS packets.`);\n              unknownPID = null;\n              start = syncOffset - 188;\n            }\n            pmtParsed = this.pmtParsed = true;\n            break;\n          }\n          case 17:\n          case 8191:\n            break;\n          default:\n            unknownPID = pid;\n            break;\n        }\n      } else {\n        tsPacketErrors++;\n      }\n    }\n    if (tsPacketErrors > 0) {\n      const error = new Error(`Found ${tsPacketErrors} TS packet/s that do not start with 0x47`);\n      this.observer.emit(Events.ERROR, Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.FRAG_PARSING_ERROR,\n        fatal: false,\n        error,\n        reason: error.message\n      });\n    }\n    videoTrack.pesData = videoData;\n    audioTrack.pesData = audioData;\n    id3Track.pesData = id3Data;\n    const demuxResult = {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    };\n    if (flush) {\n      this.extractRemainingSamples(demuxResult);\n    }\n    return demuxResult;\n  }\n  flush() {\n    const {\n      remainderData\n    } = this;\n    this.remainderData = null;\n    let result;\n    if (remainderData) {\n      result = this.demux(remainderData, -1, false, true);\n    } else {\n      result = {\n        videoTrack: this._videoTrack,\n        audioTrack: this._audioTrack,\n        id3Track: this._id3Track,\n        textTrack: this._txtTrack\n      };\n    }\n    this.extractRemainingSamples(result);\n    if (this.sampleAes) {\n      return this.decrypt(result, this.sampleAes);\n    }\n    return result;\n  }\n  extractRemainingSamples(demuxResult) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = demuxResult;\n    const videoData = videoTrack.pesData;\n    const audioData = audioTrack.pesData;\n    const id3Data = id3Track.pesData;\n    let pes;\n    if (videoData && (pes = parsePES(videoData))) {\n      this.videoParser.parseAVCPES(videoTrack, textTrack, pes, true, this._duration);\n      videoTrack.pesData = null;\n    } else {\n      videoTrack.pesData = videoData;\n    }\n    if (audioData && (pes = parsePES(audioData))) {\n      switch (audioTrack.segmentCodec) {\n        case \"aac\":\n          this.parseAACPES(audioTrack, pes);\n          break;\n        case \"mp3\":\n          this.parseMPEGPES(audioTrack, pes);\n          break;\n        case \"ac3\":\n          {\n            this.parseAC3PES(audioTrack, pes);\n          }\n          break;\n      }\n      audioTrack.pesData = null;\n    } else {\n      if (audioData != null && audioData.size) {\n        logger.log(\"last AAC PES packet truncated,might overlap between fragments\");\n      }\n      audioTrack.pesData = audioData;\n    }\n    if (id3Data && (pes = parsePES(id3Data))) {\n      this.parseID3PES(id3Track, pes);\n      id3Track.pesData = null;\n    } else {\n      id3Track.pesData = id3Data;\n    }\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    const demuxResult = this.demux(data, timeOffset, true, !this.config.progressive);\n    const sampleAes = this.sampleAes = new SampleAesDecrypter(this.observer, this.config, keyData);\n    return this.decrypt(demuxResult, sampleAes);\n  }\n  decrypt(demuxResult, sampleAes) {\n    return new Promise((resolve) => {\n      const {\n        audioTrack,\n        videoTrack\n      } = demuxResult;\n      if (audioTrack.samples && audioTrack.segmentCodec === \"aac\") {\n        sampleAes.decryptAacSamples(audioTrack.samples, 0, () => {\n          if (videoTrack.samples) {\n            sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n              resolve(demuxResult);\n            });\n          } else {\n            resolve(demuxResult);\n          }\n        });\n      } else if (videoTrack.samples) {\n        sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n          resolve(demuxResult);\n        });\n      }\n    });\n  }\n  destroy() {\n    this._duration = 0;\n  }\n  parseAACPES(track, pes) {\n    let startOffset = 0;\n    const aacOverFlow = this.aacOverFlow;\n    let data = pes.data;\n    if (aacOverFlow) {\n      this.aacOverFlow = null;\n      const frameMissingBytes = aacOverFlow.missing;\n      const sampleLength = aacOverFlow.sample.unit.byteLength;\n      if (frameMissingBytes === -1) {\n        data = appendUint8Array(aacOverFlow.sample.unit, data);\n      } else {\n        const frameOverflowBytes = sampleLength - frameMissingBytes;\n        aacOverFlow.sample.unit.set(data.subarray(0, frameMissingBytes), frameOverflowBytes);\n        track.samples.push(aacOverFlow.sample);\n        startOffset = aacOverFlow.missing;\n      }\n    }\n    let offset;\n    let len;\n    for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n      if (isHeader$1(data, offset)) {\n        break;\n      }\n    }\n    if (offset !== startOffset) {\n      let reason;\n      const recoverable = offset < len - 1;\n      if (recoverable) {\n        reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n      } else {\n        reason = \"No ADTS header found in AAC PES\";\n      }\n      const error = new Error(reason);\n      logger.warn(`parsing error: ${reason}`);\n      this.observer.emit(Events.ERROR, Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.FRAG_PARSING_ERROR,\n        fatal: false,\n        levelRetry: recoverable,\n        error,\n        reason\n      });\n      if (!recoverable) {\n        return;\n      }\n    }\n    initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n    let pts;\n    if (pes.pts !== void 0) {\n      pts = pes.pts;\n    } else if (aacOverFlow) {\n      const frameDuration = getFrameDuration(track.samplerate);\n      pts = aacOverFlow.sample.pts + frameDuration;\n    } else {\n      logger.warn(\"[tsdemuxer]: AAC PES unknown PTS\");\n      return;\n    }\n    let frameIndex = 0;\n    let frame;\n    while (offset < len) {\n      frame = appendFrame$2(track, data, offset, pts, frameIndex);\n      offset += frame.length;\n      if (!frame.missing) {\n        frameIndex++;\n        for (; offset < len - 1; offset++) {\n          if (isHeader$1(data, offset)) {\n            break;\n          }\n        }\n      } else {\n        this.aacOverFlow = frame;\n        break;\n      }\n    }\n  }\n  parseMPEGPES(track, pes) {\n    const data = pes.data;\n    const length = data.length;\n    let frameIndex = 0;\n    let offset = 0;\n    const pts = pes.pts;\n    if (pts === void 0) {\n      logger.warn(\"[tsdemuxer]: MPEG PES unknown PTS\");\n      return;\n    }\n    while (offset < length) {\n      if (isHeader(data, offset)) {\n        const frame = appendFrame$1(track, data, offset, pts, frameIndex);\n        if (frame) {\n          offset += frame.length;\n          frameIndex++;\n        } else {\n          break;\n        }\n      } else {\n        offset++;\n      }\n    }\n  }\n  parseAC3PES(track, pes) {\n    {\n      const data = pes.data;\n      const pts = pes.pts;\n      if (pts === void 0) {\n        logger.warn(\"[tsdemuxer]: AC3 PES unknown PTS\");\n        return;\n      }\n      const length = data.length;\n      let frameIndex = 0;\n      let offset = 0;\n      let parsed;\n      while (offset < length && (parsed = appendFrame(track, data, offset, pts, frameIndex++)) > 0) {\n        offset += parsed;\n      }\n    }\n  }\n  parseID3PES(id3Track, pes) {\n    if (pes.pts === void 0) {\n      logger.warn(\"[tsdemuxer]: ID3 PES unknown PTS\");\n      return;\n    }\n    const id3Sample = _extends({}, pes, {\n      type: this._videoTrack ? MetadataSchema.emsg : MetadataSchema.audioId3,\n      duration: Number.POSITIVE_INFINITY\n    });\n    id3Track.samples.push(id3Sample);\n  }\n}\nfunction parsePID(data, offset) {\n  return ((data[offset + 1] & 31) << 8) + data[offset + 2];\n}\nfunction parsePAT(data, offset) {\n  return (data[offset + 10] & 31) << 8 | data[offset + 11];\n}\nfunction parsePMT(data, offset, typeSupported, isSampleAes) {\n  const result = {\n    audioPid: -1,\n    videoPid: -1,\n    id3Pid: -1,\n    segmentVideoCodec: \"avc\",\n    segmentAudioCodec: \"aac\"\n  };\n  const sectionLength = (data[offset + 1] & 15) << 8 | data[offset + 2];\n  const tableEnd = offset + 3 + sectionLength - 4;\n  const programInfoLength = (data[offset + 10] & 15) << 8 | data[offset + 11];\n  offset += 12 + programInfoLength;\n  while (offset < tableEnd) {\n    const pid = parsePID(data, offset);\n    const esInfoLength = (data[offset + 3] & 15) << 8 | data[offset + 4];\n    switch (data[offset]) {\n      case 207:\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream(\"ADTS AAC\");\n          break;\n        }\n      case 15:\n        if (result.audioPid === -1) {\n          result.audioPid = pid;\n        }\n        break;\n      case 21:\n        if (result.id3Pid === -1) {\n          result.id3Pid = pid;\n        }\n        break;\n      case 219:\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream(\"H.264\");\n          break;\n        }\n      case 27:\n        if (result.videoPid === -1) {\n          result.videoPid = pid;\n          result.segmentVideoCodec = \"avc\";\n        }\n        break;\n      case 3:\n      case 4:\n        if (!typeSupported.mpeg && !typeSupported.mp3) {\n          logger.log(\"MPEG audio found, not supported in this browser\");\n        } else if (result.audioPid === -1) {\n          result.audioPid = pid;\n          result.segmentAudioCodec = \"mp3\";\n        }\n        break;\n      case 193:\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream(\"AC-3\");\n          break;\n        }\n      case 129:\n        {\n          if (!typeSupported.ac3) {\n            logger.log(\"AC-3 audio found, not supported in this browser\");\n          } else if (result.audioPid === -1) {\n            result.audioPid = pid;\n            result.segmentAudioCodec = \"ac3\";\n          }\n        }\n        break;\n      case 6:\n        if (result.audioPid === -1 && esInfoLength > 0) {\n          let parsePos = offset + 5;\n          let remaining = esInfoLength;\n          while (remaining > 2) {\n            const descriptorId = data[parsePos];\n            switch (descriptorId) {\n              case 106:\n                {\n                  if (typeSupported.ac3 !== true) {\n                    logger.log(\"AC-3 audio found, not supported in this browser for now\");\n                  } else {\n                    result.audioPid = pid;\n                    result.segmentAudioCodec = \"ac3\";\n                  }\n                }\n                break;\n            }\n            const descriptorLen = data[parsePos + 1] + 2;\n            parsePos += descriptorLen;\n            remaining -= descriptorLen;\n          }\n        }\n        break;\n      case 194:\n      case 135:\n        logger.warn(\"Unsupported EC-3 in M2TS found\");\n        break;\n      case 36:\n        logger.warn(\"Unsupported HEVC in M2TS found\");\n        break;\n    }\n    offset += esInfoLength + 5;\n  }\n  return result;\n}\nfunction logEncryptedSamplesFoundInUnencryptedStream(type) {\n  logger.log(`${type} with AES-128-CBC encryption found in unencrypted stream`);\n}\nfunction parsePES(stream) {\n  let i = 0;\n  let frag;\n  let pesLen;\n  let pesHdrLen;\n  let pesPts;\n  let pesDts;\n  const data = stream.data;\n  if (!stream || stream.size === 0) {\n    return null;\n  }\n  while (data[0].length < 19 && data.length > 1) {\n    data[0] = appendUint8Array(data[0], data[1]);\n    data.splice(1, 1);\n  }\n  frag = data[0];\n  const pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n  if (pesPrefix === 1) {\n    pesLen = (frag[4] << 8) + frag[5];\n    if (pesLen && pesLen > stream.size - 6) {\n      return null;\n    }\n    const pesFlags = frag[7];\n    if (pesFlags & 192) {\n      pesPts = (frag[9] & 14) * 536870912 + // 1 << 29\n      (frag[10] & 255) * 4194304 + // 1 << 22\n      (frag[11] & 254) * 16384 + // 1 << 14\n      (frag[12] & 255) * 128 + // 1 << 7\n      (frag[13] & 254) / 2;\n      if (pesFlags & 64) {\n        pesDts = (frag[14] & 14) * 536870912 + // 1 << 29\n        (frag[15] & 255) * 4194304 + // 1 << 22\n        (frag[16] & 254) * 16384 + // 1 << 14\n        (frag[17] & 255) * 128 + // 1 << 7\n        (frag[18] & 254) / 2;\n        if (pesPts - pesDts > 60 * 9e4) {\n          logger.warn(`${Math.round((pesPts - pesDts) / 9e4)}s delta between PTS and DTS, align them`);\n          pesPts = pesDts;\n        }\n      } else {\n        pesDts = pesPts;\n      }\n    }\n    pesHdrLen = frag[8];\n    let payloadStartOffset = pesHdrLen + 9;\n    if (stream.size <= payloadStartOffset) {\n      return null;\n    }\n    stream.size -= payloadStartOffset;\n    const pesData = new Uint8Array(stream.size);\n    for (let j = 0, dataLen = data.length; j < dataLen; j++) {\n      frag = data[j];\n      let len = frag.byteLength;\n      if (payloadStartOffset) {\n        if (payloadStartOffset > len) {\n          payloadStartOffset -= len;\n          continue;\n        } else {\n          frag = frag.subarray(payloadStartOffset);\n          len -= payloadStartOffset;\n          payloadStartOffset = 0;\n        }\n      }\n      pesData.set(frag, i);\n      i += len;\n    }\n    if (pesLen) {\n      pesLen -= pesHdrLen + 3;\n    }\n    return {\n      data: pesData,\n      pts: pesPts,\n      dts: pesDts,\n      len: pesLen\n    };\n  }\n  return null;\n}\nclass MP3Demuxer extends BaseAudioDemuxer {\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: \"audio/mpeg\",\n      type: \"audio\",\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: \"mp3\",\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 9e4,\n      dropped: 0\n    };\n  }\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n    if (id3Data && data[offset] === 11 && data[offset + 1] === 119 && getTimeStamp(id3Data) !== void 0 && // check the bsid to confirm ac-3 or ec-3 (not mp3)\n    getAudioBSID(data, offset) <= 16) {\n      return false;\n    }\n    for (let length = data.length; offset < length; offset++) {\n      if (probe(data, offset)) {\n        logger.log(\"MPEG Audio sync word found !\");\n        return true;\n      }\n    }\n    return false;\n  }\n  canParse(data, offset) {\n    return canParse(data, offset);\n  }\n  appendFrame(track, data, offset) {\n    if (this.basePTS === null) {\n      return;\n    }\n    return appendFrame$1(track, data, offset, this.basePTS, this.frameIndex);\n  }\n}\nclass AAC {\n  static getSilentFrame(codec, channelCount) {\n    switch (codec) {\n      case \"mp4a.40.2\":\n        if (channelCount === 1) {\n          return new Uint8Array([0, 200, 0, 128, 35, 128]);\n        } else if (channelCount === 2) {\n          return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]);\n        } else if (channelCount === 3) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]);\n        } else if (channelCount === 4) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]);\n        } else if (channelCount === 5) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]);\n        } else if (channelCount === 6) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]);\n        }\n        break;\n      default:\n        if (channelCount === 1) {\n          return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);\n        } else if (channelCount === 2) {\n          return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);\n        } else if (channelCount === 3) {\n          return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);\n        }\n        break;\n    }\n    return void 0;\n  }\n}\nconst UINT32_MAX = Math.pow(2, 32) - 1;\nclass MP4 {\n  static init() {\n    MP4.types = {\n      avc1: [],\n      // codingname\n      avcC: [],\n      btrt: [],\n      dinf: [],\n      dref: [],\n      esds: [],\n      ftyp: [],\n      hdlr: [],\n      mdat: [],\n      mdhd: [],\n      mdia: [],\n      mfhd: [],\n      minf: [],\n      moof: [],\n      moov: [],\n      mp4a: [],\n      \".mp3\": [],\n      dac3: [],\n      \"ac-3\": [],\n      mvex: [],\n      mvhd: [],\n      pasp: [],\n      sdtp: [],\n      stbl: [],\n      stco: [],\n      stsc: [],\n      stsd: [],\n      stsz: [],\n      stts: [],\n      tfdt: [],\n      tfhd: [],\n      traf: [],\n      trak: [],\n      trun: [],\n      trex: [],\n      tkhd: [],\n      vmhd: [],\n      smhd: []\n    };\n    let i;\n    for (i in MP4.types) {\n      if (MP4.types.hasOwnProperty(i)) {\n        MP4.types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)];\n      }\n    }\n    const videoHdlr = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      // pre_defined\n      118,\n      105,\n      100,\n      101,\n      // handler_type: 'vide'\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      86,\n      105,\n      100,\n      101,\n      111,\n      72,\n      97,\n      110,\n      100,\n      108,\n      101,\n      114,\n      0\n      // name: 'VideoHandler'\n    ]);\n    const audioHdlr = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      // pre_defined\n      115,\n      111,\n      117,\n      110,\n      // handler_type: 'soun'\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      83,\n      111,\n      117,\n      110,\n      100,\n      72,\n      97,\n      110,\n      100,\n      108,\n      101,\n      114,\n      0\n      // name: 'SoundHandler'\n    ]);\n    MP4.HDLR_TYPES = {\n      video: videoHdlr,\n      audio: audioHdlr\n    };\n    const dref = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      1,\n      // entry_count\n      0,\n      0,\n      0,\n      12,\n      // entry_size\n      117,\n      114,\n      108,\n      32,\n      // 'url' type\n      0,\n      // version 0\n      0,\n      0,\n      1\n      // entry_flags\n    ]);\n    const stco = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0\n      // entry_count\n    ]);\n    MP4.STTS = MP4.STSC = MP4.STCO = stco;\n    MP4.STSZ = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      // sample_size\n      0,\n      0,\n      0,\n      0\n      // sample_count\n    ]);\n    MP4.VMHD = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      1,\n      // flags\n      0,\n      0,\n      // graphicsmode\n      0,\n      0,\n      0,\n      0,\n      0,\n      0\n      // opcolor\n    ]);\n    MP4.SMHD = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      // balance\n      0,\n      0\n      // reserved\n    ]);\n    MP4.STSD = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      1\n    ]);\n    const majorBrand = new Uint8Array([105, 115, 111, 109]);\n    const avc1Brand = new Uint8Array([97, 118, 99, 49]);\n    const minorVersion = new Uint8Array([0, 0, 0, 1]);\n    MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n    MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n  }\n  static box(type, ...payload) {\n    let size = 8;\n    let i = payload.length;\n    const len = i;\n    while (i--) {\n      size += payload[i].byteLength;\n    }\n    const result = new Uint8Array(size);\n    result[0] = size >> 24 & 255;\n    result[1] = size >> 16 & 255;\n    result[2] = size >> 8 & 255;\n    result[3] = size & 255;\n    result.set(type, 4);\n    for (i = 0, size = 8; i < len; i++) {\n      result.set(payload[i], size);\n      size += payload[i].byteLength;\n    }\n    return result;\n  }\n  static hdlr(type) {\n    return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n  }\n  static mdat(data) {\n    return MP4.box(MP4.types.mdat, data);\n  }\n  static mdhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.mdhd, new Uint8Array([\n      1,\n      // version 1\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      2,\n      // creation_time\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      3,\n      // modification_time\n      timescale >> 24 & 255,\n      timescale >> 16 & 255,\n      timescale >> 8 & 255,\n      timescale & 255,\n      // timescale\n      upperWordDuration >> 24,\n      upperWordDuration >> 16 & 255,\n      upperWordDuration >> 8 & 255,\n      upperWordDuration & 255,\n      lowerWordDuration >> 24,\n      lowerWordDuration >> 16 & 255,\n      lowerWordDuration >> 8 & 255,\n      lowerWordDuration & 255,\n      85,\n      196,\n      // 'und' language (undetermined)\n      0,\n      0\n    ]));\n  }\n  static mdia(track) {\n    return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale, track.duration), MP4.hdlr(track.type), MP4.minf(track));\n  }\n  static mfhd(sequenceNumber) {\n    return MP4.box(MP4.types.mfhd, new Uint8Array([\n      0,\n      0,\n      0,\n      0,\n      // flags\n      sequenceNumber >> 24,\n      sequenceNumber >> 16 & 255,\n      sequenceNumber >> 8 & 255,\n      sequenceNumber & 255\n      // sequence_number\n    ]));\n  }\n  static minf(track) {\n    if (track.type === \"audio\") {\n      return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n    } else {\n      return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n    }\n  }\n  static moof(sn, baseMediaDecodeTime, track) {\n    return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track, baseMediaDecodeTime));\n  }\n  static moov(tracks) {\n    let i = tracks.length;\n    const boxes = [];\n    while (i--) {\n      boxes[i] = MP4.trak(tracks[i]);\n    }\n    return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(MP4.mvex(tracks)));\n  }\n  static mvex(tracks) {\n    let i = tracks.length;\n    const boxes = [];\n    while (i--) {\n      boxes[i] = MP4.trex(tracks[i]);\n    }\n    return MP4.box.apply(null, [MP4.types.mvex, ...boxes]);\n  }\n  static mvhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    const bytes = new Uint8Array([\n      1,\n      // version 1\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      2,\n      // creation_time\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      3,\n      // modification_time\n      timescale >> 24 & 255,\n      timescale >> 16 & 255,\n      timescale >> 8 & 255,\n      timescale & 255,\n      // timescale\n      upperWordDuration >> 24,\n      upperWordDuration >> 16 & 255,\n      upperWordDuration >> 8 & 255,\n      upperWordDuration & 255,\n      lowerWordDuration >> 24,\n      lowerWordDuration >> 16 & 255,\n      lowerWordDuration >> 8 & 255,\n      lowerWordDuration & 255,\n      0,\n      1,\n      0,\n      0,\n      // 1.0 rate\n      1,\n      0,\n      // 1.0 volume\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      64,\n      0,\n      0,\n      0,\n      // transformation: unity matrix\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      // pre_defined\n      255,\n      255,\n      255,\n      255\n      // next_track_ID\n    ]);\n    return MP4.box(MP4.types.mvhd, bytes);\n  }\n  static sdtp(track) {\n    const samples = track.samples || [];\n    const bytes = new Uint8Array(4 + samples.length);\n    let i;\n    let flags;\n    for (i = 0; i < samples.length; i++) {\n      flags = samples[i].flags;\n      bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n    }\n    return MP4.box(MP4.types.sdtp, bytes);\n  }\n  static stbl(track) {\n    return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n  }\n  static avc1(track) {\n    let sps = [];\n    let pps = [];\n    let i;\n    let data;\n    let len;\n    for (i = 0; i < track.sps.length; i++) {\n      data = track.sps[i];\n      len = data.byteLength;\n      sps.push(len >>> 8 & 255);\n      sps.push(len & 255);\n      sps = sps.concat(Array.prototype.slice.call(data));\n    }\n    for (i = 0; i < track.pps.length; i++) {\n      data = track.pps[i];\n      len = data.byteLength;\n      pps.push(len >>> 8 & 255);\n      pps.push(len & 255);\n      pps = pps.concat(Array.prototype.slice.call(data));\n    }\n    const avcc = MP4.box(MP4.types.avcC, new Uint8Array([\n      1,\n      // version\n      sps[3],\n      // profile\n      sps[4],\n      // profile compat\n      sps[5],\n      // level\n      252 | 3,\n      // lengthSizeMinusOne, hard-coded to 4 bytes\n      224 | track.sps.length\n      // 3bit reserved (111) + numOfSequenceParameterSets\n    ].concat(sps).concat([\n      track.pps.length\n      // numOfPictureParameterSets\n    ]).concat(pps)));\n    const width = track.width;\n    const height = track.height;\n    const hSpacing = track.pixelRatio[0];\n    const vSpacing = track.pixelRatio[1];\n    return MP4.box(\n      MP4.types.avc1,\n      new Uint8Array([\n        0,\n        0,\n        0,\n        // reserved\n        0,\n        0,\n        0,\n        // reserved\n        0,\n        1,\n        // data_reference_index\n        0,\n        0,\n        // pre_defined\n        0,\n        0,\n        // reserved\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        // pre_defined\n        width >> 8 & 255,\n        width & 255,\n        // width\n        height >> 8 & 255,\n        height & 255,\n        // height\n        0,\n        72,\n        0,\n        0,\n        // horizresolution\n        0,\n        72,\n        0,\n        0,\n        // vertresolution\n        0,\n        0,\n        0,\n        0,\n        // reserved\n        0,\n        1,\n        // frame_count\n        18,\n        100,\n        97,\n        105,\n        108,\n        // dailymotion/hls.js\n        121,\n        109,\n        111,\n        116,\n        105,\n        111,\n        110,\n        47,\n        104,\n        108,\n        115,\n        46,\n        106,\n        115,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        // compressorname\n        0,\n        24,\n        // depth = 24\n        17,\n        17\n      ]),\n      // pre_defined = -1\n      avcc,\n      MP4.box(MP4.types.btrt, new Uint8Array([\n        0,\n        28,\n        156,\n        128,\n        // bufferSizeDB\n        0,\n        45,\n        198,\n        192,\n        // maxBitrate\n        0,\n        45,\n        198,\n        192\n      ])),\n      // avgBitrate\n      MP4.box(MP4.types.pasp, new Uint8Array([\n        hSpacing >> 24,\n        // hSpacing\n        hSpacing >> 16 & 255,\n        hSpacing >> 8 & 255,\n        hSpacing & 255,\n        vSpacing >> 24,\n        // vSpacing\n        vSpacing >> 16 & 255,\n        vSpacing >> 8 & 255,\n        vSpacing & 255\n      ]))\n    );\n  }\n  static esds(track) {\n    const configlen = track.config.length;\n    return new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      3,\n      // descriptor_type\n      23 + configlen,\n      // length\n      0,\n      1,\n      // es_id\n      0,\n      // stream_priority\n      4,\n      // descriptor_type\n      15 + configlen,\n      // length\n      64,\n      // codec : mpeg4_audio\n      21,\n      // stream_type\n      0,\n      0,\n      0,\n      // buffer_size\n      0,\n      0,\n      0,\n      0,\n      // maxBitrate\n      0,\n      0,\n      0,\n      0,\n      // avgBitrate\n      5\n      // descriptor_type\n    ].concat([configlen]).concat(track.config).concat([6, 1, 2]));\n  }\n  static audioStsd(track) {\n    const samplerate = track.samplerate;\n    return new Uint8Array([\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      1,\n      // data_reference_index\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      track.channelCount,\n      // channelcount\n      0,\n      16,\n      // sampleSize:16bits\n      0,\n      0,\n      0,\n      0,\n      // reserved2\n      samplerate >> 8 & 255,\n      samplerate & 255,\n      //\n      0,\n      0\n    ]);\n  }\n  static mp4a(track) {\n    return MP4.box(MP4.types.mp4a, MP4.audioStsd(track), MP4.box(MP4.types.esds, MP4.esds(track)));\n  }\n  static mp3(track) {\n    return MP4.box(MP4.types[\".mp3\"], MP4.audioStsd(track));\n  }\n  static ac3(track) {\n    return MP4.box(MP4.types[\"ac-3\"], MP4.audioStsd(track), MP4.box(MP4.types.dac3, track.config));\n  }\n  static stsd(track) {\n    if (track.type === \"audio\") {\n      if (track.segmentCodec === \"mp3\" && track.codec === \"mp3\") {\n        return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n      }\n      if (track.segmentCodec === \"ac3\") {\n        return MP4.box(MP4.types.stsd, MP4.STSD, MP4.ac3(track));\n      }\n      return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n    } else {\n      return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n    }\n  }\n  static tkhd(track) {\n    const id = track.id;\n    const duration = track.duration * track.timescale;\n    const width = track.width;\n    const height = track.height;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.tkhd, new Uint8Array([\n      1,\n      // version 1\n      0,\n      0,\n      7,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      2,\n      // creation_time\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      3,\n      // modification_time\n      id >> 24 & 255,\n      id >> 16 & 255,\n      id >> 8 & 255,\n      id & 255,\n      // track_ID\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      upperWordDuration >> 24,\n      upperWordDuration >> 16 & 255,\n      upperWordDuration >> 8 & 255,\n      upperWordDuration & 255,\n      lowerWordDuration >> 24,\n      lowerWordDuration >> 16 & 255,\n      lowerWordDuration >> 8 & 255,\n      lowerWordDuration & 255,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      // layer\n      0,\n      0,\n      // alternate_group\n      0,\n      0,\n      // non-audio track volume\n      0,\n      0,\n      // reserved\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      64,\n      0,\n      0,\n      0,\n      // transformation: unity matrix\n      width >> 8 & 255,\n      width & 255,\n      0,\n      0,\n      // width\n      height >> 8 & 255,\n      height & 255,\n      0,\n      0\n      // height\n    ]));\n  }\n  static traf(track, baseMediaDecodeTime) {\n    const sampleDependencyTable = MP4.sdtp(track);\n    const id = track.id;\n    const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n    const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n    return MP4.box(\n      MP4.types.traf,\n      MP4.box(MP4.types.tfhd, new Uint8Array([\n        0,\n        // version 0\n        0,\n        0,\n        0,\n        // flags\n        id >> 24,\n        id >> 16 & 255,\n        id >> 8 & 255,\n        id & 255\n        // track_ID\n      ])),\n      MP4.box(MP4.types.tfdt, new Uint8Array([\n        1,\n        // version 1\n        0,\n        0,\n        0,\n        // flags\n        upperWordBaseMediaDecodeTime >> 24,\n        upperWordBaseMediaDecodeTime >> 16 & 255,\n        upperWordBaseMediaDecodeTime >> 8 & 255,\n        upperWordBaseMediaDecodeTime & 255,\n        lowerWordBaseMediaDecodeTime >> 24,\n        lowerWordBaseMediaDecodeTime >> 16 & 255,\n        lowerWordBaseMediaDecodeTime >> 8 & 255,\n        lowerWordBaseMediaDecodeTime & 255\n      ])),\n      MP4.trun(track, sampleDependencyTable.length + 16 + // tfhd\n      20 + // tfdt\n      8 + // traf header\n      16 + // mfhd\n      8 + // moof header\n      8),\n      // mdat header\n      sampleDependencyTable\n    );\n  }\n  /**\n   * Generate a track box.\n   * @param track a track definition\n   */\n  static trak(track) {\n    track.duration = track.duration || 4294967295;\n    return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n  }\n  static trex(track) {\n    const id = track.id;\n    return MP4.box(MP4.types.trex, new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      id >> 24,\n      id >> 16 & 255,\n      id >> 8 & 255,\n      id & 255,\n      // track_ID\n      0,\n      0,\n      0,\n      1,\n      // default_sample_description_index\n      0,\n      0,\n      0,\n      0,\n      // default_sample_duration\n      0,\n      0,\n      0,\n      0,\n      // default_sample_size\n      0,\n      1,\n      0,\n      1\n      // default_sample_flags\n    ]));\n  }\n  static trun(track, offset) {\n    const samples = track.samples || [];\n    const len = samples.length;\n    const arraylen = 12 + 16 * len;\n    const array = new Uint8Array(arraylen);\n    let i;\n    let sample;\n    let duration;\n    let size;\n    let flags;\n    let cts;\n    offset += 8 + arraylen;\n    array.set([\n      track.type === \"video\" ? 1 : 0,\n      // version 1 for video with signed-int sample_composition_time_offset\n      0,\n      15,\n      1,\n      // flags\n      len >>> 24 & 255,\n      len >>> 16 & 255,\n      len >>> 8 & 255,\n      len & 255,\n      // sample_count\n      offset >>> 24 & 255,\n      offset >>> 16 & 255,\n      offset >>> 8 & 255,\n      offset & 255\n      // data_offset\n    ], 0);\n    for (i = 0; i < len; i++) {\n      sample = samples[i];\n      duration = sample.duration;\n      size = sample.size;\n      flags = sample.flags;\n      cts = sample.cts;\n      array.set([\n        duration >>> 24 & 255,\n        duration >>> 16 & 255,\n        duration >>> 8 & 255,\n        duration & 255,\n        // sample_duration\n        size >>> 24 & 255,\n        size >>> 16 & 255,\n        size >>> 8 & 255,\n        size & 255,\n        // sample_size\n        flags.isLeading << 2 | flags.dependsOn,\n        flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.paddingValue << 1 | flags.isNonSync,\n        flags.degradPrio & 240 << 8,\n        flags.degradPrio & 15,\n        // sample_flags\n        cts >>> 24 & 255,\n        cts >>> 16 & 255,\n        cts >>> 8 & 255,\n        cts & 255\n        // sample_composition_time_offset\n      ], 12 + 16 * i);\n    }\n    return MP4.box(MP4.types.trun, array);\n  }\n  static initSegment(tracks) {\n    if (!MP4.types) {\n      MP4.init();\n    }\n    const movie = MP4.moov(tracks);\n    const result = appendUint8Array(MP4.FTYP, movie);\n    return result;\n  }\n}\nMP4.types = void 0;\nMP4.HDLR_TYPES = void 0;\nMP4.STTS = void 0;\nMP4.STSC = void 0;\nMP4.STCO = void 0;\nMP4.STSZ = void 0;\nMP4.VMHD = void 0;\nMP4.SMHD = void 0;\nMP4.STSD = void 0;\nMP4.FTYP = void 0;\nMP4.DINF = void 0;\nconst MPEG_TS_CLOCK_FREQ_HZ = 9e4;\nfunction toTimescaleFromBase(baseTime, destScale, srcBase = 1, round = false) {\n  const result = baseTime * destScale * srcBase;\n  return round ? Math.round(result) : result;\n}\nfunction toTimescaleFromScale(baseTime, destScale, srcScale = 1, round = false) {\n  return toTimescaleFromBase(baseTime, destScale, 1 / srcScale, round);\n}\nfunction toMsFromMpegTsClock(baseTime, round = false) {\n  return toTimescaleFromBase(baseTime, 1e3, 1 / MPEG_TS_CLOCK_FREQ_HZ, round);\n}\nfunction toMpegTsClockFromTimescale(baseTime, srcScale = 1) {\n  return toTimescaleFromBase(baseTime, MPEG_TS_CLOCK_FREQ_HZ, 1 / srcScale);\n}\nconst MAX_SILENT_FRAME_DURATION = 10 * 1e3;\nconst AAC_SAMPLES_PER_FRAME = 1024;\nconst MPEG_AUDIO_SAMPLE_PER_FRAME = 1152;\nconst AC3_SAMPLES_PER_FRAME = 1536;\nlet chromeVersion = null;\nlet safariWebkitVersion = null;\nclass MP4Remuxer {\n  constructor(observer, config, typeSupported, vendor = \"\") {\n    this.observer = void 0;\n    this.config = void 0;\n    this.typeSupported = void 0;\n    this.ISGenerated = false;\n    this._initPTS = null;\n    this._initDTS = null;\n    this.nextAvcDts = null;\n    this.nextAudioPts = null;\n    this.videoSampleDuration = null;\n    this.isAudioContiguous = false;\n    this.isVideoContiguous = false;\n    this.videoTrackConfig = void 0;\n    this.observer = observer;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.ISGenerated = false;\n    if (chromeVersion === null) {\n      const userAgent = navigator.userAgent || \"\";\n      const result = userAgent.match(/Chrome\\/(\\d+)/i);\n      chromeVersion = result ? parseInt(result[1]) : 0;\n    }\n    if (safariWebkitVersion === null) {\n      const result = navigator.userAgent.match(/Safari\\/(\\d+)/i);\n      safariWebkitVersion = result ? parseInt(result[1]) : 0;\n    }\n  }\n  destroy() {\n    this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null;\n  }\n  resetTimeStamp(defaultTimeStamp) {\n    logger.log(\"[mp4-remuxer]: initPTS & initDTS reset\");\n    this._initPTS = this._initDTS = defaultTimeStamp;\n  }\n  resetNextTimestamp() {\n    logger.log(\"[mp4-remuxer]: reset next timestamp\");\n    this.isVideoContiguous = false;\n    this.isAudioContiguous = false;\n  }\n  resetInitSegment() {\n    logger.log(\"[mp4-remuxer]: ISGenerated flag reset\");\n    this.ISGenerated = false;\n    this.videoTrackConfig = void 0;\n  }\n  getVideoStartPts(videoSamples) {\n    let rolloverDetected = false;\n    const startPTS = videoSamples.reduce((minPTS, sample) => {\n      const delta = sample.pts - minPTS;\n      if (delta < -4294967296) {\n        rolloverDetected = true;\n        return normalizePts(minPTS, sample.pts);\n      } else if (delta > 0) {\n        return minPTS;\n      } else {\n        return sample.pts;\n      }\n    }, videoSamples[0].pts);\n    if (rolloverDetected) {\n      logger.debug(\"PTS rollover detected\");\n    }\n    return startPTS;\n  }\n  remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, flush, playlistType) {\n    let video;\n    let audio;\n    let initSegment;\n    let text;\n    let id3;\n    let independent;\n    let audioTimeOffset = timeOffset;\n    let videoTimeOffset = timeOffset;\n    const hasAudio = audioTrack.pid > -1;\n    const hasVideo = videoTrack.pid > -1;\n    const length = videoTrack.samples.length;\n    const enoughAudioSamples = audioTrack.samples.length > 0;\n    const enoughVideoSamples = flush && length > 0 || length > 1;\n    const canRemuxAvc = (!hasAudio || enoughAudioSamples) && (!hasVideo || enoughVideoSamples) || this.ISGenerated || flush;\n    if (canRemuxAvc) {\n      if (this.ISGenerated) {\n        var _videoTrack$pixelRati, _config$pixelRatio, _videoTrack$pixelRati2, _config$pixelRatio2;\n        const config = this.videoTrackConfig;\n        if (config && (videoTrack.width !== config.width || videoTrack.height !== config.height || ((_videoTrack$pixelRati = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati[0]) !== ((_config$pixelRatio = config.pixelRatio) == null ? void 0 : _config$pixelRatio[0]) || ((_videoTrack$pixelRati2 = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati2[1]) !== ((_config$pixelRatio2 = config.pixelRatio) == null ? void 0 : _config$pixelRatio2[1]))) {\n          this.resetInitSegment();\n        }\n      } else {\n        initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n      }\n      const isVideoContiguous = this.isVideoContiguous;\n      let firstKeyFrameIndex = -1;\n      let firstKeyFramePTS;\n      if (enoughVideoSamples) {\n        firstKeyFrameIndex = findKeyframeIndex(videoTrack.samples);\n        if (!isVideoContiguous && this.config.forceKeyFrameOnDiscontinuity) {\n          independent = true;\n          if (firstKeyFrameIndex > 0) {\n            logger.warn(`[mp4-remuxer]: Dropped ${firstKeyFrameIndex} out of ${length} video samples due to a missing keyframe`);\n            const startPTS = this.getVideoStartPts(videoTrack.samples);\n            videoTrack.samples = videoTrack.samples.slice(firstKeyFrameIndex);\n            videoTrack.dropped += firstKeyFrameIndex;\n            videoTimeOffset += (videoTrack.samples[0].pts - startPTS) / videoTrack.inputTimeScale;\n            firstKeyFramePTS = videoTimeOffset;\n          } else if (firstKeyFrameIndex === -1) {\n            logger.warn(`[mp4-remuxer]: No keyframe found out of ${length} video samples`);\n            independent = false;\n          }\n        }\n      }\n      if (this.ISGenerated) {\n        if (enoughAudioSamples && enoughVideoSamples) {\n          const startPTS = this.getVideoStartPts(videoTrack.samples);\n          const tsDelta = normalizePts(audioTrack.samples[0].pts, startPTS) - startPTS;\n          const audiovideoTimestampDelta = tsDelta / videoTrack.inputTimeScale;\n          audioTimeOffset += Math.max(0, audiovideoTimestampDelta);\n          videoTimeOffset += Math.max(0, -audiovideoTimestampDelta);\n        }\n        if (enoughAudioSamples) {\n          if (!audioTrack.samplerate) {\n            logger.warn(\"[mp4-remuxer]: regenerate InitSegment as audio detected\");\n            initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n          }\n          audio = this.remuxAudio(audioTrack, audioTimeOffset, this.isAudioContiguous, accurateTimeOffset, hasVideo || enoughVideoSamples || playlistType === PlaylistLevelType.AUDIO ? videoTimeOffset : void 0);\n          if (enoughVideoSamples) {\n            const audioTrackLength = audio ? audio.endPTS - audio.startPTS : 0;\n            if (!videoTrack.inputTimeScale) {\n              logger.warn(\"[mp4-remuxer]: regenerate InitSegment as video detected\");\n              initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n            }\n            video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, audioTrackLength);\n          }\n        } else if (enoughVideoSamples) {\n          video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, 0);\n        }\n        if (video) {\n          video.firstKeyFrame = firstKeyFrameIndex;\n          video.independent = firstKeyFrameIndex !== -1;\n          video.firstKeyFramePTS = firstKeyFramePTS;\n        }\n      }\n    }\n    if (this.ISGenerated && this._initPTS && this._initDTS) {\n      if (id3Track.samples.length) {\n        id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, this._initPTS, this._initDTS);\n      }\n      if (textTrack.samples.length) {\n        text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, this._initPTS);\n      }\n    }\n    return {\n      audio,\n      video,\n      initSegment,\n      independent,\n      text,\n      id3\n    };\n  }\n  generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset) {\n    const audioSamples = audioTrack.samples;\n    const videoSamples = videoTrack.samples;\n    const typeSupported = this.typeSupported;\n    const tracks = {};\n    const _initPTS = this._initPTS;\n    let computePTSDTS = !_initPTS || accurateTimeOffset;\n    let container = \"audio/mp4\";\n    let initPTS;\n    let initDTS;\n    let timescale;\n    if (computePTSDTS) {\n      initPTS = initDTS = Infinity;\n    }\n    if (audioTrack.config && audioSamples.length) {\n      audioTrack.timescale = audioTrack.samplerate;\n      switch (audioTrack.segmentCodec) {\n        case \"mp3\":\n          if (typeSupported.mpeg) {\n            container = \"audio/mpeg\";\n            audioTrack.codec = \"\";\n          } else if (typeSupported.mp3) {\n            audioTrack.codec = \"mp3\";\n          }\n          break;\n        case \"ac3\":\n          audioTrack.codec = \"ac-3\";\n          break;\n      }\n      tracks.audio = {\n        id: \"audio\",\n        container,\n        codec: audioTrack.codec,\n        initSegment: audioTrack.segmentCodec === \"mp3\" && typeSupported.mpeg ? new Uint8Array(0) : MP4.initSegment([audioTrack]),\n        metadata: {\n          channelCount: audioTrack.channelCount\n        }\n      };\n      if (computePTSDTS) {\n        timescale = audioTrack.inputTimeScale;\n        if (!_initPTS || timescale !== _initPTS.timescale) {\n          initPTS = initDTS = audioSamples[0].pts - Math.round(timescale * timeOffset);\n        } else {\n          computePTSDTS = false;\n        }\n      }\n    }\n    if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n      videoTrack.timescale = videoTrack.inputTimeScale;\n      tracks.video = {\n        id: \"main\",\n        container: \"video/mp4\",\n        codec: videoTrack.codec,\n        initSegment: MP4.initSegment([videoTrack]),\n        metadata: {\n          width: videoTrack.width,\n          height: videoTrack.height\n        }\n      };\n      if (computePTSDTS) {\n        timescale = videoTrack.inputTimeScale;\n        if (!_initPTS || timescale !== _initPTS.timescale) {\n          const startPTS = this.getVideoStartPts(videoSamples);\n          const startOffset = Math.round(timescale * timeOffset);\n          initDTS = Math.min(initDTS, normalizePts(videoSamples[0].dts, startPTS) - startOffset);\n          initPTS = Math.min(initPTS, startPTS - startOffset);\n        } else {\n          computePTSDTS = false;\n        }\n      }\n      this.videoTrackConfig = {\n        width: videoTrack.width,\n        height: videoTrack.height,\n        pixelRatio: videoTrack.pixelRatio\n      };\n    }\n    if (Object.keys(tracks).length) {\n      this.ISGenerated = true;\n      if (computePTSDTS) {\n        this._initPTS = {\n          baseTime: initPTS,\n          timescale\n        };\n        this._initDTS = {\n          baseTime: initDTS,\n          timescale\n        };\n      } else {\n        initPTS = timescale = void 0;\n      }\n      return {\n        tracks,\n        initPTS,\n        timescale\n      };\n    }\n  }\n  remuxVideo(track, timeOffset, contiguous, audioTrackLength) {\n    const timeScale = track.inputTimeScale;\n    const inputSamples = track.samples;\n    const outputSamples = [];\n    const nbSamples = inputSamples.length;\n    const initPTS = this._initPTS;\n    let nextAvcDts = this.nextAvcDts;\n    let offset = 8;\n    let mp4SampleDuration = this.videoSampleDuration;\n    let firstDTS;\n    let lastDTS;\n    let minPTS = Number.POSITIVE_INFINITY;\n    let maxPTS = Number.NEGATIVE_INFINITY;\n    let sortSamples = false;\n    if (!contiguous || nextAvcDts === null) {\n      const pts = timeOffset * timeScale;\n      const cts = inputSamples[0].pts - normalizePts(inputSamples[0].dts, inputSamples[0].pts);\n      if (chromeVersion && nextAvcDts !== null && Math.abs(pts - cts - nextAvcDts) < 15e3) {\n        contiguous = true;\n      } else {\n        nextAvcDts = pts - cts;\n      }\n    }\n    const initTime = initPTS.baseTime * timeScale / initPTS.timescale;\n    for (let i = 0; i < nbSamples; i++) {\n      const sample = inputSamples[i];\n      sample.pts = normalizePts(sample.pts - initTime, nextAvcDts);\n      sample.dts = normalizePts(sample.dts - initTime, nextAvcDts);\n      if (sample.dts < inputSamples[i > 0 ? i - 1 : i].dts) {\n        sortSamples = true;\n      }\n    }\n    if (sortSamples) {\n      inputSamples.sort(function(a, b) {\n        const deltadts = a.dts - b.dts;\n        const deltapts = a.pts - b.pts;\n        return deltadts || deltapts;\n      });\n    }\n    firstDTS = inputSamples[0].dts;\n    lastDTS = inputSamples[inputSamples.length - 1].dts;\n    const inputDuration = lastDTS - firstDTS;\n    const averageSampleDuration = inputDuration ? Math.round(inputDuration / (nbSamples - 1)) : mp4SampleDuration || track.inputTimeScale / 30;\n    if (contiguous) {\n      const delta = firstDTS - nextAvcDts;\n      const foundHole = delta > averageSampleDuration;\n      const foundOverlap = delta < -1;\n      if (foundHole || foundOverlap) {\n        if (foundHole) {\n          logger.warn(`AVC: ${toMsFromMpegTsClock(delta, true)} ms (${delta}dts) hole between fragments detected at ${timeOffset.toFixed(3)}`);\n        } else {\n          logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected at ${timeOffset.toFixed(3)}`);\n        }\n        if (!foundOverlap || nextAvcDts >= inputSamples[0].pts || chromeVersion) {\n          firstDTS = nextAvcDts;\n          const firstPTS = inputSamples[0].pts - delta;\n          if (foundHole) {\n            inputSamples[0].dts = firstDTS;\n            inputSamples[0].pts = firstPTS;\n          } else {\n            for (let i = 0; i < inputSamples.length; i++) {\n              if (inputSamples[i].dts > firstPTS) {\n                break;\n              }\n              inputSamples[i].dts -= delta;\n              inputSamples[i].pts -= delta;\n            }\n          }\n          logger.log(`Video: Initial PTS/DTS adjusted: ${toMsFromMpegTsClock(firstPTS, true)}/${toMsFromMpegTsClock(firstDTS, true)}, delta: ${toMsFromMpegTsClock(delta, true)} ms`);\n        }\n      }\n    }\n    firstDTS = Math.max(0, firstDTS);\n    let nbNalu = 0;\n    let naluLen = 0;\n    let dtsStep = firstDTS;\n    for (let i = 0; i < nbSamples; i++) {\n      const sample = inputSamples[i];\n      const units = sample.units;\n      const nbUnits = units.length;\n      let sampleLen = 0;\n      for (let j = 0; j < nbUnits; j++) {\n        sampleLen += units[j].data.length;\n      }\n      naluLen += sampleLen;\n      nbNalu += nbUnits;\n      sample.length = sampleLen;\n      if (sample.dts < dtsStep) {\n        sample.dts = dtsStep;\n        dtsStep += averageSampleDuration / 4 | 0 || 1;\n      } else {\n        dtsStep = sample.dts;\n      }\n      minPTS = Math.min(sample.pts, minPTS);\n      maxPTS = Math.max(sample.pts, maxPTS);\n    }\n    lastDTS = inputSamples[nbSamples - 1].dts;\n    const mdatSize = naluLen + 4 * nbNalu + 8;\n    let mdat;\n    try {\n      mdat = new Uint8Array(mdatSize);\n    } catch (err) {\n      this.observer.emit(Events.ERROR, Events.ERROR, {\n        type: ErrorTypes.MUX_ERROR,\n        details: ErrorDetails.REMUX_ALLOC_ERROR,\n        fatal: false,\n        error: err,\n        bytes: mdatSize,\n        reason: `fail allocating video mdat ${mdatSize}`\n      });\n      return;\n    }\n    const view = new DataView(mdat.buffer);\n    view.setUint32(0, mdatSize);\n    mdat.set(MP4.types.mdat, 4);\n    let stretchedLastFrame = false;\n    let minDtsDelta = Number.POSITIVE_INFINITY;\n    let minPtsDelta = Number.POSITIVE_INFINITY;\n    let maxDtsDelta = Number.NEGATIVE_INFINITY;\n    let maxPtsDelta = Number.NEGATIVE_INFINITY;\n    for (let i = 0; i < nbSamples; i++) {\n      const VideoSample = inputSamples[i];\n      const VideoSampleUnits = VideoSample.units;\n      let mp4SampleLength = 0;\n      for (let j = 0, nbUnits = VideoSampleUnits.length; j < nbUnits; j++) {\n        const unit = VideoSampleUnits[j];\n        const unitData = unit.data;\n        const unitDataLen = unit.data.byteLength;\n        view.setUint32(offset, unitDataLen);\n        offset += 4;\n        mdat.set(unitData, offset);\n        offset += unitDataLen;\n        mp4SampleLength += 4 + unitDataLen;\n      }\n      let ptsDelta;\n      if (i < nbSamples - 1) {\n        mp4SampleDuration = inputSamples[i + 1].dts - VideoSample.dts;\n        ptsDelta = inputSamples[i + 1].pts - VideoSample.pts;\n      } else {\n        const config = this.config;\n        const lastFrameDuration = i > 0 ? VideoSample.dts - inputSamples[i - 1].dts : averageSampleDuration;\n        ptsDelta = i > 0 ? VideoSample.pts - inputSamples[i - 1].pts : averageSampleDuration;\n        if (config.stretchShortVideoTrack && this.nextAudioPts !== null) {\n          const gapTolerance = Math.floor(config.maxBufferHole * timeScale);\n          const deltaToFrameEnd = (audioTrackLength ? minPTS + audioTrackLength * timeScale : this.nextAudioPts) - VideoSample.pts;\n          if (deltaToFrameEnd > gapTolerance) {\n            mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n            if (mp4SampleDuration < 0) {\n              mp4SampleDuration = lastFrameDuration;\n            } else {\n              stretchedLastFrame = true;\n            }\n            logger.log(`[mp4-remuxer]: It is approximately ${deltaToFrameEnd / 90} ms to the next segment; using duration ${mp4SampleDuration / 90} ms for the last video frame.`);\n          } else {\n            mp4SampleDuration = lastFrameDuration;\n          }\n        } else {\n          mp4SampleDuration = lastFrameDuration;\n        }\n      }\n      const compositionTimeOffset = Math.round(VideoSample.pts - VideoSample.dts);\n      minDtsDelta = Math.min(minDtsDelta, mp4SampleDuration);\n      maxDtsDelta = Math.max(maxDtsDelta, mp4SampleDuration);\n      minPtsDelta = Math.min(minPtsDelta, ptsDelta);\n      maxPtsDelta = Math.max(maxPtsDelta, ptsDelta);\n      outputSamples.push(new Mp4Sample(VideoSample.key, mp4SampleDuration, mp4SampleLength, compositionTimeOffset));\n    }\n    if (outputSamples.length) {\n      if (chromeVersion) {\n        if (chromeVersion < 70) {\n          const flags = outputSamples[0].flags;\n          flags.dependsOn = 2;\n          flags.isNonSync = 0;\n        }\n      } else if (safariWebkitVersion) {\n        if (maxPtsDelta - minPtsDelta < maxDtsDelta - minDtsDelta && averageSampleDuration / maxDtsDelta < 0.025 && outputSamples[0].cts === 0) {\n          logger.warn(\"Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.\");\n          let dts = firstDTS;\n          for (let i = 0, len = outputSamples.length; i < len; i++) {\n            const nextDts = dts + outputSamples[i].duration;\n            const pts = dts + outputSamples[i].cts;\n            if (i < len - 1) {\n              const nextPts = nextDts + outputSamples[i + 1].cts;\n              outputSamples[i].duration = nextPts - pts;\n            } else {\n              outputSamples[i].duration = i ? outputSamples[i - 1].duration : averageSampleDuration;\n            }\n            outputSamples[i].cts = 0;\n            dts = nextDts;\n          }\n        }\n      }\n    }\n    mp4SampleDuration = stretchedLastFrame || !mp4SampleDuration ? averageSampleDuration : mp4SampleDuration;\n    this.nextAvcDts = nextAvcDts = lastDTS + mp4SampleDuration;\n    this.videoSampleDuration = mp4SampleDuration;\n    this.isVideoContiguous = true;\n    const moof = MP4.moof(track.sequenceNumber++, firstDTS, _extends({}, track, {\n      samples: outputSamples\n    }));\n    const type = \"video\";\n    const data = {\n      data1: moof,\n      data2: mdat,\n      startPTS: minPTS / timeScale,\n      endPTS: (maxPTS + mp4SampleDuration) / timeScale,\n      startDTS: firstDTS / timeScale,\n      endDTS: nextAvcDts / timeScale,\n      type,\n      hasAudio: false,\n      hasVideo: true,\n      nb: outputSamples.length,\n      dropped: track.dropped\n    };\n    track.samples = [];\n    track.dropped = 0;\n    return data;\n  }\n  getSamplesPerFrame(track) {\n    switch (track.segmentCodec) {\n      case \"mp3\":\n        return MPEG_AUDIO_SAMPLE_PER_FRAME;\n      case \"ac3\":\n        return AC3_SAMPLES_PER_FRAME;\n      default:\n        return AAC_SAMPLES_PER_FRAME;\n    }\n  }\n  remuxAudio(track, timeOffset, contiguous, accurateTimeOffset, videoTimeOffset) {\n    const inputTimeScale = track.inputTimeScale;\n    const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n    const scaleFactor = inputTimeScale / mp4timeScale;\n    const mp4SampleDuration = this.getSamplesPerFrame(track);\n    const inputSampleDuration = mp4SampleDuration * scaleFactor;\n    const initPTS = this._initPTS;\n    const rawMPEG = track.segmentCodec === \"mp3\" && this.typeSupported.mpeg;\n    const outputSamples = [];\n    const alignedWithVideo = videoTimeOffset !== void 0;\n    let inputSamples = track.samples;\n    let offset = rawMPEG ? 0 : 8;\n    let nextAudioPts = this.nextAudioPts || -1;\n    const timeOffsetMpegTS = timeOffset * inputTimeScale;\n    const initTime = initPTS.baseTime * inputTimeScale / initPTS.timescale;\n    this.isAudioContiguous = contiguous = contiguous || inputSamples.length && nextAudioPts > 0 && (accurateTimeOffset && Math.abs(timeOffsetMpegTS - nextAudioPts) < 9e3 || Math.abs(normalizePts(inputSamples[0].pts - initTime, timeOffsetMpegTS) - nextAudioPts) < 20 * inputSampleDuration);\n    inputSamples.forEach(function(sample) {\n      sample.pts = normalizePts(sample.pts - initTime, timeOffsetMpegTS);\n    });\n    if (!contiguous || nextAudioPts < 0) {\n      inputSamples = inputSamples.filter((sample) => sample.pts >= 0);\n      if (!inputSamples.length) {\n        return;\n      }\n      if (videoTimeOffset === 0) {\n        nextAudioPts = 0;\n      } else if (accurateTimeOffset && !alignedWithVideo) {\n        nextAudioPts = Math.max(0, timeOffsetMpegTS);\n      } else {\n        nextAudioPts = inputSamples[0].pts;\n      }\n    }\n    if (track.segmentCodec === \"aac\") {\n      const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n      for (let i = 0, nextPts = nextAudioPts; i < inputSamples.length; i++) {\n        const sample = inputSamples[i];\n        const pts = sample.pts;\n        const delta = pts - nextPts;\n        const duration = Math.abs(1e3 * delta / inputTimeScale);\n        if (delta <= -maxAudioFramesDrift * inputSampleDuration && alignedWithVideo) {\n          if (i === 0) {\n            logger.warn(`Audio frame @ ${(pts / inputTimeScale).toFixed(3)}s overlaps nextAudioPts by ${Math.round(1e3 * delta / inputTimeScale)} ms.`);\n            this.nextAudioPts = nextAudioPts = nextPts = pts;\n          }\n        } else if (delta >= maxAudioFramesDrift * inputSampleDuration && duration < MAX_SILENT_FRAME_DURATION && alignedWithVideo) {\n          let missing = Math.round(delta / inputSampleDuration);\n          nextPts = pts - missing * inputSampleDuration;\n          if (nextPts < 0) {\n            missing--;\n            nextPts += inputSampleDuration;\n          }\n          if (i === 0) {\n            this.nextAudioPts = nextAudioPts = nextPts;\n          }\n          logger.warn(`[mp4-remuxer]: Injecting ${missing} audio frame @ ${(nextPts / inputTimeScale).toFixed(3)}s due to ${Math.round(1e3 * delta / inputTimeScale)} ms gap.`);\n          for (let j = 0; j < missing; j++) {\n            const newStamp = Math.max(nextPts, 0);\n            let fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n            if (!fillFrame) {\n              logger.log(\"[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead.\");\n              fillFrame = sample.unit.subarray();\n            }\n            inputSamples.splice(i, 0, {\n              unit: fillFrame,\n              pts: newStamp\n            });\n            nextPts += inputSampleDuration;\n            i++;\n          }\n        }\n        sample.pts = nextPts;\n        nextPts += inputSampleDuration;\n      }\n    }\n    let firstPTS = null;\n    let lastPTS = null;\n    let mdat;\n    let mdatSize = 0;\n    let sampleLength = inputSamples.length;\n    while (sampleLength--) {\n      mdatSize += inputSamples[sampleLength].unit.byteLength;\n    }\n    for (let j = 0, _nbSamples = inputSamples.length; j < _nbSamples; j++) {\n      const audioSample = inputSamples[j];\n      const unit = audioSample.unit;\n      let pts = audioSample.pts;\n      if (lastPTS !== null) {\n        const prevSample = outputSamples[j - 1];\n        prevSample.duration = Math.round((pts - lastPTS) / scaleFactor);\n      } else {\n        if (contiguous && track.segmentCodec === \"aac\") {\n          pts = nextAudioPts;\n        }\n        firstPTS = pts;\n        if (mdatSize > 0) {\n          mdatSize += offset;\n          try {\n            mdat = new Uint8Array(mdatSize);\n          } catch (err) {\n            this.observer.emit(Events.ERROR, Events.ERROR, {\n              type: ErrorTypes.MUX_ERROR,\n              details: ErrorDetails.REMUX_ALLOC_ERROR,\n              fatal: false,\n              error: err,\n              bytes: mdatSize,\n              reason: `fail allocating audio mdat ${mdatSize}`\n            });\n            return;\n          }\n          if (!rawMPEG) {\n            const view = new DataView(mdat.buffer);\n            view.setUint32(0, mdatSize);\n            mdat.set(MP4.types.mdat, 4);\n          }\n        } else {\n          return;\n        }\n      }\n      mdat.set(unit, offset);\n      const unitLen = unit.byteLength;\n      offset += unitLen;\n      outputSamples.push(new Mp4Sample(true, mp4SampleDuration, unitLen, 0));\n      lastPTS = pts;\n    }\n    const nbSamples = outputSamples.length;\n    if (!nbSamples) {\n      return;\n    }\n    const lastSample = outputSamples[outputSamples.length - 1];\n    this.nextAudioPts = nextAudioPts = lastPTS + scaleFactor * lastSample.duration;\n    const moof = rawMPEG ? new Uint8Array(0) : MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, _extends({}, track, {\n      samples: outputSamples\n    }));\n    track.samples = [];\n    const start = firstPTS / inputTimeScale;\n    const end = nextAudioPts / inputTimeScale;\n    const type = \"audio\";\n    const audioData = {\n      data1: moof,\n      data2: mdat,\n      startPTS: start,\n      endPTS: end,\n      startDTS: start,\n      endDTS: end,\n      type,\n      hasAudio: true,\n      hasVideo: false,\n      nb: nbSamples\n    };\n    this.isAudioContiguous = true;\n    return audioData;\n  }\n  remuxEmptyAudio(track, timeOffset, contiguous, videoData) {\n    const inputTimeScale = track.inputTimeScale;\n    const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n    const scaleFactor = inputTimeScale / mp4timeScale;\n    const nextAudioPts = this.nextAudioPts;\n    const initDTS = this._initDTS;\n    const init90kHz = initDTS.baseTime * 9e4 / initDTS.timescale;\n    const startDTS = (nextAudioPts !== null ? nextAudioPts : videoData.startDTS * inputTimeScale) + init90kHz;\n    const endDTS = videoData.endDTS * inputTimeScale + init90kHz;\n    const frameDuration = scaleFactor * AAC_SAMPLES_PER_FRAME;\n    const nbSamples = Math.ceil((endDTS - startDTS) / frameDuration);\n    const silentFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n    logger.warn(\"[mp4-remuxer]: remux empty Audio\");\n    if (!silentFrame) {\n      logger.trace(\"[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec\");\n      return;\n    }\n    const samples = [];\n    for (let i = 0; i < nbSamples; i++) {\n      const stamp = startDTS + i * frameDuration;\n      samples.push({\n        unit: silentFrame,\n        pts: stamp,\n        dts: stamp\n      });\n    }\n    track.samples = samples;\n    return this.remuxAudio(track, timeOffset, contiguous, false);\n  }\n}\nfunction normalizePts(value, reference) {\n  let offset;\n  if (reference === null) {\n    return value;\n  }\n  if (reference < value) {\n    offset = -8589934592;\n  } else {\n    offset = 8589934592;\n  }\n  while (Math.abs(value - reference) > 4294967296) {\n    value += offset;\n  }\n  return value;\n}\nfunction findKeyframeIndex(samples) {\n  for (let i = 0; i < samples.length; i++) {\n    if (samples[i].key) {\n      return i;\n    }\n  }\n  return -1;\n}\nfunction flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {\n  const length = track.samples.length;\n  if (!length) {\n    return;\n  }\n  const inputTimeScale = track.inputTimeScale;\n  for (let index = 0; index < length; index++) {\n    const sample = track.samples[index];\n    sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n    sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n  }\n  const samples = track.samples;\n  track.samples = [];\n  return {\n    samples\n  };\n}\nfunction flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {\n  const length = track.samples.length;\n  if (!length) {\n    return;\n  }\n  const inputTimeScale = track.inputTimeScale;\n  for (let index = 0; index < length; index++) {\n    const sample = track.samples[index];\n    sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n  }\n  track.samples.sort((a, b) => a.pts - b.pts);\n  const samples = track.samples;\n  track.samples = [];\n  return {\n    samples\n  };\n}\nclass Mp4Sample {\n  constructor(isKeyframe, duration, size, cts) {\n    this.size = void 0;\n    this.duration = void 0;\n    this.cts = void 0;\n    this.flags = void 0;\n    this.duration = duration;\n    this.size = size;\n    this.cts = cts;\n    this.flags = {\n      isLeading: 0,\n      isDependedOn: 0,\n      hasRedundancy: 0,\n      degradPrio: 0,\n      dependsOn: isKeyframe ? 2 : 1,\n      isNonSync: isKeyframe ? 0 : 1\n    };\n  }\n}\nclass PassThroughRemuxer {\n  constructor() {\n    this.emitInitSegment = false;\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this.initData = void 0;\n    this.initPTS = null;\n    this.initTracks = void 0;\n    this.lastEndTime = null;\n  }\n  destroy() {\n  }\n  resetTimeStamp(defaultInitPTS) {\n    this.initPTS = defaultInitPTS;\n    this.lastEndTime = null;\n  }\n  resetNextTimestamp() {\n    this.lastEndTime = null;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, decryptdata) {\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this.generateInitSegment(patchEncyptionData(initSegment, decryptdata));\n    this.emitInitSegment = true;\n  }\n  generateInitSegment(initSegment) {\n    let {\n      audioCodec,\n      videoCodec\n    } = this;\n    if (!(initSegment != null && initSegment.byteLength)) {\n      this.initTracks = void 0;\n      this.initData = void 0;\n      return;\n    }\n    const initData = this.initData = parseInitSegment(initSegment);\n    if (initData.audio) {\n      audioCodec = getParsedTrackCodec(initData.audio, ElementaryStreamTypes.AUDIO);\n    }\n    if (initData.video) {\n      videoCodec = getParsedTrackCodec(initData.video, ElementaryStreamTypes.VIDEO);\n    }\n    const tracks = {};\n    if (initData.audio && initData.video) {\n      tracks.audiovideo = {\n        container: \"video/mp4\",\n        codec: audioCodec + \",\" + videoCodec,\n        initSegment,\n        id: \"main\"\n      };\n    } else if (initData.audio) {\n      tracks.audio = {\n        container: \"audio/mp4\",\n        codec: audioCodec,\n        initSegment,\n        id: \"audio\"\n      };\n    } else if (initData.video) {\n      tracks.video = {\n        container: \"video/mp4\",\n        codec: videoCodec,\n        initSegment,\n        id: \"main\"\n      };\n    } else {\n      logger.warn(\"[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes.\");\n    }\n    this.initTracks = tracks;\n  }\n  remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset) {\n    var _initData, _initData2;\n    let {\n      initPTS,\n      lastEndTime\n    } = this;\n    const result = {\n      audio: void 0,\n      video: void 0,\n      text: textTrack,\n      id3: id3Track,\n      initSegment: void 0\n    };\n    if (!isFiniteNumber(lastEndTime)) {\n      lastEndTime = this.lastEndTime = timeOffset || 0;\n    }\n    const data = videoTrack.samples;\n    if (!(data != null && data.length)) {\n      return result;\n    }\n    const initSegment = {\n      initPTS: void 0,\n      timescale: 1\n    };\n    let initData = this.initData;\n    if (!((_initData = initData) != null && _initData.length)) {\n      this.generateInitSegment(data);\n      initData = this.initData;\n    }\n    if (!((_initData2 = initData) != null && _initData2.length)) {\n      logger.warn(\"[passthrough-remuxer.ts]: Failed to generate initSegment.\");\n      return result;\n    }\n    if (this.emitInitSegment) {\n      initSegment.tracks = this.initTracks;\n      this.emitInitSegment = false;\n    }\n    const duration = getDuration(data, initData);\n    const startDTS = getStartDTS(initData, data);\n    const decodeTime = startDTS === null ? timeOffset : startDTS;\n    if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {\n      initSegment.initPTS = decodeTime - timeOffset;\n      if (initPTS && initPTS.timescale === 1) {\n        logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);\n      }\n      this.initPTS = initPTS = {\n        baseTime: initSegment.initPTS,\n        timescale: 1\n      };\n    }\n    const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;\n    const endTime = startTime + duration;\n    offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);\n    if (duration > 0) {\n      this.lastEndTime = endTime;\n    } else {\n      logger.warn(\"Duration parsed from mp4 should be greater than zero\");\n      this.resetNextTimestamp();\n    }\n    const hasAudio = !!initData.audio;\n    const hasVideo = !!initData.video;\n    let type = \"\";\n    if (hasAudio) {\n      type += \"audio\";\n    }\n    if (hasVideo) {\n      type += \"video\";\n    }\n    const track = {\n      data1: data,\n      startPTS: startTime,\n      startDTS: startTime,\n      endPTS: endTime,\n      endDTS: endTime,\n      type,\n      hasAudio,\n      hasVideo,\n      nb: 1,\n      dropped: 0\n    };\n    result.audio = track.type === \"audio\" ? track : void 0;\n    result.video = track.type !== \"audio\" ? track : void 0;\n    result.initSegment = initSegment;\n    result.id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, initPTS, initPTS);\n    if (textTrack.samples.length) {\n      result.text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, initPTS);\n    }\n    return result;\n  }\n}\nfunction isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {\n  if (initPTS === null) {\n    return true;\n  }\n  const minDuration = Math.max(duration, 1);\n  const startTime = startDTS - initPTS.baseTime / initPTS.timescale;\n  return Math.abs(startTime - timeOffset) > minDuration;\n}\nfunction getParsedTrackCodec(track, type) {\n  const parsedCodec = track == null ? void 0 : track.codec;\n  if (parsedCodec && parsedCodec.length > 4) {\n    return parsedCodec;\n  }\n  if (type === ElementaryStreamTypes.AUDIO) {\n    if (parsedCodec === \"ec-3\" || parsedCodec === \"ac-3\" || parsedCodec === \"alac\") {\n      return parsedCodec;\n    }\n    if (parsedCodec === \"fLaC\" || parsedCodec === \"Opus\") {\n      const preferManagedMediaSource = false;\n      return getCodecCompatibleName(parsedCodec, preferManagedMediaSource);\n    }\n    const result = \"mp4a.40.5\";\n    logger.info(`Parsed audio codec \"${parsedCodec}\" or audio object type not handled. Using \"${result}\"`);\n    return result;\n  }\n  logger.warn(`Unhandled video codec \"${parsedCodec}\"`);\n  if (parsedCodec === \"hvc1\" || parsedCodec === \"hev1\") {\n    return \"hvc1.1.6.L120.90\";\n  }\n  if (parsedCodec === \"av01\") {\n    return \"av01.0.04M.08\";\n  }\n  return \"avc1.42e01e\";\n}\nlet now;\ntry {\n  now = self.performance.now.bind(self.performance);\n} catch (err) {\n  logger.debug(\"Unable to use Performance API on this environment\");\n  now = optionalSelf == null ? void 0 : optionalSelf.Date.now;\n}\nconst muxConfig = [{\n  demux: MP4Demuxer,\n  remux: PassThroughRemuxer\n}, {\n  demux: TSDemuxer,\n  remux: MP4Remuxer\n}, {\n  demux: AACDemuxer,\n  remux: MP4Remuxer\n}, {\n  demux: MP3Demuxer,\n  remux: MP4Remuxer\n}];\n{\n  muxConfig.splice(2, 0, {\n    demux: AC3Demuxer,\n    remux: MP4Remuxer\n  });\n}\nclass Transmuxer {\n  constructor(observer, typeSupported, config, vendor, id) {\n    this.async = false;\n    this.observer = void 0;\n    this.typeSupported = void 0;\n    this.config = void 0;\n    this.vendor = void 0;\n    this.id = void 0;\n    this.demuxer = void 0;\n    this.remuxer = void 0;\n    this.decrypter = void 0;\n    this.probe = void 0;\n    this.decryptionPromise = null;\n    this.transmuxConfig = void 0;\n    this.currentTransmuxState = void 0;\n    this.observer = observer;\n    this.typeSupported = typeSupported;\n    this.config = config;\n    this.vendor = vendor;\n    this.id = id;\n  }\n  configure(transmuxConfig) {\n    this.transmuxConfig = transmuxConfig;\n    if (this.decrypter) {\n      this.decrypter.reset();\n    }\n  }\n  push(data, decryptdata, chunkMeta, state) {\n    const stats = chunkMeta.transmuxing;\n    stats.executeStart = now();\n    let uintData = new Uint8Array(data);\n    const {\n      currentTransmuxState,\n      transmuxConfig\n    } = this;\n    if (state) {\n      this.currentTransmuxState = state;\n    }\n    const {\n      contiguous,\n      discontinuity,\n      trackSwitch,\n      accurateTimeOffset,\n      timeOffset,\n      initSegmentChange\n    } = state || currentTransmuxState;\n    const {\n      audioCodec,\n      videoCodec,\n      defaultInitPts,\n      duration,\n      initSegmentData\n    } = transmuxConfig;\n    const keyData = getEncryptionType(uintData, decryptdata);\n    if (keyData && keyData.method === \"AES-128\") {\n      const decrypter = this.getDecrypter();\n      if (decrypter.isSync()) {\n        let decryptedData = decrypter.softwareDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer);\n        const loadingParts = chunkMeta.part > -1;\n        if (loadingParts) {\n          decryptedData = decrypter.flush();\n        }\n        if (!decryptedData) {\n          stats.executeEnd = now();\n          return emptyResult(chunkMeta);\n        }\n        uintData = new Uint8Array(decryptedData);\n      } else {\n        this.decryptionPromise = decrypter.webCryptoDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer).then((decryptedData) => {\n          const result2 = this.push(decryptedData, null, chunkMeta);\n          this.decryptionPromise = null;\n          return result2;\n        });\n        return this.decryptionPromise;\n      }\n    }\n    const resetMuxers = this.needsProbing(discontinuity, trackSwitch);\n    if (resetMuxers) {\n      const error = this.configureTransmuxer(uintData);\n      if (error) {\n        logger.warn(`[transmuxer] ${error.message}`);\n        this.observer.emit(Events.ERROR, Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.FRAG_PARSING_ERROR,\n          fatal: false,\n          error,\n          reason: error.message\n        });\n        stats.executeEnd = now();\n        return emptyResult(chunkMeta);\n      }\n    }\n    if (discontinuity || trackSwitch || initSegmentChange || resetMuxers) {\n      this.resetInitSegment(initSegmentData, audioCodec, videoCodec, duration, decryptdata);\n    }\n    if (discontinuity || initSegmentChange || resetMuxers) {\n      this.resetInitialTimestamp(defaultInitPts);\n    }\n    if (!contiguous) {\n      this.resetContiguity();\n    }\n    const result = this.transmux(uintData, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n    const currentState = this.currentTransmuxState;\n    currentState.contiguous = true;\n    currentState.discontinuity = false;\n    currentState.trackSwitch = false;\n    stats.executeEnd = now();\n    return result;\n  }\n  // Due to data caching, flush calls can produce more than one TransmuxerResult (hence the Array type)\n  flush(chunkMeta) {\n    const stats = chunkMeta.transmuxing;\n    stats.executeStart = now();\n    const {\n      decrypter,\n      currentTransmuxState,\n      decryptionPromise\n    } = this;\n    if (decryptionPromise) {\n      return decryptionPromise.then(() => {\n        return this.flush(chunkMeta);\n      });\n    }\n    const transmuxResults = [];\n    const {\n      timeOffset\n    } = currentTransmuxState;\n    if (decrypter) {\n      const decryptedData = decrypter.flush();\n      if (decryptedData) {\n        transmuxResults.push(this.push(decryptedData, null, chunkMeta));\n      }\n    }\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      stats.executeEnd = now();\n      return [emptyResult(chunkMeta)];\n    }\n    const demuxResultOrPromise = demuxer.flush(timeOffset);\n    if (isPromise(demuxResultOrPromise)) {\n      return demuxResultOrPromise.then((demuxResult) => {\n        this.flushRemux(transmuxResults, demuxResult, chunkMeta);\n        return transmuxResults;\n      });\n    }\n    this.flushRemux(transmuxResults, demuxResultOrPromise, chunkMeta);\n    return transmuxResults;\n  }\n  flushRemux(transmuxResults, demuxResult, chunkMeta) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = demuxResult;\n    const {\n      accurateTimeOffset,\n      timeOffset\n    } = this.currentTransmuxState;\n    logger.log(`[transmuxer.ts]: Flushed fragment ${chunkMeta.sn}${chunkMeta.part > -1 ? \" p: \" + chunkMeta.part : \"\"} of level ${chunkMeta.level}`);\n    const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, true, this.id);\n    transmuxResults.push({\n      remuxResult,\n      chunkMeta\n    });\n    chunkMeta.transmuxing.executeEnd = now();\n  }\n  resetInitialTimestamp(defaultInitPts) {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetTimeStamp(defaultInitPts);\n    remuxer.resetTimeStamp(defaultInitPts);\n  }\n  resetContiguity() {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetContiguity();\n    remuxer.resetNextTimestamp();\n  }\n  resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration, decryptdata) {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration);\n    remuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, decryptdata);\n  }\n  destroy() {\n    if (this.demuxer) {\n      this.demuxer.destroy();\n      this.demuxer = void 0;\n    }\n    if (this.remuxer) {\n      this.remuxer.destroy();\n      this.remuxer = void 0;\n    }\n  }\n  transmux(data, keyData, timeOffset, accurateTimeOffset, chunkMeta) {\n    let result;\n    if (keyData && keyData.method === \"SAMPLE-AES\") {\n      result = this.transmuxSampleAes(data, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n    } else {\n      result = this.transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta);\n    }\n    return result;\n  }\n  transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = this.demuxer.demux(data, timeOffset, false, !this.config.progressive);\n    const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, false, this.id);\n    return {\n      remuxResult,\n      chunkMeta\n    };\n  }\n  transmuxSampleAes(data, decryptData, timeOffset, accurateTimeOffset, chunkMeta) {\n    return this.demuxer.demuxSampleAes(data, decryptData, timeOffset).then((demuxResult) => {\n      const remuxResult = this.remuxer.remux(demuxResult.audioTrack, demuxResult.videoTrack, demuxResult.id3Track, demuxResult.textTrack, timeOffset, accurateTimeOffset, false, this.id);\n      return {\n        remuxResult,\n        chunkMeta\n      };\n    });\n  }\n  configureTransmuxer(data) {\n    const {\n      config,\n      observer,\n      typeSupported,\n      vendor\n    } = this;\n    let mux;\n    for (let i = 0, len = muxConfig.length; i < len; i++) {\n      var _muxConfig$i$demux;\n      if ((_muxConfig$i$demux = muxConfig[i].demux) != null && _muxConfig$i$demux.probe(data)) {\n        mux = muxConfig[i];\n        break;\n      }\n    }\n    if (!mux) {\n      return new Error(\"Failed to find demuxer by probing fragment data\");\n    }\n    const demuxer = this.demuxer;\n    const remuxer = this.remuxer;\n    const Remuxer = mux.remux;\n    const Demuxer = mux.demux;\n    if (!remuxer || !(remuxer instanceof Remuxer)) {\n      this.remuxer = new Remuxer(observer, config, typeSupported, vendor);\n    }\n    if (!demuxer || !(demuxer instanceof Demuxer)) {\n      this.demuxer = new Demuxer(observer, config, typeSupported);\n      this.probe = Demuxer.probe;\n    }\n  }\n  needsProbing(discontinuity, trackSwitch) {\n    return !this.demuxer || !this.remuxer || discontinuity || trackSwitch;\n  }\n  getDecrypter() {\n    let decrypter = this.decrypter;\n    if (!decrypter) {\n      decrypter = this.decrypter = new Decrypter(this.config);\n    }\n    return decrypter;\n  }\n}\nfunction getEncryptionType(data, decryptData) {\n  let encryptionType = null;\n  if (data.byteLength > 0 && (decryptData == null ? void 0 : decryptData.key) != null && decryptData.iv !== null && decryptData.method != null) {\n    encryptionType = decryptData;\n  }\n  return encryptionType;\n}\nconst emptyResult = (chunkMeta) => ({\n  remuxResult: {},\n  chunkMeta\n});\nfunction isPromise(p) {\n  return \"then\" in p && p.then instanceof Function;\n}\nclass TransmuxConfig {\n  constructor(audioCodec, videoCodec, initSegmentData, duration, defaultInitPts) {\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this.initSegmentData = void 0;\n    this.duration = void 0;\n    this.defaultInitPts = void 0;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this.initSegmentData = initSegmentData;\n    this.duration = duration;\n    this.defaultInitPts = defaultInitPts || null;\n  }\n}\nclass TransmuxState {\n  constructor(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange) {\n    this.discontinuity = void 0;\n    this.contiguous = void 0;\n    this.accurateTimeOffset = void 0;\n    this.trackSwitch = void 0;\n    this.timeOffset = void 0;\n    this.initSegmentChange = void 0;\n    this.discontinuity = discontinuity;\n    this.contiguous = contiguous;\n    this.accurateTimeOffset = accurateTimeOffset;\n    this.trackSwitch = trackSwitch;\n    this.timeOffset = timeOffset;\n    this.initSegmentChange = initSegmentChange;\n  }\n}\nvar eventemitter3 = { exports: {} };\n(function(module) {\n  var has = Object.prototype.hasOwnProperty, prefix = \"~\";\n  function Events2() {\n  }\n  if (Object.create) {\n    Events2.prototype = /* @__PURE__ */ Object.create(null);\n    if (!new Events2().__proto__)\n      prefix = false;\n  }\n  function EE(fn, context, once) {\n    this.fn = fn;\n    this.context = context;\n    this.once = once || false;\n  }\n  function addListener(emitter, event, fn, context, once) {\n    if (typeof fn !== \"function\") {\n      throw new TypeError(\"The listener must be a function\");\n    }\n    var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;\n    if (!emitter._events[evt])\n      emitter._events[evt] = listener, emitter._eventsCount++;\n    else if (!emitter._events[evt].fn)\n      emitter._events[evt].push(listener);\n    else\n      emitter._events[evt] = [emitter._events[evt], listener];\n    return emitter;\n  }\n  function clearEvent(emitter, evt) {\n    if (--emitter._eventsCount === 0)\n      emitter._events = new Events2();\n    else\n      delete emitter._events[evt];\n  }\n  function EventEmitter2() {\n    this._events = new Events2();\n    this._eventsCount = 0;\n  }\n  EventEmitter2.prototype.eventNames = function eventNames() {\n    var names = [], events, name;\n    if (this._eventsCount === 0)\n      return names;\n    for (name in events = this._events) {\n      if (has.call(events, name))\n        names.push(prefix ? name.slice(1) : name);\n    }\n    if (Object.getOwnPropertySymbols) {\n      return names.concat(Object.getOwnPropertySymbols(events));\n    }\n    return names;\n  };\n  EventEmitter2.prototype.listeners = function listeners(event) {\n    var evt = prefix ? prefix + event : event, handlers = this._events[evt];\n    if (!handlers)\n      return [];\n    if (handlers.fn)\n      return [handlers.fn];\n    for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n      ee[i] = handlers[i].fn;\n    }\n    return ee;\n  };\n  EventEmitter2.prototype.listenerCount = function listenerCount(event) {\n    var evt = prefix ? prefix + event : event, listeners = this._events[evt];\n    if (!listeners)\n      return 0;\n    if (listeners.fn)\n      return 1;\n    return listeners.length;\n  };\n  EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n    var evt = prefix ? prefix + event : event;\n    if (!this._events[evt])\n      return false;\n    var listeners = this._events[evt], len = arguments.length, args, i;\n    if (listeners.fn) {\n      if (listeners.once)\n        this.removeListener(event, listeners.fn, void 0, true);\n      switch (len) {\n        case 1:\n          return listeners.fn.call(listeners.context), true;\n        case 2:\n          return listeners.fn.call(listeners.context, a1), true;\n        case 3:\n          return listeners.fn.call(listeners.context, a1, a2), true;\n        case 4:\n          return listeners.fn.call(listeners.context, a1, a2, a3), true;\n        case 5:\n          return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n        case 6:\n          return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n      }\n      for (i = 1, args = new Array(len - 1); i < len; i++) {\n        args[i - 1] = arguments[i];\n      }\n      listeners.fn.apply(listeners.context, args);\n    } else {\n      var length = listeners.length, j;\n      for (i = 0; i < length; i++) {\n        if (listeners[i].once)\n          this.removeListener(event, listeners[i].fn, void 0, true);\n        switch (len) {\n          case 1:\n            listeners[i].fn.call(listeners[i].context);\n            break;\n          case 2:\n            listeners[i].fn.call(listeners[i].context, a1);\n            break;\n          case 3:\n            listeners[i].fn.call(listeners[i].context, a1, a2);\n            break;\n          case 4:\n            listeners[i].fn.call(listeners[i].context, a1, a2, a3);\n            break;\n          default:\n            if (!args)\n              for (j = 1, args = new Array(len - 1); j < len; j++) {\n                args[j - 1] = arguments[j];\n              }\n            listeners[i].fn.apply(listeners[i].context, args);\n        }\n      }\n    }\n    return true;\n  };\n  EventEmitter2.prototype.on = function on(event, fn, context) {\n    return addListener(this, event, fn, context, false);\n  };\n  EventEmitter2.prototype.once = function once(event, fn, context) {\n    return addListener(this, event, fn, context, true);\n  };\n  EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {\n    var evt = prefix ? prefix + event : event;\n    if (!this._events[evt])\n      return this;\n    if (!fn) {\n      clearEvent(this, evt);\n      return this;\n    }\n    var listeners = this._events[evt];\n    if (listeners.fn) {\n      if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {\n        clearEvent(this, evt);\n      }\n    } else {\n      for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n        if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {\n          events.push(listeners[i]);\n        }\n      }\n      if (events.length)\n        this._events[evt] = events.length === 1 ? events[0] : events;\n      else\n        clearEvent(this, evt);\n    }\n    return this;\n  };\n  EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {\n    var evt;\n    if (event) {\n      evt = prefix ? prefix + event : event;\n      if (this._events[evt])\n        clearEvent(this, evt);\n    } else {\n      this._events = new Events2();\n      this._eventsCount = 0;\n    }\n    return this;\n  };\n  EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;\n  EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;\n  EventEmitter2.prefixed = prefix;\n  EventEmitter2.EventEmitter = EventEmitter2;\n  {\n    module.exports = EventEmitter2;\n  }\n})(eventemitter3);\nvar eventemitter3Exports = eventemitter3.exports;\nvar EventEmitter = /* @__PURE__ */ getDefaultExportFromCjs(eventemitter3Exports);\nclass TransmuxerInterface {\n  constructor(hls, id, onTransmuxComplete, onFlush) {\n    this.error = null;\n    this.hls = void 0;\n    this.id = void 0;\n    this.observer = void 0;\n    this.frag = null;\n    this.part = null;\n    this.useWorker = void 0;\n    this.workerContext = null;\n    this.onwmsg = void 0;\n    this.transmuxer = null;\n    this.onTransmuxComplete = void 0;\n    this.onFlush = void 0;\n    const config = hls.config;\n    this.hls = hls;\n    this.id = id;\n    this.useWorker = !!config.enableWorker;\n    this.onTransmuxComplete = onTransmuxComplete;\n    this.onFlush = onFlush;\n    const forwardMessage = (ev, data) => {\n      data = data || {};\n      data.frag = this.frag;\n      data.id = this.id;\n      if (ev === Events.ERROR) {\n        this.error = data.error;\n      }\n      this.hls.trigger(ev, data);\n    };\n    this.observer = new EventEmitter();\n    this.observer.on(Events.FRAG_DECRYPTED, forwardMessage);\n    this.observer.on(Events.ERROR, forwardMessage);\n    const MediaSource = getMediaSource(config.preferManagedMediaSource) || {\n      isTypeSupported: () => false\n    };\n    const m2tsTypeSupported = {\n      mpeg: MediaSource.isTypeSupported(\"audio/mpeg\"),\n      mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\"mp3\"'),\n      ac3: MediaSource.isTypeSupported('audio/mp4; codecs=\"ac-3\"')\n    };\n    const vendor = navigator.vendor;\n    if (this.useWorker && typeof Worker !== \"undefined\") {\n      const canCreateWorker = config.workerPath || hasUMDWorker();\n      if (canCreateWorker) {\n        try {\n          if (config.workerPath) {\n            logger.log(`loading Web Worker ${config.workerPath} for \"${id}\"`);\n            this.workerContext = loadWorker(config.workerPath);\n          } else {\n            logger.log(`injecting Web Worker for \"${id}\"`);\n            this.workerContext = injectWorker();\n          }\n          this.onwmsg = (ev) => this.onWorkerMessage(ev);\n          const {\n            worker\n          } = this.workerContext;\n          worker.addEventListener(\"message\", this.onwmsg);\n          worker.onerror = (event) => {\n            const error = new Error(`${event.message}  (${event.filename}:${event.lineno})`);\n            config.enableWorker = false;\n            logger.warn(`Error in \"${id}\" Web Worker, fallback to inline`);\n            this.hls.trigger(Events.ERROR, {\n              type: ErrorTypes.OTHER_ERROR,\n              details: ErrorDetails.INTERNAL_EXCEPTION,\n              fatal: false,\n              event: \"demuxerWorker\",\n              error\n            });\n          };\n          worker.postMessage({\n            cmd: \"init\",\n            typeSupported: m2tsTypeSupported,\n            vendor,\n            id,\n            config: JSON.stringify(config)\n          });\n        } catch (err) {\n          logger.warn(`Error setting up \"${id}\" Web Worker, fallback to inline`, err);\n          this.resetWorker();\n          this.error = null;\n          this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, vendor, id);\n        }\n        return;\n      }\n    }\n    this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, vendor, id);\n  }\n  resetWorker() {\n    if (this.workerContext) {\n      const {\n        worker,\n        objectURL\n      } = this.workerContext;\n      if (objectURL) {\n        self.URL.revokeObjectURL(objectURL);\n      }\n      worker.removeEventListener(\"message\", this.onwmsg);\n      worker.onerror = null;\n      worker.terminate();\n      this.workerContext = null;\n    }\n  }\n  destroy() {\n    if (this.workerContext) {\n      this.resetWorker();\n      this.onwmsg = void 0;\n    } else {\n      const transmuxer = this.transmuxer;\n      if (transmuxer) {\n        transmuxer.destroy();\n        this.transmuxer = null;\n      }\n    }\n    const observer = this.observer;\n    if (observer) {\n      observer.removeAllListeners();\n    }\n    this.frag = null;\n    this.observer = null;\n    this.hls = null;\n  }\n  push(data, initSegmentData, audioCodec, videoCodec, frag, part, duration, accurateTimeOffset, chunkMeta, defaultInitPTS) {\n    var _frag$initSegment, _lastFrag$initSegment;\n    chunkMeta.transmuxing.start = self.performance.now();\n    const {\n      transmuxer\n    } = this;\n    const timeOffset = part ? part.start : frag.start;\n    const decryptdata = frag.decryptdata;\n    const lastFrag = this.frag;\n    const discontinuity = !(lastFrag && frag.cc === lastFrag.cc);\n    const trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);\n    const snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;\n    const partDiff = this.part ? chunkMeta.part - this.part.index : -1;\n    const progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag == null ? void 0 : lastFrag.stats.chunkCount);\n    const contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));\n    const now2 = self.performance.now();\n    if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {\n      frag.stats.parsing.start = now2;\n    }\n    if (part && (partDiff || !contiguous)) {\n      part.stats.parsing.start = now2;\n    }\n    const initSegmentChange = !(lastFrag && ((_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.url) === ((_lastFrag$initSegment = lastFrag.initSegment) == null ? void 0 : _lastFrag$initSegment.url));\n    const state = new TransmuxState(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange);\n    if (!contiguous || discontinuity || initSegmentChange) {\n      logger.log(`[transmuxer-interface, ${frag.type}]: Starting new transmux session for sn: ${chunkMeta.sn} p: ${chunkMeta.part} level: ${chunkMeta.level} id: ${chunkMeta.id}\n        discontinuity: ${discontinuity}\n        trackSwitch: ${trackSwitch}\n        contiguous: ${contiguous}\n        accurateTimeOffset: ${accurateTimeOffset}\n        timeOffset: ${timeOffset}\n        initSegmentChange: ${initSegmentChange}`);\n      const config = new TransmuxConfig(audioCodec, videoCodec, initSegmentData, duration, defaultInitPTS);\n      this.configureTransmuxer(config);\n    }\n    this.frag = frag;\n    this.part = part;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: \"demux\",\n        data,\n        decryptdata,\n        chunkMeta,\n        state\n      }, data instanceof ArrayBuffer ? [data] : []);\n    } else if (transmuxer) {\n      const transmuxResult = transmuxer.push(data, decryptdata, chunkMeta, state);\n      if (isPromise(transmuxResult)) {\n        transmuxer.async = true;\n        transmuxResult.then((data2) => {\n          this.handleTransmuxComplete(data2);\n        }).catch((error) => {\n          this.transmuxerError(error, chunkMeta, \"transmuxer-interface push error\");\n        });\n      } else {\n        transmuxer.async = false;\n        this.handleTransmuxComplete(transmuxResult);\n      }\n    }\n  }\n  flush(chunkMeta) {\n    chunkMeta.transmuxing.start = self.performance.now();\n    const {\n      transmuxer\n    } = this;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: \"flush\",\n        chunkMeta\n      });\n    } else if (transmuxer) {\n      let transmuxResult = transmuxer.flush(chunkMeta);\n      const asyncFlush = isPromise(transmuxResult);\n      if (asyncFlush || transmuxer.async) {\n        if (!isPromise(transmuxResult)) {\n          transmuxResult = Promise.resolve(transmuxResult);\n        }\n        transmuxResult.then((data) => {\n          this.handleFlushResult(data, chunkMeta);\n        }).catch((error) => {\n          this.transmuxerError(error, chunkMeta, \"transmuxer-interface flush error\");\n        });\n      } else {\n        this.handleFlushResult(transmuxResult, chunkMeta);\n      }\n    }\n  }\n  transmuxerError(error, chunkMeta, reason) {\n    if (!this.hls) {\n      return;\n    }\n    this.error = error;\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.FRAG_PARSING_ERROR,\n      chunkMeta,\n      fatal: false,\n      error,\n      err: error,\n      reason\n    });\n  }\n  handleFlushResult(results, chunkMeta) {\n    results.forEach((result) => {\n      this.handleTransmuxComplete(result);\n    });\n    this.onFlush(chunkMeta);\n  }\n  onWorkerMessage(ev) {\n    const data = ev.data;\n    const hls = this.hls;\n    switch (data.event) {\n      case \"init\": {\n        var _this$workerContext;\n        const objectURL = (_this$workerContext = this.workerContext) == null ? void 0 : _this$workerContext.objectURL;\n        if (objectURL) {\n          self.URL.revokeObjectURL(objectURL);\n        }\n        break;\n      }\n      case \"transmuxComplete\": {\n        this.handleTransmuxComplete(data.data);\n        break;\n      }\n      case \"flush\": {\n        this.onFlush(data.data);\n        break;\n      }\n      case \"workerLog\":\n        if (logger[data.data.logType]) {\n          logger[data.data.logType](data.data.message);\n        }\n        break;\n      default: {\n        data.data = data.data || {};\n        data.data.frag = this.frag;\n        data.data.id = this.id;\n        hls.trigger(data.event, data.data);\n        break;\n      }\n    }\n  }\n  configureTransmuxer(config) {\n    const {\n      transmuxer\n    } = this;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: \"configure\",\n        config\n      });\n    } else if (transmuxer) {\n      transmuxer.configure(config);\n    }\n  }\n  handleTransmuxComplete(result) {\n    result.chunkMeta.transmuxing.end = self.performance.now();\n    this.onTransmuxComplete(result);\n  }\n}\nfunction subtitleOptionsIdentical(trackList1, trackList2) {\n  if (trackList1.length !== trackList2.length) {\n    return false;\n  }\n  for (let i = 0; i < trackList1.length; i++) {\n    if (!mediaAttributesIdentical(trackList1[i].attrs, trackList2[i].attrs)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction mediaAttributesIdentical(attrs1, attrs2, customAttributes) {\n  const stableRenditionId = attrs1[\"STABLE-RENDITION-ID\"];\n  if (stableRenditionId && !customAttributes) {\n    return stableRenditionId === attrs2[\"STABLE-RENDITION-ID\"];\n  }\n  return !(customAttributes || [\"LANGUAGE\", \"NAME\", \"CHARACTERISTICS\", \"AUTOSELECT\", \"DEFAULT\", \"FORCED\", \"ASSOC-LANGUAGE\"]).some((subtitleAttribute) => attrs1[subtitleAttribute] !== attrs2[subtitleAttribute]);\n}\nfunction subtitleTrackMatchesTextTrack(subtitleTrack, textTrack) {\n  return textTrack.label.toLowerCase() === subtitleTrack.name.toLowerCase() && (!textTrack.language || textTrack.language.toLowerCase() === (subtitleTrack.lang || \"\").toLowerCase());\n}\nconst TICK_INTERVAL$2 = 100;\nclass AudioStreamController extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, \"[audio-stream-controller]\", PlaylistLevelType.AUDIO);\n    this.videoBuffer = null;\n    this.videoTrackCC = -1;\n    this.waitingVideoCC = -1;\n    this.bufferedTrack = null;\n    this.switchingTrack = null;\n    this.trackId = -1;\n    this.waitingData = null;\n    this.mainDetails = null;\n    this.flushing = false;\n    this.bufferFlushed = false;\n    this.cachedTrackLoadedData = null;\n    this._registerListeners();\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n    this.mainDetails = null;\n    this.bufferedTrack = null;\n    this.switchingTrack = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  // INIT_PTS_FOUND is triggered when the video track parsed in the stream-controller has a new PTS value\n  onInitPtsFound(event, {\n    frag,\n    id,\n    initPTS,\n    timescale\n  }) {\n    if (id === \"main\") {\n      const cc = frag.cc;\n      this.initPTS[frag.cc] = {\n        baseTime: initPTS,\n        timescale\n      };\n      this.log(`InitPTS for cc: ${cc} found from main: ${initPTS}`);\n      this.videoTrackCC = cc;\n      if (this.state === State.WAITING_INIT_PTS) {\n        this.tick();\n      }\n    }\n  }\n  startLoad(startPosition) {\n    if (!this.levels) {\n      this.startPosition = startPosition;\n      this.state = State.STOPPED;\n      return;\n    }\n    const lastCurrentTime = this.lastCurrentTime;\n    this.stopLoad();\n    this.setInterval(TICK_INTERVAL$2);\n    if (lastCurrentTime > 0 && startPosition === -1) {\n      this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n      startPosition = lastCurrentTime;\n      this.state = State.IDLE;\n    } else {\n      this.loadedmetadata = false;\n      this.state = State.WAITING_TRACK;\n    }\n    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n    this.tick();\n  }\n  doTick() {\n    switch (this.state) {\n      case State.IDLE:\n        this.doTickIdle();\n        break;\n      case State.WAITING_TRACK: {\n        var _levels$trackId;\n        const {\n          levels,\n          trackId\n        } = this;\n        const details = levels == null ? void 0 : (_levels$trackId = levels[trackId]) == null ? void 0 : _levels$trackId.details;\n        if (details) {\n          if (this.waitForCdnTuneIn(details)) {\n            break;\n          }\n          this.state = State.WAITING_INIT_PTS;\n        }\n        break;\n      }\n      case State.FRAG_LOADING_WAITING_RETRY: {\n        var _this$media;\n        const now2 = performance.now();\n        const retryDate = this.retryDate;\n        if (!retryDate || now2 >= retryDate || (_this$media = this.media) != null && _this$media.seeking) {\n          const {\n            levels,\n            trackId\n          } = this;\n          this.log(\"RetryDate reached, switch back to IDLE state\");\n          this.resetStartWhenNotLoaded((levels == null ? void 0 : levels[trackId]) || null);\n          this.state = State.IDLE;\n        }\n        break;\n      }\n      case State.WAITING_INIT_PTS: {\n        const waitingData = this.waitingData;\n        if (waitingData) {\n          const {\n            frag,\n            part,\n            cache,\n            complete\n          } = waitingData;\n          if (this.initPTS[frag.cc] !== void 0) {\n            this.waitingData = null;\n            this.waitingVideoCC = -1;\n            this.state = State.FRAG_LOADING;\n            const payload = cache.flush();\n            const data = {\n              frag,\n              part,\n              payload,\n              networkDetails: null\n            };\n            this._handleFragmentLoadProgress(data);\n            if (complete) {\n              super._handleFragmentLoadComplete(data);\n            }\n          } else if (this.videoTrackCC !== this.waitingVideoCC) {\n            this.log(`Waiting fragment cc (${frag.cc}) cancelled because video is at cc ${this.videoTrackCC}`);\n            this.clearWaitingFragment();\n          } else {\n            const pos = this.getLoadPosition();\n            const bufferInfo = BufferHelper.bufferInfo(this.mediaBuffer, pos, this.config.maxBufferHole);\n            const waitingFragmentAtPosition = fragmentWithinToleranceTest(bufferInfo.end, this.config.maxFragLookUpTolerance, frag);\n            if (waitingFragmentAtPosition < 0) {\n              this.log(`Waiting fragment cc (${frag.cc}) @ ${frag.start} cancelled because another fragment at ${bufferInfo.end} is needed`);\n              this.clearWaitingFragment();\n            }\n          }\n        } else {\n          this.state = State.IDLE;\n        }\n      }\n    }\n    this.onTickEnd();\n  }\n  clearWaitingFragment() {\n    const waitingData = this.waitingData;\n    if (waitingData) {\n      this.fragmentTracker.removeFragment(waitingData.frag);\n      this.waitingData = null;\n      this.waitingVideoCC = -1;\n      this.state = State.IDLE;\n    }\n  }\n  resetLoadingState() {\n    this.clearWaitingFragment();\n    super.resetLoadingState();\n  }\n  onTickEnd() {\n    const {\n      media\n    } = this;\n    if (!(media != null && media.readyState)) {\n      return;\n    }\n    this.lastCurrentTime = media.currentTime;\n  }\n  doTickIdle() {\n    const {\n      hls,\n      levels,\n      media,\n      trackId\n    } = this;\n    const config = hls.config;\n    if (!media && (this.startFragRequested || !config.startFragPrefetch) || !(levels != null && levels[trackId])) {\n      return;\n    }\n    const levelInfo = levels[trackId];\n    const trackDetails = levelInfo.details;\n    if (!trackDetails || trackDetails.live && this.levelLastLoaded !== levelInfo || this.waitForCdnTuneIn(trackDetails)) {\n      this.state = State.WAITING_TRACK;\n      return;\n    }\n    const bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;\n    if (this.bufferFlushed && bufferable) {\n      this.bufferFlushed = false;\n      this.afterBufferFlushed(bufferable, ElementaryStreamTypes.AUDIO, PlaylistLevelType.AUDIO);\n    }\n    const bufferInfo = this.getFwdBufferInfo(bufferable, PlaylistLevelType.AUDIO);\n    if (bufferInfo === null) {\n      return;\n    }\n    const {\n      bufferedTrack,\n      switchingTrack\n    } = this;\n    if (!switchingTrack && this._streamEnded(bufferInfo, trackDetails)) {\n      hls.trigger(Events.BUFFER_EOS, {\n        type: \"audio\"\n      });\n      this.state = State.ENDED;\n      return;\n    }\n    const mainBufferInfo = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, PlaylistLevelType.MAIN);\n    const bufferLen = bufferInfo.len;\n    const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len);\n    const fragments = trackDetails.fragments;\n    const start = fragments[0].start;\n    let targetBufferTime = this.flushing ? this.getLoadPosition() : bufferInfo.end;\n    if (switchingTrack && media) {\n      const pos = this.getLoadPosition();\n      if (bufferedTrack && !mediaAttributesIdentical(switchingTrack.attrs, bufferedTrack.attrs)) {\n        targetBufferTime = pos;\n      }\n      if (trackDetails.PTSKnown && pos < start) {\n        if (bufferInfo.end > start || bufferInfo.nextStart) {\n          this.log(\"Alt audio track ahead of main track, seek to start of alt audio track\");\n          media.currentTime = start + 0.05;\n        }\n      }\n    }\n    if (bufferLen >= maxBufLen && !switchingTrack && targetBufferTime < fragments[fragments.length - 1].start) {\n      return;\n    }\n    let frag = this.getNextFragment(targetBufferTime, trackDetails);\n    let atGap = false;\n    if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n      atGap = !!frag.gap;\n      frag = this.getNextFragmentLoopLoading(frag, trackDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n    }\n    if (!frag) {\n      this.bufferFlushed = true;\n      return;\n    }\n    const atBufferSyncLimit = mainBufferInfo && frag.start > mainBufferInfo.end + trackDetails.targetduration;\n    if (atBufferSyncLimit || // Or wait for main buffer after buffing some audio\n    !(mainBufferInfo != null && mainBufferInfo.len) && bufferInfo.len) {\n      const mainFrag = this.getAppendedFrag(frag.start, PlaylistLevelType.MAIN);\n      if (mainFrag === null) {\n        return;\n      }\n      atGap || (atGap = !!mainFrag.gap || !!atBufferSyncLimit && mainBufferInfo.len === 0);\n      if (atBufferSyncLimit && !atGap || atGap && bufferInfo.nextStart && bufferInfo.nextStart < mainFrag.end) {\n        return;\n      }\n    }\n    this.loadFragment(frag, levelInfo, targetBufferTime);\n  }\n  getMaxBufferLength(mainBufferLength) {\n    const maxConfigBuffer = super.getMaxBufferLength();\n    if (!mainBufferLength) {\n      return maxConfigBuffer;\n    }\n    return Math.min(Math.max(maxConfigBuffer, mainBufferLength), this.config.maxMaxBufferLength);\n  }\n  onMediaDetaching() {\n    this.videoBuffer = null;\n    this.bufferFlushed = this.flushing = false;\n    super.onMediaDetaching();\n  }\n  onAudioTracksUpdated(event, {\n    audioTracks\n  }) {\n    this.resetTransmuxer();\n    this.levels = audioTracks.map((mediaPlaylist) => new Level(mediaPlaylist));\n  }\n  onAudioTrackSwitching(event, data) {\n    const altAudio = !!data.url;\n    this.trackId = data.id;\n    const {\n      fragCurrent\n    } = this;\n    if (fragCurrent) {\n      fragCurrent.abortRequests();\n      this.removeUnbufferedFrags(fragCurrent.start);\n    }\n    this.resetLoadingState();\n    if (!altAudio) {\n      this.resetTransmuxer();\n    } else {\n      this.setInterval(TICK_INTERVAL$2);\n    }\n    if (altAudio) {\n      this.switchingTrack = data;\n      this.state = State.IDLE;\n      this.flushAudioIfNeeded(data);\n    } else {\n      this.switchingTrack = null;\n      this.bufferedTrack = data;\n      this.state = State.STOPPED;\n    }\n    this.tick();\n  }\n  onManifestLoading() {\n    this.fragmentTracker.removeAllFragments();\n    this.startPosition = this.lastCurrentTime = 0;\n    this.bufferFlushed = this.flushing = false;\n    this.levels = this.mainDetails = this.waitingData = this.bufferedTrack = this.cachedTrackLoadedData = this.switchingTrack = null;\n    this.startFragRequested = false;\n    this.trackId = this.videoTrackCC = this.waitingVideoCC = -1;\n  }\n  onLevelLoaded(event, data) {\n    this.mainDetails = data.details;\n    if (this.cachedTrackLoadedData !== null) {\n      this.hls.trigger(Events.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData);\n      this.cachedTrackLoadedData = null;\n    }\n  }\n  onAudioTrackLoaded(event, data) {\n    var _track$details;\n    if (this.mainDetails == null) {\n      this.cachedTrackLoadedData = data;\n      return;\n    }\n    const {\n      levels\n    } = this;\n    const {\n      details: newDetails,\n      id: trackId\n    } = data;\n    if (!levels) {\n      this.warn(`Audio tracks were reset while loading level ${trackId}`);\n      return;\n    }\n    this.log(`Audio track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : \"\"},duration:${newDetails.totalduration}`);\n    const track = levels[trackId];\n    let sliding = 0;\n    if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n      this.checkLiveUpdate(newDetails);\n      const mainDetails = this.mainDetails;\n      if (newDetails.deltaUpdateFailed || !mainDetails) {\n        return;\n      }\n      if (!track.details && newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n        alignMediaPlaylistByPDT(newDetails, mainDetails);\n        sliding = newDetails.fragments[0].start;\n      } else {\n        var _this$levelLastLoaded;\n        sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n      }\n    }\n    track.details = newDetails;\n    this.levelLastLoaded = track;\n    if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {\n      this.setStartPosition(this.mainDetails || newDetails, sliding);\n    }\n    if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {\n      this.state = State.IDLE;\n    }\n    this.tick();\n  }\n  _handleFragmentLoadProgress(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      part,\n      payload\n    } = data;\n    const {\n      config,\n      trackId,\n      levels\n    } = this;\n    if (!levels) {\n      this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n      return;\n    }\n    const track = levels[trackId];\n    if (!track) {\n      this.warn(\"Audio track is undefined on fragment load progress\");\n      return;\n    }\n    const details = track.details;\n    if (!details) {\n      this.warn(\"Audio track details undefined on fragment load progress\");\n      this.removeUnbufferedFrags(frag.start);\n      return;\n    }\n    const audioCodec = config.defaultAudioCodec || track.audioCodec || \"mp4a.40.2\";\n    let transmuxer = this.transmuxer;\n    if (!transmuxer) {\n      transmuxer = this.transmuxer = new TransmuxerInterface(this.hls, PlaylistLevelType.AUDIO, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n    }\n    const initPTS = this.initPTS[frag.cc];\n    const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n    if (initPTS !== void 0) {\n      const accurateTimeOffset = false;\n      const partIndex = part ? part.index : -1;\n      const partial = partIndex !== -1;\n      const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n      transmuxer.push(payload, initSegmentData, audioCodec, \"\", frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n    } else {\n      this.log(`Unknown video PTS for cc ${frag.cc}, waiting for video PTS before demuxing audio frag ${frag.sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n      const {\n        cache\n      } = this.waitingData = this.waitingData || {\n        frag,\n        part,\n        cache: new ChunkCache(),\n        complete: false\n      };\n      cache.push(new Uint8Array(payload));\n      this.waitingVideoCC = this.videoTrackCC;\n      this.state = State.WAITING_INIT_PTS;\n    }\n  }\n  _handleFragmentLoadComplete(fragLoadedData) {\n    if (this.waitingData) {\n      this.waitingData.complete = true;\n      return;\n    }\n    super._handleFragmentLoadComplete(fragLoadedData);\n  }\n  onBufferReset() {\n    this.mediaBuffer = this.videoBuffer = null;\n    this.loadedmetadata = false;\n  }\n  onBufferCreated(event, data) {\n    const audioTrack = data.tracks.audio;\n    if (audioTrack) {\n      this.mediaBuffer = audioTrack.buffer || null;\n    }\n    if (data.tracks.video) {\n      this.videoBuffer = data.tracks.video.buffer || null;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag.type !== PlaylistLevelType.AUDIO) {\n      if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {\n        const bufferable = this.videoBuffer || this.media;\n        if (bufferable) {\n          const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);\n          if (bufferedTimeRanges.length) {\n            this.loadedmetadata = true;\n          }\n        }\n      }\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      this.warn(`Fragment ${frag.sn}${part ? \" p: \" + part.index : \"\"} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack ? this.switchingTrack.name : \"false\"}`);\n      return;\n    }\n    if (frag.sn !== \"initSegment\") {\n      this.fragPrevious = frag;\n      const track = this.switchingTrack;\n      if (track) {\n        this.bufferedTrack = track;\n        this.switchingTrack = null;\n        this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, track));\n      }\n    }\n    this.fragBufferedComplete(frag, part);\n  }\n  onError(event, data) {\n    var _data$context;\n    if (data.fatal) {\n      this.state = State.ERROR;\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_PARSING_ERROR:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        this.onFragmentOrKeyLoadError(PlaylistLevelType.AUDIO, data);\n        break;\n      case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n      case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        if (!data.levelRetry && this.state === State.WAITING_TRACK && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.AUDIO_TRACK) {\n          this.state = State.IDLE;\n        }\n        break;\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        if (!data.parent || data.parent !== \"audio\") {\n          return;\n        }\n        if (data.details === ErrorDetails.BUFFER_APPEND_ERROR) {\n          this.resetLoadingState();\n          return;\n        }\n        if (this.reduceLengthAndFlushBuffer(data)) {\n          this.bufferedTrack = null;\n          super.flushMainBuffer(0, Number.POSITIVE_INFINITY, \"audio\");\n        }\n        break;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n        this.recoverWorkerError(data);\n        break;\n    }\n  }\n  onBufferFlushing(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.VIDEO) {\n      this.flushing = true;\n    }\n  }\n  onBufferFlushed(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.VIDEO) {\n      this.flushing = false;\n      this.bufferFlushed = true;\n      if (this.state === State.ENDED) {\n        this.state = State.IDLE;\n      }\n      const mediaBuffer = this.mediaBuffer || this.media;\n      if (mediaBuffer) {\n        this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.AUDIO);\n        this.tick();\n      }\n    }\n  }\n  _handleTransmuxComplete(transmuxResult) {\n    var _id3$samples;\n    const id = \"audio\";\n    const {\n      hls\n    } = this;\n    const {\n      remuxResult,\n      chunkMeta\n    } = transmuxResult;\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context) {\n      this.resetWhenMissingContext(chunkMeta);\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const {\n      details\n    } = level;\n    const {\n      audio,\n      text,\n      id3,\n      initSegment\n    } = remuxResult;\n    if (this.fragContextChanged(frag) || !details) {\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    this.state = State.PARSING;\n    if (this.switchingTrack && audio) {\n      this.completeAudioSwitch(this.switchingTrack);\n    }\n    if (initSegment != null && initSegment.tracks) {\n      const mapFragment = frag.initSegment || frag;\n      this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n      hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n        frag: mapFragment,\n        id,\n        tracks: initSegment.tracks\n      });\n    }\n    if (audio) {\n      const {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS\n      } = audio;\n      if (part) {\n        part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        };\n      }\n      frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n      this.bufferFragmentData(audio, frag, part, chunkMeta);\n    }\n    if (id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n      const emittedID3 = _extends({\n        id,\n        frag,\n        details\n      }, id3);\n      hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n    }\n    if (text) {\n      const emittedText = _extends({\n        id,\n        frag,\n        details\n      }, text);\n      hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n    }\n  }\n  _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n    if (this.state !== State.PARSING) {\n      return;\n    }\n    if (tracks.video) {\n      delete tracks.video;\n    }\n    const track = tracks.audio;\n    if (!track) {\n      return;\n    }\n    track.id = \"audio\";\n    const variantAudioCodecs = currentLevel.audioCodec;\n    this.log(`Init audio buffer, container:${track.container}, codecs[level/parsed]=[${variantAudioCodecs}/${track.codec}]`);\n    if (variantAudioCodecs && variantAudioCodecs.split(\",\").length === 1) {\n      track.levelCodec = variantAudioCodecs;\n    }\n    this.hls.trigger(Events.BUFFER_CODECS, tracks);\n    const initSegment = track.initSegment;\n    if (initSegment != null && initSegment.byteLength) {\n      const segment = {\n        type: \"audio\",\n        frag,\n        part: null,\n        chunkMeta,\n        parent: frag.type,\n        data: initSegment\n      };\n      this.hls.trigger(Events.BUFFER_APPENDING, segment);\n    }\n    this.tickImmediate();\n  }\n  loadFragment(frag, track, targetBufferTime) {\n    const fragState = this.fragmentTracker.getState(frag);\n    this.fragCurrent = frag;\n    if (this.switchingTrack || fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n      var _track$details2;\n      if (frag.sn === \"initSegment\") {\n        this._loadInitSegment(frag, track);\n      } else if ((_track$details2 = track.details) != null && _track$details2.live && !this.initPTS[frag.cc]) {\n        this.log(`Waiting for video PTS in continuity counter ${frag.cc} of live stream before loading audio fragment ${frag.sn} of level ${this.trackId}`);\n        this.state = State.WAITING_INIT_PTS;\n        const mainDetails = this.mainDetails;\n        if (mainDetails && mainDetails.fragments[0].start !== track.details.fragments[0].start) {\n          alignMediaPlaylistByPDT(track.details, mainDetails);\n        }\n      } else {\n        this.startFragRequested = true;\n        super.loadFragment(frag, track, targetBufferTime);\n      }\n    } else {\n      this.clearTrackerIfNeeded(frag);\n    }\n  }\n  flushAudioIfNeeded(switchingTrack) {\n    const {\n      media,\n      bufferedTrack\n    } = this;\n    const bufferedAttributes = bufferedTrack == null ? void 0 : bufferedTrack.attrs;\n    const switchAttributes = switchingTrack.attrs;\n    if (media && bufferedAttributes && (bufferedAttributes.CHANNELS !== switchAttributes.CHANNELS || bufferedTrack.name !== switchingTrack.name || bufferedTrack.lang !== switchingTrack.lang)) {\n      this.log(\"Switching audio track : flushing all audio\");\n      super.flushMainBuffer(0, Number.POSITIVE_INFINITY, \"audio\");\n      this.bufferedTrack = null;\n    }\n  }\n  completeAudioSwitch(switchingTrack) {\n    const {\n      hls\n    } = this;\n    this.flushAudioIfNeeded(switchingTrack);\n    this.bufferedTrack = switchingTrack;\n    this.switchingTrack = null;\n    hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, switchingTrack));\n  }\n}\nclass AudioTrackController extends BasePlaylistController {\n  constructor(hls) {\n    super(hls, \"[audio-track-controller]\");\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n    this.registerListeners();\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.tracks.length = 0;\n    this.tracksInGroup.length = 0;\n    this.currentTrack = null;\n    super.destroy();\n  }\n  onManifestLoading() {\n    this.tracks = [];\n    this.tracksInGroup = [];\n    this.groupIds = null;\n    this.currentTrack = null;\n    this.trackId = -1;\n    this.selectDefaultTrack = true;\n  }\n  onManifestParsed(event, data) {\n    this.tracks = data.audioTracks || [];\n  }\n  onAudioTrackLoaded(event, data) {\n    const {\n      id,\n      groupId,\n      details\n    } = data;\n    const trackInActiveGroup = this.tracksInGroup[id];\n    if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n      this.warn(`Audio track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n      return;\n    }\n    const curDetails = trackInActiveGroup.details;\n    trackInActiveGroup.details = data.details;\n    this.log(`Audio track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n    if (id === this.trackId) {\n      this.playlistLoaded(id, data, curDetails);\n    }\n  }\n  onLevelLoading(event, data) {\n    this.switchLevel(data.level);\n  }\n  onLevelSwitching(event, data) {\n    this.switchLevel(data.level);\n  }\n  switchLevel(levelIndex) {\n    const levelInfo = this.hls.levels[levelIndex];\n    if (!levelInfo) {\n      return;\n    }\n    const audioGroups = levelInfo.audioGroups || null;\n    const currentGroups = this.groupIds;\n    let currentTrack = this.currentTrack;\n    if (!audioGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (audioGroups == null ? void 0 : audioGroups.length) || audioGroups != null && audioGroups.some((groupId) => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n      this.groupIds = audioGroups;\n      this.trackId = -1;\n      this.currentTrack = null;\n      const audioTracks = this.tracks.filter((track) => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n      if (audioTracks.length) {\n        if (this.selectDefaultTrack && !audioTracks.some((track) => track.default)) {\n          this.selectDefaultTrack = false;\n        }\n        audioTracks.forEach((track, i) => {\n          track.id = i;\n        });\n      } else if (!currentTrack && !this.tracksInGroup.length) {\n        return;\n      }\n      this.tracksInGroup = audioTracks;\n      const audioPreference = this.hls.config.audioPreference;\n      if (!currentTrack && audioPreference) {\n        const groupIndex = findMatchingOption(audioPreference, audioTracks, audioMatchPredicate);\n        if (groupIndex > -1) {\n          currentTrack = audioTracks[groupIndex];\n        } else {\n          const allIndex = findMatchingOption(audioPreference, this.tracks);\n          currentTrack = this.tracks[allIndex];\n        }\n      }\n      let trackId = this.findTrackId(currentTrack);\n      if (trackId === -1 && currentTrack) {\n        trackId = this.findTrackId(null);\n      }\n      const audioTracksUpdated = {\n        audioTracks\n      };\n      this.log(`Updating audio tracks, ${audioTracks.length} track(s) found in group(s): ${audioGroups == null ? void 0 : audioGroups.join(\",\")}`);\n      this.hls.trigger(Events.AUDIO_TRACKS_UPDATED, audioTracksUpdated);\n      const selectedTrackId = this.trackId;\n      if (trackId !== -1 && selectedTrackId === -1) {\n        this.setAudioTrack(trackId);\n      } else if (audioTracks.length && selectedTrackId === -1) {\n        var _this$groupIds;\n        const error = new Error(`No audio track selected for current audio group-ID(s): ${(_this$groupIds = this.groupIds) == null ? void 0 : _this$groupIds.join(\",\")} track count: ${audioTracks.length}`);\n        this.warn(error.message);\n        this.hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.AUDIO_TRACK_LOAD_ERROR,\n          fatal: true,\n          error\n        });\n      }\n    } else if (this.shouldReloadPlaylist(currentTrack)) {\n      this.setAudioTrack(this.trackId);\n    }\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.AUDIO_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n      this.requestScheduled = -1;\n      this.checkRetry(data);\n    }\n  }\n  get allAudioTracks() {\n    return this.tracks;\n  }\n  get audioTracks() {\n    return this.tracksInGroup;\n  }\n  get audioTrack() {\n    return this.trackId;\n  }\n  set audioTrack(newId) {\n    this.selectDefaultTrack = false;\n    this.setAudioTrack(newId);\n  }\n  setAudioOption(audioOption) {\n    const hls = this.hls;\n    hls.config.audioPreference = audioOption;\n    if (audioOption) {\n      const allAudioTracks = this.allAudioTracks;\n      this.selectDefaultTrack = false;\n      if (allAudioTracks.length) {\n        const currentTrack = this.currentTrack;\n        if (currentTrack && matchesOption(audioOption, currentTrack, audioMatchPredicate)) {\n          return currentTrack;\n        }\n        const groupIndex = findMatchingOption(audioOption, this.tracksInGroup, audioMatchPredicate);\n        if (groupIndex > -1) {\n          const track = this.tracksInGroup[groupIndex];\n          this.setAudioTrack(groupIndex);\n          return track;\n        } else if (currentTrack) {\n          let searchIndex = hls.loadLevel;\n          if (searchIndex === -1) {\n            searchIndex = hls.firstAutoLevel;\n          }\n          const switchIndex = findClosestLevelWithAudioGroup(audioOption, hls.levels, allAudioTracks, searchIndex, audioMatchPredicate);\n          if (switchIndex === -1) {\n            return null;\n          }\n          hls.nextLoadLevel = switchIndex;\n        }\n        if (audioOption.channels || audioOption.audioCodec) {\n          const withoutCodecAndChannelsMatch = findMatchingOption(audioOption, allAudioTracks);\n          if (withoutCodecAndChannelsMatch > -1) {\n            return allAudioTracks[withoutCodecAndChannelsMatch];\n          }\n        }\n      }\n    }\n    return null;\n  }\n  setAudioTrack(newId) {\n    const tracks = this.tracksInGroup;\n    if (newId < 0 || newId >= tracks.length) {\n      this.warn(`Invalid audio track id: ${newId}`);\n      return;\n    }\n    this.clearTimer();\n    this.selectDefaultTrack = false;\n    const lastTrack = this.currentTrack;\n    const track = tracks[newId];\n    const trackLoaded = track.details && !track.details.live;\n    if (newId === this.trackId && track === lastTrack && trackLoaded) {\n      return;\n    }\n    this.log(`Switching to audio-track ${newId} \"${track.name}\" lang:${track.lang} group:${track.groupId} channels:${track.channels}`);\n    this.trackId = newId;\n    this.currentTrack = track;\n    this.hls.trigger(Events.AUDIO_TRACK_SWITCHING, _objectSpread2({}, track));\n    if (trackLoaded) {\n      return;\n    }\n    const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details);\n    this.loadPlaylist(hlsUrlParameters);\n  }\n  findTrackId(currentTrack) {\n    const audioTracks = this.tracksInGroup;\n    for (let i = 0; i < audioTracks.length; i++) {\n      const track = audioTracks[i];\n      if (this.selectDefaultTrack && !track.default) {\n        continue;\n      }\n      if (!currentTrack || matchesOption(currentTrack, track, audioMatchPredicate)) {\n        return i;\n      }\n    }\n    if (currentTrack) {\n      const {\n        name,\n        lang,\n        assocLang,\n        characteristics,\n        audioCodec,\n        channels\n      } = currentTrack;\n      for (let i = 0; i < audioTracks.length; i++) {\n        const track = audioTracks[i];\n        if (matchesOption({\n          name,\n          lang,\n          assocLang,\n          characteristics,\n          audioCodec,\n          channels\n        }, track, audioMatchPredicate)) {\n          return i;\n        }\n      }\n      for (let i = 0; i < audioTracks.length; i++) {\n        const track = audioTracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\", \"ASSOC-LANGUAGE\", \"CHARACTERISTICS\"])) {\n          return i;\n        }\n      }\n      for (let i = 0; i < audioTracks.length; i++) {\n        const track = audioTracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\"])) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n  loadPlaylist(hlsUrlParameters) {\n    const audioTrack = this.currentTrack;\n    if (this.shouldLoadPlaylist(audioTrack) && audioTrack) {\n      super.loadPlaylist();\n      const id = audioTrack.id;\n      const groupId = audioTrack.groupId;\n      let url = audioTrack.url;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      this.log(`loading audio-track playlist ${id} \"${audioTrack.name}\" lang:${audioTrack.lang} group:${groupId}`);\n      this.clearTimer();\n      this.hls.trigger(Events.AUDIO_TRACK_LOADING, {\n        url,\n        id,\n        groupId,\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n}\nconst TICK_INTERVAL$1 = 500;\nclass SubtitleStreamController extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, \"[subtitle-stream-controller]\", PlaylistLevelType.SUBTITLE);\n    this.currentTrackId = -1;\n    this.tracksBuffered = [];\n    this.mainDetails = null;\n    this._registerListeners();\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n    this.mainDetails = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.on(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.off(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  startLoad(startPosition) {\n    this.stopLoad();\n    this.state = State.IDLE;\n    this.setInterval(TICK_INTERVAL$1);\n    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n    this.tick();\n  }\n  onManifestLoading() {\n    this.mainDetails = null;\n    this.fragmentTracker.removeAllFragments();\n  }\n  onMediaDetaching() {\n    this.tracksBuffered = [];\n    super.onMediaDetaching();\n  }\n  onLevelLoaded(event, data) {\n    this.mainDetails = data.details;\n  }\n  onSubtitleFragProcessed(event, data) {\n    const {\n      frag,\n      success\n    } = data;\n    this.fragPrevious = frag;\n    this.state = State.IDLE;\n    if (!success) {\n      return;\n    }\n    const buffered = this.tracksBuffered[this.currentTrackId];\n    if (!buffered) {\n      return;\n    }\n    let timeRange;\n    const fragStart = frag.start;\n    for (let i = 0; i < buffered.length; i++) {\n      if (fragStart >= buffered[i].start && fragStart <= buffered[i].end) {\n        timeRange = buffered[i];\n        break;\n      }\n    }\n    const fragEnd = frag.start + frag.duration;\n    if (timeRange) {\n      timeRange.end = fragEnd;\n    } else {\n      timeRange = {\n        start: fragStart,\n        end: fragEnd\n      };\n      buffered.push(timeRange);\n    }\n    this.fragmentTracker.fragBuffered(frag);\n    this.fragBufferedComplete(frag, null);\n  }\n  onBufferFlushing(event, data) {\n    const {\n      startOffset,\n      endOffset\n    } = data;\n    if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {\n      const endOffsetSubtitles = endOffset - 1;\n      if (endOffsetSubtitles <= 0) {\n        return;\n      }\n      data.endOffsetSubtitles = Math.max(0, endOffsetSubtitles);\n      this.tracksBuffered.forEach((buffered) => {\n        for (let i = 0; i < buffered.length; ) {\n          if (buffered[i].end <= endOffsetSubtitles) {\n            buffered.shift();\n            continue;\n          } else if (buffered[i].start < endOffsetSubtitles) {\n            buffered[i].start = endOffsetSubtitles;\n          } else {\n            break;\n          }\n          i++;\n        }\n      });\n      this.fragmentTracker.removeFragmentsInRange(startOffset, endOffsetSubtitles, PlaylistLevelType.SUBTITLE);\n    }\n  }\n  onFragBuffered(event, data) {\n    if (!this.loadedmetadata && data.frag.type === PlaylistLevelType.MAIN) {\n      var _this$media;\n      if ((_this$media = this.media) != null && _this$media.buffered.length) {\n        this.loadedmetadata = true;\n      }\n    }\n  }\n  // If something goes wrong, proceed to next frag, if we were processing one.\n  onError(event, data) {\n    const frag = data.frag;\n    if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.SUBTITLE) {\n      if (this.fragCurrent) {\n        this.fragCurrent.abortRequests();\n      }\n      if (this.state !== State.STOPPED) {\n        this.state = State.IDLE;\n      }\n    }\n  }\n  // Got all new subtitle levels.\n  onSubtitleTracksUpdated(event, {\n    subtitleTracks\n  }) {\n    if (this.levels && subtitleOptionsIdentical(this.levels, subtitleTracks)) {\n      this.levels = subtitleTracks.map((mediaPlaylist) => new Level(mediaPlaylist));\n      return;\n    }\n    this.tracksBuffered = [];\n    this.levels = subtitleTracks.map((mediaPlaylist) => {\n      const level = new Level(mediaPlaylist);\n      this.tracksBuffered[level.id] = [];\n      return level;\n    });\n    this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, PlaylistLevelType.SUBTITLE);\n    this.fragPrevious = null;\n    this.mediaBuffer = null;\n  }\n  onSubtitleTrackSwitch(event, data) {\n    var _this$levels;\n    this.currentTrackId = data.id;\n    if (!((_this$levels = this.levels) != null && _this$levels.length) || this.currentTrackId === -1) {\n      this.clearInterval();\n      return;\n    }\n    const currentTrack = this.levels[this.currentTrackId];\n    if (currentTrack != null && currentTrack.details) {\n      this.mediaBuffer = this.mediaBufferTimeRanges;\n    } else {\n      this.mediaBuffer = null;\n    }\n    if (currentTrack) {\n      this.setInterval(TICK_INTERVAL$1);\n    }\n  }\n  // Got a new set of subtitle fragments.\n  onSubtitleTrackLoaded(event, data) {\n    var _track$details;\n    const {\n      currentTrackId,\n      levels\n    } = this;\n    const {\n      details: newDetails,\n      id: trackId\n    } = data;\n    if (!levels) {\n      this.warn(`Subtitle tracks were reset while loading level ${trackId}`);\n      return;\n    }\n    const track = levels[currentTrackId];\n    if (trackId >= levels.length || trackId !== currentTrackId || !track) {\n      return;\n    }\n    this.log(`Subtitle track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : \"\"},duration:${newDetails.totalduration}`);\n    this.mediaBuffer = this.mediaBufferTimeRanges;\n    let sliding = 0;\n    if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n      const mainDetails = this.mainDetails;\n      if (newDetails.deltaUpdateFailed || !mainDetails) {\n        return;\n      }\n      const mainSlidingStartFragment = mainDetails.fragments[0];\n      if (!track.details) {\n        if (newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n          alignMediaPlaylistByPDT(newDetails, mainDetails);\n          sliding = newDetails.fragments[0].start;\n        } else if (mainSlidingStartFragment) {\n          sliding = mainSlidingStartFragment.start;\n          addSliding(newDetails, sliding);\n        }\n      } else {\n        var _this$levelLastLoaded;\n        sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n        if (sliding === 0 && mainSlidingStartFragment) {\n          sliding = mainSlidingStartFragment.start;\n          addSliding(newDetails, sliding);\n        }\n      }\n    }\n    track.details = newDetails;\n    this.levelLastLoaded = track;\n    if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {\n      this.setStartPosition(this.mainDetails || newDetails, sliding);\n    }\n    this.tick();\n    if (newDetails.live && !this.fragCurrent && this.media && this.state === State.IDLE) {\n      const foundFrag = findFragmentByPTS(null, newDetails.fragments, this.media.currentTime, 0);\n      if (!foundFrag) {\n        this.warn(\"Subtitle playlist not aligned with playback\");\n        track.details = void 0;\n      }\n    }\n  }\n  _handleFragmentLoadComplete(fragLoadedData) {\n    const {\n      frag,\n      payload\n    } = fragLoadedData;\n    const decryptData = frag.decryptdata;\n    const hls = this.hls;\n    if (this.fragContextChanged(frag)) {\n      return;\n    }\n    if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && decryptData.method === \"AES-128\") {\n      const startTime = performance.now();\n      this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer).catch((err) => {\n        hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.FRAG_DECRYPT_ERROR,\n          fatal: false,\n          error: err,\n          reason: err.message,\n          frag\n        });\n        throw err;\n      }).then((decryptedData) => {\n        const endTime = performance.now();\n        hls.trigger(Events.FRAG_DECRYPTED, {\n          frag,\n          payload: decryptedData,\n          stats: {\n            tstart: startTime,\n            tdecrypt: endTime\n          }\n        });\n      }).catch((err) => {\n        this.warn(`${err.name}: ${err.message}`);\n        this.state = State.IDLE;\n      });\n    }\n  }\n  doTick() {\n    if (!this.media) {\n      this.state = State.IDLE;\n      return;\n    }\n    if (this.state === State.IDLE) {\n      const {\n        currentTrackId,\n        levels\n      } = this;\n      const track = levels == null ? void 0 : levels[currentTrackId];\n      if (!track || !levels.length || !track.details) {\n        return;\n      }\n      const {\n        config\n      } = this;\n      const currentTime = this.getLoadPosition();\n      const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);\n      const {\n        end: targetBufferTime,\n        len: bufferLen\n      } = bufferedInfo;\n      const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);\n      const trackDetails = track.details;\n      const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;\n      if (bufferLen > maxBufLen) {\n        return;\n      }\n      const fragments = trackDetails.fragments;\n      const fragLen = fragments.length;\n      const end = trackDetails.edge;\n      let foundFrag = null;\n      const fragPrevious = this.fragPrevious;\n      if (targetBufferTime < end) {\n        const tolerance = config.maxFragLookUpTolerance;\n        const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;\n        foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);\n        if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {\n          foundFrag = fragments[0];\n        }\n      } else {\n        foundFrag = fragments[fragLen - 1];\n      }\n      if (!foundFrag) {\n        return;\n      }\n      foundFrag = this.mapToInitFragWhenRequired(foundFrag);\n      if (foundFrag.sn !== \"initSegment\") {\n        const curSNIdx = foundFrag.sn - trackDetails.startSN;\n        const prevFrag = fragments[curSNIdx - 1];\n        if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {\n          foundFrag = prevFrag;\n        }\n      }\n      if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {\n        this.loadFragment(foundFrag, track, targetBufferTime);\n      }\n    }\n  }\n  getMaxBufferLength(mainBufferLength) {\n    const maxConfigBuffer = super.getMaxBufferLength();\n    if (!mainBufferLength) {\n      return maxConfigBuffer;\n    }\n    return Math.max(maxConfigBuffer, mainBufferLength);\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    this.fragCurrent = frag;\n    if (frag.sn === \"initSegment\") {\n      this._loadInitSegment(frag, level);\n    } else {\n      this.startFragRequested = true;\n      super.loadFragment(frag, level, targetBufferTime);\n    }\n  }\n  get mediaBufferTimeRanges() {\n    return new BufferableInstance(this.tracksBuffered[this.currentTrackId] || []);\n  }\n}\nclass BufferableInstance {\n  constructor(timeranges) {\n    this.buffered = void 0;\n    const getRange = (name, index, length) => {\n      index = index >>> 0;\n      if (index > length - 1) {\n        throw new DOMException(`Failed to execute '${name}' on 'TimeRanges': The index provided (${index}) is greater than the maximum bound (${length})`);\n      }\n      return timeranges[index][name];\n    };\n    this.buffered = {\n      get length() {\n        return timeranges.length;\n      },\n      end(index) {\n        return getRange(\"end\", index, timeranges.length);\n      },\n      start(index) {\n        return getRange(\"start\", index, timeranges.length);\n      }\n    };\n  }\n}\nclass SubtitleTrackController extends BasePlaylistController {\n  constructor(hls) {\n    super(hls, \"[subtitle-track-controller]\");\n    this.media = null;\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n    this.queuedDefaultTrack = -1;\n    this.asyncPollTrackChange = () => this.pollTrackChange(0);\n    this.useTextTrackPolling = false;\n    this.subtitlePollingInterval = -1;\n    this._subtitleDisplay = true;\n    this.onTextTracksChanged = () => {\n      if (!this.useTextTrackPolling) {\n        self.clearInterval(this.subtitlePollingInterval);\n      }\n      if (!this.media || !this.hls.config.renderTextTracksNatively) {\n        return;\n      }\n      let textTrack = null;\n      const tracks = filterSubtitleTracks(this.media.textTracks);\n      for (let i = 0; i < tracks.length; i++) {\n        if (tracks[i].mode === \"hidden\") {\n          textTrack = tracks[i];\n        } else if (tracks[i].mode === \"showing\") {\n          textTrack = tracks[i];\n          break;\n        }\n      }\n      const trackId = this.findTrackForTextTrack(textTrack);\n      if (this.subtitleTrack !== trackId) {\n        this.setSubtitleTrack(trackId);\n      }\n    };\n    this.registerListeners();\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.tracks.length = 0;\n    this.tracksInGroup.length = 0;\n    this.currentTrack = null;\n    this.onTextTracksChanged = this.asyncPollTrackChange = null;\n    super.destroy();\n  }\n  get subtitleDisplay() {\n    return this._subtitleDisplay;\n  }\n  set subtitleDisplay(value) {\n    this._subtitleDisplay = value;\n    if (this.trackId > -1) {\n      this.toggleTrackModes();\n    }\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  // Listen for subtitle track change, then extract the current track ID.\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    if (!this.media) {\n      return;\n    }\n    if (this.queuedDefaultTrack > -1) {\n      this.subtitleTrack = this.queuedDefaultTrack;\n      this.queuedDefaultTrack = -1;\n    }\n    this.useTextTrackPolling = !(this.media.textTracks && \"onchange\" in this.media.textTracks);\n    if (this.useTextTrackPolling) {\n      this.pollTrackChange(500);\n    } else {\n      this.media.textTracks.addEventListener(\"change\", this.asyncPollTrackChange);\n    }\n  }\n  pollTrackChange(timeout) {\n    self.clearInterval(this.subtitlePollingInterval);\n    this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, timeout);\n  }\n  onMediaDetaching() {\n    if (!this.media) {\n      return;\n    }\n    self.clearInterval(this.subtitlePollingInterval);\n    if (!this.useTextTrackPolling) {\n      this.media.textTracks.removeEventListener(\"change\", this.asyncPollTrackChange);\n    }\n    if (this.trackId > -1) {\n      this.queuedDefaultTrack = this.trackId;\n    }\n    const textTracks = filterSubtitleTracks(this.media.textTracks);\n    textTracks.forEach((track) => {\n      clearCurrentCues(track);\n    });\n    this.subtitleTrack = -1;\n    this.media = null;\n  }\n  onManifestLoading() {\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n  }\n  // Fired whenever a new manifest is loaded.\n  onManifestParsed(event, data) {\n    this.tracks = data.subtitleTracks;\n  }\n  onSubtitleTrackLoaded(event, data) {\n    const {\n      id,\n      groupId,\n      details\n    } = data;\n    const trackInActiveGroup = this.tracksInGroup[id];\n    if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n      this.warn(`Subtitle track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n      return;\n    }\n    const curDetails = trackInActiveGroup.details;\n    trackInActiveGroup.details = data.details;\n    this.log(`Subtitle track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n    if (id === this.trackId) {\n      this.playlistLoaded(id, data, curDetails);\n    }\n  }\n  onLevelLoading(event, data) {\n    this.switchLevel(data.level);\n  }\n  onLevelSwitching(event, data) {\n    this.switchLevel(data.level);\n  }\n  switchLevel(levelIndex) {\n    const levelInfo = this.hls.levels[levelIndex];\n    if (!levelInfo) {\n      return;\n    }\n    const subtitleGroups = levelInfo.subtitleGroups || null;\n    const currentGroups = this.groupIds;\n    let currentTrack = this.currentTrack;\n    if (!subtitleGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (subtitleGroups == null ? void 0 : subtitleGroups.length) || subtitleGroups != null && subtitleGroups.some((groupId) => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n      this.groupIds = subtitleGroups;\n      this.trackId = -1;\n      this.currentTrack = null;\n      const subtitleTracks = this.tracks.filter((track) => !subtitleGroups || subtitleGroups.indexOf(track.groupId) !== -1);\n      if (subtitleTracks.length) {\n        if (this.selectDefaultTrack && !subtitleTracks.some((track) => track.default)) {\n          this.selectDefaultTrack = false;\n        }\n        subtitleTracks.forEach((track, i) => {\n          track.id = i;\n        });\n      } else if (!currentTrack && !this.tracksInGroup.length) {\n        return;\n      }\n      this.tracksInGroup = subtitleTracks;\n      const subtitlePreference = this.hls.config.subtitlePreference;\n      if (!currentTrack && subtitlePreference) {\n        this.selectDefaultTrack = false;\n        const groupIndex = findMatchingOption(subtitlePreference, subtitleTracks);\n        if (groupIndex > -1) {\n          currentTrack = subtitleTracks[groupIndex];\n        } else {\n          const allIndex = findMatchingOption(subtitlePreference, this.tracks);\n          currentTrack = this.tracks[allIndex];\n        }\n      }\n      let trackId = this.findTrackId(currentTrack);\n      if (trackId === -1 && currentTrack) {\n        trackId = this.findTrackId(null);\n      }\n      const subtitleTracksUpdated = {\n        subtitleTracks\n      };\n      this.log(`Updating subtitle tracks, ${subtitleTracks.length} track(s) found in \"${subtitleGroups == null ? void 0 : subtitleGroups.join(\",\")}\" group-id`);\n      this.hls.trigger(Events.SUBTITLE_TRACKS_UPDATED, subtitleTracksUpdated);\n      if (trackId !== -1 && this.trackId === -1) {\n        this.setSubtitleTrack(trackId);\n      }\n    } else if (this.shouldReloadPlaylist(currentTrack)) {\n      this.setSubtitleTrack(this.trackId);\n    }\n  }\n  findTrackId(currentTrack) {\n    const tracks = this.tracksInGroup;\n    const selectDefault = this.selectDefaultTrack;\n    for (let i = 0; i < tracks.length; i++) {\n      const track = tracks[i];\n      if (selectDefault && !track.default || !selectDefault && !currentTrack) {\n        continue;\n      }\n      if (!currentTrack || matchesOption(track, currentTrack)) {\n        return i;\n      }\n    }\n    if (currentTrack) {\n      for (let i = 0; i < tracks.length; i++) {\n        const track = tracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\", \"ASSOC-LANGUAGE\", \"CHARACTERISTICS\"])) {\n          return i;\n        }\n      }\n      for (let i = 0; i < tracks.length; i++) {\n        const track = tracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\"])) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n  findTrackForTextTrack(textTrack) {\n    if (textTrack) {\n      const tracks = this.tracksInGroup;\n      for (let i = 0; i < tracks.length; i++) {\n        const track = tracks[i];\n        if (subtitleTrackMatchesTextTrack(track, textTrack)) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.SUBTITLE_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n      this.checkRetry(data);\n    }\n  }\n  get allSubtitleTracks() {\n    return this.tracks;\n  }\n  /** get alternate subtitle tracks list from playlist **/\n  get subtitleTracks() {\n    return this.tracksInGroup;\n  }\n  /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/\n  get subtitleTrack() {\n    return this.trackId;\n  }\n  set subtitleTrack(newId) {\n    this.selectDefaultTrack = false;\n    this.setSubtitleTrack(newId);\n  }\n  setSubtitleOption(subtitleOption) {\n    this.hls.config.subtitlePreference = subtitleOption;\n    if (subtitleOption) {\n      const allSubtitleTracks = this.allSubtitleTracks;\n      this.selectDefaultTrack = false;\n      if (allSubtitleTracks.length) {\n        const currentTrack = this.currentTrack;\n        if (currentTrack && matchesOption(subtitleOption, currentTrack)) {\n          return currentTrack;\n        }\n        const groupIndex = findMatchingOption(subtitleOption, this.tracksInGroup);\n        if (groupIndex > -1) {\n          const track = this.tracksInGroup[groupIndex];\n          this.setSubtitleTrack(groupIndex);\n          return track;\n        } else if (currentTrack) {\n          return null;\n        } else {\n          const allIndex = findMatchingOption(subtitleOption, allSubtitleTracks);\n          if (allIndex > -1) {\n            return allSubtitleTracks[allIndex];\n          }\n        }\n      }\n    }\n    return null;\n  }\n  loadPlaylist(hlsUrlParameters) {\n    super.loadPlaylist();\n    const currentTrack = this.currentTrack;\n    if (this.shouldLoadPlaylist(currentTrack) && currentTrack) {\n      const id = currentTrack.id;\n      const groupId = currentTrack.groupId;\n      let url = currentTrack.url;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      this.log(`Loading subtitle playlist for id ${id}`);\n      this.hls.trigger(Events.SUBTITLE_TRACK_LOADING, {\n        url,\n        id,\n        groupId,\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n  /**\n   * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.\n   * This operates on the DOM textTracks.\n   * A value of -1 will disable all subtitle tracks.\n   */\n  toggleTrackModes() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const textTracks = filterSubtitleTracks(media.textTracks);\n    const currentTrack = this.currentTrack;\n    let nextTrack;\n    if (currentTrack) {\n      nextTrack = textTracks.filter((textTrack) => subtitleTrackMatchesTextTrack(currentTrack, textTrack))[0];\n      if (!nextTrack) {\n        this.warn(`Unable to find subtitle TextTrack with name \"${currentTrack.name}\" and language \"${currentTrack.lang}\"`);\n      }\n    }\n    [].slice.call(textTracks).forEach((track) => {\n      if (track.mode !== \"disabled\" && track !== nextTrack) {\n        track.mode = \"disabled\";\n      }\n    });\n    if (nextTrack) {\n      const mode = this.subtitleDisplay ? \"showing\" : \"hidden\";\n      if (nextTrack.mode !== mode) {\n        nextTrack.mode = mode;\n      }\n    }\n  }\n  /**\n   * This method is responsible for validating the subtitle index and periodically reloading if live.\n   * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.\n   */\n  setSubtitleTrack(newId) {\n    const tracks = this.tracksInGroup;\n    if (!this.media) {\n      this.queuedDefaultTrack = newId;\n      return;\n    }\n    if (newId < -1 || newId >= tracks.length || !isFiniteNumber(newId)) {\n      this.warn(`Invalid subtitle track id: ${newId}`);\n      return;\n    }\n    this.clearTimer();\n    this.selectDefaultTrack = false;\n    const lastTrack = this.currentTrack;\n    const track = tracks[newId] || null;\n    this.trackId = newId;\n    this.currentTrack = track;\n    this.toggleTrackModes();\n    if (!track) {\n      this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n        id: newId\n      });\n      return;\n    }\n    const trackLoaded = !!track.details && !track.details.live;\n    if (newId === this.trackId && track === lastTrack && trackLoaded) {\n      return;\n    }\n    this.log(`Switching to subtitle-track ${newId}` + (track ? ` \"${track.name}\" lang:${track.lang} group:${track.groupId}` : \"\"));\n    const {\n      id,\n      groupId = \"\",\n      name,\n      type,\n      url\n    } = track;\n    this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n      id,\n      groupId,\n      name,\n      type,\n      url\n    });\n    const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details);\n    this.loadPlaylist(hlsUrlParameters);\n  }\n}\nclass BufferOperationQueue {\n  constructor(sourceBufferReference) {\n    this.buffers = void 0;\n    this.queues = {\n      video: [],\n      audio: [],\n      audiovideo: []\n    };\n    this.buffers = sourceBufferReference;\n  }\n  append(operation, type, pending) {\n    const queue = this.queues[type];\n    queue.push(operation);\n    if (queue.length === 1 && !pending) {\n      this.executeNext(type);\n    }\n  }\n  insertAbort(operation, type) {\n    const queue = this.queues[type];\n    queue.unshift(operation);\n    this.executeNext(type);\n  }\n  appendBlocker(type) {\n    let execute;\n    const promise = new Promise((resolve) => {\n      execute = resolve;\n    });\n    const operation = {\n      execute,\n      onStart: () => {\n      },\n      onComplete: () => {\n      },\n      onError: () => {\n      }\n    };\n    this.append(operation, type);\n    return promise;\n  }\n  executeNext(type) {\n    const queue = this.queues[type];\n    if (queue.length) {\n      const operation = queue[0];\n      try {\n        operation.execute();\n      } catch (error) {\n        logger.warn(`[buffer-operation-queue]: Exception executing \"${type}\" SourceBuffer operation: ${error}`);\n        operation.onError(error);\n        const sb = this.buffers[type];\n        if (!(sb != null && sb.updating)) {\n          this.shiftAndExecuteNext(type);\n        }\n      }\n    }\n  }\n  shiftAndExecuteNext(type) {\n    this.queues[type].shift();\n    this.executeNext(type);\n  }\n  current(type) {\n    return this.queues[type][0];\n  }\n}\nconst VIDEO_CODEC_PROFILE_REPLACE = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\\.[^.,]+)+/;\nclass BufferController {\n  constructor(hls) {\n    this.details = null;\n    this._objectUrl = null;\n    this.operationQueue = void 0;\n    this.listeners = void 0;\n    this.hls = void 0;\n    this.bufferCodecEventsExpected = 0;\n    this._bufferCodecEventsTotal = 0;\n    this.media = null;\n    this.mediaSource = null;\n    this.lastMpegAudioChunk = null;\n    this.appendSource = void 0;\n    this.appendErrors = {\n      audio: 0,\n      video: 0,\n      audiovideo: 0\n    };\n    this.tracks = {};\n    this.pendingTracks = {};\n    this.sourceBuffer = void 0;\n    this.log = void 0;\n    this.warn = void 0;\n    this.error = void 0;\n    this._onEndStreaming = (event) => {\n      if (!this.hls) {\n        return;\n      }\n      this.hls.pauseBuffering();\n    };\n    this._onStartStreaming = (event) => {\n      if (!this.hls) {\n        return;\n      }\n      this.hls.resumeBuffering();\n    };\n    this._onMediaSourceOpen = () => {\n      const {\n        media,\n        mediaSource\n      } = this;\n      this.log(\"Media source opened\");\n      if (media) {\n        media.removeEventListener(\"emptied\", this._onMediaEmptied);\n        this.updateMediaElementDuration();\n        this.hls.trigger(Events.MEDIA_ATTACHED, {\n          media,\n          mediaSource\n        });\n      }\n      if (mediaSource) {\n        mediaSource.removeEventListener(\"sourceopen\", this._onMediaSourceOpen);\n      }\n      this.checkPendingTracks();\n    };\n    this._onMediaSourceClose = () => {\n      this.log(\"Media source closed\");\n    };\n    this._onMediaSourceEnded = () => {\n      this.log(\"Media source ended\");\n    };\n    this._onMediaEmptied = () => {\n      const {\n        mediaSrc,\n        _objectUrl\n      } = this;\n      if (mediaSrc !== _objectUrl) {\n        logger.error(`Media element src was set while attaching MediaSource (${_objectUrl} > ${mediaSrc})`);\n      }\n    };\n    this.hls = hls;\n    const logPrefix = \"[buffer-controller]\";\n    this.appendSource = hls.config.preferManagedMediaSource && typeof self !== \"undefined\" && self.ManagedMediaSource;\n    this.log = logger.log.bind(logger, logPrefix);\n    this.warn = logger.warn.bind(logger, logPrefix);\n    this.error = logger.error.bind(logger, logPrefix);\n    this._initSourceBuffer();\n    this.registerListeners();\n  }\n  hasSourceTypes() {\n    return this.getSourceBufferTypes().length > 0 || Object.keys(this.pendingTracks).length > 0;\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.details = null;\n    this.lastMpegAudioChunk = null;\n    this.hls = null;\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.on(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n    hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.on(Events.BUFFER_EOS, this.onBufferEos, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    hls.on(Events.FRAG_PARSED, this.onFragParsed, this);\n    hls.on(Events.FRAG_CHANGED, this.onFragChanged, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.off(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n    hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.off(Events.BUFFER_EOS, this.onBufferEos, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    hls.off(Events.FRAG_PARSED, this.onFragParsed, this);\n    hls.off(Events.FRAG_CHANGED, this.onFragChanged, this);\n  }\n  _initSourceBuffer() {\n    this.sourceBuffer = {};\n    this.operationQueue = new BufferOperationQueue(this.sourceBuffer);\n    this.listeners = {\n      audio: [],\n      video: [],\n      audiovideo: []\n    };\n    this.appendErrors = {\n      audio: 0,\n      video: 0,\n      audiovideo: 0\n    };\n    this.lastMpegAudioChunk = null;\n  }\n  onManifestLoading() {\n    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0;\n    this.details = null;\n  }\n  onManifestParsed(event, data) {\n    let codecEvents = 2;\n    if (data.audio && !data.video || !data.altAudio || false) {\n      codecEvents = 1;\n    }\n    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = codecEvents;\n    this.log(`${this.bufferCodecEventsExpected} bufferCodec event(s) expected`);\n  }\n  onMediaAttaching(event, data) {\n    const media = this.media = data.media;\n    const MediaSource = getMediaSource(this.appendSource);\n    if (media && MediaSource) {\n      var _ms$constructor;\n      const ms = this.mediaSource = new MediaSource();\n      this.log(`created media source: ${(_ms$constructor = ms.constructor) == null ? void 0 : _ms$constructor.name}`);\n      ms.addEventListener(\"sourceopen\", this._onMediaSourceOpen);\n      ms.addEventListener(\"sourceended\", this._onMediaSourceEnded);\n      ms.addEventListener(\"sourceclose\", this._onMediaSourceClose);\n      if (this.appendSource) {\n        ms.addEventListener(\"startstreaming\", this._onStartStreaming);\n        ms.addEventListener(\"endstreaming\", this._onEndStreaming);\n      }\n      const objectUrl = this._objectUrl = self.URL.createObjectURL(ms);\n      if (this.appendSource) {\n        try {\n          media.removeAttribute(\"src\");\n          const MMS = self.ManagedMediaSource;\n          media.disableRemotePlayback = media.disableRemotePlayback || MMS && ms instanceof MMS;\n          removeSourceChildren(media);\n          addSource(media, objectUrl);\n          media.load();\n        } catch (error) {\n          media.src = objectUrl;\n        }\n      } else {\n        media.src = objectUrl;\n      }\n      media.addEventListener(\"emptied\", this._onMediaEmptied);\n    }\n  }\n  onMediaDetaching() {\n    const {\n      media,\n      mediaSource,\n      _objectUrl\n    } = this;\n    if (mediaSource) {\n      this.log(\"media source detaching\");\n      if (mediaSource.readyState === \"open\") {\n        try {\n          mediaSource.endOfStream();\n        } catch (err) {\n          this.warn(`onMediaDetaching: ${err.message} while calling endOfStream`);\n        }\n      }\n      this.onBufferReset();\n      mediaSource.removeEventListener(\"sourceopen\", this._onMediaSourceOpen);\n      mediaSource.removeEventListener(\"sourceended\", this._onMediaSourceEnded);\n      mediaSource.removeEventListener(\"sourceclose\", this._onMediaSourceClose);\n      if (this.appendSource) {\n        mediaSource.removeEventListener(\"startstreaming\", this._onStartStreaming);\n        mediaSource.removeEventListener(\"endstreaming\", this._onEndStreaming);\n      }\n      if (media) {\n        media.removeEventListener(\"emptied\", this._onMediaEmptied);\n        if (_objectUrl) {\n          self.URL.revokeObjectURL(_objectUrl);\n        }\n        if (this.mediaSrc === _objectUrl) {\n          media.removeAttribute(\"src\");\n          if (this.appendSource) {\n            removeSourceChildren(media);\n          }\n          media.load();\n        } else {\n          this.warn(\"media|source.src was changed by a third party - skip cleanup\");\n        }\n      }\n      this.mediaSource = null;\n      this.media = null;\n      this._objectUrl = null;\n      this.bufferCodecEventsExpected = this._bufferCodecEventsTotal;\n      this.pendingTracks = {};\n      this.tracks = {};\n    }\n    this.hls.trigger(Events.MEDIA_DETACHED, void 0);\n  }\n  onBufferReset() {\n    this.getSourceBufferTypes().forEach((type) => {\n      this.resetBuffer(type);\n    });\n    this._initSourceBuffer();\n  }\n  resetBuffer(type) {\n    const sb = this.sourceBuffer[type];\n    try {\n      if (sb) {\n        var _this$mediaSource;\n        this.removeBufferListeners(type);\n        this.sourceBuffer[type] = void 0;\n        if ((_this$mediaSource = this.mediaSource) != null && _this$mediaSource.sourceBuffers.length) {\n          this.mediaSource.removeSourceBuffer(sb);\n        }\n      }\n    } catch (err) {\n      this.warn(`onBufferReset ${type}`, err);\n    }\n  }\n  onBufferCodecs(event, data) {\n    const sourceBufferCount = this.getSourceBufferTypes().length;\n    const trackNames = Object.keys(data);\n    trackNames.forEach((trackName) => {\n      if (sourceBufferCount) {\n        const track = this.tracks[trackName];\n        if (track && typeof track.buffer.changeType === \"function\") {\n          var _trackCodec;\n          const {\n            id,\n            codec,\n            levelCodec,\n            container,\n            metadata\n          } = data[trackName];\n          const currentCodecFull = pickMostCompleteCodecName(track.codec, track.levelCodec);\n          const currentCodec = currentCodecFull == null ? void 0 : currentCodecFull.replace(VIDEO_CODEC_PROFILE_REPLACE, \"$1\");\n          let trackCodec = pickMostCompleteCodecName(codec, levelCodec);\n          const nextCodec = (_trackCodec = trackCodec) == null ? void 0 : _trackCodec.replace(VIDEO_CODEC_PROFILE_REPLACE, \"$1\");\n          if (trackCodec && currentCodec !== nextCodec) {\n            if (trackName.slice(0, 5) === \"audio\") {\n              trackCodec = getCodecCompatibleName(trackCodec, this.appendSource);\n            }\n            const mimeType = `${container};codecs=${trackCodec}`;\n            this.appendChangeType(trackName, mimeType);\n            this.log(`switching codec ${currentCodecFull} to ${trackCodec}`);\n            this.tracks[trackName] = {\n              buffer: track.buffer,\n              codec,\n              container,\n              levelCodec,\n              metadata,\n              id\n            };\n          }\n        }\n      } else {\n        this.pendingTracks[trackName] = data[trackName];\n      }\n    });\n    if (sourceBufferCount) {\n      return;\n    }\n    const bufferCodecEventsExpected = Math.max(this.bufferCodecEventsExpected - 1, 0);\n    if (this.bufferCodecEventsExpected !== bufferCodecEventsExpected) {\n      this.log(`${bufferCodecEventsExpected} bufferCodec event(s) expected ${trackNames.join(\",\")}`);\n      this.bufferCodecEventsExpected = bufferCodecEventsExpected;\n    }\n    if (this.mediaSource && this.mediaSource.readyState === \"open\") {\n      this.checkPendingTracks();\n    }\n  }\n  appendChangeType(type, mimeType) {\n    const {\n      operationQueue\n    } = this;\n    const operation = {\n      execute: () => {\n        const sb = this.sourceBuffer[type];\n        if (sb) {\n          this.log(`changing ${type} sourceBuffer type to ${mimeType}`);\n          sb.changeType(mimeType);\n        }\n        operationQueue.shiftAndExecuteNext(type);\n      },\n      onStart: () => {\n      },\n      onComplete: () => {\n      },\n      onError: (error) => {\n        this.warn(`Failed to change ${type} SourceBuffer type`, error);\n      }\n    };\n    operationQueue.append(operation, type, !!this.pendingTracks[type]);\n  }\n  onBufferAppending(event, eventData) {\n    const {\n      hls,\n      operationQueue,\n      tracks\n    } = this;\n    const {\n      data,\n      type,\n      frag,\n      part,\n      chunkMeta\n    } = eventData;\n    const chunkStats = chunkMeta.buffering[type];\n    const bufferAppendingStart = self.performance.now();\n    chunkStats.start = bufferAppendingStart;\n    const fragBuffering = frag.stats.buffering;\n    const partBuffering = part ? part.stats.buffering : null;\n    if (fragBuffering.start === 0) {\n      fragBuffering.start = bufferAppendingStart;\n    }\n    if (partBuffering && partBuffering.start === 0) {\n      partBuffering.start = bufferAppendingStart;\n    }\n    const audioTrack = tracks.audio;\n    let checkTimestampOffset = false;\n    if (type === \"audio\" && (audioTrack == null ? void 0 : audioTrack.container) === \"audio/mpeg\") {\n      checkTimestampOffset = !this.lastMpegAudioChunk || chunkMeta.id === 1 || this.lastMpegAudioChunk.sn !== chunkMeta.sn;\n      this.lastMpegAudioChunk = chunkMeta;\n    }\n    const fragStart = frag.start;\n    const operation = {\n      execute: () => {\n        chunkStats.executeStart = self.performance.now();\n        if (checkTimestampOffset) {\n          const sb = this.sourceBuffer[type];\n          if (sb) {\n            const delta = fragStart - sb.timestampOffset;\n            if (Math.abs(delta) >= 0.1) {\n              this.log(`Updating audio SourceBuffer timestampOffset to ${fragStart} (delta: ${delta}) sn: ${frag.sn})`);\n              sb.timestampOffset = fragStart;\n            }\n          }\n        }\n        this.appendExecutor(data, type);\n      },\n      onStart: () => {\n      },\n      onComplete: () => {\n        const end = self.performance.now();\n        chunkStats.executeEnd = chunkStats.end = end;\n        if (fragBuffering.first === 0) {\n          fragBuffering.first = end;\n        }\n        if (partBuffering && partBuffering.first === 0) {\n          partBuffering.first = end;\n        }\n        const {\n          sourceBuffer\n        } = this;\n        const timeRanges = {};\n        for (const type2 in sourceBuffer) {\n          timeRanges[type2] = BufferHelper.getBuffered(sourceBuffer[type2]);\n        }\n        this.appendErrors[type] = 0;\n        if (type === \"audio\" || type === \"video\") {\n          this.appendErrors.audiovideo = 0;\n        } else {\n          this.appendErrors.audio = 0;\n          this.appendErrors.video = 0;\n        }\n        this.hls.trigger(Events.BUFFER_APPENDED, {\n          type,\n          frag,\n          part,\n          chunkMeta,\n          parent: frag.type,\n          timeRanges\n        });\n      },\n      onError: (error) => {\n        const event2 = {\n          type: ErrorTypes.MEDIA_ERROR,\n          parent: frag.type,\n          details: ErrorDetails.BUFFER_APPEND_ERROR,\n          sourceBufferName: type,\n          frag,\n          part,\n          chunkMeta,\n          error,\n          err: error,\n          fatal: false\n        };\n        if (error.code === DOMException.QUOTA_EXCEEDED_ERR) {\n          event2.details = ErrorDetails.BUFFER_FULL_ERROR;\n        } else {\n          const appendErrorCount = ++this.appendErrors[type];\n          event2.details = ErrorDetails.BUFFER_APPEND_ERROR;\n          this.warn(`Failed ${appendErrorCount}/${hls.config.appendErrorMaxRetry} times to append segment in \"${type}\" sourceBuffer`);\n          if (appendErrorCount >= hls.config.appendErrorMaxRetry) {\n            event2.fatal = true;\n          }\n        }\n        hls.trigger(Events.ERROR, event2);\n      }\n    };\n    operationQueue.append(operation, type, !!this.pendingTracks[type]);\n  }\n  onBufferFlushing(event, data) {\n    const {\n      operationQueue\n    } = this;\n    const flushOperation = (type) => ({\n      execute: this.removeExecutor.bind(this, type, data.startOffset, data.endOffset),\n      onStart: () => {\n      },\n      onComplete: () => {\n        this.hls.trigger(Events.BUFFER_FLUSHED, {\n          type\n        });\n      },\n      onError: (error) => {\n        this.warn(`Failed to remove from ${type} SourceBuffer`, error);\n      }\n    });\n    if (data.type) {\n      operationQueue.append(flushOperation(data.type), data.type);\n    } else {\n      this.getSourceBufferTypes().forEach((type) => {\n        operationQueue.append(flushOperation(type), type);\n      });\n    }\n  }\n  onFragParsed(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    const buffersAppendedTo = [];\n    const elementaryStreams = part ? part.elementaryStreams : frag.elementaryStreams;\n    if (elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO]) {\n      buffersAppendedTo.push(\"audiovideo\");\n    } else {\n      if (elementaryStreams[ElementaryStreamTypes.AUDIO]) {\n        buffersAppendedTo.push(\"audio\");\n      }\n      if (elementaryStreams[ElementaryStreamTypes.VIDEO]) {\n        buffersAppendedTo.push(\"video\");\n      }\n    }\n    const onUnblocked = () => {\n      const now2 = self.performance.now();\n      frag.stats.buffering.end = now2;\n      if (part) {\n        part.stats.buffering.end = now2;\n      }\n      const stats = part ? part.stats : frag.stats;\n      this.hls.trigger(Events.FRAG_BUFFERED, {\n        frag,\n        part,\n        stats,\n        id: frag.type\n      });\n    };\n    if (buffersAppendedTo.length === 0) {\n      this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${frag.type} level: ${frag.level} sn: ${frag.sn}`);\n    }\n    this.blockBuffers(onUnblocked, buffersAppendedTo);\n  }\n  onFragChanged(event, data) {\n    this.trimBuffers();\n  }\n  // on BUFFER_EOS mark matching sourcebuffer(s) as ended and trigger checkEos()\n  // an undefined data.type will mark all buffers as EOS.\n  onBufferEos(event, data) {\n    const ended = this.getSourceBufferTypes().reduce((acc, type) => {\n      const sb = this.sourceBuffer[type];\n      if (sb && (!data.type || data.type === type)) {\n        sb.ending = true;\n        if (!sb.ended) {\n          sb.ended = true;\n          this.log(`${type} sourceBuffer now EOS`);\n        }\n      }\n      return acc && !!(!sb || sb.ended);\n    }, true);\n    if (ended) {\n      this.log(`Queueing mediaSource.endOfStream()`);\n      this.blockBuffers(() => {\n        this.getSourceBufferTypes().forEach((type) => {\n          const sb = this.sourceBuffer[type];\n          if (sb) {\n            sb.ending = false;\n          }\n        });\n        const {\n          mediaSource\n        } = this;\n        if (!mediaSource || mediaSource.readyState !== \"open\") {\n          if (mediaSource) {\n            this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${mediaSource.readyState}`);\n          }\n          return;\n        }\n        this.log(`Calling mediaSource.endOfStream()`);\n        mediaSource.endOfStream();\n      });\n    }\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    if (!details.fragments.length) {\n      return;\n    }\n    this.details = details;\n    if (this.getSourceBufferTypes().length) {\n      this.blockBuffers(this.updateMediaElementDuration.bind(this));\n    } else {\n      this.updateMediaElementDuration();\n    }\n  }\n  trimBuffers() {\n    const {\n      hls,\n      details,\n      media\n    } = this;\n    if (!media || details === null) {\n      return;\n    }\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    if (!sourceBufferTypes.length) {\n      return;\n    }\n    const config = hls.config;\n    const currentTime = media.currentTime;\n    const targetDuration = details.levelTargetDuration;\n    const backBufferLength = details.live && config.liveBackBufferLength !== null ? config.liveBackBufferLength : config.backBufferLength;\n    if (isFiniteNumber(backBufferLength) && backBufferLength > 0) {\n      const maxBackBufferLength = Math.max(backBufferLength, targetDuration);\n      const targetBackBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration - maxBackBufferLength;\n      this.flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition);\n    }\n    if (isFiniteNumber(config.frontBufferFlushThreshold) && config.frontBufferFlushThreshold > 0) {\n      const frontBufferLength = Math.max(config.maxBufferLength, config.frontBufferFlushThreshold);\n      const maxFrontBufferLength = Math.max(frontBufferLength, targetDuration);\n      const targetFrontBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration + maxFrontBufferLength;\n      this.flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition);\n    }\n  }\n  flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition) {\n    const {\n      details,\n      sourceBuffer\n    } = this;\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    sourceBufferTypes.forEach((type) => {\n      const sb = sourceBuffer[type];\n      if (sb) {\n        const buffered = BufferHelper.getBuffered(sb);\n        if (buffered.length > 0 && targetBackBufferPosition > buffered.start(0)) {\n          this.hls.trigger(Events.BACK_BUFFER_REACHED, {\n            bufferEnd: targetBackBufferPosition\n          });\n          if (details != null && details.live) {\n            this.hls.trigger(Events.LIVE_BACK_BUFFER_REACHED, {\n              bufferEnd: targetBackBufferPosition\n            });\n          } else if (sb.ended && buffered.end(buffered.length - 1) - currentTime < targetDuration * 2) {\n            this.log(`Cannot flush ${type} back buffer while SourceBuffer is in ended state`);\n            return;\n          }\n          this.hls.trigger(Events.BUFFER_FLUSHING, {\n            startOffset: 0,\n            endOffset: targetBackBufferPosition,\n            type\n          });\n        }\n      }\n    });\n  }\n  flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition) {\n    const {\n      sourceBuffer\n    } = this;\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    sourceBufferTypes.forEach((type) => {\n      const sb = sourceBuffer[type];\n      if (sb) {\n        const buffered = BufferHelper.getBuffered(sb);\n        const numBufferedRanges = buffered.length;\n        if (numBufferedRanges < 2) {\n          return;\n        }\n        const bufferStart = buffered.start(numBufferedRanges - 1);\n        const bufferEnd = buffered.end(numBufferedRanges - 1);\n        if (targetFrontBufferPosition > bufferStart || currentTime >= bufferStart && currentTime <= bufferEnd) {\n          return;\n        } else if (sb.ended && currentTime - bufferEnd < 2 * targetDuration) {\n          this.log(`Cannot flush ${type} front buffer while SourceBuffer is in ended state`);\n          return;\n        }\n        this.hls.trigger(Events.BUFFER_FLUSHING, {\n          startOffset: bufferStart,\n          endOffset: Infinity,\n          type\n        });\n      }\n    });\n  }\n  /**\n   * Update Media Source duration to current level duration or override to Infinity if configuration parameter\n   * 'liveDurationInfinity` is set to `true`\n   * More details: https://github.com/video-dev/hls.js/issues/355\n   */\n  updateMediaElementDuration() {\n    if (!this.details || !this.media || !this.mediaSource || this.mediaSource.readyState !== \"open\") {\n      return;\n    }\n    const {\n      details,\n      hls,\n      media,\n      mediaSource\n    } = this;\n    const levelDuration = details.fragments[0].start + details.totalduration;\n    const mediaDuration = media.duration;\n    const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : 0;\n    if (details.live && hls.config.liveDurationInfinity) {\n      mediaSource.duration = Infinity;\n      this.updateSeekableRange(details);\n    } else if (levelDuration > msDuration && levelDuration > mediaDuration || !isFiniteNumber(mediaDuration)) {\n      this.log(`Updating Media Source duration to ${levelDuration.toFixed(3)}`);\n      mediaSource.duration = levelDuration;\n    }\n  }\n  updateSeekableRange(levelDetails) {\n    const mediaSource = this.mediaSource;\n    const fragments = levelDetails.fragments;\n    const len = fragments.length;\n    if (len && levelDetails.live && mediaSource != null && mediaSource.setLiveSeekableRange) {\n      const start = Math.max(0, fragments[0].start);\n      const end = Math.max(start, start + levelDetails.totalduration);\n      this.log(`Media Source duration is set to ${mediaSource.duration}. Setting seekable range to ${start}-${end}.`);\n      mediaSource.setLiveSeekableRange(start, end);\n    }\n  }\n  checkPendingTracks() {\n    const {\n      bufferCodecEventsExpected,\n      operationQueue,\n      pendingTracks\n    } = this;\n    const pendingTracksCount = Object.keys(pendingTracks).length;\n    if (pendingTracksCount && (!bufferCodecEventsExpected || pendingTracksCount === 2 || \"audiovideo\" in pendingTracks)) {\n      this.createSourceBuffers(pendingTracks);\n      this.pendingTracks = {};\n      const buffers = this.getSourceBufferTypes();\n      if (buffers.length) {\n        this.hls.trigger(Events.BUFFER_CREATED, {\n          tracks: this.tracks\n        });\n        buffers.forEach((type) => {\n          operationQueue.executeNext(type);\n        });\n      } else {\n        const error = new Error(\"could not create source buffer for media codec(s)\");\n        this.hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.BUFFER_INCOMPATIBLE_CODECS_ERROR,\n          fatal: true,\n          error,\n          reason: error.message\n        });\n      }\n    }\n  }\n  createSourceBuffers(tracks) {\n    const {\n      sourceBuffer,\n      mediaSource\n    } = this;\n    if (!mediaSource) {\n      throw Error(\"createSourceBuffers called when mediaSource was null\");\n    }\n    for (const trackName in tracks) {\n      if (!sourceBuffer[trackName]) {\n        const track = tracks[trackName];\n        if (!track) {\n          throw Error(`source buffer exists for track ${trackName}, however track does not`);\n        }\n        let codec = track.levelCodec || track.codec;\n        if (codec) {\n          if (trackName.slice(0, 5) === \"audio\") {\n            codec = getCodecCompatibleName(codec, this.appendSource);\n          }\n        }\n        const mimeType = `${track.container};codecs=${codec}`;\n        this.log(`creating sourceBuffer(${mimeType})`);\n        try {\n          const sb = sourceBuffer[trackName] = mediaSource.addSourceBuffer(mimeType);\n          const sbName = trackName;\n          this.addBufferListener(sbName, \"updatestart\", this._onSBUpdateStart);\n          this.addBufferListener(sbName, \"updateend\", this._onSBUpdateEnd);\n          this.addBufferListener(sbName, \"error\", this._onSBUpdateError);\n          if (this.appendSource) {\n            this.addBufferListener(sbName, \"bufferedchange\", (type, event) => {\n              const removedRanges = event.removedRanges;\n              if (removedRanges != null && removedRanges.length) {\n                this.hls.trigger(Events.BUFFER_FLUSHED, {\n                  type: trackName\n                });\n              }\n            });\n          }\n          this.tracks[trackName] = {\n            buffer: sb,\n            codec,\n            container: track.container,\n            levelCodec: track.levelCodec,\n            metadata: track.metadata,\n            id: track.id\n          };\n        } catch (err) {\n          this.error(`error while trying to add sourceBuffer: ${err.message}`);\n          this.hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.BUFFER_ADD_CODEC_ERROR,\n            fatal: false,\n            error: err,\n            sourceBufferName: trackName,\n            mimeType\n          });\n        }\n      }\n    }\n  }\n  get mediaSrc() {\n    var _this$media;\n    const media = ((_this$media = this.media) == null ? void 0 : _this$media.firstChild) || this.media;\n    return media == null ? void 0 : media.src;\n  }\n  _onSBUpdateStart(type) {\n    const {\n      operationQueue\n    } = this;\n    const operation = operationQueue.current(type);\n    operation.onStart();\n  }\n  _onSBUpdateEnd(type) {\n    var _this$mediaSource2;\n    if (((_this$mediaSource2 = this.mediaSource) == null ? void 0 : _this$mediaSource2.readyState) === \"closed\") {\n      this.resetBuffer(type);\n      return;\n    }\n    const {\n      operationQueue\n    } = this;\n    const operation = operationQueue.current(type);\n    operation.onComplete();\n    operationQueue.shiftAndExecuteNext(type);\n  }\n  _onSBUpdateError(type, event) {\n    var _this$mediaSource3;\n    const error = new Error(`${type} SourceBuffer error. MediaSource readyState: ${(_this$mediaSource3 = this.mediaSource) == null ? void 0 : _this$mediaSource3.readyState}`);\n    this.error(`${error}`, event);\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.BUFFER_APPENDING_ERROR,\n      sourceBufferName: type,\n      error,\n      fatal: false\n    });\n    const operation = this.operationQueue.current(type);\n    if (operation) {\n      operation.onError(error);\n    }\n  }\n  // This method must result in an updateend event; if remove is not called, _onSBUpdateEnd must be called manually\n  removeExecutor(type, startOffset, endOffset) {\n    const {\n      media,\n      mediaSource,\n      operationQueue,\n      sourceBuffer\n    } = this;\n    const sb = sourceBuffer[type];\n    if (!media || !mediaSource || !sb) {\n      this.warn(`Attempting to remove from the ${type} SourceBuffer, but it does not exist`);\n      operationQueue.shiftAndExecuteNext(type);\n      return;\n    }\n    const mediaDuration = isFiniteNumber(media.duration) ? media.duration : Infinity;\n    const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : Infinity;\n    const removeStart = Math.max(0, startOffset);\n    const removeEnd = Math.min(endOffset, mediaDuration, msDuration);\n    if (removeEnd > removeStart && (!sb.ending || sb.ended)) {\n      sb.ended = false;\n      this.log(`Removing [${removeStart},${removeEnd}] from the ${type} SourceBuffer`);\n      sb.remove(removeStart, removeEnd);\n    } else {\n      operationQueue.shiftAndExecuteNext(type);\n    }\n  }\n  // This method must result in an updateend event; if append is not called, _onSBUpdateEnd must be called manually\n  appendExecutor(data, type) {\n    const sb = this.sourceBuffer[type];\n    if (!sb) {\n      if (!this.pendingTracks[type]) {\n        throw new Error(`Attempting to append to the ${type} SourceBuffer, but it does not exist`);\n      }\n      return;\n    }\n    sb.ended = false;\n    sb.appendBuffer(data);\n  }\n  // Enqueues an operation to each SourceBuffer queue which, upon execution, resolves a promise. When all promises\n  // resolve, the onUnblocked function is executed. Functions calling this method do not need to unblock the queue\n  // upon completion, since we already do it here\n  blockBuffers(onUnblocked, buffers = this.getSourceBufferTypes()) {\n    if (!buffers.length) {\n      this.log(\"Blocking operation requested, but no SourceBuffers exist\");\n      Promise.resolve().then(onUnblocked);\n      return;\n    }\n    const {\n      operationQueue\n    } = this;\n    const blockingOperations = buffers.map((type) => operationQueue.appendBlocker(type));\n    Promise.all(blockingOperations).then(() => {\n      onUnblocked();\n      buffers.forEach((type) => {\n        const sb = this.sourceBuffer[type];\n        if (!(sb != null && sb.updating)) {\n          operationQueue.shiftAndExecuteNext(type);\n        }\n      });\n    });\n  }\n  getSourceBufferTypes() {\n    return Object.keys(this.sourceBuffer);\n  }\n  addBufferListener(type, event, fn) {\n    const buffer = this.sourceBuffer[type];\n    if (!buffer) {\n      return;\n    }\n    const listener = fn.bind(this, type);\n    this.listeners[type].push({\n      event,\n      listener\n    });\n    buffer.addEventListener(event, listener);\n  }\n  removeBufferListeners(type) {\n    const buffer = this.sourceBuffer[type];\n    if (!buffer) {\n      return;\n    }\n    this.listeners[type].forEach((l) => {\n      buffer.removeEventListener(l.event, l.listener);\n    });\n  }\n}\nfunction removeSourceChildren(node) {\n  const sourceChildren = node.querySelectorAll(\"source\");\n  [].slice.call(sourceChildren).forEach((source) => {\n    node.removeChild(source);\n  });\n}\nfunction addSource(media, url) {\n  const source = self.document.createElement(\"source\");\n  source.type = \"video/mp4\";\n  source.src = url;\n  media.appendChild(source);\n}\nconst specialCea608CharsCodes = {\n  42: 225,\n  // lowercase a, acute accent\n  92: 233,\n  // lowercase e, acute accent\n  94: 237,\n  // lowercase i, acute accent\n  95: 243,\n  // lowercase o, acute accent\n  96: 250,\n  // lowercase u, acute accent\n  123: 231,\n  // lowercase c with cedilla\n  124: 247,\n  // division symbol\n  125: 209,\n  // uppercase N tilde\n  126: 241,\n  // lowercase n tilde\n  127: 9608,\n  // Full block\n  // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F\n  // THIS MEANS THAT \\x50 MUST BE ADDED TO THE VALUES\n  128: 174,\n  // Registered symbol (R)\n  129: 176,\n  // degree sign\n  130: 189,\n  // 1/2 symbol\n  131: 191,\n  // Inverted (open) question mark\n  132: 8482,\n  // Trademark symbol (TM)\n  133: 162,\n  // Cents symbol\n  134: 163,\n  // Pounds sterling\n  135: 9834,\n  // Music 8'th note\n  136: 224,\n  // lowercase a, grave accent\n  137: 32,\n  // transparent space (regular)\n  138: 232,\n  // lowercase e, grave accent\n  139: 226,\n  // lowercase a, circumflex accent\n  140: 234,\n  // lowercase e, circumflex accent\n  141: 238,\n  // lowercase i, circumflex accent\n  142: 244,\n  // lowercase o, circumflex accent\n  143: 251,\n  // lowercase u, circumflex accent\n  // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F\n  144: 193,\n  // capital letter A with acute\n  145: 201,\n  // capital letter E with acute\n  146: 211,\n  // capital letter O with acute\n  147: 218,\n  // capital letter U with acute\n  148: 220,\n  // capital letter U with diaresis\n  149: 252,\n  // lowercase letter U with diaeresis\n  150: 8216,\n  // opening single quote\n  151: 161,\n  // inverted exclamation mark\n  152: 42,\n  // asterisk\n  153: 8217,\n  // closing single quote\n  154: 9473,\n  // box drawings heavy horizontal\n  155: 169,\n  // copyright sign\n  156: 8480,\n  // Service mark\n  157: 8226,\n  // (round) bullet\n  158: 8220,\n  // Left double quotation mark\n  159: 8221,\n  // Right double quotation mark\n  160: 192,\n  // uppercase A, grave accent\n  161: 194,\n  // uppercase A, circumflex\n  162: 199,\n  // uppercase C with cedilla\n  163: 200,\n  // uppercase E, grave accent\n  164: 202,\n  // uppercase E, circumflex\n  165: 203,\n  // capital letter E with diaresis\n  166: 235,\n  // lowercase letter e with diaresis\n  167: 206,\n  // uppercase I, circumflex\n  168: 207,\n  // uppercase I, with diaresis\n  169: 239,\n  // lowercase i, with diaresis\n  170: 212,\n  // uppercase O, circumflex\n  171: 217,\n  // uppercase U, grave accent\n  172: 249,\n  // lowercase u, grave accent\n  173: 219,\n  // uppercase U, circumflex\n  174: 171,\n  // left-pointing double angle quotation mark\n  175: 187,\n  // right-pointing double angle quotation mark\n  // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F\n  176: 195,\n  // Uppercase A, tilde\n  177: 227,\n  // Lowercase a, tilde\n  178: 205,\n  // Uppercase I, acute accent\n  179: 204,\n  // Uppercase I, grave accent\n  180: 236,\n  // Lowercase i, grave accent\n  181: 210,\n  // Uppercase O, grave accent\n  182: 242,\n  // Lowercase o, grave accent\n  183: 213,\n  // Uppercase O, tilde\n  184: 245,\n  // Lowercase o, tilde\n  185: 123,\n  // Open curly brace\n  186: 125,\n  // Closing curly brace\n  187: 92,\n  // Backslash\n  188: 94,\n  // Caret\n  189: 95,\n  // Underscore\n  190: 124,\n  // Pipe (vertical line)\n  191: 8764,\n  // Tilde operator\n  192: 196,\n  // Uppercase A, umlaut\n  193: 228,\n  // Lowercase A, umlaut\n  194: 214,\n  // Uppercase O, umlaut\n  195: 246,\n  // Lowercase o, umlaut\n  196: 223,\n  // Esszett (sharp S)\n  197: 165,\n  // Yen symbol\n  198: 164,\n  // Generic currency sign\n  199: 9475,\n  // Box drawings heavy vertical\n  200: 197,\n  // Uppercase A, ring\n  201: 229,\n  // Lowercase A, ring\n  202: 216,\n  // Uppercase O, stroke\n  203: 248,\n  // Lowercase o, strok\n  204: 9487,\n  // Box drawings heavy down and right\n  205: 9491,\n  // Box drawings heavy down and left\n  206: 9495,\n  // Box drawings heavy up and right\n  207: 9499\n  // Box drawings heavy up and left\n};\nconst getCharForByte = function getCharForByte2(byte) {\n  let charCode = byte;\n  if (specialCea608CharsCodes.hasOwnProperty(byte)) {\n    charCode = specialCea608CharsCodes[byte];\n  }\n  return String.fromCharCode(charCode);\n};\nconst NR_ROWS = 15;\nconst NR_COLS = 100;\nconst rowsLowCh1 = {\n  17: 1,\n  18: 3,\n  21: 5,\n  22: 7,\n  23: 9,\n  16: 11,\n  19: 12,\n  20: 14\n};\nconst rowsHighCh1 = {\n  17: 2,\n  18: 4,\n  21: 6,\n  22: 8,\n  23: 10,\n  19: 13,\n  20: 15\n};\nconst rowsLowCh2 = {\n  25: 1,\n  26: 3,\n  29: 5,\n  30: 7,\n  31: 9,\n  24: 11,\n  27: 12,\n  28: 14\n};\nconst rowsHighCh2 = {\n  25: 2,\n  26: 4,\n  29: 6,\n  30: 8,\n  31: 10,\n  27: 13,\n  28: 15\n};\nconst backgroundColors = [\"white\", \"green\", \"blue\", \"cyan\", \"red\", \"yellow\", \"magenta\", \"black\", \"transparent\"];\nclass CaptionsLogger {\n  constructor() {\n    this.time = null;\n    this.verboseLevel = 0;\n  }\n  log(severity, msg) {\n    if (this.verboseLevel >= severity) {\n      const m = typeof msg === \"function\" ? msg() : msg;\n      logger.log(`${this.time} [${severity}] ${m}`);\n    }\n  }\n}\nconst numArrayToHexArray = function numArrayToHexArray2(numArray) {\n  const hexArray = [];\n  for (let j = 0; j < numArray.length; j++) {\n    hexArray.push(numArray[j].toString(16));\n  }\n  return hexArray;\n};\nclass PenState {\n  constructor() {\n    this.foreground = \"white\";\n    this.underline = false;\n    this.italics = false;\n    this.background = \"black\";\n    this.flash = false;\n  }\n  reset() {\n    this.foreground = \"white\";\n    this.underline = false;\n    this.italics = false;\n    this.background = \"black\";\n    this.flash = false;\n  }\n  setStyles(styles) {\n    const attribs = [\"foreground\", \"underline\", \"italics\", \"background\", \"flash\"];\n    for (let i = 0; i < attribs.length; i++) {\n      const style = attribs[i];\n      if (styles.hasOwnProperty(style)) {\n        this[style] = styles[style];\n      }\n    }\n  }\n  isDefault() {\n    return this.foreground === \"white\" && !this.underline && !this.italics && this.background === \"black\" && !this.flash;\n  }\n  equals(other) {\n    return this.foreground === other.foreground && this.underline === other.underline && this.italics === other.italics && this.background === other.background && this.flash === other.flash;\n  }\n  copy(newPenState) {\n    this.foreground = newPenState.foreground;\n    this.underline = newPenState.underline;\n    this.italics = newPenState.italics;\n    this.background = newPenState.background;\n    this.flash = newPenState.flash;\n  }\n  toString() {\n    return \"color=\" + this.foreground + \", underline=\" + this.underline + \", italics=\" + this.italics + \", background=\" + this.background + \", flash=\" + this.flash;\n  }\n}\nclass StyledUnicodeChar {\n  constructor() {\n    this.uchar = \" \";\n    this.penState = new PenState();\n  }\n  reset() {\n    this.uchar = \" \";\n    this.penState.reset();\n  }\n  setChar(uchar, newPenState) {\n    this.uchar = uchar;\n    this.penState.copy(newPenState);\n  }\n  setPenState(newPenState) {\n    this.penState.copy(newPenState);\n  }\n  equals(other) {\n    return this.uchar === other.uchar && this.penState.equals(other.penState);\n  }\n  copy(newChar) {\n    this.uchar = newChar.uchar;\n    this.penState.copy(newChar.penState);\n  }\n  isEmpty() {\n    return this.uchar === \" \" && this.penState.isDefault();\n  }\n}\nclass Row {\n  constructor(logger2) {\n    this.chars = [];\n    this.pos = 0;\n    this.currPenState = new PenState();\n    this.cueStartTime = null;\n    this.logger = void 0;\n    for (let i = 0; i < NR_COLS; i++) {\n      this.chars.push(new StyledUnicodeChar());\n    }\n    this.logger = logger2;\n  }\n  equals(other) {\n    for (let i = 0; i < NR_COLS; i++) {\n      if (!this.chars[i].equals(other.chars[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  copy(other) {\n    for (let i = 0; i < NR_COLS; i++) {\n      this.chars[i].copy(other.chars[i]);\n    }\n  }\n  isEmpty() {\n    let empty = true;\n    for (let i = 0; i < NR_COLS; i++) {\n      if (!this.chars[i].isEmpty()) {\n        empty = false;\n        break;\n      }\n    }\n    return empty;\n  }\n  /**\n   *  Set the cursor to a valid column.\n   */\n  setCursor(absPos) {\n    if (this.pos !== absPos) {\n      this.pos = absPos;\n    }\n    if (this.pos < 0) {\n      this.logger.log(3, \"Negative cursor position \" + this.pos);\n      this.pos = 0;\n    } else if (this.pos > NR_COLS) {\n      this.logger.log(3, \"Too large cursor position \" + this.pos);\n      this.pos = NR_COLS;\n    }\n  }\n  /**\n   * Move the cursor relative to current position.\n   */\n  moveCursor(relPos) {\n    const newPos = this.pos + relPos;\n    if (relPos > 1) {\n      for (let i = this.pos + 1; i < newPos + 1; i++) {\n        this.chars[i].setPenState(this.currPenState);\n      }\n    }\n    this.setCursor(newPos);\n  }\n  /**\n   * Backspace, move one step back and clear character.\n   */\n  backSpace() {\n    this.moveCursor(-1);\n    this.chars[this.pos].setChar(\" \", this.currPenState);\n  }\n  insertChar(byte) {\n    if (byte >= 144) {\n      this.backSpace();\n    }\n    const char = getCharForByte(byte);\n    if (this.pos >= NR_COLS) {\n      this.logger.log(0, () => \"Cannot insert \" + byte.toString(16) + \" (\" + char + \") at position \" + this.pos + \". Skipping it!\");\n      return;\n    }\n    this.chars[this.pos].setChar(char, this.currPenState);\n    this.moveCursor(1);\n  }\n  clearFromPos(startPos) {\n    let i;\n    for (i = startPos; i < NR_COLS; i++) {\n      this.chars[i].reset();\n    }\n  }\n  clear() {\n    this.clearFromPos(0);\n    this.pos = 0;\n    this.currPenState.reset();\n  }\n  clearToEndOfRow() {\n    this.clearFromPos(this.pos);\n  }\n  getTextString() {\n    const chars = [];\n    let empty = true;\n    for (let i = 0; i < NR_COLS; i++) {\n      const char = this.chars[i].uchar;\n      if (char !== \" \") {\n        empty = false;\n      }\n      chars.push(char);\n    }\n    if (empty) {\n      return \"\";\n    } else {\n      return chars.join(\"\");\n    }\n  }\n  setPenStyles(styles) {\n    this.currPenState.setStyles(styles);\n    const currChar = this.chars[this.pos];\n    currChar.setPenState(this.currPenState);\n  }\n}\nclass CaptionScreen {\n  constructor(logger2) {\n    this.rows = [];\n    this.currRow = NR_ROWS - 1;\n    this.nrRollUpRows = null;\n    this.lastOutputScreen = null;\n    this.logger = void 0;\n    for (let i = 0; i < NR_ROWS; i++) {\n      this.rows.push(new Row(logger2));\n    }\n    this.logger = logger2;\n  }\n  reset() {\n    for (let i = 0; i < NR_ROWS; i++) {\n      this.rows[i].clear();\n    }\n    this.currRow = NR_ROWS - 1;\n  }\n  equals(other) {\n    let equal = true;\n    for (let i = 0; i < NR_ROWS; i++) {\n      if (!this.rows[i].equals(other.rows[i])) {\n        equal = false;\n        break;\n      }\n    }\n    return equal;\n  }\n  copy(other) {\n    for (let i = 0; i < NR_ROWS; i++) {\n      this.rows[i].copy(other.rows[i]);\n    }\n  }\n  isEmpty() {\n    let empty = true;\n    for (let i = 0; i < NR_ROWS; i++) {\n      if (!this.rows[i].isEmpty()) {\n        empty = false;\n        break;\n      }\n    }\n    return empty;\n  }\n  backSpace() {\n    const row = this.rows[this.currRow];\n    row.backSpace();\n  }\n  clearToEndOfRow() {\n    const row = this.rows[this.currRow];\n    row.clearToEndOfRow();\n  }\n  /**\n   * Insert a character (without styling) in the current row.\n   */\n  insertChar(char) {\n    const row = this.rows[this.currRow];\n    row.insertChar(char);\n  }\n  setPen(styles) {\n    const row = this.rows[this.currRow];\n    row.setPenStyles(styles);\n  }\n  moveCursor(relPos) {\n    const row = this.rows[this.currRow];\n    row.moveCursor(relPos);\n  }\n  setCursor(absPos) {\n    this.logger.log(2, \"setCursor: \" + absPos);\n    const row = this.rows[this.currRow];\n    row.setCursor(absPos);\n  }\n  setPAC(pacData) {\n    this.logger.log(2, () => \"pacData = \" + JSON.stringify(pacData));\n    let newRow = pacData.row - 1;\n    if (this.nrRollUpRows && newRow < this.nrRollUpRows - 1) {\n      newRow = this.nrRollUpRows - 1;\n    }\n    if (this.nrRollUpRows && this.currRow !== newRow) {\n      for (let i = 0; i < NR_ROWS; i++) {\n        this.rows[i].clear();\n      }\n      const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n      const lastOutputScreen = this.lastOutputScreen;\n      if (lastOutputScreen) {\n        const prevLineTime = lastOutputScreen.rows[topRowIndex].cueStartTime;\n        const time = this.logger.time;\n        if (prevLineTime !== null && time !== null && prevLineTime < time) {\n          for (let i = 0; i < this.nrRollUpRows; i++) {\n            this.rows[newRow - this.nrRollUpRows + i + 1].copy(lastOutputScreen.rows[topRowIndex + i]);\n          }\n        }\n      }\n    }\n    this.currRow = newRow;\n    const row = this.rows[this.currRow];\n    if (pacData.indent !== null) {\n      const indent = pacData.indent;\n      const prevPos = Math.max(indent - 1, 0);\n      row.setCursor(pacData.indent);\n      pacData.color = row.chars[prevPos].penState.foreground;\n    }\n    const styles = {\n      foreground: pacData.color,\n      underline: pacData.underline,\n      italics: pacData.italics,\n      background: \"black\",\n      flash: false\n    };\n    this.setPen(styles);\n  }\n  /**\n   * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).\n   */\n  setBkgData(bkgData) {\n    this.logger.log(2, () => \"bkgData = \" + JSON.stringify(bkgData));\n    this.backSpace();\n    this.setPen(bkgData);\n    this.insertChar(32);\n  }\n  setRollUpRows(nrRows) {\n    this.nrRollUpRows = nrRows;\n  }\n  rollUp() {\n    if (this.nrRollUpRows === null) {\n      this.logger.log(3, \"roll_up but nrRollUpRows not set yet\");\n      return;\n    }\n    this.logger.log(1, () => this.getDisplayText());\n    const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n    const topRow = this.rows.splice(topRowIndex, 1)[0];\n    topRow.clear();\n    this.rows.splice(this.currRow, 0, topRow);\n    this.logger.log(2, \"Rolling up\");\n  }\n  /**\n   * Get all non-empty rows with as unicode text.\n   */\n  getDisplayText(asOneRow) {\n    asOneRow = asOneRow || false;\n    const displayText = [];\n    let text = \"\";\n    let rowNr = -1;\n    for (let i = 0; i < NR_ROWS; i++) {\n      const rowText = this.rows[i].getTextString();\n      if (rowText) {\n        rowNr = i + 1;\n        if (asOneRow) {\n          displayText.push(\"Row \" + rowNr + \": '\" + rowText + \"'\");\n        } else {\n          displayText.push(rowText.trim());\n        }\n      }\n    }\n    if (displayText.length > 0) {\n      if (asOneRow) {\n        text = \"[\" + displayText.join(\" | \") + \"]\";\n      } else {\n        text = displayText.join(\"\\n\");\n      }\n    }\n    return text;\n  }\n  getTextAndFormat() {\n    return this.rows;\n  }\n}\nclass Cea608Channel {\n  constructor(channelNumber, outputFilter, logger2) {\n    this.chNr = void 0;\n    this.outputFilter = void 0;\n    this.mode = void 0;\n    this.verbose = void 0;\n    this.displayedMemory = void 0;\n    this.nonDisplayedMemory = void 0;\n    this.lastOutputScreen = void 0;\n    this.currRollUpRow = void 0;\n    this.writeScreen = void 0;\n    this.cueStartTime = void 0;\n    this.logger = void 0;\n    this.chNr = channelNumber;\n    this.outputFilter = outputFilter;\n    this.mode = null;\n    this.verbose = 0;\n    this.displayedMemory = new CaptionScreen(logger2);\n    this.nonDisplayedMemory = new CaptionScreen(logger2);\n    this.lastOutputScreen = new CaptionScreen(logger2);\n    this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n    this.writeScreen = this.displayedMemory;\n    this.mode = null;\n    this.cueStartTime = null;\n    this.logger = logger2;\n  }\n  reset() {\n    this.mode = null;\n    this.displayedMemory.reset();\n    this.nonDisplayedMemory.reset();\n    this.lastOutputScreen.reset();\n    this.outputFilter.reset();\n    this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n    this.writeScreen = this.displayedMemory;\n    this.mode = null;\n    this.cueStartTime = null;\n  }\n  getHandler() {\n    return this.outputFilter;\n  }\n  setHandler(newHandler) {\n    this.outputFilter = newHandler;\n  }\n  setPAC(pacData) {\n    this.writeScreen.setPAC(pacData);\n  }\n  setBkgData(bkgData) {\n    this.writeScreen.setBkgData(bkgData);\n  }\n  setMode(newMode) {\n    if (newMode === this.mode) {\n      return;\n    }\n    this.mode = newMode;\n    this.logger.log(2, () => \"MODE=\" + newMode);\n    if (this.mode === \"MODE_POP-ON\") {\n      this.writeScreen = this.nonDisplayedMemory;\n    } else {\n      this.writeScreen = this.displayedMemory;\n      this.writeScreen.reset();\n    }\n    if (this.mode !== \"MODE_ROLL-UP\") {\n      this.displayedMemory.nrRollUpRows = null;\n      this.nonDisplayedMemory.nrRollUpRows = null;\n    }\n    this.mode = newMode;\n  }\n  insertChars(chars) {\n    for (let i = 0; i < chars.length; i++) {\n      this.writeScreen.insertChar(chars[i]);\n    }\n    const screen = this.writeScreen === this.displayedMemory ? \"DISP\" : \"NON_DISP\";\n    this.logger.log(2, () => screen + \": \" + this.writeScreen.getDisplayText(true));\n    if (this.mode === \"MODE_PAINT-ON\" || this.mode === \"MODE_ROLL-UP\") {\n      this.logger.log(1, () => \"DISPLAYED: \" + this.displayedMemory.getDisplayText(true));\n      this.outputDataUpdate();\n    }\n  }\n  ccRCL() {\n    this.logger.log(2, \"RCL - Resume Caption Loading\");\n    this.setMode(\"MODE_POP-ON\");\n  }\n  ccBS() {\n    this.logger.log(2, \"BS - BackSpace\");\n    if (this.mode === \"MODE_TEXT\") {\n      return;\n    }\n    this.writeScreen.backSpace();\n    if (this.writeScreen === this.displayedMemory) {\n      this.outputDataUpdate();\n    }\n  }\n  ccAOF() {\n  }\n  ccAON() {\n  }\n  ccDER() {\n    this.logger.log(2, \"DER- Delete to End of Row\");\n    this.writeScreen.clearToEndOfRow();\n    this.outputDataUpdate();\n  }\n  ccRU(nrRows) {\n    this.logger.log(2, \"RU(\" + nrRows + \") - Roll Up\");\n    this.writeScreen = this.displayedMemory;\n    this.setMode(\"MODE_ROLL-UP\");\n    this.writeScreen.setRollUpRows(nrRows);\n  }\n  ccFON() {\n    this.logger.log(2, \"FON - Flash On\");\n    this.writeScreen.setPen({\n      flash: true\n    });\n  }\n  ccRDC() {\n    this.logger.log(2, \"RDC - Resume Direct Captioning\");\n    this.setMode(\"MODE_PAINT-ON\");\n  }\n  ccTR() {\n    this.logger.log(2, \"TR\");\n    this.setMode(\"MODE_TEXT\");\n  }\n  ccRTD() {\n    this.logger.log(2, \"RTD\");\n    this.setMode(\"MODE_TEXT\");\n  }\n  ccEDM() {\n    this.logger.log(2, \"EDM - Erase Displayed Memory\");\n    this.displayedMemory.reset();\n    this.outputDataUpdate(true);\n  }\n  ccCR() {\n    this.logger.log(2, \"CR - Carriage Return\");\n    this.writeScreen.rollUp();\n    this.outputDataUpdate(true);\n  }\n  ccENM() {\n    this.logger.log(2, \"ENM - Erase Non-displayed Memory\");\n    this.nonDisplayedMemory.reset();\n  }\n  ccEOC() {\n    this.logger.log(2, \"EOC - End Of Caption\");\n    if (this.mode === \"MODE_POP-ON\") {\n      const tmp = this.displayedMemory;\n      this.displayedMemory = this.nonDisplayedMemory;\n      this.nonDisplayedMemory = tmp;\n      this.writeScreen = this.nonDisplayedMemory;\n      this.logger.log(1, () => \"DISP: \" + this.displayedMemory.getDisplayText());\n    }\n    this.outputDataUpdate(true);\n  }\n  ccTO(nrCols) {\n    this.logger.log(2, \"TO(\" + nrCols + \") - Tab Offset\");\n    this.writeScreen.moveCursor(nrCols);\n  }\n  ccMIDROW(secondByte) {\n    const styles = {\n      flash: false\n    };\n    styles.underline = secondByte % 2 === 1;\n    styles.italics = secondByte >= 46;\n    if (!styles.italics) {\n      const colorIndex = Math.floor(secondByte / 2) - 16;\n      const colors = [\"white\", \"green\", \"blue\", \"cyan\", \"red\", \"yellow\", \"magenta\"];\n      styles.foreground = colors[colorIndex];\n    } else {\n      styles.foreground = \"white\";\n    }\n    this.logger.log(2, \"MIDROW: \" + JSON.stringify(styles));\n    this.writeScreen.setPen(styles);\n  }\n  outputDataUpdate(dispatch = false) {\n    const time = this.logger.time;\n    if (time === null) {\n      return;\n    }\n    if (this.outputFilter) {\n      if (this.cueStartTime === null && !this.displayedMemory.isEmpty()) {\n        this.cueStartTime = time;\n      } else {\n        if (!this.displayedMemory.equals(this.lastOutputScreen)) {\n          this.outputFilter.newCue(this.cueStartTime, time, this.lastOutputScreen);\n          if (dispatch && this.outputFilter.dispatchCue) {\n            this.outputFilter.dispatchCue();\n          }\n          this.cueStartTime = this.displayedMemory.isEmpty() ? null : time;\n        }\n      }\n      this.lastOutputScreen.copy(this.displayedMemory);\n    }\n  }\n  cueSplitAtTime(t) {\n    if (this.outputFilter) {\n      if (!this.displayedMemory.isEmpty()) {\n        if (this.outputFilter.newCue) {\n          this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory);\n        }\n        this.cueStartTime = t;\n      }\n    }\n  }\n}\nclass Cea608Parser {\n  constructor(field, out1, out2) {\n    this.channels = void 0;\n    this.currentChannel = 0;\n    this.cmdHistory = createCmdHistory();\n    this.logger = void 0;\n    const logger2 = this.logger = new CaptionsLogger();\n    this.channels = [null, new Cea608Channel(field, out1, logger2), new Cea608Channel(field + 1, out2, logger2)];\n  }\n  getHandler(channel) {\n    return this.channels[channel].getHandler();\n  }\n  setHandler(channel, newHandler) {\n    this.channels[channel].setHandler(newHandler);\n  }\n  /**\n   * Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.\n   */\n  addData(time, byteList) {\n    let cmdFound;\n    let a;\n    let b;\n    let charsFound = false;\n    this.logger.time = time;\n    for (let i = 0; i < byteList.length; i += 2) {\n      a = byteList[i] & 127;\n      b = byteList[i + 1] & 127;\n      if (a === 0 && b === 0) {\n        continue;\n      } else {\n        this.logger.log(3, \"[\" + numArrayToHexArray([byteList[i], byteList[i + 1]]) + \"] -> (\" + numArrayToHexArray([a, b]) + \")\");\n      }\n      cmdFound = this.parseCmd(a, b);\n      if (!cmdFound) {\n        cmdFound = this.parseMidrow(a, b);\n      }\n      if (!cmdFound) {\n        cmdFound = this.parsePAC(a, b);\n      }\n      if (!cmdFound) {\n        cmdFound = this.parseBackgroundAttributes(a, b);\n      }\n      if (!cmdFound) {\n        charsFound = this.parseChars(a, b);\n        if (charsFound) {\n          const currChNr = this.currentChannel;\n          if (currChNr && currChNr > 0) {\n            const channel = this.channels[currChNr];\n            channel.insertChars(charsFound);\n          } else {\n            this.logger.log(2, \"No channel found yet. TEXT-MODE?\");\n          }\n        }\n      }\n      if (!cmdFound && !charsFound) {\n        this.logger.log(2, \"Couldn't parse cleaned data \" + numArrayToHexArray([a, b]) + \" orig: \" + numArrayToHexArray([byteList[i], byteList[i + 1]]));\n      }\n    }\n  }\n  /**\n   * Parse Command.\n   * @returns True if a command was found\n   */\n  parseCmd(a, b) {\n    const {\n      cmdHistory\n    } = this;\n    const cond1 = (a === 20 || a === 28 || a === 21 || a === 29) && b >= 32 && b <= 47;\n    const cond2 = (a === 23 || a === 31) && b >= 33 && b <= 35;\n    if (!(cond1 || cond2)) {\n      return false;\n    }\n    if (hasCmdRepeated(a, b, cmdHistory)) {\n      setLastCmd(null, null, cmdHistory);\n      this.logger.log(3, \"Repeated command (\" + numArrayToHexArray([a, b]) + \") is dropped\");\n      return true;\n    }\n    const chNr = a === 20 || a === 21 || a === 23 ? 1 : 2;\n    const channel = this.channels[chNr];\n    if (a === 20 || a === 21 || a === 28 || a === 29) {\n      if (b === 32) {\n        channel.ccRCL();\n      } else if (b === 33) {\n        channel.ccBS();\n      } else if (b === 34) {\n        channel.ccAOF();\n      } else if (b === 35) {\n        channel.ccAON();\n      } else if (b === 36) {\n        channel.ccDER();\n      } else if (b === 37) {\n        channel.ccRU(2);\n      } else if (b === 38) {\n        channel.ccRU(3);\n      } else if (b === 39) {\n        channel.ccRU(4);\n      } else if (b === 40) {\n        channel.ccFON();\n      } else if (b === 41) {\n        channel.ccRDC();\n      } else if (b === 42) {\n        channel.ccTR();\n      } else if (b === 43) {\n        channel.ccRTD();\n      } else if (b === 44) {\n        channel.ccEDM();\n      } else if (b === 45) {\n        channel.ccCR();\n      } else if (b === 46) {\n        channel.ccENM();\n      } else if (b === 47) {\n        channel.ccEOC();\n      }\n    } else {\n      channel.ccTO(b - 32);\n    }\n    setLastCmd(a, b, cmdHistory);\n    this.currentChannel = chNr;\n    return true;\n  }\n  /**\n   * Parse midrow styling command\n   */\n  parseMidrow(a, b) {\n    let chNr = 0;\n    if ((a === 17 || a === 25) && b >= 32 && b <= 47) {\n      if (a === 17) {\n        chNr = 1;\n      } else {\n        chNr = 2;\n      }\n      if (chNr !== this.currentChannel) {\n        this.logger.log(0, \"Mismatch channel in midrow parsing\");\n        return false;\n      }\n      const channel = this.channels[chNr];\n      if (!channel) {\n        return false;\n      }\n      channel.ccMIDROW(b);\n      this.logger.log(3, \"MIDROW (\" + numArrayToHexArray([a, b]) + \")\");\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Parse Preable Access Codes (Table 53).\n   * @returns {Boolean} Tells if PAC found\n   */\n  parsePAC(a, b) {\n    let row;\n    const cmdHistory = this.cmdHistory;\n    const case1 = (a >= 17 && a <= 23 || a >= 25 && a <= 31) && b >= 64 && b <= 127;\n    const case2 = (a === 16 || a === 24) && b >= 64 && b <= 95;\n    if (!(case1 || case2)) {\n      return false;\n    }\n    if (hasCmdRepeated(a, b, cmdHistory)) {\n      setLastCmd(null, null, cmdHistory);\n      return true;\n    }\n    const chNr = a <= 23 ? 1 : 2;\n    if (b >= 64 && b <= 95) {\n      row = chNr === 1 ? rowsLowCh1[a] : rowsLowCh2[a];\n    } else {\n      row = chNr === 1 ? rowsHighCh1[a] : rowsHighCh2[a];\n    }\n    const channel = this.channels[chNr];\n    if (!channel) {\n      return false;\n    }\n    channel.setPAC(this.interpretPAC(row, b));\n    setLastCmd(a, b, cmdHistory);\n    this.currentChannel = chNr;\n    return true;\n  }\n  /**\n   * Interpret the second byte of the pac, and return the information.\n   * @returns pacData with style parameters\n   */\n  interpretPAC(row, byte) {\n    let pacIndex;\n    const pacData = {\n      color: null,\n      italics: false,\n      indent: null,\n      underline: false,\n      row\n    };\n    if (byte > 95) {\n      pacIndex = byte - 96;\n    } else {\n      pacIndex = byte - 64;\n    }\n    pacData.underline = (pacIndex & 1) === 1;\n    if (pacIndex <= 13) {\n      pacData.color = [\"white\", \"green\", \"blue\", \"cyan\", \"red\", \"yellow\", \"magenta\", \"white\"][Math.floor(pacIndex / 2)];\n    } else if (pacIndex <= 15) {\n      pacData.italics = true;\n      pacData.color = \"white\";\n    } else {\n      pacData.indent = Math.floor((pacIndex - 16) / 2) * 4;\n    }\n    return pacData;\n  }\n  /**\n   * Parse characters.\n   * @returns An array with 1 to 2 codes corresponding to chars, if found. null otherwise.\n   */\n  parseChars(a, b) {\n    let channelNr;\n    let charCodes = null;\n    let charCode1 = null;\n    if (a >= 25) {\n      channelNr = 2;\n      charCode1 = a - 8;\n    } else {\n      channelNr = 1;\n      charCode1 = a;\n    }\n    if (charCode1 >= 17 && charCode1 <= 19) {\n      let oneCode;\n      if (charCode1 === 17) {\n        oneCode = b + 80;\n      } else if (charCode1 === 18) {\n        oneCode = b + 112;\n      } else {\n        oneCode = b + 144;\n      }\n      this.logger.log(2, \"Special char '\" + getCharForByte(oneCode) + \"' in channel \" + channelNr);\n      charCodes = [oneCode];\n    } else if (a >= 32 && a <= 127) {\n      charCodes = b === 0 ? [a] : [a, b];\n    }\n    if (charCodes) {\n      const hexCodes = numArrayToHexArray(charCodes);\n      this.logger.log(3, \"Char codes =  \" + hexCodes.join(\",\"));\n      setLastCmd(a, b, this.cmdHistory);\n    }\n    return charCodes;\n  }\n  /**\n   * Parse extended background attributes as well as new foreground color black.\n   * @returns True if background attributes are found\n   */\n  parseBackgroundAttributes(a, b) {\n    const case1 = (a === 16 || a === 24) && b >= 32 && b <= 47;\n    const case2 = (a === 23 || a === 31) && b >= 45 && b <= 47;\n    if (!(case1 || case2)) {\n      return false;\n    }\n    let index;\n    const bkgData = {};\n    if (a === 16 || a === 24) {\n      index = Math.floor((b - 32) / 2);\n      bkgData.background = backgroundColors[index];\n      if (b % 2 === 1) {\n        bkgData.background = bkgData.background + \"_semi\";\n      }\n    } else if (b === 45) {\n      bkgData.background = \"transparent\";\n    } else {\n      bkgData.foreground = \"black\";\n      if (b === 47) {\n        bkgData.underline = true;\n      }\n    }\n    const chNr = a <= 23 ? 1 : 2;\n    const channel = this.channels[chNr];\n    channel.setBkgData(bkgData);\n    setLastCmd(a, b, this.cmdHistory);\n    return true;\n  }\n  /**\n   * Reset state of parser and its channels.\n   */\n  reset() {\n    for (let i = 0; i < Object.keys(this.channels).length; i++) {\n      const channel = this.channels[i];\n      if (channel) {\n        channel.reset();\n      }\n    }\n    this.cmdHistory = createCmdHistory();\n  }\n  /**\n   * Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.\n   */\n  cueSplitAtTime(t) {\n    for (let i = 0; i < this.channels.length; i++) {\n      const channel = this.channels[i];\n      if (channel) {\n        channel.cueSplitAtTime(t);\n      }\n    }\n  }\n}\nfunction setLastCmd(a, b, cmdHistory) {\n  cmdHistory.a = a;\n  cmdHistory.b = b;\n}\nfunction hasCmdRepeated(a, b, cmdHistory) {\n  return cmdHistory.a === a && cmdHistory.b === b;\n}\nfunction createCmdHistory() {\n  return {\n    a: null,\n    b: null\n  };\n}\nclass OutputFilter {\n  constructor(timelineController, trackName) {\n    this.timelineController = void 0;\n    this.cueRanges = [];\n    this.trackName = void 0;\n    this.startTime = null;\n    this.endTime = null;\n    this.screen = null;\n    this.timelineController = timelineController;\n    this.trackName = trackName;\n  }\n  dispatchCue() {\n    if (this.startTime === null) {\n      return;\n    }\n    this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges);\n    this.startTime = null;\n  }\n  newCue(startTime, endTime, screen) {\n    if (this.startTime === null || this.startTime > startTime) {\n      this.startTime = startTime;\n    }\n    this.endTime = endTime;\n    this.screen = screen;\n    this.timelineController.createCaptionsTrack(this.trackName);\n  }\n  reset() {\n    this.cueRanges = [];\n    this.startTime = null;\n  }\n}\nvar VTTCue = function() {\n  if (optionalSelf != null && optionalSelf.VTTCue) {\n    return self.VTTCue;\n  }\n  const AllowedDirections = [\"\", \"lr\", \"rl\"];\n  const AllowedAlignments = [\"start\", \"middle\", \"end\", \"left\", \"right\"];\n  function isAllowedValue(allowed, value) {\n    if (typeof value !== \"string\") {\n      return false;\n    }\n    if (!Array.isArray(allowed)) {\n      return false;\n    }\n    const lcValue = value.toLowerCase();\n    if (~allowed.indexOf(lcValue)) {\n      return lcValue;\n    }\n    return false;\n  }\n  function findDirectionSetting(value) {\n    return isAllowedValue(AllowedDirections, value);\n  }\n  function findAlignSetting(value) {\n    return isAllowedValue(AllowedAlignments, value);\n  }\n  function extend(obj, ...rest) {\n    let i = 1;\n    for (; i < arguments.length; i++) {\n      const cobj = arguments[i];\n      for (const p in cobj) {\n        obj[p] = cobj[p];\n      }\n    }\n    return obj;\n  }\n  function VTTCue2(startTime, endTime, text) {\n    const cue = this;\n    const baseObj = {\n      enumerable: true\n    };\n    cue.hasBeenReset = false;\n    let _id = \"\";\n    let _pauseOnExit = false;\n    let _startTime = startTime;\n    let _endTime = endTime;\n    let _text = text;\n    let _region = null;\n    let _vertical = \"\";\n    let _snapToLines = true;\n    let _line = \"auto\";\n    let _lineAlign = \"start\";\n    let _position = 50;\n    let _positionAlign = \"middle\";\n    let _size = 50;\n    let _align = \"middle\";\n    Object.defineProperty(cue, \"id\", extend({}, baseObj, {\n      get: function() {\n        return _id;\n      },\n      set: function(value) {\n        _id = \"\" + value;\n      }\n    }));\n    Object.defineProperty(cue, \"pauseOnExit\", extend({}, baseObj, {\n      get: function() {\n        return _pauseOnExit;\n      },\n      set: function(value) {\n        _pauseOnExit = !!value;\n      }\n    }));\n    Object.defineProperty(cue, \"startTime\", extend({}, baseObj, {\n      get: function() {\n        return _startTime;\n      },\n      set: function(value) {\n        if (typeof value !== \"number\") {\n          throw new TypeError(\"Start time must be set to a number.\");\n        }\n        _startTime = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"endTime\", extend({}, baseObj, {\n      get: function() {\n        return _endTime;\n      },\n      set: function(value) {\n        if (typeof value !== \"number\") {\n          throw new TypeError(\"End time must be set to a number.\");\n        }\n        _endTime = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"text\", extend({}, baseObj, {\n      get: function() {\n        return _text;\n      },\n      set: function(value) {\n        _text = \"\" + value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"region\", extend({}, baseObj, {\n      get: function() {\n        return _region;\n      },\n      set: function(value) {\n        _region = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"vertical\", extend({}, baseObj, {\n      get: function() {\n        return _vertical;\n      },\n      set: function(value) {\n        const setting = findDirectionSetting(value);\n        if (setting === false) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _vertical = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"snapToLines\", extend({}, baseObj, {\n      get: function() {\n        return _snapToLines;\n      },\n      set: function(value) {\n        _snapToLines = !!value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"line\", extend({}, baseObj, {\n      get: function() {\n        return _line;\n      },\n      set: function(value) {\n        if (typeof value !== \"number\" && value !== \"auto\") {\n          throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n        }\n        _line = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"lineAlign\", extend({}, baseObj, {\n      get: function() {\n        return _lineAlign;\n      },\n      set: function(value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _lineAlign = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"position\", extend({}, baseObj, {\n      get: function() {\n        return _position;\n      },\n      set: function(value) {\n        if (value < 0 || value > 100) {\n          throw new Error(\"Position must be between 0 and 100.\");\n        }\n        _position = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"positionAlign\", extend({}, baseObj, {\n      get: function() {\n        return _positionAlign;\n      },\n      set: function(value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _positionAlign = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"size\", extend({}, baseObj, {\n      get: function() {\n        return _size;\n      },\n      set: function(value) {\n        if (value < 0 || value > 100) {\n          throw new Error(\"Size must be between 0 and 100.\");\n        }\n        _size = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"align\", extend({}, baseObj, {\n      get: function() {\n        return _align;\n      },\n      set: function(value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _align = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    cue.displayState = void 0;\n  }\n  VTTCue2.prototype.getCueAsHTML = function() {\n    const WebVTT = self.WebVTT;\n    return WebVTT.convertCueToDOMTree(self, this.text);\n  };\n  return VTTCue2;\n}();\nclass StringDecoder {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  decode(data, options) {\n    if (!data) {\n      return \"\";\n    }\n    if (typeof data !== \"string\") {\n      throw new Error(\"Error - expected string data.\");\n    }\n    return decodeURIComponent(encodeURIComponent(data));\n  }\n}\nfunction parseTimeStamp(input) {\n  function computeSeconds(h, m2, s, f) {\n    return (h | 0) * 3600 + (m2 | 0) * 60 + (s | 0) + parseFloat(f || 0);\n  }\n  const m = input.match(/^(?:(\\d+):)?(\\d{2}):(\\d{2})(\\.\\d+)?/);\n  if (!m) {\n    return null;\n  }\n  if (parseFloat(m[2]) > 59) {\n    return computeSeconds(m[2], m[3], 0, m[4]);\n  }\n  return computeSeconds(m[1], m[2], m[3], m[4]);\n}\nclass Settings {\n  constructor() {\n    this.values = /* @__PURE__ */ Object.create(null);\n  }\n  // Only accept the first assignment to any key.\n  set(k, v) {\n    if (!this.get(k) && v !== \"\") {\n      this.values[k] = v;\n    }\n  }\n  // Return the value for a key, or a default value.\n  // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n  // a number of possible default values as properties where 'defaultKey' is\n  // the key of the property that will be chosen; otherwise it's assumed to be\n  // a single value.\n  get(k, dflt, defaultKey) {\n    if (defaultKey) {\n      return this.has(k) ? this.values[k] : dflt[defaultKey];\n    }\n    return this.has(k) ? this.values[k] : dflt;\n  }\n  // Check whether we have a value for a key.\n  has(k) {\n    return k in this.values;\n  }\n  // Accept a setting if its one of the given alternatives.\n  alt(k, v, a) {\n    for (let n = 0; n < a.length; ++n) {\n      if (v === a[n]) {\n        this.set(k, v);\n        break;\n      }\n    }\n  }\n  // Accept a setting if its a valid (signed) integer.\n  integer(k, v) {\n    if (/^-?\\d+$/.test(v)) {\n      this.set(k, parseInt(v, 10));\n    }\n  }\n  // Accept a setting if its a valid percentage.\n  percent(k, v) {\n    if (/^([\\d]{1,3})(\\.[\\d]*)?%$/.test(v)) {\n      const percent = parseFloat(v);\n      if (percent >= 0 && percent <= 100) {\n        this.set(k, percent);\n        return true;\n      }\n    }\n    return false;\n  }\n}\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n  const groups = groupDelim ? input.split(groupDelim) : [input];\n  for (const i in groups) {\n    if (typeof groups[i] !== \"string\") {\n      continue;\n    }\n    const kv = groups[i].split(keyValueDelim);\n    if (kv.length !== 2) {\n      continue;\n    }\n    const k = kv[0];\n    const v = kv[1];\n    callback(k, v);\n  }\n}\nconst defaults = new VTTCue(0, 0, \"\");\nconst center = defaults.align === \"middle\" ? \"middle\" : \"center\";\nfunction parseCue(input, cue, regionList) {\n  const oInput = input;\n  function consumeTimeStamp() {\n    const ts = parseTimeStamp(input);\n    if (ts === null) {\n      throw new Error(\"Malformed timestamp: \" + oInput);\n    }\n    input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n    return ts;\n  }\n  function consumeCueSettings(input2, cue2) {\n    const settings = new Settings();\n    parseOptions(input2, function(k, v) {\n      let vals;\n      switch (k) {\n        case \"region\":\n          for (let i = regionList.length - 1; i >= 0; i--) {\n            if (regionList[i].id === v) {\n              settings.set(k, regionList[i].region);\n              break;\n            }\n          }\n          break;\n        case \"vertical\":\n          settings.alt(k, v, [\"rl\", \"lr\"]);\n          break;\n        case \"line\":\n          vals = v.split(\",\");\n          settings.integer(k, vals[0]);\n          if (settings.percent(k, vals[0])) {\n            settings.set(\"snapToLines\", false);\n          }\n          settings.alt(k, vals[0], [\"auto\"]);\n          if (vals.length === 2) {\n            settings.alt(\"lineAlign\", vals[1], [\"start\", center, \"end\"]);\n          }\n          break;\n        case \"position\":\n          vals = v.split(\",\");\n          settings.percent(k, vals[0]);\n          if (vals.length === 2) {\n            settings.alt(\"positionAlign\", vals[1], [\"start\", center, \"end\", \"line-left\", \"line-right\", \"auto\"]);\n          }\n          break;\n        case \"size\":\n          settings.percent(k, v);\n          break;\n        case \"align\":\n          settings.alt(k, v, [\"start\", center, \"end\", \"left\", \"right\"]);\n          break;\n      }\n    }, /:/, /\\s/);\n    cue2.region = settings.get(\"region\", null);\n    cue2.vertical = settings.get(\"vertical\", \"\");\n    let line = settings.get(\"line\", \"auto\");\n    if (line === \"auto\" && defaults.line === -1) {\n      line = -1;\n    }\n    cue2.line = line;\n    cue2.lineAlign = settings.get(\"lineAlign\", \"start\");\n    cue2.snapToLines = settings.get(\"snapToLines\", true);\n    cue2.size = settings.get(\"size\", 100);\n    cue2.align = settings.get(\"align\", center);\n    let position = settings.get(\"position\", \"auto\");\n    if (position === \"auto\" && defaults.position === 50) {\n      position = cue2.align === \"start\" || cue2.align === \"left\" ? 0 : cue2.align === \"end\" || cue2.align === \"right\" ? 100 : 50;\n    }\n    cue2.position = position;\n  }\n  function skipWhitespace() {\n    input = input.replace(/^\\s+/, \"\");\n  }\n  skipWhitespace();\n  cue.startTime = consumeTimeStamp();\n  skipWhitespace();\n  if (input.slice(0, 3) !== \"-->\") {\n    throw new Error(\"Malformed time stamp (time stamps must be separated by '-->'): \" + oInput);\n  }\n  input = input.slice(3);\n  skipWhitespace();\n  cue.endTime = consumeTimeStamp();\n  skipWhitespace();\n  consumeCueSettings(input, cue);\n}\nfunction fixLineBreaks(input) {\n  return input.replace(/<br(?: \\/)?>/gi, \"\\n\");\n}\nclass VTTParser {\n  constructor() {\n    this.state = \"INITIAL\";\n    this.buffer = \"\";\n    this.decoder = new StringDecoder();\n    this.regionList = [];\n    this.cue = null;\n    this.oncue = void 0;\n    this.onparsingerror = void 0;\n    this.onflush = void 0;\n  }\n  parse(data) {\n    const _this = this;\n    if (data) {\n      _this.buffer += _this.decoder.decode(data, {\n        stream: true\n      });\n    }\n    function collectNextLine() {\n      let buffer = _this.buffer;\n      let pos = 0;\n      buffer = fixLineBreaks(buffer);\n      while (pos < buffer.length && buffer[pos] !== \"\\r\" && buffer[pos] !== \"\\n\") {\n        ++pos;\n      }\n      const line = buffer.slice(0, pos);\n      if (buffer[pos] === \"\\r\") {\n        ++pos;\n      }\n      if (buffer[pos] === \"\\n\") {\n        ++pos;\n      }\n      _this.buffer = buffer.slice(pos);\n      return line;\n    }\n    function parseHeader2(input) {\n      parseOptions(input, function(k, v) {\n      }, /:/);\n    }\n    try {\n      let line = \"\";\n      if (_this.state === \"INITIAL\") {\n        if (!/\\r\\n|\\n/.test(_this.buffer)) {\n          return this;\n        }\n        line = collectNextLine();\n        const m = line.match(/^(\u00EF\u00BB\u00BF)?WEBVTT([ \\t].*)?$/);\n        if (!(m != null && m[0])) {\n          throw new Error(\"Malformed WebVTT signature.\");\n        }\n        _this.state = \"HEADER\";\n      }\n      let alreadyCollectedLine = false;\n      while (_this.buffer) {\n        if (!/\\r\\n|\\n/.test(_this.buffer)) {\n          return this;\n        }\n        if (!alreadyCollectedLine) {\n          line = collectNextLine();\n        } else {\n          alreadyCollectedLine = false;\n        }\n        switch (_this.state) {\n          case \"HEADER\":\n            if (/:/.test(line)) {\n              parseHeader2(line);\n            } else if (!line) {\n              _this.state = \"ID\";\n            }\n            continue;\n          case \"NOTE\":\n            if (!line) {\n              _this.state = \"ID\";\n            }\n            continue;\n          case \"ID\":\n            if (/^NOTE($|[ \\t])/.test(line)) {\n              _this.state = \"NOTE\";\n              break;\n            }\n            if (!line) {\n              continue;\n            }\n            _this.cue = new VTTCue(0, 0, \"\");\n            _this.state = \"CUE\";\n            if (line.indexOf(\"-->\") === -1) {\n              _this.cue.id = line;\n              continue;\n            }\n          case \"CUE\":\n            if (!_this.cue) {\n              _this.state = \"BADCUE\";\n              continue;\n            }\n            try {\n              parseCue(line, _this.cue, _this.regionList);\n            } catch (e) {\n              _this.cue = null;\n              _this.state = \"BADCUE\";\n              continue;\n            }\n            _this.state = \"CUETEXT\";\n            continue;\n          case \"CUETEXT\":\n            {\n              const hasSubstring = line.indexOf(\"-->\") !== -1;\n              if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n                if (_this.oncue && _this.cue) {\n                  _this.oncue(_this.cue);\n                }\n                _this.cue = null;\n                _this.state = \"ID\";\n                continue;\n              }\n              if (_this.cue === null) {\n                continue;\n              }\n              if (_this.cue.text) {\n                _this.cue.text += \"\\n\";\n              }\n              _this.cue.text += line;\n            }\n            continue;\n          case \"BADCUE\":\n            if (!line) {\n              _this.state = \"ID\";\n            }\n        }\n      }\n    } catch (e) {\n      if (_this.state === \"CUETEXT\" && _this.cue && _this.oncue) {\n        _this.oncue(_this.cue);\n      }\n      _this.cue = null;\n      _this.state = _this.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n    }\n    return this;\n  }\n  flush() {\n    const _this = this;\n    try {\n      if (_this.cue || _this.state === \"HEADER\") {\n        _this.buffer += \"\\n\\n\";\n        _this.parse();\n      }\n      if (_this.state === \"INITIAL\" || _this.state === \"BADWEBVTT\") {\n        throw new Error(\"Malformed WebVTT signature.\");\n      }\n    } catch (e) {\n      if (_this.onparsingerror) {\n        _this.onparsingerror(e);\n      }\n    }\n    if (_this.onflush) {\n      _this.onflush();\n    }\n    return this;\n  }\n}\nconst LINEBREAKS = /\\r\\n|\\n\\r|\\n|\\r/g;\nconst startsWith = function startsWith2(inputString, searchString, position = 0) {\n  return inputString.slice(position, position + searchString.length) === searchString;\n};\nconst cueString2millis = function cueString2millis2(timeString) {\n  let ts = parseInt(timeString.slice(-3));\n  const secs = parseInt(timeString.slice(-6, -4));\n  const mins = parseInt(timeString.slice(-9, -7));\n  const hours = timeString.length > 9 ? parseInt(timeString.substring(0, timeString.indexOf(\":\"))) : 0;\n  if (!isFiniteNumber(ts) || !isFiniteNumber(secs) || !isFiniteNumber(mins) || !isFiniteNumber(hours)) {\n    throw Error(`Malformed X-TIMESTAMP-MAP: Local:${timeString}`);\n  }\n  ts += 1e3 * secs;\n  ts += 60 * 1e3 * mins;\n  ts += 60 * 60 * 1e3 * hours;\n  return ts;\n};\nconst hash = function hash2(text) {\n  let _hash = 5381;\n  let i = text.length;\n  while (i) {\n    _hash = _hash * 33 ^ text.charCodeAt(--i);\n  }\n  return (_hash >>> 0).toString();\n};\nfunction generateCueId(startTime, endTime, text) {\n  return hash(startTime.toString()) + hash(endTime.toString()) + hash(text);\n}\nconst calculateOffset = function calculateOffset2(vttCCs, cc, presentationTime) {\n  let currCC = vttCCs[cc];\n  let prevCC = vttCCs[currCC.prevCC];\n  if (!prevCC || !prevCC.new && currCC.new) {\n    vttCCs.ccOffset = vttCCs.presentationOffset = currCC.start;\n    currCC.new = false;\n    return;\n  }\n  while ((_prevCC = prevCC) != null && _prevCC.new) {\n    var _prevCC;\n    vttCCs.ccOffset += currCC.start - prevCC.start;\n    currCC.new = false;\n    currCC = prevCC;\n    prevCC = vttCCs[currCC.prevCC];\n  }\n  vttCCs.presentationOffset = presentationTime;\n};\nfunction parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, errorCallBack) {\n  const parser = new VTTParser();\n  const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, \"\\n\").split(\"\\n\");\n  const cues = [];\n  const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;\n  let cueTime = \"00:00.000\";\n  let timestampMapMPEGTS = 0;\n  let timestampMapLOCAL = 0;\n  let parsingError;\n  let inHeader = true;\n  parser.oncue = function(cue) {\n    const currCC = vttCCs[cc];\n    let cueOffset = vttCCs.ccOffset;\n    const webVttMpegTsMapOffset = (timestampMapMPEGTS - init90kHz) / 9e4;\n    if (currCC != null && currCC.new) {\n      if (timestampMapLOCAL !== void 0) {\n        cueOffset = vttCCs.ccOffset = currCC.start;\n      } else {\n        calculateOffset(vttCCs, cc, webVttMpegTsMapOffset);\n      }\n    }\n    if (webVttMpegTsMapOffset) {\n      if (!initPTS) {\n        parsingError = new Error(\"Missing initPTS for VTT MPEGTS\");\n        return;\n      }\n      cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;\n    }\n    const duration = cue.endTime - cue.startTime;\n    const startTime = normalizePts((cue.startTime + cueOffset - timestampMapLOCAL) * 9e4, timeOffset * 9e4) / 9e4;\n    cue.startTime = Math.max(startTime, 0);\n    cue.endTime = Math.max(startTime + duration, 0);\n    const text = cue.text.trim();\n    cue.text = decodeURIComponent(encodeURIComponent(text));\n    if (!cue.id) {\n      cue.id = generateCueId(cue.startTime, cue.endTime, text);\n    }\n    if (cue.endTime > 0) {\n      cues.push(cue);\n    }\n  };\n  parser.onparsingerror = function(error) {\n    parsingError = error;\n  };\n  parser.onflush = function() {\n    if (parsingError) {\n      errorCallBack(parsingError);\n      return;\n    }\n    callBack(cues);\n  };\n  vttLines.forEach((line) => {\n    if (inHeader) {\n      if (startsWith(line, \"X-TIMESTAMP-MAP=\")) {\n        inHeader = false;\n        line.slice(16).split(\",\").forEach((timestamp) => {\n          if (startsWith(timestamp, \"LOCAL:\")) {\n            cueTime = timestamp.slice(6);\n          } else if (startsWith(timestamp, \"MPEGTS:\")) {\n            timestampMapMPEGTS = parseInt(timestamp.slice(7));\n          }\n        });\n        try {\n          timestampMapLOCAL = cueString2millis(cueTime) / 1e3;\n        } catch (error) {\n          parsingError = error;\n        }\n        return;\n      } else if (line === \"\") {\n        inHeader = false;\n      }\n    }\n    parser.parse(line + \"\\n\");\n  });\n  parser.flush();\n}\nconst IMSC1_CODEC = \"stpp.ttml.im1t\";\nconst HMSF_REGEX = /^(\\d{2,}):(\\d{2}):(\\d{2}):(\\d{2})\\.?(\\d+)?$/;\nconst TIME_UNIT_REGEX = /^(\\d*(?:\\.\\d*)?)(h|m|s|ms|f|t)$/;\nconst textAlignToLineAlign = {\n  left: \"start\",\n  center: \"center\",\n  right: \"end\",\n  start: \"start\",\n  end: \"end\"\n};\nfunction parseIMSC1(payload, initPTS, callBack, errorCallBack) {\n  const results = findBox(new Uint8Array(payload), [\"mdat\"]);\n  if (results.length === 0) {\n    errorCallBack(new Error(\"Could not parse IMSC1 mdat\"));\n    return;\n  }\n  const ttmlList = results.map((mdat) => utf8ArrayToStr(mdat));\n  const syncTime = toTimescaleFromScale(initPTS.baseTime, 1, initPTS.timescale);\n  try {\n    ttmlList.forEach((ttml) => callBack(parseTTML(ttml, syncTime)));\n  } catch (error) {\n    errorCallBack(error);\n  }\n}\nfunction parseTTML(ttml, syncTime) {\n  const parser = new DOMParser();\n  const xmlDoc = parser.parseFromString(ttml, \"text/xml\");\n  const tt = xmlDoc.getElementsByTagName(\"tt\")[0];\n  if (!tt) {\n    throw new Error(\"Invalid ttml\");\n  }\n  const defaultRateInfo = {\n    frameRate: 30,\n    subFrameRate: 1,\n    frameRateMultiplier: 0,\n    tickRate: 0\n  };\n  const rateInfo = Object.keys(defaultRateInfo).reduce((result, key) => {\n    result[key] = tt.getAttribute(`ttp:${key}`) || defaultRateInfo[key];\n    return result;\n  }, {});\n  const trim = tt.getAttribute(\"xml:space\") !== \"preserve\";\n  const styleElements = collectionToDictionary(getElementCollection(tt, \"styling\", \"style\"));\n  const regionElements = collectionToDictionary(getElementCollection(tt, \"layout\", \"region\"));\n  const cueElements = getElementCollection(tt, \"body\", \"[begin]\");\n  return [].map.call(cueElements, (cueElement) => {\n    const cueText = getTextContent(cueElement, trim);\n    if (!cueText || !cueElement.hasAttribute(\"begin\")) {\n      return null;\n    }\n    const startTime = parseTtmlTime(cueElement.getAttribute(\"begin\"), rateInfo);\n    const duration = parseTtmlTime(cueElement.getAttribute(\"dur\"), rateInfo);\n    let endTime = parseTtmlTime(cueElement.getAttribute(\"end\"), rateInfo);\n    if (startTime === null) {\n      throw timestampParsingError(cueElement);\n    }\n    if (endTime === null) {\n      if (duration === null) {\n        throw timestampParsingError(cueElement);\n      }\n      endTime = startTime + duration;\n    }\n    const cue = new VTTCue(startTime - syncTime, endTime - syncTime, cueText);\n    cue.id = generateCueId(cue.startTime, cue.endTime, cue.text);\n    const region = regionElements[cueElement.getAttribute(\"region\")];\n    const style = styleElements[cueElement.getAttribute(\"style\")];\n    const styles = getTtmlStyles(region, style, styleElements);\n    const {\n      textAlign\n    } = styles;\n    if (textAlign) {\n      const lineAlign = textAlignToLineAlign[textAlign];\n      if (lineAlign) {\n        cue.lineAlign = lineAlign;\n      }\n      cue.align = textAlign;\n    }\n    _extends(cue, styles);\n    return cue;\n  }).filter((cue) => cue !== null);\n}\nfunction getElementCollection(fromElement, parentName, childName) {\n  const parent = fromElement.getElementsByTagName(parentName)[0];\n  if (parent) {\n    return [].slice.call(parent.querySelectorAll(childName));\n  }\n  return [];\n}\nfunction collectionToDictionary(elementsWithId) {\n  return elementsWithId.reduce((dict, element) => {\n    const id = element.getAttribute(\"xml:id\");\n    if (id) {\n      dict[id] = element;\n    }\n    return dict;\n  }, {});\n}\nfunction getTextContent(element, trim) {\n  return [].slice.call(element.childNodes).reduce((str, node, i) => {\n    var _node$childNodes;\n    if (node.nodeName === \"br\" && i) {\n      return str + \"\\n\";\n    }\n    if ((_node$childNodes = node.childNodes) != null && _node$childNodes.length) {\n      return getTextContent(node, trim);\n    } else if (trim) {\n      return str + node.textContent.trim().replace(/\\s+/g, \" \");\n    }\n    return str + node.textContent;\n  }, \"\");\n}\nfunction getTtmlStyles(region, style, styleElements) {\n  const ttsNs = \"http://www.w3.org/ns/ttml#styling\";\n  let regionStyle = null;\n  const styleAttributes = [\n    \"displayAlign\",\n    \"textAlign\",\n    \"color\",\n    \"backgroundColor\",\n    \"fontSize\",\n    \"fontFamily\"\n    // 'fontWeight',\n    // 'lineHeight',\n    // 'wrapOption',\n    // 'fontStyle',\n    // 'direction',\n    // 'writingMode'\n  ];\n  const regionStyleName = region != null && region.hasAttribute(\"style\") ? region.getAttribute(\"style\") : null;\n  if (regionStyleName && styleElements.hasOwnProperty(regionStyleName)) {\n    regionStyle = styleElements[regionStyleName];\n  }\n  return styleAttributes.reduce((styles, name) => {\n    const value = getAttributeNS(style, ttsNs, name) || getAttributeNS(region, ttsNs, name) || getAttributeNS(regionStyle, ttsNs, name);\n    if (value) {\n      styles[name] = value;\n    }\n    return styles;\n  }, {});\n}\nfunction getAttributeNS(element, ns, name) {\n  if (!element) {\n    return null;\n  }\n  return element.hasAttributeNS(ns, name) ? element.getAttributeNS(ns, name) : null;\n}\nfunction timestampParsingError(node) {\n  return new Error(`Could not parse ttml timestamp ${node}`);\n}\nfunction parseTtmlTime(timeAttributeValue, rateInfo) {\n  if (!timeAttributeValue) {\n    return null;\n  }\n  let seconds = parseTimeStamp(timeAttributeValue);\n  if (seconds === null) {\n    if (HMSF_REGEX.test(timeAttributeValue)) {\n      seconds = parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo);\n    } else if (TIME_UNIT_REGEX.test(timeAttributeValue)) {\n      seconds = parseTimeUnits(timeAttributeValue, rateInfo);\n    }\n  }\n  return seconds;\n}\nfunction parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo) {\n  const m = HMSF_REGEX.exec(timeAttributeValue);\n  const frames = (m[4] | 0) + (m[5] | 0) / rateInfo.subFrameRate;\n  return (m[1] | 0) * 3600 + (m[2] | 0) * 60 + (m[3] | 0) + frames / rateInfo.frameRate;\n}\nfunction parseTimeUnits(timeAttributeValue, rateInfo) {\n  const m = TIME_UNIT_REGEX.exec(timeAttributeValue);\n  const value = Number(m[1]);\n  const unit = m[2];\n  switch (unit) {\n    case \"h\":\n      return value * 3600;\n    case \"m\":\n      return value * 60;\n    case \"ms\":\n      return value * 1e3;\n    case \"f\":\n      return value / rateInfo.frameRate;\n    case \"t\":\n      return value / rateInfo.tickRate;\n  }\n  return value;\n}\nclass TimelineController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.media = null;\n    this.config = void 0;\n    this.enabled = true;\n    this.Cues = void 0;\n    this.textTracks = [];\n    this.tracks = [];\n    this.initPTS = [];\n    this.unparsedVttFrags = [];\n    this.captionsTracks = {};\n    this.nonNativeCaptionsTracks = {};\n    this.cea608Parser1 = void 0;\n    this.cea608Parser2 = void 0;\n    this.lastCc = -1;\n    this.lastSn = -1;\n    this.lastPartIndex = -1;\n    this.prevCC = -1;\n    this.vttCCs = newVTTCCs();\n    this.captionsProperties = void 0;\n    this.hls = hls;\n    this.config = hls.config;\n    this.Cues = hls.config.cueHandler;\n    this.captionsProperties = {\n      textTrack1: {\n        label: this.config.captionsTextTrack1Label,\n        languageCode: this.config.captionsTextTrack1LanguageCode\n      },\n      textTrack2: {\n        label: this.config.captionsTextTrack2Label,\n        languageCode: this.config.captionsTextTrack2LanguageCode\n      },\n      textTrack3: {\n        label: this.config.captionsTextTrack3Label,\n        languageCode: this.config.captionsTextTrack3LanguageCode\n      },\n      textTrack4: {\n        label: this.config.captionsTextTrack4Label,\n        languageCode: this.config.captionsTextTrack4LanguageCode\n      }\n    };\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.on(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n    hls.on(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n    hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.on(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n  }\n  destroy() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.off(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n    hls.off(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n    hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.off(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    this.hls = this.config = null;\n    this.cea608Parser1 = this.cea608Parser2 = void 0;\n  }\n  initCea608Parsers() {\n    if (this.config.enableCEA708Captions && (!this.cea608Parser1 || !this.cea608Parser2)) {\n      const channel1 = new OutputFilter(this, \"textTrack1\");\n      const channel2 = new OutputFilter(this, \"textTrack2\");\n      const channel3 = new OutputFilter(this, \"textTrack3\");\n      const channel4 = new OutputFilter(this, \"textTrack4\");\n      this.cea608Parser1 = new Cea608Parser(1, channel1, channel2);\n      this.cea608Parser2 = new Cea608Parser(3, channel3, channel4);\n    }\n  }\n  addCues(trackName, startTime, endTime, screen, cueRanges) {\n    let merged = false;\n    for (let i = cueRanges.length; i--; ) {\n      const cueRange = cueRanges[i];\n      const overlap = intersection(cueRange[0], cueRange[1], startTime, endTime);\n      if (overlap >= 0) {\n        cueRange[0] = Math.min(cueRange[0], startTime);\n        cueRange[1] = Math.max(cueRange[1], endTime);\n        merged = true;\n        if (overlap / (endTime - startTime) > 0.5) {\n          return;\n        }\n      }\n    }\n    if (!merged) {\n      cueRanges.push([startTime, endTime]);\n    }\n    if (this.config.renderTextTracksNatively) {\n      const track = this.captionsTracks[trackName];\n      this.Cues.newCue(track, startTime, endTime, screen);\n    } else {\n      const cues = this.Cues.newCue(null, startTime, endTime, screen);\n      this.hls.trigger(Events.CUES_PARSED, {\n        type: \"captions\",\n        cues,\n        track: trackName\n      });\n    }\n  }\n  // Triggered when an initial PTS is found; used for synchronisation of WebVTT.\n  onInitPtsFound(event, {\n    frag,\n    id,\n    initPTS,\n    timescale\n  }) {\n    const {\n      unparsedVttFrags\n    } = this;\n    if (id === \"main\") {\n      this.initPTS[frag.cc] = {\n        baseTime: initPTS,\n        timescale\n      };\n    }\n    if (unparsedVttFrags.length) {\n      this.unparsedVttFrags = [];\n      unparsedVttFrags.forEach((frag2) => {\n        this.onFragLoaded(Events.FRAG_LOADED, frag2);\n      });\n    }\n  }\n  getExistingTrack(label, language) {\n    const {\n      media\n    } = this;\n    if (media) {\n      for (let i = 0; i < media.textTracks.length; i++) {\n        const textTrack = media.textTracks[i];\n        if (canReuseVttTextTrack(textTrack, {\n          name: label,\n          lang: language,\n          attrs: {}\n        })) {\n          return textTrack;\n        }\n      }\n    }\n    return null;\n  }\n  createCaptionsTrack(trackName) {\n    if (this.config.renderTextTracksNatively) {\n      this.createNativeTrack(trackName);\n    } else {\n      this.createNonNativeTrack(trackName);\n    }\n  }\n  createNativeTrack(trackName) {\n    if (this.captionsTracks[trackName]) {\n      return;\n    }\n    const {\n      captionsProperties,\n      captionsTracks,\n      media\n    } = this;\n    const {\n      label,\n      languageCode\n    } = captionsProperties[trackName];\n    const existingTrack = this.getExistingTrack(label, languageCode);\n    if (!existingTrack) {\n      const textTrack = this.createTextTrack(\"captions\", label, languageCode);\n      if (textTrack) {\n        textTrack[trackName] = true;\n        captionsTracks[trackName] = textTrack;\n      }\n    } else {\n      captionsTracks[trackName] = existingTrack;\n      clearCurrentCues(captionsTracks[trackName]);\n      sendAddTrackEvent(captionsTracks[trackName], media);\n    }\n  }\n  createNonNativeTrack(trackName) {\n    if (this.nonNativeCaptionsTracks[trackName]) {\n      return;\n    }\n    const trackProperties = this.captionsProperties[trackName];\n    if (!trackProperties) {\n      return;\n    }\n    const label = trackProperties.label;\n    const track = {\n      _id: trackName,\n      label,\n      kind: \"captions\",\n      default: trackProperties.media ? !!trackProperties.media.default : false,\n      closedCaptions: trackProperties.media\n    };\n    this.nonNativeCaptionsTracks[trackName] = track;\n    this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n      tracks: [track]\n    });\n  }\n  createTextTrack(kind, label, lang) {\n    const media = this.media;\n    if (!media) {\n      return;\n    }\n    return media.addTextTrack(kind, label, lang);\n  }\n  onMediaAttaching(event, data) {\n    this.media = data.media;\n    this._cleanTracks();\n  }\n  onMediaDetaching() {\n    const {\n      captionsTracks\n    } = this;\n    Object.keys(captionsTracks).forEach((trackName) => {\n      clearCurrentCues(captionsTracks[trackName]);\n      delete captionsTracks[trackName];\n    });\n    this.nonNativeCaptionsTracks = {};\n  }\n  onManifestLoading() {\n    this.lastCc = -1;\n    this.lastSn = -1;\n    this.lastPartIndex = -1;\n    this.prevCC = -1;\n    this.vttCCs = newVTTCCs();\n    this._cleanTracks();\n    this.tracks = [];\n    this.captionsTracks = {};\n    this.nonNativeCaptionsTracks = {};\n    this.textTracks = [];\n    this.unparsedVttFrags = [];\n    this.initPTS = [];\n    if (this.cea608Parser1 && this.cea608Parser2) {\n      this.cea608Parser1.reset();\n      this.cea608Parser2.reset();\n    }\n  }\n  _cleanTracks() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const textTracks = media.textTracks;\n    if (textTracks) {\n      for (let i = 0; i < textTracks.length; i++) {\n        clearCurrentCues(textTracks[i]);\n      }\n    }\n  }\n  onSubtitleTracksUpdated(event, data) {\n    const tracks = data.subtitleTracks || [];\n    const hasIMSC1 = tracks.some((track) => track.textCodec === IMSC1_CODEC);\n    if (this.config.enableWebVTT || hasIMSC1 && this.config.enableIMSC1) {\n      const listIsIdentical = subtitleOptionsIdentical(this.tracks, tracks);\n      if (listIsIdentical) {\n        this.tracks = tracks;\n        return;\n      }\n      this.textTracks = [];\n      this.tracks = tracks;\n      if (this.config.renderTextTracksNatively) {\n        const media = this.media;\n        const inUseTracks = media ? filterSubtitleTracks(media.textTracks) : null;\n        this.tracks.forEach((track, index) => {\n          let textTrack;\n          if (inUseTracks) {\n            let inUseTrack = null;\n            for (let i = 0; i < inUseTracks.length; i++) {\n              if (inUseTracks[i] && canReuseVttTextTrack(inUseTracks[i], track)) {\n                inUseTrack = inUseTracks[i];\n                inUseTracks[i] = null;\n                break;\n              }\n            }\n            if (inUseTrack) {\n              textTrack = inUseTrack;\n            }\n          }\n          if (textTrack) {\n            clearCurrentCues(textTrack);\n          } else {\n            const textTrackKind = captionsOrSubtitlesFromCharacteristics(track);\n            textTrack = this.createTextTrack(textTrackKind, track.name, track.lang);\n            if (textTrack) {\n              textTrack.mode = \"disabled\";\n            }\n          }\n          if (textTrack) {\n            this.textTracks.push(textTrack);\n          }\n        });\n        if (inUseTracks != null && inUseTracks.length) {\n          const unusedTextTracks = inUseTracks.filter((t) => t !== null).map((t) => t.label);\n          if (unusedTextTracks.length) {\n            logger.warn(`Media element contains unused subtitle tracks: ${unusedTextTracks.join(\", \")}. Replace media element for each source to clear TextTracks and captions menu.`);\n          }\n        }\n      } else if (this.tracks.length) {\n        const tracksList = this.tracks.map((track) => {\n          return {\n            label: track.name,\n            kind: track.type.toLowerCase(),\n            default: track.default,\n            subtitleTrack: track\n          };\n        });\n        this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n          tracks: tracksList\n        });\n      }\n    }\n  }\n  onManifestLoaded(event, data) {\n    if (this.config.enableCEA708Captions && data.captions) {\n      data.captions.forEach((captionsTrack) => {\n        const instreamIdMatch = /(?:CC|SERVICE)([1-4])/.exec(captionsTrack.instreamId);\n        if (!instreamIdMatch) {\n          return;\n        }\n        const trackName = `textTrack${instreamIdMatch[1]}`;\n        const trackProperties = this.captionsProperties[trackName];\n        if (!trackProperties) {\n          return;\n        }\n        trackProperties.label = captionsTrack.name;\n        if (captionsTrack.lang) {\n          trackProperties.languageCode = captionsTrack.lang;\n        }\n        trackProperties.media = captionsTrack;\n      });\n    }\n  }\n  closedCaptionsForLevel(frag) {\n    const level = this.hls.levels[frag.level];\n    return level == null ? void 0 : level.attrs[\"CLOSED-CAPTIONS\"];\n  }\n  onFragLoading(event, data) {\n    this.initCea608Parsers();\n    const {\n      cea608Parser1,\n      cea608Parser2,\n      lastCc,\n      lastSn,\n      lastPartIndex\n    } = this;\n    if (!this.enabled || !cea608Parser1 || !cea608Parser2) {\n      return;\n    }\n    if (data.frag.type === PlaylistLevelType.MAIN) {\n      var _data$part$index, _data$part;\n      const {\n        cc,\n        sn\n      } = data.frag;\n      const partIndex = (_data$part$index = data == null ? void 0 : (_data$part = data.part) == null ? void 0 : _data$part.index) != null ? _data$part$index : -1;\n      if (!(sn === lastSn + 1 || sn === lastSn && partIndex === lastPartIndex + 1 || cc === lastCc)) {\n        cea608Parser1.reset();\n        cea608Parser2.reset();\n      }\n      this.lastCc = cc;\n      this.lastSn = sn;\n      this.lastPartIndex = partIndex;\n    }\n  }\n  onFragLoaded(event, data) {\n    const {\n      frag,\n      payload\n    } = data;\n    if (frag.type === PlaylistLevelType.SUBTITLE) {\n      if (payload.byteLength) {\n        const decryptData = frag.decryptdata;\n        const decrypted = \"stats\" in data;\n        if (decryptData == null || !decryptData.encrypted || decrypted) {\n          const trackPlaylistMedia = this.tracks[frag.level];\n          const vttCCs = this.vttCCs;\n          if (!vttCCs[frag.cc]) {\n            vttCCs[frag.cc] = {\n              start: frag.start,\n              prevCC: this.prevCC,\n              new: true\n            };\n            this.prevCC = frag.cc;\n          }\n          if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {\n            this._parseIMSC1(frag, payload);\n          } else {\n            this._parseVTTs(data);\n          }\n        }\n      } else {\n        this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n          success: false,\n          frag,\n          error: new Error(\"Empty subtitle payload\")\n        });\n      }\n    }\n  }\n  _parseIMSC1(frag, payload) {\n    const hls = this.hls;\n    parseIMSC1(payload, this.initPTS[frag.cc], (cues) => {\n      this._appendCues(cues, frag.level);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: true,\n        frag\n      });\n    }, (error) => {\n      logger.log(`Failed to parse IMSC1: ${error}`);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: false,\n        frag,\n        error\n      });\n    });\n  }\n  _parseVTTs(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      payload\n    } = data;\n    const {\n      initPTS,\n      unparsedVttFrags\n    } = this;\n    const maxAvCC = initPTS.length - 1;\n    if (!initPTS[frag.cc] && maxAvCC === -1) {\n      unparsedVttFrags.push(data);\n      return;\n    }\n    const hls = this.hls;\n    const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;\n    parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, (cues) => {\n      this._appendCues(cues, frag.level);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: true,\n        frag\n      });\n    }, (error) => {\n      const missingInitPTS = error.message === \"Missing initPTS for VTT MPEGTS\";\n      if (missingInitPTS) {\n        unparsedVttFrags.push(data);\n      } else {\n        this._fallbackToIMSC1(frag, payload);\n      }\n      logger.log(`Failed to parse VTT cue: ${error}`);\n      if (missingInitPTS && maxAvCC > frag.cc) {\n        return;\n      }\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: false,\n        frag,\n        error\n      });\n    });\n  }\n  _fallbackToIMSC1(frag, payload) {\n    const trackPlaylistMedia = this.tracks[frag.level];\n    if (!trackPlaylistMedia.textCodec) {\n      parseIMSC1(payload, this.initPTS[frag.cc], () => {\n        trackPlaylistMedia.textCodec = IMSC1_CODEC;\n        this._parseIMSC1(frag, payload);\n      }, () => {\n        trackPlaylistMedia.textCodec = \"wvtt\";\n      });\n    }\n  }\n  _appendCues(cues, fragLevel) {\n    const hls = this.hls;\n    if (this.config.renderTextTracksNatively) {\n      const textTrack = this.textTracks[fragLevel];\n      if (!textTrack || textTrack.mode === \"disabled\") {\n        return;\n      }\n      cues.forEach((cue) => addCueToTrack(textTrack, cue));\n    } else {\n      const currentTrack = this.tracks[fragLevel];\n      if (!currentTrack) {\n        return;\n      }\n      const track = currentTrack.default ? \"default\" : \"subtitles\" + fragLevel;\n      hls.trigger(Events.CUES_PARSED, {\n        type: \"subtitles\",\n        cues,\n        track\n      });\n    }\n  }\n  onFragDecrypted(event, data) {\n    const {\n      frag\n    } = data;\n    if (frag.type === PlaylistLevelType.SUBTITLE) {\n      this.onFragLoaded(Events.FRAG_LOADED, data);\n    }\n  }\n  onSubtitleTracksCleared() {\n    this.tracks = [];\n    this.captionsTracks = {};\n  }\n  onFragParsingUserdata(event, data) {\n    this.initCea608Parsers();\n    const {\n      cea608Parser1,\n      cea608Parser2\n    } = this;\n    if (!this.enabled || !cea608Parser1 || !cea608Parser2) {\n      return;\n    }\n    const {\n      frag,\n      samples\n    } = data;\n    if (frag.type === PlaylistLevelType.MAIN && this.closedCaptionsForLevel(frag) === \"NONE\") {\n      return;\n    }\n    for (let i = 0; i < samples.length; i++) {\n      const ccBytes = samples[i].bytes;\n      if (ccBytes) {\n        const ccdatas = this.extractCea608Data(ccBytes);\n        cea608Parser1.addData(samples[i].pts, ccdatas[0]);\n        cea608Parser2.addData(samples[i].pts, ccdatas[1]);\n      }\n    }\n  }\n  onBufferFlushing(event, {\n    startOffset,\n    endOffset,\n    endOffsetSubtitles,\n    type\n  }) {\n    const {\n      media\n    } = this;\n    if (!media || media.currentTime < endOffset) {\n      return;\n    }\n    if (!type || type === \"video\") {\n      const {\n        captionsTracks\n      } = this;\n      Object.keys(captionsTracks).forEach((trackName) => removeCuesInRange(captionsTracks[trackName], startOffset, endOffset));\n    }\n    if (this.config.renderTextTracksNatively) {\n      if (startOffset === 0 && endOffsetSubtitles !== void 0) {\n        const {\n          textTracks\n        } = this;\n        Object.keys(textTracks).forEach((trackName) => removeCuesInRange(textTracks[trackName], startOffset, endOffsetSubtitles));\n      }\n    }\n  }\n  extractCea608Data(byteArray) {\n    const actualCCBytes = [[], []];\n    const count = byteArray[0] & 31;\n    let position = 2;\n    for (let j = 0; j < count; j++) {\n      const tmpByte = byteArray[position++];\n      const ccbyte1 = 127 & byteArray[position++];\n      const ccbyte2 = 127 & byteArray[position++];\n      if (ccbyte1 === 0 && ccbyte2 === 0) {\n        continue;\n      }\n      const ccValid = (4 & tmpByte) !== 0;\n      if (ccValid) {\n        const ccType = 3 & tmpByte;\n        if (0 === ccType || 1 === ccType) {\n          actualCCBytes[ccType].push(ccbyte1);\n          actualCCBytes[ccType].push(ccbyte2);\n        }\n      }\n    }\n    return actualCCBytes;\n  }\n}\nfunction captionsOrSubtitlesFromCharacteristics(track) {\n  if (track.characteristics) {\n    if (/transcribes-spoken-dialog/gi.test(track.characteristics) && /describes-music-and-sound/gi.test(track.characteristics)) {\n      return \"captions\";\n    }\n  }\n  return \"subtitles\";\n}\nfunction canReuseVttTextTrack(inUseTrack, manifestTrack) {\n  return !!inUseTrack && inUseTrack.kind === captionsOrSubtitlesFromCharacteristics(manifestTrack) && subtitleTrackMatchesTextTrack(manifestTrack, inUseTrack);\n}\nfunction intersection(x1, x2, y1, y2) {\n  return Math.min(x2, y2) - Math.max(x1, y1);\n}\nfunction newVTTCCs() {\n  return {\n    ccOffset: 0,\n    presentationOffset: 0,\n    0: {\n      start: 0,\n      prevCC: -1,\n      new: true\n    }\n  };\n}\nclass CapLevelController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.autoLevelCapping = void 0;\n    this.firstLevel = void 0;\n    this.media = void 0;\n    this.restrictedLevels = void 0;\n    this.timer = void 0;\n    this.clientRect = void 0;\n    this.streamController = void 0;\n    this.hls = hls;\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    this.firstLevel = -1;\n    this.media = null;\n    this.restrictedLevels = [];\n    this.timer = void 0;\n    this.clientRect = null;\n    this.registerListeners();\n  }\n  setStreamController(streamController) {\n    this.streamController = streamController;\n  }\n  destroy() {\n    if (this.hls) {\n      this.unregisterListener();\n    }\n    if (this.timer) {\n      this.stopCapping();\n    }\n    this.media = null;\n    this.clientRect = null;\n    this.hls = this.streamController = null;\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n  }\n  unregisterListener() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n  }\n  onFpsDropLevelCapping(event, data) {\n    const level = this.hls.levels[data.droppedLevel];\n    if (this.isLevelAllowed(level)) {\n      this.restrictedLevels.push({\n        bitrate: level.bitrate,\n        height: level.height,\n        width: level.width\n      });\n    }\n  }\n  onMediaAttaching(event, data) {\n    this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n    this.clientRect = null;\n    if (this.timer && this.hls.levels.length) {\n      this.detectPlayerSize();\n    }\n  }\n  onManifestParsed(event, data) {\n    const hls = this.hls;\n    this.restrictedLevels = [];\n    this.firstLevel = data.firstLevel;\n    if (hls.config.capLevelToPlayerSize && data.video) {\n      this.startCapping();\n    }\n  }\n  onLevelsUpdated(event, data) {\n    if (this.timer && isFiniteNumber(this.autoLevelCapping)) {\n      this.detectPlayerSize();\n    }\n  }\n  // Only activate capping when playing a video stream; otherwise, multi-bitrate audio-only streams will be restricted\n  // to the first level\n  onBufferCodecs(event, data) {\n    const hls = this.hls;\n    if (hls.config.capLevelToPlayerSize && data.video) {\n      this.startCapping();\n    }\n  }\n  onMediaDetaching() {\n    this.stopCapping();\n  }\n  detectPlayerSize() {\n    if (this.media) {\n      if (this.mediaHeight <= 0 || this.mediaWidth <= 0) {\n        this.clientRect = null;\n        return;\n      }\n      const levels = this.hls.levels;\n      if (levels.length) {\n        const hls = this.hls;\n        const maxLevel = this.getMaxLevel(levels.length - 1);\n        if (maxLevel !== this.autoLevelCapping) {\n          logger.log(`Setting autoLevelCapping to ${maxLevel}: ${levels[maxLevel].height}p@${levels[maxLevel].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`);\n        }\n        hls.autoLevelCapping = maxLevel;\n        if (hls.autoLevelCapping > this.autoLevelCapping && this.streamController) {\n          this.streamController.nextLevelSwitch();\n        }\n        this.autoLevelCapping = hls.autoLevelCapping;\n      }\n    }\n  }\n  /*\n   * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n   */\n  getMaxLevel(capLevelIndex) {\n    const levels = this.hls.levels;\n    if (!levels.length) {\n      return -1;\n    }\n    const validLevels = levels.filter((level, index) => this.isLevelAllowed(level) && index <= capLevelIndex);\n    this.clientRect = null;\n    return CapLevelController.getMaxLevelByMediaSize(validLevels, this.mediaWidth, this.mediaHeight);\n  }\n  startCapping() {\n    if (this.timer) {\n      return;\n    }\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    self.clearInterval(this.timer);\n    this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1e3);\n    this.detectPlayerSize();\n  }\n  stopCapping() {\n    this.restrictedLevels = [];\n    this.firstLevel = -1;\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    if (this.timer) {\n      self.clearInterval(this.timer);\n      this.timer = void 0;\n    }\n  }\n  getDimensions() {\n    if (this.clientRect) {\n      return this.clientRect;\n    }\n    const media = this.media;\n    const boundsRect = {\n      width: 0,\n      height: 0\n    };\n    if (media) {\n      const clientRect = media.getBoundingClientRect();\n      boundsRect.width = clientRect.width;\n      boundsRect.height = clientRect.height;\n      if (!boundsRect.width && !boundsRect.height) {\n        boundsRect.width = clientRect.right - clientRect.left || media.width || 0;\n        boundsRect.height = clientRect.bottom - clientRect.top || media.height || 0;\n      }\n    }\n    this.clientRect = boundsRect;\n    return boundsRect;\n  }\n  get mediaWidth() {\n    return this.getDimensions().width * this.contentScaleFactor;\n  }\n  get mediaHeight() {\n    return this.getDimensions().height * this.contentScaleFactor;\n  }\n  get contentScaleFactor() {\n    let pixelRatio = 1;\n    if (!this.hls.config.ignoreDevicePixelRatio) {\n      try {\n        pixelRatio = self.devicePixelRatio;\n      } catch (e) {\n      }\n    }\n    return pixelRatio;\n  }\n  isLevelAllowed(level) {\n    const restrictedLevels = this.restrictedLevels;\n    return !restrictedLevels.some((restrictedLevel) => {\n      return level.bitrate === restrictedLevel.bitrate && level.width === restrictedLevel.width && level.height === restrictedLevel.height;\n    });\n  }\n  static getMaxLevelByMediaSize(levels, width, height) {\n    if (!(levels != null && levels.length)) {\n      return -1;\n    }\n    const atGreatestBandwidth = (curLevel, nextLevel) => {\n      if (!nextLevel) {\n        return true;\n      }\n      return curLevel.width !== nextLevel.width || curLevel.height !== nextLevel.height;\n    };\n    let maxLevelIndex = levels.length - 1;\n    const squareSize = Math.max(width, height);\n    for (let i = 0; i < levels.length; i += 1) {\n      const level = levels[i];\n      if ((level.width >= squareSize || level.height >= squareSize) && atGreatestBandwidth(level, levels[i + 1])) {\n        maxLevelIndex = i;\n        break;\n      }\n    }\n    return maxLevelIndex;\n  }\n}\nclass FPSController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.isVideoPlaybackQualityAvailable = false;\n    this.timer = void 0;\n    this.media = null;\n    this.lastTime = void 0;\n    this.lastDroppedFrames = 0;\n    this.lastDecodedFrames = 0;\n    this.streamController = void 0;\n    this.hls = hls;\n    this.registerListeners();\n  }\n  setStreamController(streamController) {\n    this.streamController = streamController;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n  }\n  destroy() {\n    if (this.timer) {\n      clearInterval(this.timer);\n    }\n    this.unregisterListeners();\n    this.isVideoPlaybackQualityAvailable = false;\n    this.media = null;\n  }\n  onMediaAttaching(event, data) {\n    const config = this.hls.config;\n    if (config.capLevelOnFPSDrop) {\n      const media = data.media instanceof self.HTMLVideoElement ? data.media : null;\n      this.media = media;\n      if (media && typeof media.getVideoPlaybackQuality === \"function\") {\n        this.isVideoPlaybackQualityAvailable = true;\n      }\n      self.clearInterval(this.timer);\n      this.timer = self.setInterval(this.checkFPSInterval.bind(this), config.fpsDroppedMonitoringPeriod);\n    }\n  }\n  checkFPS(video, decodedFrames, droppedFrames) {\n    const currentTime = performance.now();\n    if (decodedFrames) {\n      if (this.lastTime) {\n        const currentPeriod = currentTime - this.lastTime;\n        const currentDropped = droppedFrames - this.lastDroppedFrames;\n        const currentDecoded = decodedFrames - this.lastDecodedFrames;\n        const droppedFPS = 1e3 * currentDropped / currentPeriod;\n        const hls = this.hls;\n        hls.trigger(Events.FPS_DROP, {\n          currentDropped,\n          currentDecoded,\n          totalDroppedFrames: droppedFrames\n        });\n        if (droppedFPS > 0) {\n          if (currentDropped > hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n            let currentLevel = hls.currentLevel;\n            logger.warn(\"drop FPS ratio greater than max allowed value for currentLevel: \" + currentLevel);\n            if (currentLevel > 0 && (hls.autoLevelCapping === -1 || hls.autoLevelCapping >= currentLevel)) {\n              currentLevel = currentLevel - 1;\n              hls.trigger(Events.FPS_DROP_LEVEL_CAPPING, {\n                level: currentLevel,\n                droppedLevel: hls.currentLevel\n              });\n              hls.autoLevelCapping = currentLevel;\n              this.streamController.nextLevelSwitch();\n            }\n          }\n        }\n      }\n      this.lastTime = currentTime;\n      this.lastDroppedFrames = droppedFrames;\n      this.lastDecodedFrames = decodedFrames;\n    }\n  }\n  checkFPSInterval() {\n    const video = this.media;\n    if (video) {\n      if (this.isVideoPlaybackQualityAvailable) {\n        const videoPlaybackQuality = video.getVideoPlaybackQuality();\n        this.checkFPS(video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n      } else {\n        this.checkFPS(video, video.webkitDecodedFrameCount, video.webkitDroppedFrameCount);\n      }\n    }\n  }\n}\nconst LOGGER_PREFIX = \"[eme]\";\nclass EMEController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = null;\n    this.keyFormatPromise = null;\n    this.keySystemAccessPromises = {};\n    this._requestLicenseFailureCount = 0;\n    this.mediaKeySessions = [];\n    this.keyIdToKeySessionPromise = {};\n    this.setMediaKeysQueue = EMEController.CDMCleanupPromise ? [EMEController.CDMCleanupPromise] : [];\n    this.onMediaEncrypted = this._onMediaEncrypted.bind(this);\n    this.onWaitingForKey = this._onWaitingForKey.bind(this);\n    this.debug = logger.debug.bind(logger, LOGGER_PREFIX);\n    this.log = logger.log.bind(logger, LOGGER_PREFIX);\n    this.warn = logger.warn.bind(logger, LOGGER_PREFIX);\n    this.error = logger.error.bind(logger, LOGGER_PREFIX);\n    this.hls = hls;\n    this.config = hls.config;\n    this.registerListeners();\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetached();\n    const config = this.config;\n    config.requestMediaKeySystemAccessFunc = null;\n    config.licenseXhrSetup = config.licenseResponseCallback = void 0;\n    config.drmSystems = config.drmSystemOptions = {};\n    this.hls = this.onMediaEncrypted = this.onWaitingForKey = this.keyIdToKeySessionPromise = null;\n    this.config = null;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  getLicenseServerUrl(keySystem) {\n    const {\n      drmSystems,\n      widevineLicenseUrl\n    } = this.config;\n    const keySystemConfiguration = drmSystems[keySystem];\n    if (keySystemConfiguration) {\n      return keySystemConfiguration.licenseUrl;\n    }\n    if (keySystem === KeySystems.WIDEVINE && widevineLicenseUrl) {\n      return widevineLicenseUrl;\n    }\n    throw new Error(`no license server URL configured for key-system \"${keySystem}\"`);\n  }\n  getServerCertificateUrl(keySystem) {\n    const {\n      drmSystems\n    } = this.config;\n    const keySystemConfiguration = drmSystems[keySystem];\n    if (keySystemConfiguration) {\n      return keySystemConfiguration.serverCertificateUrl;\n    } else {\n      this.log(`No Server Certificate in config.drmSystems[\"${keySystem}\"]`);\n    }\n  }\n  attemptKeySystemAccess(keySystemsToAttempt) {\n    const levels = this.hls.levels;\n    const uniqueCodec = (value, i, a) => !!value && a.indexOf(value) === i;\n    const audioCodecs = levels.map((level) => level.audioCodec).filter(uniqueCodec);\n    const videoCodecs = levels.map((level) => level.videoCodec).filter(uniqueCodec);\n    if (audioCodecs.length + videoCodecs.length === 0) {\n      videoCodecs.push(\"avc1.42e01e\");\n    }\n    return new Promise((resolve, reject) => {\n      const attempt = (keySystems) => {\n        const keySystem = keySystems.shift();\n        this.getMediaKeysPromise(keySystem, audioCodecs, videoCodecs).then((mediaKeys) => resolve({\n          keySystem,\n          mediaKeys\n        })).catch((error) => {\n          if (keySystems.length) {\n            attempt(keySystems);\n          } else if (error instanceof EMEKeyError) {\n            reject(error);\n          } else {\n            reject(new EMEKeyError({\n              type: ErrorTypes.KEY_SYSTEM_ERROR,\n              details: ErrorDetails.KEY_SYSTEM_NO_ACCESS,\n              error,\n              fatal: true\n            }, error.message));\n          }\n        });\n      };\n      attempt(keySystemsToAttempt);\n    });\n  }\n  requestMediaKeySystemAccess(keySystem, supportedConfigurations) {\n    const {\n      requestMediaKeySystemAccessFunc\n    } = this.config;\n    if (!(typeof requestMediaKeySystemAccessFunc === \"function\")) {\n      let errMessage = `Configured requestMediaKeySystemAccess is not a function ${requestMediaKeySystemAccessFunc}`;\n      if (requestMediaKeySystemAccess === null && self.location.protocol === \"http:\") {\n        errMessage = `navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`;\n      }\n      return Promise.reject(new Error(errMessage));\n    }\n    return requestMediaKeySystemAccessFunc(keySystem, supportedConfigurations);\n  }\n  getMediaKeysPromise(keySystem, audioCodecs, videoCodecs) {\n    const mediaKeySystemConfigs = getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, this.config.drmSystemOptions);\n    const keySystemAccessPromises = this.keySystemAccessPromises[keySystem];\n    let keySystemAccess = keySystemAccessPromises == null ? void 0 : keySystemAccessPromises.keySystemAccess;\n    if (!keySystemAccess) {\n      this.log(`Requesting encrypted media \"${keySystem}\" key-system access with config: ${JSON.stringify(mediaKeySystemConfigs)}`);\n      keySystemAccess = this.requestMediaKeySystemAccess(keySystem, mediaKeySystemConfigs);\n      const _keySystemAccessPromises = this.keySystemAccessPromises[keySystem] = {\n        keySystemAccess\n      };\n      keySystemAccess.catch((error) => {\n        this.log(`Failed to obtain access to key-system \"${keySystem}\": ${error}`);\n      });\n      return keySystemAccess.then((mediaKeySystemAccess) => {\n        this.log(`Access for key-system \"${mediaKeySystemAccess.keySystem}\" obtained`);\n        const certificateRequest = this.fetchServerCertificate(keySystem);\n        this.log(`Create media-keys for \"${keySystem}\"`);\n        _keySystemAccessPromises.mediaKeys = mediaKeySystemAccess.createMediaKeys().then((mediaKeys) => {\n          this.log(`Media-keys created for \"${keySystem}\"`);\n          return certificateRequest.then((certificate) => {\n            if (certificate) {\n              return this.setMediaKeysServerCertificate(mediaKeys, keySystem, certificate);\n            }\n            return mediaKeys;\n          });\n        });\n        _keySystemAccessPromises.mediaKeys.catch((error) => {\n          this.error(`Failed to create media-keys for \"${keySystem}\"}: ${error}`);\n        });\n        return _keySystemAccessPromises.mediaKeys;\n      });\n    }\n    return keySystemAccess.then(() => keySystemAccessPromises.mediaKeys);\n  }\n  createMediaKeySessionContext({\n    decryptdata,\n    keySystem,\n    mediaKeys\n  }) {\n    this.log(`Creating key-system session \"${keySystem}\" keyId: ${Hex.hexDump(decryptdata.keyId || [])}`);\n    const mediaKeysSession = mediaKeys.createSession();\n    const mediaKeySessionContext = {\n      decryptdata,\n      keySystem,\n      mediaKeys,\n      mediaKeysSession,\n      keyStatus: \"status-pending\"\n    };\n    this.mediaKeySessions.push(mediaKeySessionContext);\n    return mediaKeySessionContext;\n  }\n  renewKeySession(mediaKeySessionContext) {\n    const decryptdata = mediaKeySessionContext.decryptdata;\n    if (decryptdata.pssh) {\n      const keySessionContext = this.createMediaKeySessionContext(mediaKeySessionContext);\n      const keyId = this.getKeyIdString(decryptdata);\n      const scheme = \"cenc\";\n      this.keyIdToKeySessionPromise[keyId] = this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh, \"expired\");\n    } else {\n      this.warn(`Could not renew expired session. Missing pssh initData.`);\n    }\n    this.removeSession(mediaKeySessionContext);\n  }\n  getKeyIdString(decryptdata) {\n    if (!decryptdata) {\n      throw new Error(\"Could not read keyId of undefined decryptdata\");\n    }\n    if (decryptdata.keyId === null) {\n      throw new Error(\"keyId is null\");\n    }\n    return Hex.hexDump(decryptdata.keyId);\n  }\n  updateKeySession(mediaKeySessionContext, data) {\n    var _mediaKeySessionConte;\n    const keySession = mediaKeySessionContext.mediaKeysSession;\n    this.log(`Updating key-session \"${keySession.sessionId}\" for keyID ${Hex.hexDump(((_mediaKeySessionConte = mediaKeySessionContext.decryptdata) == null ? void 0 : _mediaKeySessionConte.keyId) || [])}\n      } (data length: ${data ? data.byteLength : data})`);\n    return keySession.update(data);\n  }\n  selectKeySystemFormat(frag) {\n    const keyFormats = Object.keys(frag.levelkeys || {});\n    if (!this.keyFormatPromise) {\n      this.log(`Selecting key-system from fragment (sn: ${frag.sn} ${frag.type}: ${frag.level}) key formats ${keyFormats.join(\", \")}`);\n      this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n    }\n    return this.keyFormatPromise;\n  }\n  getKeyFormatPromise(keyFormats) {\n    return new Promise((resolve, reject) => {\n      const keySystemsInConfig = getKeySystemsForConfig(this.config);\n      const keySystemsToAttempt = keyFormats.map(keySystemFormatToKeySystemDomain).filter((value) => !!value && keySystemsInConfig.indexOf(value) !== -1);\n      return this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n        keySystem\n      }) => {\n        const keySystemFormat = keySystemDomainToKeySystemFormat(keySystem);\n        if (keySystemFormat) {\n          resolve(keySystemFormat);\n        } else {\n          reject(new Error(`Unable to find format for key-system \"${keySystem}\"`));\n        }\n      }).catch(reject);\n    });\n  }\n  loadKey(data) {\n    const decryptdata = data.keyInfo.decryptdata;\n    const keyId = this.getKeyIdString(decryptdata);\n    const keyDetails = `(keyId: ${keyId} format: \"${decryptdata.keyFormat}\" method: ${decryptdata.method} uri: ${decryptdata.uri})`;\n    this.log(`Starting session for key ${keyDetails}`);\n    let keySessionContextPromise = this.keyIdToKeySessionPromise[keyId];\n    if (!keySessionContextPromise) {\n      keySessionContextPromise = this.keyIdToKeySessionPromise[keyId] = this.getKeySystemForKeyPromise(decryptdata).then(({\n        keySystem,\n        mediaKeys\n      }) => {\n        this.throwIfDestroyed();\n        this.log(`Handle encrypted media sn: ${data.frag.sn} ${data.frag.type}: ${data.frag.level} using key ${keyDetails}`);\n        return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n          this.throwIfDestroyed();\n          const keySessionContext = this.createMediaKeySessionContext({\n            keySystem,\n            mediaKeys,\n            decryptdata\n          });\n          const scheme = \"cenc\";\n          return this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh, \"playlist-key\");\n        });\n      });\n      keySessionContextPromise.catch((error) => this.handleError(error));\n    }\n    return keySessionContextPromise;\n  }\n  throwIfDestroyed(message = \"Invalid state\") {\n    if (!this.hls) {\n      throw new Error(\"invalid state\");\n    }\n  }\n  handleError(error) {\n    if (!this.hls) {\n      return;\n    }\n    this.error(error.message);\n    if (error instanceof EMEKeyError) {\n      this.hls.trigger(Events.ERROR, error.data);\n    } else {\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n        error,\n        fatal: true\n      });\n    }\n  }\n  getKeySystemForKeyPromise(decryptdata) {\n    const keyId = this.getKeyIdString(decryptdata);\n    const mediaKeySessionContext = this.keyIdToKeySessionPromise[keyId];\n    if (!mediaKeySessionContext) {\n      const keySystem = keySystemFormatToKeySystemDomain(decryptdata.keyFormat);\n      const keySystemsToAttempt = keySystem ? [keySystem] : getKeySystemsForConfig(this.config);\n      return this.attemptKeySystemAccess(keySystemsToAttempt);\n    }\n    return mediaKeySessionContext;\n  }\n  getKeySystemSelectionPromise(keySystemsToAttempt) {\n    if (!keySystemsToAttempt.length) {\n      keySystemsToAttempt = getKeySystemsForConfig(this.config);\n    }\n    if (keySystemsToAttempt.length === 0) {\n      throw new EMEKeyError({\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE,\n        fatal: true\n      }, `Missing key-system license configuration options ${JSON.stringify({\n        drmSystems: this.config.drmSystems\n      })}`);\n    }\n    return this.attemptKeySystemAccess(keySystemsToAttempt);\n  }\n  _onMediaEncrypted(event) {\n    const {\n      initDataType,\n      initData\n    } = event;\n    this.debug(`\"${event.type}\" event: init data type: \"${initDataType}\"`);\n    if (initData === null) {\n      return;\n    }\n    let keyId;\n    let keySystemDomain;\n    if (initDataType === \"sinf\" && this.config.drmSystems[KeySystems.FAIRPLAY]) {\n      const json = bin2str(new Uint8Array(initData));\n      try {\n        const sinf = base64Decode(JSON.parse(json).sinf);\n        const tenc = parseSinf(new Uint8Array(sinf));\n        if (!tenc) {\n          return;\n        }\n        keyId = tenc.subarray(8, 24);\n        keySystemDomain = KeySystems.FAIRPLAY;\n      } catch (error) {\n        this.warn('Failed to parse sinf \"encrypted\" event message initData');\n        return;\n      }\n    } else {\n      const psshInfo = parsePssh(initData);\n      if (psshInfo === null) {\n        return;\n      }\n      if (psshInfo.version === 0 && psshInfo.systemId === KeySystemIds.WIDEVINE && psshInfo.data) {\n        keyId = psshInfo.data.subarray(8, 24);\n      }\n      keySystemDomain = keySystemIdToKeySystemDomain(psshInfo.systemId);\n    }\n    if (!keySystemDomain || !keyId) {\n      return;\n    }\n    const keyIdHex = Hex.hexDump(keyId);\n    const {\n      keyIdToKeySessionPromise,\n      mediaKeySessions\n    } = this;\n    let keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];\n    for (let i = 0; i < mediaKeySessions.length; i++) {\n      const keyContext = mediaKeySessions[i];\n      const decryptdata = keyContext.decryptdata;\n      if (decryptdata.pssh || !decryptdata.keyId) {\n        continue;\n      }\n      const oldKeyIdHex = Hex.hexDump(decryptdata.keyId);\n      if (keyIdHex === oldKeyIdHex || decryptdata.uri.replace(/-/g, \"\").indexOf(keyIdHex) !== -1) {\n        keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];\n        delete keyIdToKeySessionPromise[oldKeyIdHex];\n        decryptdata.pssh = new Uint8Array(initData);\n        decryptdata.keyId = keyId;\n        keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(() => {\n          return this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, \"encrypted-event-key-match\");\n        });\n        break;\n      }\n    }\n    if (!keySessionContextPromise) {\n      keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = this.getKeySystemSelectionPromise([keySystemDomain]).then(({\n        keySystem,\n        mediaKeys\n      }) => {\n        var _keySystemToKeySystem;\n        this.throwIfDestroyed();\n        const decryptdata = new LevelKey(\"ISO-23001-7\", keyIdHex, (_keySystemToKeySystem = keySystemDomainToKeySystemFormat(keySystem)) != null ? _keySystemToKeySystem : \"\");\n        decryptdata.pssh = new Uint8Array(initData);\n        decryptdata.keyId = keyId;\n        return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n          this.throwIfDestroyed();\n          const keySessionContext = this.createMediaKeySessionContext({\n            decryptdata,\n            keySystem,\n            mediaKeys\n          });\n          return this.generateRequestWithPreferredKeySession(keySessionContext, initDataType, initData, \"encrypted-event-no-match\");\n        });\n      });\n    }\n    keySessionContextPromise.catch((error) => this.handleError(error));\n  }\n  _onWaitingForKey(event) {\n    this.log(`\"${event.type}\" event`);\n  }\n  attemptSetMediaKeys(keySystem, mediaKeys) {\n    const queue = this.setMediaKeysQueue.slice();\n    this.log(`Setting media-keys for \"${keySystem}\"`);\n    const setMediaKeysPromise = Promise.all(queue).then(() => {\n      if (!this.media) {\n        throw new Error(\"Attempted to set mediaKeys without media element attached\");\n      }\n      return this.media.setMediaKeys(mediaKeys);\n    });\n    this.setMediaKeysQueue.push(setMediaKeysPromise);\n    return setMediaKeysPromise.then(() => {\n      this.log(`Media-keys set for \"${keySystem}\"`);\n      queue.push(setMediaKeysPromise);\n      this.setMediaKeysQueue = this.setMediaKeysQueue.filter((p) => queue.indexOf(p) === -1);\n    });\n  }\n  generateRequestWithPreferredKeySession(context, initDataType, initData, reason) {\n    var _this$config$drmSyste, _this$config$drmSyste2;\n    const generateRequestFilter = (_this$config$drmSyste = this.config.drmSystems) == null ? void 0 : (_this$config$drmSyste2 = _this$config$drmSyste[context.keySystem]) == null ? void 0 : _this$config$drmSyste2.generateRequest;\n    if (generateRequestFilter) {\n      try {\n        const mappedInitData = generateRequestFilter.call(this.hls, initDataType, initData, context);\n        if (!mappedInitData) {\n          throw new Error(\"Invalid response from configured generateRequest filter\");\n        }\n        initDataType = mappedInitData.initDataType;\n        initData = context.decryptdata.pssh = mappedInitData.initData ? new Uint8Array(mappedInitData.initData) : null;\n      } catch (error) {\n        var _this$hls;\n        this.warn(error.message);\n        if ((_this$hls = this.hls) != null && _this$hls.config.debug) {\n          throw error;\n        }\n      }\n    }\n    if (initData === null) {\n      this.log(`Skipping key-session request for \"${reason}\" (no initData)`);\n      return Promise.resolve(context);\n    }\n    const keyId = this.getKeyIdString(context.decryptdata);\n    this.log(`Generating key-session request for \"${reason}\": ${keyId} (init data type: ${initDataType} length: ${initData ? initData.byteLength : null})`);\n    const licenseStatus = new EventEmitter();\n    const onmessage = context._onmessage = (event) => {\n      const keySession = context.mediaKeysSession;\n      if (!keySession) {\n        licenseStatus.emit(\"error\", new Error(\"invalid state\"));\n        return;\n      }\n      const {\n        messageType,\n        message\n      } = event;\n      this.log(`\"${messageType}\" message event for session \"${keySession.sessionId}\" message size: ${message.byteLength}`);\n      if (messageType === \"license-request\" || messageType === \"license-renewal\") {\n        this.renewLicense(context, message).catch((error) => {\n          this.handleError(error);\n          licenseStatus.emit(\"error\", error);\n        });\n      } else if (messageType === \"license-release\") {\n        if (context.keySystem === KeySystems.FAIRPLAY) {\n          this.updateKeySession(context, strToUtf8array(\"acknowledged\"));\n          this.removeSession(context);\n        }\n      } else {\n        this.warn(`unhandled media key message type \"${messageType}\"`);\n      }\n    };\n    const onkeystatuseschange = context._onkeystatuseschange = (event) => {\n      const keySession = context.mediaKeysSession;\n      if (!keySession) {\n        licenseStatus.emit(\"error\", new Error(\"invalid state\"));\n        return;\n      }\n      this.onKeyStatusChange(context);\n      const keyStatus = context.keyStatus;\n      licenseStatus.emit(\"keyStatus\", keyStatus);\n      if (keyStatus === \"expired\") {\n        this.warn(`${context.keySystem} expired for key ${keyId}`);\n        this.renewKeySession(context);\n      }\n    };\n    context.mediaKeysSession.addEventListener(\"message\", onmessage);\n    context.mediaKeysSession.addEventListener(\"keystatuseschange\", onkeystatuseschange);\n    const keyUsablePromise = new Promise((resolve, reject) => {\n      licenseStatus.on(\"error\", reject);\n      licenseStatus.on(\"keyStatus\", (keyStatus) => {\n        if (keyStatus.startsWith(\"usable\")) {\n          resolve();\n        } else if (keyStatus === \"output-restricted\") {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED,\n            fatal: false\n          }, \"HDCP level output restricted\"));\n        } else if (keyStatus === \"internal-error\") {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR,\n            fatal: true\n          }, `key status changed to \"${keyStatus}\"`));\n        } else if (keyStatus === \"expired\") {\n          reject(new Error(\"key expired while generating request\"));\n        } else {\n          this.warn(`unhandled key status change \"${keyStatus}\"`);\n        }\n      });\n    });\n    return context.mediaKeysSession.generateRequest(initDataType, initData).then(() => {\n      var _context$mediaKeysSes;\n      this.log(`Request generated for key-session \"${(_context$mediaKeysSes = context.mediaKeysSession) == null ? void 0 : _context$mediaKeysSes.sessionId}\" keyId: ${keyId}`);\n    }).catch((error) => {\n      throw new EMEKeyError({\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_SESSION,\n        error,\n        fatal: false\n      }, `Error generating key-session request: ${error}`);\n    }).then(() => keyUsablePromise).catch((error) => {\n      licenseStatus.removeAllListeners();\n      this.removeSession(context);\n      throw error;\n    }).then(() => {\n      licenseStatus.removeAllListeners();\n      return context;\n    });\n  }\n  onKeyStatusChange(mediaKeySessionContext) {\n    mediaKeySessionContext.mediaKeysSession.keyStatuses.forEach((status2, keyId) => {\n      this.log(`key status change \"${status2}\" for keyStatuses keyId: ${Hex.hexDump(\"buffer\" in keyId ? new Uint8Array(keyId.buffer, keyId.byteOffset, keyId.byteLength) : new Uint8Array(keyId))} session keyId: ${Hex.hexDump(new Uint8Array(mediaKeySessionContext.decryptdata.keyId || []))} uri: ${mediaKeySessionContext.decryptdata.uri}`);\n      mediaKeySessionContext.keyStatus = status2;\n    });\n  }\n  fetchServerCertificate(keySystem) {\n    const config = this.config;\n    const Loader = config.loader;\n    const certLoader = new Loader(config);\n    const url = this.getServerCertificateUrl(keySystem);\n    if (!url) {\n      return Promise.resolve();\n    }\n    this.log(`Fetching server certificate for \"${keySystem}\"`);\n    return new Promise((resolve, reject) => {\n      const loaderContext = {\n        responseType: \"arraybuffer\",\n        url\n      };\n      const loadPolicy = config.certLoadPolicy.default;\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0\n      };\n      const loaderCallbacks = {\n        onSuccess: (response, stats, context, networkDetails) => {\n          resolve(response.data);\n        },\n        onError: (response, contex, networkDetails, stats) => {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n            fatal: true,\n            networkDetails,\n            response: _objectSpread2({\n              url: loaderContext.url,\n              data: void 0\n            }, response)\n          }, `\"${keySystem}\" certificate request failed (${url}). Status: ${response.code} (${response.text})`));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n            fatal: true,\n            networkDetails,\n            response: {\n              url: loaderContext.url,\n              data: void 0\n            }\n          }, `\"${keySystem}\" certificate request timed out (${url})`));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          reject(new Error(\"aborted\"));\n        }\n      };\n      certLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n    });\n  }\n  setMediaKeysServerCertificate(mediaKeys, keySystem, cert) {\n    return new Promise((resolve, reject) => {\n      mediaKeys.setServerCertificate(cert).then((success) => {\n        this.log(`setServerCertificate ${success ? \"success\" : \"not supported by CDM\"} (${cert == null ? void 0 : cert.byteLength}) on \"${keySystem}\"`);\n        resolve(mediaKeys);\n      }).catch((error) => {\n        reject(new EMEKeyError({\n          type: ErrorTypes.KEY_SYSTEM_ERROR,\n          details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,\n          error,\n          fatal: true\n        }, error.message));\n      });\n    });\n  }\n  renewLicense(context, keyMessage) {\n    return this.requestLicense(context, new Uint8Array(keyMessage)).then((data) => {\n      return this.updateKeySession(context, new Uint8Array(data)).catch((error) => {\n        throw new EMEKeyError({\n          type: ErrorTypes.KEY_SYSTEM_ERROR,\n          details: ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED,\n          error,\n          fatal: true\n        }, error.message);\n      });\n    });\n  }\n  unpackPlayReadyKeyMessage(xhr, licenseChallenge) {\n    const xmlString = String.fromCharCode.apply(null, new Uint16Array(licenseChallenge.buffer));\n    if (!xmlString.includes(\"PlayReadyKeyMessage\")) {\n      xhr.setRequestHeader(\"Content-Type\", \"text/xml; charset=utf-8\");\n      return licenseChallenge;\n    }\n    const keyMessageXml = new DOMParser().parseFromString(xmlString, \"application/xml\");\n    const headers = keyMessageXml.querySelectorAll(\"HttpHeader\");\n    if (headers.length > 0) {\n      let header;\n      for (let i = 0, len = headers.length; i < len; i++) {\n        var _header$querySelector, _header$querySelector2;\n        header = headers[i];\n        const name = (_header$querySelector = header.querySelector(\"name\")) == null ? void 0 : _header$querySelector.textContent;\n        const value = (_header$querySelector2 = header.querySelector(\"value\")) == null ? void 0 : _header$querySelector2.textContent;\n        if (name && value) {\n          xhr.setRequestHeader(name, value);\n        }\n      }\n    }\n    const challengeElement = keyMessageXml.querySelector(\"Challenge\");\n    const challengeText = challengeElement == null ? void 0 : challengeElement.textContent;\n    if (!challengeText) {\n      throw new Error(`Cannot find <Challenge> in key message`);\n    }\n    return strToUtf8array(atob(challengeText));\n  }\n  setupLicenseXHR(xhr, url, keysListItem, licenseChallenge) {\n    const licenseXhrSetup = this.config.licenseXhrSetup;\n    if (!licenseXhrSetup) {\n      xhr.open(\"POST\", url, true);\n      return Promise.resolve({\n        xhr,\n        licenseChallenge\n      });\n    }\n    return Promise.resolve().then(() => {\n      if (!keysListItem.decryptdata) {\n        throw new Error(\"Key removed\");\n      }\n      return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n    }).catch((error) => {\n      if (!keysListItem.decryptdata) {\n        throw error;\n      }\n      xhr.open(\"POST\", url, true);\n      return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n    }).then((licenseXhrSetupResult) => {\n      if (!xhr.readyState) {\n        xhr.open(\"POST\", url, true);\n      }\n      const finalLicenseChallenge = licenseXhrSetupResult ? licenseXhrSetupResult : licenseChallenge;\n      return {\n        xhr,\n        licenseChallenge: finalLicenseChallenge\n      };\n    });\n  }\n  requestLicense(keySessionContext, licenseChallenge) {\n    const keyLoadPolicy = this.config.keyLoadPolicy.default;\n    return new Promise((resolve, reject) => {\n      const url = this.getLicenseServerUrl(keySessionContext.keySystem);\n      this.log(`Sending license request to URL: ${url}`);\n      const xhr = new XMLHttpRequest();\n      xhr.responseType = \"arraybuffer\";\n      xhr.onreadystatechange = () => {\n        if (!this.hls || !keySessionContext.mediaKeysSession) {\n          return reject(new Error(\"invalid state\"));\n        }\n        if (xhr.readyState === 4) {\n          if (xhr.status === 200) {\n            this._requestLicenseFailureCount = 0;\n            let data = xhr.response;\n            this.log(`License received ${data instanceof ArrayBuffer ? data.byteLength : data}`);\n            const licenseResponseCallback = this.config.licenseResponseCallback;\n            if (licenseResponseCallback) {\n              try {\n                data = licenseResponseCallback.call(this.hls, xhr, url, keySessionContext);\n              } catch (error) {\n                this.error(error);\n              }\n            }\n            resolve(data);\n          } else {\n            const retryConfig = keyLoadPolicy.errorRetry;\n            const maxNumRetry = retryConfig ? retryConfig.maxNumRetry : 0;\n            this._requestLicenseFailureCount++;\n            if (this._requestLicenseFailureCount > maxNumRetry || xhr.status >= 400 && xhr.status < 500) {\n              reject(new EMEKeyError({\n                type: ErrorTypes.KEY_SYSTEM_ERROR,\n                details: ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,\n                fatal: true,\n                networkDetails: xhr,\n                response: {\n                  url,\n                  data: void 0,\n                  code: xhr.status,\n                  text: xhr.statusText\n                }\n              }, `License Request XHR failed (${url}). Status: ${xhr.status} (${xhr.statusText})`));\n            } else {\n              const attemptsLeft = maxNumRetry - this._requestLicenseFailureCount + 1;\n              this.warn(`Retrying license request, ${attemptsLeft} attempts left`);\n              this.requestLicense(keySessionContext, licenseChallenge).then(resolve, reject);\n            }\n          }\n        }\n      };\n      if (keySessionContext.licenseXhr && keySessionContext.licenseXhr.readyState !== XMLHttpRequest.DONE) {\n        keySessionContext.licenseXhr.abort();\n      }\n      keySessionContext.licenseXhr = xhr;\n      this.setupLicenseXHR(xhr, url, keySessionContext, licenseChallenge).then(({\n        xhr: xhr2,\n        licenseChallenge: licenseChallenge2\n      }) => {\n        if (keySessionContext.keySystem == KeySystems.PLAYREADY) {\n          licenseChallenge2 = this.unpackPlayReadyKeyMessage(xhr2, licenseChallenge2);\n        }\n        xhr2.send(licenseChallenge2);\n      });\n    });\n  }\n  onMediaAttached(event, data) {\n    if (!this.config.emeEnabled) {\n      return;\n    }\n    const media = data.media;\n    this.media = media;\n    media.addEventListener(\"encrypted\", this.onMediaEncrypted);\n    media.addEventListener(\"waitingforkey\", this.onWaitingForKey);\n  }\n  onMediaDetached() {\n    const media = this.media;\n    const mediaKeysList = this.mediaKeySessions;\n    if (media) {\n      media.removeEventListener(\"encrypted\", this.onMediaEncrypted);\n      media.removeEventListener(\"waitingforkey\", this.onWaitingForKey);\n      this.media = null;\n    }\n    this._requestLicenseFailureCount = 0;\n    this.setMediaKeysQueue = [];\n    this.mediaKeySessions = [];\n    this.keyIdToKeySessionPromise = {};\n    LevelKey.clearKeyUriToKeyIdMap();\n    const keySessionCount = mediaKeysList.length;\n    EMEController.CDMCleanupPromise = Promise.all(mediaKeysList.map((mediaKeySessionContext) => this.removeSession(mediaKeySessionContext)).concat(media == null ? void 0 : media.setMediaKeys(null).catch((error) => {\n      this.log(`Could not clear media keys: ${error}`);\n    }))).then(() => {\n      if (keySessionCount) {\n        this.log(\"finished closing key sessions and clearing media keys\");\n        mediaKeysList.length = 0;\n      }\n    }).catch((error) => {\n      this.log(`Could not close sessions and clear media keys: ${error}`);\n    });\n  }\n  onManifestLoading() {\n    this.keyFormatPromise = null;\n  }\n  onManifestLoaded(event, {\n    sessionKeys\n  }) {\n    if (!sessionKeys || !this.config.emeEnabled) {\n      return;\n    }\n    if (!this.keyFormatPromise) {\n      const keyFormats = sessionKeys.reduce((formats, sessionKey) => {\n        if (formats.indexOf(sessionKey.keyFormat) === -1) {\n          formats.push(sessionKey.keyFormat);\n        }\n        return formats;\n      }, []);\n      this.log(`Selecting key-system from session-keys ${keyFormats.join(\", \")}`);\n      this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n    }\n  }\n  removeSession(mediaKeySessionContext) {\n    const {\n      mediaKeysSession,\n      licenseXhr\n    } = mediaKeySessionContext;\n    if (mediaKeysSession) {\n      this.log(`Remove licenses and keys and close session ${mediaKeysSession.sessionId}`);\n      if (mediaKeySessionContext._onmessage) {\n        mediaKeysSession.removeEventListener(\"message\", mediaKeySessionContext._onmessage);\n        mediaKeySessionContext._onmessage = void 0;\n      }\n      if (mediaKeySessionContext._onkeystatuseschange) {\n        mediaKeysSession.removeEventListener(\"keystatuseschange\", mediaKeySessionContext._onkeystatuseschange);\n        mediaKeySessionContext._onkeystatuseschange = void 0;\n      }\n      if (licenseXhr && licenseXhr.readyState !== XMLHttpRequest.DONE) {\n        licenseXhr.abort();\n      }\n      mediaKeySessionContext.mediaKeysSession = mediaKeySessionContext.decryptdata = mediaKeySessionContext.licenseXhr = void 0;\n      const index = this.mediaKeySessions.indexOf(mediaKeySessionContext);\n      if (index > -1) {\n        this.mediaKeySessions.splice(index, 1);\n      }\n      return mediaKeysSession.remove().catch((error) => {\n        this.log(`Could not remove session: ${error}`);\n      }).then(() => {\n        return mediaKeysSession.close();\n      }).catch((error) => {\n        this.log(`Could not close session: ${error}`);\n      });\n    }\n  }\n}\nEMEController.CDMCleanupPromise = void 0;\nclass EMEKeyError extends Error {\n  constructor(data, message) {\n    super(message);\n    this.data = void 0;\n    data.error || (data.error = new Error(message));\n    this.data = data;\n    data.err = data.error;\n  }\n}\nvar CmObjectType;\n(function(CmObjectType2) {\n  CmObjectType2[\"MANIFEST\"] = \"m\";\n  CmObjectType2[\"AUDIO\"] = \"a\";\n  CmObjectType2[\"VIDEO\"] = \"v\";\n  CmObjectType2[\"MUXED\"] = \"av\";\n  CmObjectType2[\"INIT\"] = \"i\";\n  CmObjectType2[\"CAPTION\"] = \"c\";\n  CmObjectType2[\"TIMED_TEXT\"] = \"tt\";\n  CmObjectType2[\"KEY\"] = \"k\";\n  CmObjectType2[\"OTHER\"] = \"o\";\n})(CmObjectType || (CmObjectType = {}));\nvar CmStreamingFormat;\n(function(CmStreamingFormat2) {\n  CmStreamingFormat2[\"DASH\"] = \"d\";\n  CmStreamingFormat2[\"HLS\"] = \"h\";\n  CmStreamingFormat2[\"SMOOTH\"] = \"s\";\n  CmStreamingFormat2[\"OTHER\"] = \"o\";\n})(CmStreamingFormat || (CmStreamingFormat = {}));\nvar CmcdHeaderField;\n(function(CmcdHeaderField2) {\n  CmcdHeaderField2[\"OBJECT\"] = \"CMCD-Object\";\n  CmcdHeaderField2[\"REQUEST\"] = \"CMCD-Request\";\n  CmcdHeaderField2[\"SESSION\"] = \"CMCD-Session\";\n  CmcdHeaderField2[\"STATUS\"] = \"CMCD-Status\";\n})(CmcdHeaderField || (CmcdHeaderField = {}));\nconst CmcdHeaderMap = {\n  [CmcdHeaderField.OBJECT]: [\"br\", \"d\", \"ot\", \"tb\"],\n  [CmcdHeaderField.REQUEST]: [\"bl\", \"dl\", \"mtp\", \"nor\", \"nrr\", \"su\"],\n  [CmcdHeaderField.SESSION]: [\"cid\", \"pr\", \"sf\", \"sid\", \"st\", \"v\"],\n  [CmcdHeaderField.STATUS]: [\"bs\", \"rtp\"]\n};\nclass SfItem {\n  constructor(value, params) {\n    this.value = void 0;\n    this.params = void 0;\n    if (Array.isArray(value)) {\n      value = value.map((v) => v instanceof SfItem ? v : new SfItem(v));\n    }\n    this.value = value;\n    this.params = params;\n  }\n}\nclass SfToken {\n  constructor(description) {\n    this.description = void 0;\n    this.description = description;\n  }\n}\nconst DICT = \"Dict\";\nfunction format(value) {\n  if (Array.isArray(value)) {\n    return JSON.stringify(value);\n  }\n  if (value instanceof Map) {\n    return \"Map{}\";\n  }\n  if (value instanceof Set) {\n    return \"Set{}\";\n  }\n  if (typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return String(value);\n}\nfunction throwError(action, src, type, cause) {\n  return new Error(`failed to ${action} \"${format(src)}\" as ${type}`, {\n    cause\n  });\n}\nconst BARE_ITEM = \"Bare Item\";\nconst BOOLEAN = \"Boolean\";\nconst BYTES = \"Byte Sequence\";\nconst DECIMAL = \"Decimal\";\nconst INTEGER = \"Integer\";\nfunction isInvalidInt(value) {\n  return value < -999999999999999 || 999999999999999 < value;\n}\nconst STRING_REGEX = /[\\x00-\\x1f\\x7f]+/;\nconst TOKEN = \"Token\";\nconst KEY = \"Key\";\nfunction serializeError(src, type, cause) {\n  return throwError(\"serialize\", src, type, cause);\n}\nfunction serializeBoolean(value) {\n  if (typeof value !== \"boolean\") {\n    throw serializeError(value, BOOLEAN);\n  }\n  return value ? \"?1\" : \"?0\";\n}\nfunction base64encode(binary) {\n  return btoa(String.fromCharCode(...binary));\n}\nfunction serializeByteSequence(value) {\n  if (ArrayBuffer.isView(value) === false) {\n    throw serializeError(value, BYTES);\n  }\n  return `:${base64encode(value)}:`;\n}\nfunction serializeInteger(value) {\n  if (isInvalidInt(value)) {\n    throw serializeError(value, INTEGER);\n  }\n  return value.toString();\n}\nfunction serializeDate(value) {\n  return `@${serializeInteger(value.getTime() / 1e3)}`;\n}\nfunction roundToEven(value, precision) {\n  if (value < 0) {\n    return -roundToEven(-value, precision);\n  }\n  const decimalShift = Math.pow(10, precision);\n  const isEquidistant = Math.abs(value * decimalShift % 1 - 0.5) < Number.EPSILON;\n  if (isEquidistant) {\n    const flooredValue = Math.floor(value * decimalShift);\n    return (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift;\n  } else {\n    return Math.round(value * decimalShift) / decimalShift;\n  }\n}\nfunction serializeDecimal(value) {\n  const roundedValue = roundToEven(value, 3);\n  if (Math.floor(Math.abs(roundedValue)).toString().length > 12) {\n    throw serializeError(value, DECIMAL);\n  }\n  const stringValue = roundedValue.toString();\n  return stringValue.includes(\".\") ? stringValue : `${stringValue}.0`;\n}\nconst STRING = \"String\";\nfunction serializeString(value) {\n  if (STRING_REGEX.test(value)) {\n    throw serializeError(value, STRING);\n  }\n  return `\"${value.replace(/\\\\/g, `\\\\\\\\`).replace(/\"/g, `\\\\\"`)}\"`;\n}\nfunction symbolToStr(symbol) {\n  return symbol.description || symbol.toString().slice(7, -1);\n}\nfunction serializeToken(token) {\n  const value = symbolToStr(token);\n  if (/^([a-zA-Z*])([!#$%&'*+\\-.^_`|~\\w:/]*)$/.test(value) === false) {\n    throw serializeError(value, TOKEN);\n  }\n  return value;\n}\nfunction serializeBareItem(value) {\n  switch (typeof value) {\n    case \"number\":\n      if (!isFiniteNumber(value)) {\n        throw serializeError(value, BARE_ITEM);\n      }\n      if (Number.isInteger(value)) {\n        return serializeInteger(value);\n      }\n      return serializeDecimal(value);\n    case \"string\":\n      return serializeString(value);\n    case \"symbol\":\n      return serializeToken(value);\n    case \"boolean\":\n      return serializeBoolean(value);\n    case \"object\":\n      if (value instanceof Date) {\n        return serializeDate(value);\n      }\n      if (value instanceof Uint8Array) {\n        return serializeByteSequence(value);\n      }\n      if (value instanceof SfToken) {\n        return serializeToken(value);\n      }\n    default:\n      throw serializeError(value, BARE_ITEM);\n  }\n}\nfunction serializeKey(value) {\n  if (/^[a-z*][a-z0-9\\-_.*]*$/.test(value) === false) {\n    throw serializeError(value, KEY);\n  }\n  return value;\n}\nfunction serializeParams(params) {\n  if (params == null) {\n    return \"\";\n  }\n  return Object.entries(params).map(([key, value]) => {\n    if (value === true) {\n      return `;${serializeKey(key)}`;\n    }\n    return `;${serializeKey(key)}=${serializeBareItem(value)}`;\n  }).join(\"\");\n}\nfunction serializeItem(value) {\n  if (value instanceof SfItem) {\n    return `${serializeBareItem(value.value)}${serializeParams(value.params)}`;\n  } else {\n    return serializeBareItem(value);\n  }\n}\nfunction serializeInnerList(value) {\n  return `(${value.value.map(serializeItem).join(\" \")})${serializeParams(value.params)}`;\n}\nfunction serializeDict(dict, options = {\n  whitespace: true\n}) {\n  if (typeof dict !== \"object\") {\n    throw serializeError(dict, DICT);\n  }\n  const entries = dict instanceof Map ? dict.entries() : Object.entries(dict);\n  const optionalWhiteSpace = options != null && options.whitespace ? \" \" : \"\";\n  return Array.from(entries).map(([key, item]) => {\n    if (item instanceof SfItem === false) {\n      item = new SfItem(item);\n    }\n    let output = serializeKey(key);\n    if (item.value === true) {\n      output += serializeParams(item.params);\n    } else {\n      output += \"=\";\n      if (Array.isArray(item.value)) {\n        output += serializeInnerList(item);\n      } else {\n        output += serializeItem(item);\n      }\n    }\n    return output;\n  }).join(`,${optionalWhiteSpace}`);\n}\nfunction encodeSfDict(value, options) {\n  return serializeDict(value, options);\n}\nconst isTokenField = (key) => key === \"ot\" || key === \"sf\" || key === \"st\";\nconst isValid = (value) => {\n  if (typeof value === \"number\") {\n    return isFiniteNumber(value);\n  }\n  return value != null && value !== \"\" && value !== false;\n};\nfunction urlToRelativePath(url, base) {\n  const to = new URL(url);\n  const from = new URL(base);\n  if (to.origin !== from.origin) {\n    return url;\n  }\n  const toPath = to.pathname.split(\"/\").slice(1);\n  const fromPath = from.pathname.split(\"/\").slice(1, -1);\n  while (toPath[0] === fromPath[0]) {\n    toPath.shift();\n    fromPath.shift();\n  }\n  while (fromPath.length) {\n    fromPath.shift();\n    toPath.unshift(\"..\");\n  }\n  return toPath.join(\"/\");\n}\nfunction uuid() {\n  try {\n    return crypto.randomUUID();\n  } catch (error) {\n    try {\n      const url = URL.createObjectURL(new Blob());\n      const uuid2 = url.toString();\n      URL.revokeObjectURL(url);\n      return uuid2.slice(uuid2.lastIndexOf(\"/\") + 1);\n    } catch (error2) {\n      let dt = (/* @__PURE__ */ new Date()).getTime();\n      const uuid2 = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n        const r = (dt + Math.random() * 16) % 16 | 0;\n        dt = Math.floor(dt / 16);\n        return (c == \"x\" ? r : r & 3 | 8).toString(16);\n      });\n      return uuid2;\n    }\n  }\n}\nconst toRounded = (value) => Math.round(value);\nconst toUrlSafe = (value, options) => {\n  if (options != null && options.baseUrl) {\n    value = urlToRelativePath(value, options.baseUrl);\n  }\n  return encodeURIComponent(value);\n};\nconst toHundred = (value) => toRounded(value / 100) * 100;\nconst CmcdFormatters = {\n  /**\n   * Bitrate (kbps) rounded integer\n   */\n  br: toRounded,\n  /**\n   * Duration (milliseconds) rounded integer\n   */\n  d: toRounded,\n  /**\n   * Buffer Length (milliseconds) rounded nearest 100ms\n   */\n  bl: toHundred,\n  /**\n   * Deadline (milliseconds) rounded nearest 100ms\n   */\n  dl: toHundred,\n  /**\n   * Measured Throughput (kbps) rounded nearest 100kbps\n   */\n  mtp: toHundred,\n  /**\n   * Next Object Request URL encoded\n   */\n  nor: toUrlSafe,\n  /**\n   * Requested maximum throughput (kbps) rounded nearest 100kbps\n   */\n  rtp: toHundred,\n  /**\n   * Top Bitrate (kbps) rounded integer\n   */\n  tb: toRounded\n};\nfunction processCmcd(obj, options) {\n  const results = {};\n  if (obj == null || typeof obj !== \"object\") {\n    return results;\n  }\n  const keys = Object.keys(obj).sort();\n  const formatters = _extends({}, CmcdFormatters, options == null ? void 0 : options.formatters);\n  const filter = options == null ? void 0 : options.filter;\n  keys.forEach((key) => {\n    if (filter != null && filter(key)) {\n      return;\n    }\n    let value = obj[key];\n    const formatter = formatters[key];\n    if (formatter) {\n      value = formatter(value, options);\n    }\n    if (key === \"v\" && value === 1) {\n      return;\n    }\n    if (key == \"pr\" && value === 1) {\n      return;\n    }\n    if (!isValid(value)) {\n      return;\n    }\n    if (isTokenField(key) && typeof value === \"string\") {\n      value = new SfToken(value);\n    }\n    results[key] = value;\n  });\n  return results;\n}\nfunction encodeCmcd(cmcd, options = {}) {\n  if (!cmcd) {\n    return \"\";\n  }\n  return encodeSfDict(processCmcd(cmcd, options), _extends({\n    whitespace: false\n  }, options));\n}\nfunction toCmcdHeaders(cmcd, options = {}) {\n  if (!cmcd) {\n    return {};\n  }\n  const entries = Object.entries(cmcd);\n  const headerMap = Object.entries(CmcdHeaderMap).concat(Object.entries((options == null ? void 0 : options.customHeaderMap) || {}));\n  const shards = entries.reduce((acc, entry) => {\n    var _headerMap$find, _acc$field;\n    const [key, value] = entry;\n    const field = ((_headerMap$find = headerMap.find((entry2) => entry2[1].includes(key))) == null ? void 0 : _headerMap$find[0]) || CmcdHeaderField.REQUEST;\n    (_acc$field = acc[field]) != null ? _acc$field : acc[field] = {};\n    acc[field][key] = value;\n    return acc;\n  }, {});\n  return Object.entries(shards).reduce((acc, [field, value]) => {\n    acc[field] = encodeCmcd(value, options);\n    return acc;\n  }, {});\n}\nfunction appendCmcdHeaders(headers, cmcd, options) {\n  return _extends(headers, toCmcdHeaders(cmcd, options));\n}\nconst CMCD_PARAM = \"CMCD\";\nfunction toCmcdQuery(cmcd, options = {}) {\n  if (!cmcd) {\n    return \"\";\n  }\n  const params = encodeCmcd(cmcd, options);\n  return `${CMCD_PARAM}=${encodeURIComponent(params)}`;\n}\nconst REGEX = /CMCD=[^&#]+/;\nfunction appendCmcdQuery(url, cmcd, options) {\n  const query = toCmcdQuery(cmcd, options);\n  if (!query) {\n    return url;\n  }\n  if (REGEX.test(url)) {\n    return url.replace(REGEX, query);\n  }\n  const separator = url.includes(\"?\") ? \"&\" : \"?\";\n  return `${url}${separator}${query}`;\n}\nclass CMCDController {\n  // eslint-disable-line no-restricted-globals\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = void 0;\n    this.sid = void 0;\n    this.cid = void 0;\n    this.useHeaders = false;\n    this.includeKeys = void 0;\n    this.initialized = false;\n    this.starved = false;\n    this.buffering = true;\n    this.audioBuffer = void 0;\n    this.videoBuffer = void 0;\n    this.onWaiting = () => {\n      if (this.initialized) {\n        this.starved = true;\n      }\n      this.buffering = true;\n    };\n    this.onPlaying = () => {\n      if (!this.initialized) {\n        this.initialized = true;\n      }\n      this.buffering = false;\n    };\n    this.applyPlaylistData = (context) => {\n      try {\n        this.apply(context, {\n          ot: CmObjectType.MANIFEST,\n          su: !this.initialized\n        });\n      } catch (error) {\n        logger.warn(\"Could not generate manifest CMCD data.\", error);\n      }\n    };\n    this.applyFragmentData = (context) => {\n      try {\n        const fragment = context.frag;\n        const level = this.hls.levels[fragment.level];\n        const ot = this.getObjectType(fragment);\n        const data = {\n          d: fragment.duration * 1e3,\n          ot\n        };\n        if (ot === CmObjectType.VIDEO || ot === CmObjectType.AUDIO || ot == CmObjectType.MUXED) {\n          data.br = level.bitrate / 1e3;\n          data.tb = this.getTopBandwidth(ot) / 1e3;\n          data.bl = this.getBufferLength(ot);\n        }\n        this.apply(context, data);\n      } catch (error) {\n        logger.warn(\"Could not generate segment CMCD data.\", error);\n      }\n    };\n    this.hls = hls;\n    const config = this.config = hls.config;\n    const {\n      cmcd\n    } = config;\n    if (cmcd != null) {\n      config.pLoader = this.createPlaylistLoader();\n      config.fLoader = this.createFragmentLoader();\n      this.sid = cmcd.sessionId || uuid();\n      this.cid = cmcd.contentId;\n      this.useHeaders = cmcd.useHeaders === true;\n      this.includeKeys = cmcd.includeKeys;\n      this.registerListeners();\n    }\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetached();\n    this.hls = this.config = this.audioBuffer = this.videoBuffer = null;\n    this.onWaiting = this.onPlaying = null;\n  }\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    this.media.addEventListener(\"waiting\", this.onWaiting);\n    this.media.addEventListener(\"playing\", this.onPlaying);\n  }\n  onMediaDetached() {\n    if (!this.media) {\n      return;\n    }\n    this.media.removeEventListener(\"waiting\", this.onWaiting);\n    this.media.removeEventListener(\"playing\", this.onPlaying);\n    this.media = null;\n  }\n  onBufferCreated(event, data) {\n    var _data$tracks$audio, _data$tracks$video;\n    this.audioBuffer = (_data$tracks$audio = data.tracks.audio) == null ? void 0 : _data$tracks$audio.buffer;\n    this.videoBuffer = (_data$tracks$video = data.tracks.video) == null ? void 0 : _data$tracks$video.buffer;\n  }\n  /**\n   * Create baseline CMCD data\n   */\n  createData() {\n    var _this$media;\n    return {\n      v: 1,\n      sf: CmStreamingFormat.HLS,\n      sid: this.sid,\n      cid: this.cid,\n      pr: (_this$media = this.media) == null ? void 0 : _this$media.playbackRate,\n      mtp: this.hls.bandwidthEstimate / 1e3\n    };\n  }\n  /**\n   * Apply CMCD data to a request.\n   */\n  apply(context, data = {}) {\n    _extends(data, this.createData());\n    const isVideo = data.ot === CmObjectType.INIT || data.ot === CmObjectType.VIDEO || data.ot === CmObjectType.MUXED;\n    if (this.starved && isVideo) {\n      data.bs = true;\n      data.su = true;\n      this.starved = false;\n    }\n    if (data.su == null) {\n      data.su = this.buffering;\n    }\n    const {\n      includeKeys\n    } = this;\n    if (includeKeys) {\n      data = Object.keys(data).reduce((acc, key) => {\n        includeKeys.includes(key) && (acc[key] = data[key]);\n        return acc;\n      }, {});\n    }\n    if (this.useHeaders) {\n      if (!context.headers) {\n        context.headers = {};\n      }\n      appendCmcdHeaders(context.headers, data);\n    } else {\n      context.url = appendCmcdQuery(context.url, data);\n    }\n  }\n  /**\n   * The CMCD object type.\n   */\n  getObjectType(fragment) {\n    const {\n      type\n    } = fragment;\n    if (type === \"subtitle\") {\n      return CmObjectType.TIMED_TEXT;\n    }\n    if (fragment.sn === \"initSegment\") {\n      return CmObjectType.INIT;\n    }\n    if (type === \"audio\") {\n      return CmObjectType.AUDIO;\n    }\n    if (type === \"main\") {\n      if (!this.hls.audioTracks.length) {\n        return CmObjectType.MUXED;\n      }\n      return CmObjectType.VIDEO;\n    }\n    return void 0;\n  }\n  /**\n   * Get the highest bitrate.\n   */\n  getTopBandwidth(type) {\n    let bitrate = 0;\n    let levels;\n    const hls = this.hls;\n    if (type === CmObjectType.AUDIO) {\n      levels = hls.audioTracks;\n    } else {\n      const max = hls.maxAutoLevel;\n      const len = max > -1 ? max + 1 : hls.levels.length;\n      levels = hls.levels.slice(0, len);\n    }\n    for (const level of levels) {\n      if (level.bitrate > bitrate) {\n        bitrate = level.bitrate;\n      }\n    }\n    return bitrate > 0 ? bitrate : NaN;\n  }\n  /**\n   * Get the buffer length for a media type in milliseconds\n   */\n  getBufferLength(type) {\n    const media = this.hls.media;\n    const buffer = type === CmObjectType.AUDIO ? this.audioBuffer : this.videoBuffer;\n    if (!buffer || !media) {\n      return NaN;\n    }\n    const info = BufferHelper.bufferInfo(buffer, media.currentTime, this.config.maxBufferHole);\n    return info.len * 1e3;\n  }\n  /**\n   * Create a playlist loader\n   */\n  createPlaylistLoader() {\n    const {\n      pLoader\n    } = this.config;\n    const apply = this.applyPlaylistData;\n    const Ctor = pLoader || this.config.loader;\n    return class CmcdPlaylistLoader {\n      constructor(config) {\n        this.loader = void 0;\n        this.loader = new Ctor(config);\n      }\n      get stats() {\n        return this.loader.stats;\n      }\n      get context() {\n        return this.loader.context;\n      }\n      destroy() {\n        this.loader.destroy();\n      }\n      abort() {\n        this.loader.abort();\n      }\n      load(context, config, callbacks) {\n        apply(context);\n        this.loader.load(context, config, callbacks);\n      }\n    };\n  }\n  /**\n   * Create a playlist loader\n   */\n  createFragmentLoader() {\n    const {\n      fLoader\n    } = this.config;\n    const apply = this.applyFragmentData;\n    const Ctor = fLoader || this.config.loader;\n    return class CmcdFragmentLoader {\n      constructor(config) {\n        this.loader = void 0;\n        this.loader = new Ctor(config);\n      }\n      get stats() {\n        return this.loader.stats;\n      }\n      get context() {\n        return this.loader.context;\n      }\n      destroy() {\n        this.loader.destroy();\n      }\n      abort() {\n        this.loader.abort();\n      }\n      load(context, config, callbacks) {\n        apply(context);\n        this.loader.load(context, config, callbacks);\n      }\n    };\n  }\n}\nconst PATHWAY_PENALTY_DURATION_MS = 3e5;\nclass ContentSteeringController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.log = void 0;\n    this.loader = null;\n    this.uri = null;\n    this.pathwayId = \".\";\n    this.pathwayPriority = null;\n    this.timeToLoad = 300;\n    this.reloadTimer = -1;\n    this.updated = 0;\n    this.started = false;\n    this.enabled = true;\n    this.levels = null;\n    this.audioTracks = null;\n    this.subtitleTracks = null;\n    this.penalizedPathways = {};\n    this.hls = hls;\n    this.log = logger.log.bind(logger, `[content-steering]:`);\n    this.registerListeners();\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  startLoad() {\n    this.started = true;\n    this.clearTimeout();\n    if (this.enabled && this.uri) {\n      if (this.updated) {\n        const ttl = this.timeToLoad * 1e3 - (performance.now() - this.updated);\n        if (ttl > 0) {\n          this.scheduleRefresh(this.uri, ttl);\n          return;\n        }\n      }\n      this.loadSteeringManifest(this.uri);\n    }\n  }\n  stopLoad() {\n    this.started = false;\n    if (this.loader) {\n      this.loader.destroy();\n      this.loader = null;\n    }\n    this.clearTimeout();\n  }\n  clearTimeout() {\n    if (this.reloadTimer !== -1) {\n      self.clearTimeout(this.reloadTimer);\n      this.reloadTimer = -1;\n    }\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.stopLoad();\n    this.hls = null;\n    this.levels = this.audioTracks = this.subtitleTracks = null;\n  }\n  removeLevel(levelToRemove) {\n    const levels = this.levels;\n    if (levels) {\n      this.levels = levels.filter((level) => level !== levelToRemove);\n    }\n  }\n  onManifestLoading() {\n    this.stopLoad();\n    this.enabled = true;\n    this.timeToLoad = 300;\n    this.updated = 0;\n    this.uri = null;\n    this.pathwayId = \".\";\n    this.levels = this.audioTracks = this.subtitleTracks = null;\n  }\n  onManifestLoaded(event, data) {\n    const {\n      contentSteering\n    } = data;\n    if (contentSteering === null) {\n      return;\n    }\n    this.pathwayId = contentSteering.pathwayId;\n    this.uri = contentSteering.uri;\n    if (this.started) {\n      this.startLoad();\n    }\n  }\n  onManifestParsed(event, data) {\n    this.audioTracks = data.audioTracks;\n    this.subtitleTracks = data.subtitleTracks;\n  }\n  onError(event, data) {\n    const {\n      errorAction\n    } = data;\n    if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox && errorAction.flags === ErrorActionFlags.MoveAllAlternatesMatchingHost) {\n      const levels = this.levels;\n      let pathwayPriority = this.pathwayPriority;\n      let errorPathway = this.pathwayId;\n      if (data.context) {\n        const {\n          groupId,\n          pathwayId,\n          type\n        } = data.context;\n        if (groupId && levels) {\n          errorPathway = this.getPathwayForGroupId(groupId, type, errorPathway);\n        } else if (pathwayId) {\n          errorPathway = pathwayId;\n        }\n      }\n      if (!(errorPathway in this.penalizedPathways)) {\n        this.penalizedPathways[errorPathway] = performance.now();\n      }\n      if (!pathwayPriority && levels) {\n        pathwayPriority = levels.reduce((pathways, level) => {\n          if (pathways.indexOf(level.pathwayId) === -1) {\n            pathways.push(level.pathwayId);\n          }\n          return pathways;\n        }, []);\n      }\n      if (pathwayPriority && pathwayPriority.length > 1) {\n        this.updatePathwayPriority(pathwayPriority);\n        errorAction.resolved = this.pathwayId !== errorPathway;\n      }\n      if (!errorAction.resolved) {\n        logger.warn(`Could not resolve ${data.details} (\"${data.error.message}\") with content-steering for Pathway: ${errorPathway} levels: ${levels ? levels.length : levels} priorities: ${JSON.stringify(pathwayPriority)} penalized: ${JSON.stringify(this.penalizedPathways)}`);\n      }\n    }\n  }\n  filterParsedLevels(levels) {\n    this.levels = levels;\n    let pathwayLevels = this.getLevelsForPathway(this.pathwayId);\n    if (pathwayLevels.length === 0) {\n      const pathwayId = levels[0].pathwayId;\n      this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to \"${pathwayId}\"`);\n      pathwayLevels = this.getLevelsForPathway(pathwayId);\n      this.pathwayId = pathwayId;\n    }\n    if (pathwayLevels.length !== levels.length) {\n      this.log(`Found ${pathwayLevels.length}/${levels.length} levels in Pathway \"${this.pathwayId}\"`);\n      return pathwayLevels;\n    }\n    return levels;\n  }\n  getLevelsForPathway(pathwayId) {\n    if (this.levels === null) {\n      return [];\n    }\n    return this.levels.filter((level) => pathwayId === level.pathwayId);\n  }\n  updatePathwayPriority(pathwayPriority) {\n    this.pathwayPriority = pathwayPriority;\n    let levels;\n    const penalizedPathways = this.penalizedPathways;\n    const now2 = performance.now();\n    Object.keys(penalizedPathways).forEach((pathwayId) => {\n      if (now2 - penalizedPathways[pathwayId] > PATHWAY_PENALTY_DURATION_MS) {\n        delete penalizedPathways[pathwayId];\n      }\n    });\n    for (let i = 0; i < pathwayPriority.length; i++) {\n      const pathwayId = pathwayPriority[i];\n      if (pathwayId in penalizedPathways) {\n        continue;\n      }\n      if (pathwayId === this.pathwayId) {\n        return;\n      }\n      const selectedIndex = this.hls.nextLoadLevel;\n      const selectedLevel = this.hls.levels[selectedIndex];\n      levels = this.getLevelsForPathway(pathwayId);\n      if (levels.length > 0) {\n        this.log(`Setting Pathway to \"${pathwayId}\"`);\n        this.pathwayId = pathwayId;\n        reassignFragmentLevelIndexes(levels);\n        this.hls.trigger(Events.LEVELS_UPDATED, {\n          levels\n        });\n        const levelAfterChange = this.hls.levels[selectedIndex];\n        if (selectedLevel && levelAfterChange && this.levels) {\n          if (levelAfterChange.attrs[\"STABLE-VARIANT-ID\"] !== selectedLevel.attrs[\"STABLE-VARIANT-ID\"] && levelAfterChange.bitrate !== selectedLevel.bitrate) {\n            this.log(`Unstable Pathways change from bitrate ${selectedLevel.bitrate} to ${levelAfterChange.bitrate}`);\n          }\n          this.hls.nextLoadLevel = selectedIndex;\n        }\n        break;\n      }\n    }\n  }\n  getPathwayForGroupId(groupId, type, defaultPathway) {\n    const levels = this.getLevelsForPathway(defaultPathway).concat(this.levels || []);\n    for (let i = 0; i < levels.length; i++) {\n      if (type === PlaylistContextType.AUDIO_TRACK && levels[i].hasAudioGroup(groupId) || type === PlaylistContextType.SUBTITLE_TRACK && levels[i].hasSubtitleGroup(groupId)) {\n        return levels[i].pathwayId;\n      }\n    }\n    return defaultPathway;\n  }\n  clonePathways(pathwayClones) {\n    const levels = this.levels;\n    if (!levels) {\n      return;\n    }\n    const audioGroupCloneMap = {};\n    const subtitleGroupCloneMap = {};\n    pathwayClones.forEach((pathwayClone) => {\n      const {\n        ID: cloneId,\n        \"BASE-ID\": baseId,\n        \"URI-REPLACEMENT\": uriReplacement\n      } = pathwayClone;\n      if (levels.some((level) => level.pathwayId === cloneId)) {\n        return;\n      }\n      const clonedVariants = this.getLevelsForPathway(baseId).map((baseLevel) => {\n        const attributes = new AttrList(baseLevel.attrs);\n        attributes[\"PATHWAY-ID\"] = cloneId;\n        const clonedAudioGroupId = attributes.AUDIO && `${attributes.AUDIO}_clone_${cloneId}`;\n        const clonedSubtitleGroupId = attributes.SUBTITLES && `${attributes.SUBTITLES}_clone_${cloneId}`;\n        if (clonedAudioGroupId) {\n          audioGroupCloneMap[attributes.AUDIO] = clonedAudioGroupId;\n          attributes.AUDIO = clonedAudioGroupId;\n        }\n        if (clonedSubtitleGroupId) {\n          subtitleGroupCloneMap[attributes.SUBTITLES] = clonedSubtitleGroupId;\n          attributes.SUBTITLES = clonedSubtitleGroupId;\n        }\n        const url = performUriReplacement(baseLevel.uri, attributes[\"STABLE-VARIANT-ID\"], \"PER-VARIANT-URIS\", uriReplacement);\n        const clonedLevel = new Level({\n          attrs: attributes,\n          audioCodec: baseLevel.audioCodec,\n          bitrate: baseLevel.bitrate,\n          height: baseLevel.height,\n          name: baseLevel.name,\n          url,\n          videoCodec: baseLevel.videoCodec,\n          width: baseLevel.width\n        });\n        if (baseLevel.audioGroups) {\n          for (let i = 1; i < baseLevel.audioGroups.length; i++) {\n            clonedLevel.addGroupId(\"audio\", `${baseLevel.audioGroups[i]}_clone_${cloneId}`);\n          }\n        }\n        if (baseLevel.subtitleGroups) {\n          for (let i = 1; i < baseLevel.subtitleGroups.length; i++) {\n            clonedLevel.addGroupId(\"text\", `${baseLevel.subtitleGroups[i]}_clone_${cloneId}`);\n          }\n        }\n        return clonedLevel;\n      });\n      levels.push(...clonedVariants);\n      cloneRenditionGroups(this.audioTracks, audioGroupCloneMap, uriReplacement, cloneId);\n      cloneRenditionGroups(this.subtitleTracks, subtitleGroupCloneMap, uriReplacement, cloneId);\n    });\n  }\n  loadSteeringManifest(uri) {\n    const config = this.hls.config;\n    const Loader = config.loader;\n    if (this.loader) {\n      this.loader.destroy();\n    }\n    this.loader = new Loader(config);\n    let url;\n    try {\n      url = new self.URL(uri);\n    } catch (error) {\n      this.enabled = false;\n      this.log(`Failed to parse Steering Manifest URI: ${uri}`);\n      return;\n    }\n    if (url.protocol !== \"data:\") {\n      const throughput = (this.hls.bandwidthEstimate || config.abrEwmaDefaultEstimate) | 0;\n      url.searchParams.set(\"_HLS_pathway\", this.pathwayId);\n      url.searchParams.set(\"_HLS_throughput\", \"\" + throughput);\n    }\n    const context = {\n      responseType: \"json\",\n      url: url.href\n    };\n    const loadPolicy = config.steeringManifestLoadPolicy.default;\n    const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n    const loaderConfig = {\n      loadPolicy,\n      timeout: loadPolicy.maxLoadTimeMs,\n      maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n      retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n      maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n    };\n    const callbacks = {\n      onSuccess: (response, stats, context2, networkDetails) => {\n        this.log(`Loaded steering manifest: \"${url}\"`);\n        const steeringData = response.data;\n        if (steeringData.VERSION !== 1) {\n          this.log(`Steering VERSION ${steeringData.VERSION} not supported!`);\n          return;\n        }\n        this.updated = performance.now();\n        this.timeToLoad = steeringData.TTL;\n        const {\n          \"RELOAD-URI\": reloadUri,\n          \"PATHWAY-CLONES\": pathwayClones,\n          \"PATHWAY-PRIORITY\": pathwayPriority\n        } = steeringData;\n        if (reloadUri) {\n          try {\n            this.uri = new self.URL(reloadUri, url).href;\n          } catch (error) {\n            this.enabled = false;\n            this.log(`Failed to parse Steering Manifest RELOAD-URI: ${reloadUri}`);\n            return;\n          }\n        }\n        this.scheduleRefresh(this.uri || context2.url);\n        if (pathwayClones) {\n          this.clonePathways(pathwayClones);\n        }\n        const loadedSteeringData = {\n          steeringManifest: steeringData,\n          url: url.toString()\n        };\n        this.hls.trigger(Events.STEERING_MANIFEST_LOADED, loadedSteeringData);\n        if (pathwayPriority) {\n          this.updatePathwayPriority(pathwayPriority);\n        }\n      },\n      onError: (error, context2, networkDetails, stats) => {\n        this.log(`Error loading steering manifest: ${error.code} ${error.text} (${context2.url})`);\n        this.stopLoad();\n        if (error.code === 410) {\n          this.enabled = false;\n          this.log(`Steering manifest ${context2.url} no longer available`);\n          return;\n        }\n        let ttl = this.timeToLoad * 1e3;\n        if (error.code === 429) {\n          const loader = this.loader;\n          if (typeof (loader == null ? void 0 : loader.getResponseHeader) === \"function\") {\n            const retryAfter = loader.getResponseHeader(\"Retry-After\");\n            if (retryAfter) {\n              ttl = parseFloat(retryAfter) * 1e3;\n            }\n          }\n          this.log(`Steering manifest ${context2.url} rate limited`);\n          return;\n        }\n        this.scheduleRefresh(this.uri || context2.url, ttl);\n      },\n      onTimeout: (stats, context2, networkDetails) => {\n        this.log(`Timeout loading steering manifest (${context2.url})`);\n        this.scheduleRefresh(this.uri || context2.url);\n      }\n    };\n    this.log(`Requesting steering manifest: ${url}`);\n    this.loader.load(context, loaderConfig, callbacks);\n  }\n  scheduleRefresh(uri, ttlMs = this.timeToLoad * 1e3) {\n    this.clearTimeout();\n    this.reloadTimer = self.setTimeout(() => {\n      var _this$hls;\n      const media = (_this$hls = this.hls) == null ? void 0 : _this$hls.media;\n      if (media && !media.ended) {\n        this.loadSteeringManifest(uri);\n        return;\n      }\n      this.scheduleRefresh(uri, this.timeToLoad * 1e3);\n    }, ttlMs);\n  }\n}\nfunction cloneRenditionGroups(tracks, groupCloneMap, uriReplacement, cloneId) {\n  if (!tracks) {\n    return;\n  }\n  Object.keys(groupCloneMap).forEach((audioGroupId) => {\n    const clonedTracks = tracks.filter((track) => track.groupId === audioGroupId).map((track) => {\n      const clonedTrack = _extends({}, track);\n      clonedTrack.details = void 0;\n      clonedTrack.attrs = new AttrList(clonedTrack.attrs);\n      clonedTrack.url = clonedTrack.attrs.URI = performUriReplacement(track.url, track.attrs[\"STABLE-RENDITION-ID\"], \"PER-RENDITION-URIS\", uriReplacement);\n      clonedTrack.groupId = clonedTrack.attrs[\"GROUP-ID\"] = groupCloneMap[audioGroupId];\n      clonedTrack.attrs[\"PATHWAY-ID\"] = cloneId;\n      return clonedTrack;\n    });\n    tracks.push(...clonedTracks);\n  });\n}\nfunction performUriReplacement(uri, stableId, perOptionKey, uriReplacement) {\n  const {\n    HOST: host,\n    PARAMS: params,\n    [perOptionKey]: perOptionUris\n  } = uriReplacement;\n  let perVariantUri;\n  if (stableId) {\n    perVariantUri = perOptionUris == null ? void 0 : perOptionUris[stableId];\n    if (perVariantUri) {\n      uri = perVariantUri;\n    }\n  }\n  const url = new self.URL(uri);\n  if (host && !perVariantUri) {\n    url.host = host;\n  }\n  if (params) {\n    Object.keys(params).sort().forEach((key) => {\n      if (key) {\n        url.searchParams.set(key, params[key]);\n      }\n    });\n  }\n  return url.href;\n}\nconst AGE_HEADER_LINE_REGEX = /^age:\\s*[\\d.]+\\s*$/im;\nclass XhrLoader {\n  constructor(config) {\n    this.xhrSetup = void 0;\n    this.requestTimeout = void 0;\n    this.retryTimeout = void 0;\n    this.retryDelay = void 0;\n    this.config = null;\n    this.callbacks = null;\n    this.context = null;\n    this.loader = null;\n    this.stats = void 0;\n    this.xhrSetup = config ? config.xhrSetup || null : null;\n    this.stats = new LoadStats();\n    this.retryDelay = 0;\n  }\n  destroy() {\n    this.callbacks = null;\n    this.abortInternal();\n    this.loader = null;\n    this.config = null;\n    this.context = null;\n    this.xhrSetup = null;\n    this.stats = null;\n  }\n  abortInternal() {\n    const loader = this.loader;\n    self.clearTimeout(this.requestTimeout);\n    self.clearTimeout(this.retryTimeout);\n    if (loader) {\n      loader.onreadystatechange = null;\n      loader.onprogress = null;\n      if (loader.readyState !== 4) {\n        this.stats.aborted = true;\n        loader.abort();\n      }\n    }\n  }\n  abort() {\n    var _this$callbacks;\n    this.abortInternal();\n    if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n      this.callbacks.onAbort(this.stats, this.context, this.loader);\n    }\n  }\n  load(context, config, callbacks) {\n    if (this.stats.loading.start) {\n      throw new Error(\"Loader can only be used once.\");\n    }\n    this.stats.loading.start = self.performance.now();\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.loadInternal();\n  }\n  loadInternal() {\n    const {\n      config,\n      context\n    } = this;\n    if (!config || !context) {\n      return;\n    }\n    const xhr = this.loader = new self.XMLHttpRequest();\n    const stats = this.stats;\n    stats.loading.first = 0;\n    stats.loaded = 0;\n    stats.aborted = false;\n    const xhrSetup = this.xhrSetup;\n    if (xhrSetup) {\n      Promise.resolve().then(() => {\n        if (this.stats.aborted)\n          return;\n        return xhrSetup(xhr, context.url);\n      }).catch((error) => {\n        xhr.open(\"GET\", context.url, true);\n        return xhrSetup(xhr, context.url);\n      }).then(() => {\n        if (this.stats.aborted)\n          return;\n        this.openAndSendXhr(xhr, context, config);\n      }).catch((error) => {\n        this.callbacks.onError({\n          code: xhr.status,\n          text: error.message\n        }, context, xhr, stats);\n        return;\n      });\n    } else {\n      this.openAndSendXhr(xhr, context, config);\n    }\n  }\n  openAndSendXhr(xhr, context, config) {\n    if (!xhr.readyState) {\n      xhr.open(\"GET\", context.url, true);\n    }\n    const headers = context.headers;\n    const {\n      maxTimeToFirstByteMs,\n      maxLoadTimeMs\n    } = config.loadPolicy;\n    if (headers) {\n      for (const header in headers) {\n        xhr.setRequestHeader(header, headers[header]);\n      }\n    }\n    if (context.rangeEnd) {\n      xhr.setRequestHeader(\"Range\", \"bytes=\" + context.rangeStart + \"-\" + (context.rangeEnd - 1));\n    }\n    xhr.onreadystatechange = this.readystatechange.bind(this);\n    xhr.onprogress = this.loadprogress.bind(this);\n    xhr.responseType = context.responseType;\n    self.clearTimeout(this.requestTimeout);\n    config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n    this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.timeout);\n    xhr.send();\n  }\n  readystatechange() {\n    const {\n      context,\n      loader: xhr,\n      stats\n    } = this;\n    if (!context || !xhr) {\n      return;\n    }\n    const readyState = xhr.readyState;\n    const config = this.config;\n    if (stats.aborted) {\n      return;\n    }\n    if (readyState >= 2) {\n      if (stats.loading.first === 0) {\n        stats.loading.first = Math.max(self.performance.now(), stats.loading.start);\n        if (config.timeout !== config.loadPolicy.maxLoadTimeMs) {\n          self.clearTimeout(this.requestTimeout);\n          config.timeout = config.loadPolicy.maxLoadTimeMs;\n          this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.loadPolicy.maxLoadTimeMs - (stats.loading.first - stats.loading.start));\n        }\n      }\n      if (readyState === 4) {\n        self.clearTimeout(this.requestTimeout);\n        xhr.onreadystatechange = null;\n        xhr.onprogress = null;\n        const status2 = xhr.status;\n        const useResponse = xhr.responseType !== \"text\";\n        if (status2 >= 200 && status2 < 300 && (useResponse && xhr.response || xhr.responseText !== null)) {\n          stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n          const data = useResponse ? xhr.response : xhr.responseText;\n          const len = xhr.responseType === \"arraybuffer\" ? data.byteLength : data.length;\n          stats.loaded = stats.total = len;\n          stats.bwEstimate = stats.total * 8e3 / (stats.loading.end - stats.loading.first);\n          if (!this.callbacks) {\n            return;\n          }\n          const onProgress = this.callbacks.onProgress;\n          if (onProgress) {\n            onProgress(stats, context, data, xhr);\n          }\n          if (!this.callbacks) {\n            return;\n          }\n          const response = {\n            url: xhr.responseURL,\n            data,\n            code: status2\n          };\n          this.callbacks.onSuccess(response, stats, context, xhr);\n        } else {\n          const retryConfig = config.loadPolicy.errorRetry;\n          const retryCount = stats.retry;\n          const response = {\n            url: context.url,\n            data: void 0,\n            code: status2\n          };\n          if (shouldRetry(retryConfig, retryCount, false, response)) {\n            this.retry(retryConfig);\n          } else {\n            logger.error(`${status2} while loading ${context.url}`);\n            this.callbacks.onError({\n              code: status2,\n              text: xhr.statusText\n            }, context, xhr, stats);\n          }\n        }\n      }\n    }\n  }\n  loadtimeout() {\n    var _this$config;\n    const retryConfig = (_this$config = this.config) == null ? void 0 : _this$config.loadPolicy.timeoutRetry;\n    const retryCount = this.stats.retry;\n    if (shouldRetry(retryConfig, retryCount, true)) {\n      this.retry(retryConfig);\n    } else {\n      var _this$context;\n      logger.warn(`timeout while loading ${(_this$context = this.context) == null ? void 0 : _this$context.url}`);\n      const callbacks = this.callbacks;\n      if (callbacks) {\n        this.abortInternal();\n        callbacks.onTimeout(this.stats, this.context, this.loader);\n      }\n    }\n  }\n  retry(retryConfig) {\n    const {\n      context,\n      stats\n    } = this;\n    this.retryDelay = getRetryDelay(retryConfig, stats.retry);\n    stats.retry++;\n    logger.warn(`${status ? \"HTTP Status \" + status : \"Timeout\"} while loading ${context == null ? void 0 : context.url}, retrying ${stats.retry}/${retryConfig.maxNumRetry} in ${this.retryDelay}ms`);\n    this.abortInternal();\n    this.loader = null;\n    self.clearTimeout(this.retryTimeout);\n    this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n  }\n  loadprogress(event) {\n    const stats = this.stats;\n    stats.loaded = event.loaded;\n    if (event.lengthComputable) {\n      stats.total = event.total;\n    }\n  }\n  getCacheAge() {\n    let result = null;\n    if (this.loader && AGE_HEADER_LINE_REGEX.test(this.loader.getAllResponseHeaders())) {\n      const ageHeader = this.loader.getResponseHeader(\"age\");\n      result = ageHeader ? parseFloat(ageHeader) : null;\n    }\n    return result;\n  }\n  getResponseHeader(name) {\n    if (this.loader && new RegExp(`^${name}:\\\\s*[\\\\d.]+\\\\s*$`, \"im\").test(this.loader.getAllResponseHeaders())) {\n      return this.loader.getResponseHeader(name);\n    }\n    return null;\n  }\n}\nfunction fetchSupported() {\n  if (\n    // @ts-ignore\n    self.fetch && self.AbortController && self.ReadableStream && self.Request\n  ) {\n    try {\n      new self.ReadableStream({});\n      return true;\n    } catch (e) {\n    }\n  }\n  return false;\n}\nconst BYTERANGE = /(\\d+)-(\\d+)\\/(\\d+)/;\nclass FetchLoader {\n  constructor(config) {\n    this.fetchSetup = void 0;\n    this.requestTimeout = void 0;\n    this.request = null;\n    this.response = null;\n    this.controller = void 0;\n    this.context = null;\n    this.config = null;\n    this.callbacks = null;\n    this.stats = void 0;\n    this.loader = null;\n    this.fetchSetup = config.fetchSetup || getRequest;\n    this.controller = new self.AbortController();\n    this.stats = new LoadStats();\n  }\n  destroy() {\n    this.loader = this.callbacks = this.context = this.config = this.request = null;\n    this.abortInternal();\n    this.response = null;\n    this.fetchSetup = this.controller = this.stats = null;\n  }\n  abortInternal() {\n    if (this.controller && !this.stats.loading.end) {\n      this.stats.aborted = true;\n      this.controller.abort();\n    }\n  }\n  abort() {\n    var _this$callbacks;\n    this.abortInternal();\n    if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n      this.callbacks.onAbort(this.stats, this.context, this.response);\n    }\n  }\n  load(context, config, callbacks) {\n    const stats = this.stats;\n    if (stats.loading.start) {\n      throw new Error(\"Loader can only be used once.\");\n    }\n    stats.loading.start = self.performance.now();\n    const initParams = getRequestParameters(context, this.controller.signal);\n    const onProgress = callbacks.onProgress;\n    const isArrayBuffer = context.responseType === \"arraybuffer\";\n    const LENGTH = isArrayBuffer ? \"byteLength\" : \"length\";\n    const {\n      maxTimeToFirstByteMs,\n      maxLoadTimeMs\n    } = config.loadPolicy;\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.request = this.fetchSetup(context, initParams);\n    self.clearTimeout(this.requestTimeout);\n    config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n    this.requestTimeout = self.setTimeout(() => {\n      this.abortInternal();\n      callbacks.onTimeout(stats, context, this.response);\n    }, config.timeout);\n    self.fetch(this.request).then((response) => {\n      this.response = this.loader = response;\n      const first = Math.max(self.performance.now(), stats.loading.start);\n      self.clearTimeout(this.requestTimeout);\n      config.timeout = maxLoadTimeMs;\n      this.requestTimeout = self.setTimeout(() => {\n        this.abortInternal();\n        callbacks.onTimeout(stats, context, this.response);\n      }, maxLoadTimeMs - (first - stats.loading.start));\n      if (!response.ok) {\n        const {\n          status: status2,\n          statusText\n        } = response;\n        throw new FetchError(statusText || \"fetch, bad network response\", status2, response);\n      }\n      stats.loading.first = first;\n      stats.total = getContentLength(response.headers) || stats.total;\n      if (onProgress && isFiniteNumber(config.highWaterMark)) {\n        return this.loadProgressively(response, stats, context, config.highWaterMark, onProgress);\n      }\n      if (isArrayBuffer) {\n        return response.arrayBuffer();\n      }\n      if (context.responseType === \"json\") {\n        return response.json();\n      }\n      return response.text();\n    }).then((responseData) => {\n      const response = this.response;\n      if (!response) {\n        throw new Error(\"loader destroyed\");\n      }\n      self.clearTimeout(this.requestTimeout);\n      stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n      const total = responseData[LENGTH];\n      if (total) {\n        stats.loaded = stats.total = total;\n      }\n      const loaderResponse = {\n        url: response.url,\n        data: responseData,\n        code: response.status\n      };\n      if (onProgress && !isFiniteNumber(config.highWaterMark)) {\n        onProgress(stats, context, responseData, response);\n      }\n      callbacks.onSuccess(loaderResponse, stats, context, response);\n    }).catch((error) => {\n      self.clearTimeout(this.requestTimeout);\n      if (stats.aborted) {\n        return;\n      }\n      const code = !error ? 0 : error.code || 0;\n      const text = !error ? null : error.message;\n      callbacks.onError({\n        code,\n        text\n      }, context, error ? error.details : null, stats);\n    });\n  }\n  getCacheAge() {\n    let result = null;\n    if (this.response) {\n      const ageHeader = this.response.headers.get(\"age\");\n      result = ageHeader ? parseFloat(ageHeader) : null;\n    }\n    return result;\n  }\n  getResponseHeader(name) {\n    return this.response ? this.response.headers.get(name) : null;\n  }\n  loadProgressively(response, stats, context, highWaterMark = 0, onProgress) {\n    const chunkCache = new ChunkCache();\n    const reader = response.body.getReader();\n    const pump = () => {\n      return reader.read().then((data) => {\n        if (data.done) {\n          if (chunkCache.dataLength) {\n            onProgress(stats, context, chunkCache.flush(), response);\n          }\n          return Promise.resolve(new ArrayBuffer(0));\n        }\n        const chunk = data.value;\n        const len = chunk.length;\n        stats.loaded += len;\n        if (len < highWaterMark || chunkCache.dataLength) {\n          chunkCache.push(chunk);\n          if (chunkCache.dataLength >= highWaterMark) {\n            onProgress(stats, context, chunkCache.flush(), response);\n          }\n        } else {\n          onProgress(stats, context, chunk, response);\n        }\n        return pump();\n      }).catch(() => {\n        return Promise.reject();\n      });\n    };\n    return pump();\n  }\n}\nfunction getRequestParameters(context, signal) {\n  const initParams = {\n    method: \"GET\",\n    mode: \"cors\",\n    credentials: \"same-origin\",\n    signal,\n    headers: new self.Headers(_extends({}, context.headers))\n  };\n  if (context.rangeEnd) {\n    initParams.headers.set(\"Range\", \"bytes=\" + context.rangeStart + \"-\" + String(context.rangeEnd - 1));\n  }\n  return initParams;\n}\nfunction getByteRangeLength(byteRangeHeader) {\n  const result = BYTERANGE.exec(byteRangeHeader);\n  if (result) {\n    return parseInt(result[2]) - parseInt(result[1]) + 1;\n  }\n}\nfunction getContentLength(headers) {\n  const contentRange = headers.get(\"Content-Range\");\n  if (contentRange) {\n    const byteRangeLength = getByteRangeLength(contentRange);\n    if (isFiniteNumber(byteRangeLength)) {\n      return byteRangeLength;\n    }\n  }\n  const contentLength = headers.get(\"Content-Length\");\n  if (contentLength) {\n    return parseInt(contentLength);\n  }\n}\nfunction getRequest(context, initParams) {\n  return new self.Request(context.url, initParams);\n}\nclass FetchError extends Error {\n  constructor(message, code, details) {\n    super(message);\n    this.code = void 0;\n    this.details = void 0;\n    this.code = code;\n    this.details = details;\n  }\n}\nconst WHITESPACE_CHAR = /\\s/;\nconst Cues = {\n  newCue(track, startTime, endTime, captionScreen) {\n    const result = [];\n    let row;\n    let cue;\n    let indenting;\n    let indent;\n    let text;\n    const Cue = self.VTTCue || self.TextTrackCue;\n    for (let r = 0; r < captionScreen.rows.length; r++) {\n      row = captionScreen.rows[r];\n      indenting = true;\n      indent = 0;\n      text = \"\";\n      if (!row.isEmpty()) {\n        var _track$cues;\n        for (let c = 0; c < row.chars.length; c++) {\n          if (WHITESPACE_CHAR.test(row.chars[c].uchar) && indenting) {\n            indent++;\n          } else {\n            text += row.chars[c].uchar;\n            indenting = false;\n          }\n        }\n        row.cueStartTime = startTime;\n        if (startTime === endTime) {\n          endTime += 1e-4;\n        }\n        if (indent >= 16) {\n          indent--;\n        } else {\n          indent++;\n        }\n        const cueText = fixLineBreaks(text.trim());\n        const id = generateCueId(startTime, endTime, cueText);\n        if (!(track != null && (_track$cues = track.cues) != null && _track$cues.getCueById(id))) {\n          cue = new Cue(startTime, endTime, cueText);\n          cue.id = id;\n          cue.line = r + 1;\n          cue.align = \"left\";\n          cue.position = 10 + Math.min(80, Math.floor(indent * 8 / 32) * 10);\n          result.push(cue);\n        }\n      }\n    }\n    if (track && result.length) {\n      result.sort((cueA, cueB) => {\n        if (cueA.line === \"auto\" || cueB.line === \"auto\") {\n          return 0;\n        }\n        if (cueA.line > 8 && cueB.line > 8) {\n          return cueB.line - cueA.line;\n        }\n        return cueA.line - cueB.line;\n      });\n      result.forEach((cue2) => addCueToTrack(track, cue2));\n    }\n    return result;\n  }\n};\nconst defaultLoadPolicy = {\n  maxTimeToFirstByteMs: 8e3,\n  maxLoadTimeMs: 2e4,\n  timeoutRetry: null,\n  errorRetry: null\n};\nconst hlsDefaultConfig = _objectSpread2(_objectSpread2({\n  autoStartLoad: true,\n  // used by stream-controller\n  startPosition: -1,\n  // used by stream-controller\n  defaultAudioCodec: void 0,\n  // used by stream-controller\n  debug: false,\n  // used by logger\n  capLevelOnFPSDrop: false,\n  // used by fps-controller\n  capLevelToPlayerSize: false,\n  // used by cap-level-controller\n  ignoreDevicePixelRatio: false,\n  // used by cap-level-controller\n  preferManagedMediaSource: true,\n  initialLiveManifestSize: 1,\n  // used by stream-controller\n  maxBufferLength: 30,\n  // used by stream-controller\n  backBufferLength: Infinity,\n  // used by buffer-controller\n  frontBufferFlushThreshold: Infinity,\n  maxBufferSize: 60 * 1e3 * 1e3,\n  // used by stream-controller\n  maxBufferHole: 0.1,\n  // used by stream-controller\n  highBufferWatchdogPeriod: 2,\n  // used by stream-controller\n  nudgeOffset: 0.1,\n  // used by stream-controller\n  nudgeMaxRetry: 3,\n  // used by stream-controller\n  maxFragLookUpTolerance: 0.25,\n  // used by stream-controller\n  liveSyncDurationCount: 3,\n  // used by latency-controller\n  liveMaxLatencyDurationCount: Infinity,\n  // used by latency-controller\n  liveSyncDuration: void 0,\n  // used by latency-controller\n  liveMaxLatencyDuration: void 0,\n  // used by latency-controller\n  maxLiveSyncPlaybackRate: 1,\n  // used by latency-controller\n  liveDurationInfinity: false,\n  // used by buffer-controller\n  /**\n   * @deprecated use backBufferLength\n   */\n  liveBackBufferLength: null,\n  // used by buffer-controller\n  maxMaxBufferLength: 600,\n  // used by stream-controller\n  enableWorker: true,\n  // used by transmuxer\n  workerPath: null,\n  // used by transmuxer\n  enableSoftwareAES: true,\n  // used by decrypter\n  startLevel: void 0,\n  // used by level-controller\n  startFragPrefetch: false,\n  // used by stream-controller\n  fpsDroppedMonitoringPeriod: 5e3,\n  // used by fps-controller\n  fpsDroppedMonitoringThreshold: 0.2,\n  // used by fps-controller\n  appendErrorMaxRetry: 3,\n  // used by buffer-controller\n  loader: XhrLoader,\n  // loader: FetchLoader,\n  fLoader: void 0,\n  // used by fragment-loader\n  pLoader: void 0,\n  // used by playlist-loader\n  xhrSetup: void 0,\n  // used by xhr-loader\n  licenseXhrSetup: void 0,\n  // used by eme-controller\n  licenseResponseCallback: void 0,\n  // used by eme-controller\n  abrController: AbrController,\n  bufferController: BufferController,\n  capLevelController: CapLevelController,\n  errorController: ErrorController,\n  fpsController: FPSController,\n  stretchShortVideoTrack: false,\n  // used by mp4-remuxer\n  maxAudioFramesDrift: 1,\n  // used by mp4-remuxer\n  forceKeyFrameOnDiscontinuity: true,\n  // used by ts-demuxer\n  abrEwmaFastLive: 3,\n  // used by abr-controller\n  abrEwmaSlowLive: 9,\n  // used by abr-controller\n  abrEwmaFastVoD: 3,\n  // used by abr-controller\n  abrEwmaSlowVoD: 9,\n  // used by abr-controller\n  abrEwmaDefaultEstimate: 5e5,\n  // 500 kbps  // used by abr-controller\n  abrEwmaDefaultEstimateMax: 5e6,\n  // 5 mbps\n  abrBandWidthFactor: 0.95,\n  // used by abr-controller\n  abrBandWidthUpFactor: 0.7,\n  // used by abr-controller\n  abrMaxWithRealBitrate: false,\n  // used by abr-controller\n  maxStarvationDelay: 4,\n  // used by abr-controller\n  maxLoadingDelay: 4,\n  // used by abr-controller\n  minAutoBitrate: 0,\n  // used by hls\n  emeEnabled: false,\n  // used by eme-controller\n  widevineLicenseUrl: void 0,\n  // used by eme-controller\n  drmSystems: {},\n  // used by eme-controller\n  drmSystemOptions: {},\n  // used by eme-controller\n  requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess,\n  // used by eme-controller\n  testBandwidth: true,\n  progressive: false,\n  lowLatencyMode: true,\n  cmcd: void 0,\n  enableDateRangeMetadataCues: true,\n  enableEmsgMetadataCues: true,\n  enableID3MetadataCues: true,\n  useMediaCapabilities: true,\n  certLoadPolicy: {\n    default: defaultLoadPolicy\n  },\n  keyLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 8e3,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 2e4,\n        backoff: \"linear\"\n      },\n      errorRetry: {\n        maxNumRetry: 8,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 2e4,\n        backoff: \"linear\"\n      }\n    }\n  },\n  manifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: Infinity,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  playlistLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 1e4,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  fragLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 1e4,\n      maxLoadTimeMs: 12e4,\n      timeoutRetry: {\n        maxNumRetry: 4,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 6,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  steeringManifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 1e4,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  // These default settings are deprecated in favor of the above policies\n  // and are maintained for backwards compatibility\n  manifestLoadingTimeOut: 1e4,\n  manifestLoadingMaxRetry: 1,\n  manifestLoadingRetryDelay: 1e3,\n  manifestLoadingMaxRetryTimeout: 64e3,\n  levelLoadingTimeOut: 1e4,\n  levelLoadingMaxRetry: 4,\n  levelLoadingRetryDelay: 1e3,\n  levelLoadingMaxRetryTimeout: 64e3,\n  fragLoadingTimeOut: 2e4,\n  fragLoadingMaxRetry: 6,\n  fragLoadingRetryDelay: 1e3,\n  fragLoadingMaxRetryTimeout: 64e3\n}, timelineConfig()), {}, {\n  subtitleStreamController: SubtitleStreamController,\n  subtitleTrackController: SubtitleTrackController,\n  timelineController: TimelineController,\n  audioStreamController: AudioStreamController,\n  audioTrackController: AudioTrackController,\n  emeController: EMEController,\n  cmcdController: CMCDController,\n  contentSteeringController: ContentSteeringController\n});\nfunction timelineConfig() {\n  return {\n    cueHandler: Cues,\n    // used by timeline-controller\n    enableWebVTT: true,\n    // used by timeline-controller\n    enableIMSC1: true,\n    // used by timeline-controller\n    enableCEA708Captions: true,\n    // used by timeline-controller\n    captionsTextTrack1Label: \"English\",\n    // used by timeline-controller\n    captionsTextTrack1LanguageCode: \"en\",\n    // used by timeline-controller\n    captionsTextTrack2Label: \"Spanish\",\n    // used by timeline-controller\n    captionsTextTrack2LanguageCode: \"es\",\n    // used by timeline-controller\n    captionsTextTrack3Label: \"Unknown CC\",\n    // used by timeline-controller\n    captionsTextTrack3LanguageCode: \"\",\n    // used by timeline-controller\n    captionsTextTrack4Label: \"Unknown CC\",\n    // used by timeline-controller\n    captionsTextTrack4LanguageCode: \"\",\n    // used by timeline-controller\n    renderTextTracksNatively: true\n  };\n}\nfunction mergeConfig(defaultConfig, userConfig) {\n  if ((userConfig.liveSyncDurationCount || userConfig.liveMaxLatencyDurationCount) && (userConfig.liveSyncDuration || userConfig.liveMaxLatencyDuration)) {\n    throw new Error(\"Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration\");\n  }\n  if (userConfig.liveMaxLatencyDurationCount !== void 0 && (userConfig.liveSyncDurationCount === void 0 || userConfig.liveMaxLatencyDurationCount <= userConfig.liveSyncDurationCount)) {\n    throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be greater than \"liveSyncDurationCount\"');\n  }\n  if (userConfig.liveMaxLatencyDuration !== void 0 && (userConfig.liveSyncDuration === void 0 || userConfig.liveMaxLatencyDuration <= userConfig.liveSyncDuration)) {\n    throw new Error('Illegal hls.js config: \"liveMaxLatencyDuration\" must be greater than \"liveSyncDuration\"');\n  }\n  const defaultsCopy = deepCpy(defaultConfig);\n  const deprecatedSettingTypes = [\"manifest\", \"level\", \"frag\"];\n  const deprecatedSettings = [\"TimeOut\", \"MaxRetry\", \"RetryDelay\", \"MaxRetryTimeout\"];\n  deprecatedSettingTypes.forEach((type) => {\n    const policyName = `${type === \"level\" ? \"playlist\" : type}LoadPolicy`;\n    const policyNotSet = userConfig[policyName] === void 0;\n    const report = [];\n    deprecatedSettings.forEach((setting) => {\n      const deprecatedSetting = `${type}Loading${setting}`;\n      const value = userConfig[deprecatedSetting];\n      if (value !== void 0 && policyNotSet) {\n        report.push(deprecatedSetting);\n        const settings = defaultsCopy[policyName].default;\n        userConfig[policyName] = {\n          default: settings\n        };\n        switch (setting) {\n          case \"TimeOut\":\n            settings.maxLoadTimeMs = value;\n            settings.maxTimeToFirstByteMs = value;\n            break;\n          case \"MaxRetry\":\n            settings.errorRetry.maxNumRetry = value;\n            settings.timeoutRetry.maxNumRetry = value;\n            break;\n          case \"RetryDelay\":\n            settings.errorRetry.retryDelayMs = value;\n            settings.timeoutRetry.retryDelayMs = value;\n            break;\n          case \"MaxRetryTimeout\":\n            settings.errorRetry.maxRetryDelayMs = value;\n            settings.timeoutRetry.maxRetryDelayMs = value;\n            break;\n        }\n      }\n    });\n    if (report.length) {\n      logger.warn(`hls.js config: \"${report.join('\", \"')}\" setting(s) are deprecated, use \"${policyName}\": ${JSON.stringify(userConfig[policyName])}`);\n    }\n  });\n  return _objectSpread2(_objectSpread2({}, defaultsCopy), userConfig);\n}\nfunction deepCpy(obj) {\n  if (obj && typeof obj === \"object\") {\n    if (Array.isArray(obj)) {\n      return obj.map(deepCpy);\n    }\n    return Object.keys(obj).reduce((result, key) => {\n      result[key] = deepCpy(obj[key]);\n      return result;\n    }, {});\n  }\n  return obj;\n}\nfunction enableStreamingMode(config) {\n  const currentLoader = config.loader;\n  if (currentLoader !== FetchLoader && currentLoader !== XhrLoader) {\n    logger.log(\"[config]: Custom loader detected, cannot enable progressive streaming\");\n    config.progressive = false;\n  } else {\n    const canStreamProgressively = fetchSupported();\n    if (canStreamProgressively) {\n      config.loader = FetchLoader;\n      config.progressive = true;\n      config.enableSoftwareAES = true;\n      logger.log(\"[config]: Progressive streaming enabled, using FetchLoader\");\n    }\n  }\n}\nlet chromeOrFirefox;\nclass LevelController extends BasePlaylistController {\n  constructor(hls, contentSteeringController) {\n    super(hls, \"[level-controller]\");\n    this._levels = [];\n    this._firstLevel = -1;\n    this._maxAutoLevel = -1;\n    this._startLevel = void 0;\n    this.currentLevel = null;\n    this.currentLevelIndex = -1;\n    this.manualLevelIndex = -1;\n    this.steering = void 0;\n    this.onParsedComplete = void 0;\n    this.steering = contentSteeringController;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.steering = null;\n    this.resetLevels();\n    super.destroy();\n  }\n  stopLoad() {\n    const levels = this._levels;\n    levels.forEach((level) => {\n      level.loadError = 0;\n      level.fragmentError = 0;\n    });\n    super.stopLoad();\n  }\n  resetLevels() {\n    this._startLevel = void 0;\n    this.manualLevelIndex = -1;\n    this.currentLevelIndex = -1;\n    this.currentLevel = null;\n    this._levels = [];\n    this._maxAutoLevel = -1;\n  }\n  onManifestLoading(event, data) {\n    this.resetLevels();\n  }\n  onManifestLoaded(event, data) {\n    const preferManagedMediaSource = this.hls.config.preferManagedMediaSource;\n    const levels = [];\n    const redundantSet = {};\n    const generatePathwaySet = {};\n    let resolutionFound = false;\n    let videoCodecFound = false;\n    let audioCodecFound = false;\n    data.levels.forEach((levelParsed) => {\n      var _audioCodec, _videoCodec;\n      const attributes = levelParsed.attrs;\n      let {\n        audioCodec,\n        videoCodec\n      } = levelParsed;\n      if (((_audioCodec = audioCodec) == null ? void 0 : _audioCodec.indexOf(\"mp4a.40.34\")) !== -1) {\n        chromeOrFirefox || (chromeOrFirefox = /chrome|firefox/i.test(navigator.userAgent));\n        if (chromeOrFirefox) {\n          levelParsed.audioCodec = audioCodec = void 0;\n        }\n      }\n      if (audioCodec) {\n        levelParsed.audioCodec = audioCodec = getCodecCompatibleName(audioCodec, preferManagedMediaSource);\n      }\n      if (((_videoCodec = videoCodec) == null ? void 0 : _videoCodec.indexOf(\"avc1\")) === 0) {\n        videoCodec = levelParsed.videoCodec = convertAVC1ToAVCOTI(videoCodec);\n      }\n      const {\n        width,\n        height,\n        unknownCodecs\n      } = levelParsed;\n      resolutionFound || (resolutionFound = !!(width && height));\n      videoCodecFound || (videoCodecFound = !!videoCodec);\n      audioCodecFound || (audioCodecFound = !!audioCodec);\n      if (unknownCodecs != null && unknownCodecs.length || audioCodec && !areCodecsMediaSourceSupported(audioCodec, \"audio\", preferManagedMediaSource) || videoCodec && !areCodecsMediaSourceSupported(videoCodec, \"video\", preferManagedMediaSource)) {\n        return;\n      }\n      const {\n        CODECS,\n        \"FRAME-RATE\": FRAMERATE,\n        \"HDCP-LEVEL\": HDCP,\n        \"PATHWAY-ID\": PATHWAY,\n        RESOLUTION,\n        \"VIDEO-RANGE\": VIDEO_RANGE\n      } = attributes;\n      const contentSteeringPrefix = `${PATHWAY || \".\"}-`;\n      const levelKey = `${contentSteeringPrefix}${levelParsed.bitrate}-${RESOLUTION}-${FRAMERATE}-${CODECS}-${VIDEO_RANGE}-${HDCP}`;\n      if (!redundantSet[levelKey]) {\n        const level = new Level(levelParsed);\n        redundantSet[levelKey] = level;\n        generatePathwaySet[levelKey] = 1;\n        levels.push(level);\n      } else if (redundantSet[levelKey].uri !== levelParsed.url && !levelParsed.attrs[\"PATHWAY-ID\"]) {\n        const pathwayCount = generatePathwaySet[levelKey] += 1;\n        levelParsed.attrs[\"PATHWAY-ID\"] = new Array(pathwayCount + 1).join(\".\");\n        const level = new Level(levelParsed);\n        redundantSet[levelKey] = level;\n        levels.push(level);\n      } else {\n        redundantSet[levelKey].addGroupId(\"audio\", attributes.AUDIO);\n        redundantSet[levelKey].addGroupId(\"text\", attributes.SUBTITLES);\n      }\n    });\n    this.filterAndSortMediaOptions(levels, data, resolutionFound, videoCodecFound, audioCodecFound);\n  }\n  filterAndSortMediaOptions(filteredLevels, data, resolutionFound, videoCodecFound, audioCodecFound) {\n    let audioTracks = [];\n    let subtitleTracks = [];\n    let levels = filteredLevels;\n    if ((resolutionFound || videoCodecFound) && audioCodecFound) {\n      levels = levels.filter(({\n        videoCodec,\n        videoRange,\n        width,\n        height\n      }) => (!!videoCodec || !!(width && height)) && isVideoRange(videoRange));\n    }\n    if (levels.length === 0) {\n      Promise.resolve().then(() => {\n        if (this.hls) {\n          if (data.levels.length) {\n            this.warn(`One or more CODECS in variant not supported: ${JSON.stringify(data.levels[0].attrs)}`);\n          }\n          const error = new Error(\"no level with compatible codecs found in manifest\");\n          this.hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,\n            fatal: true,\n            url: data.url,\n            error,\n            reason: error.message\n          });\n        }\n      });\n      return;\n    }\n    if (data.audioTracks) {\n      const {\n        preferManagedMediaSource\n      } = this.hls.config;\n      audioTracks = data.audioTracks.filter((track) => !track.audioCodec || areCodecsMediaSourceSupported(track.audioCodec, \"audio\", preferManagedMediaSource));\n      assignTrackIdsByGroup(audioTracks);\n    }\n    if (data.subtitles) {\n      subtitleTracks = data.subtitles;\n      assignTrackIdsByGroup(subtitleTracks);\n    }\n    const unsortedLevels = levels.slice(0);\n    levels.sort((a, b) => {\n      if (a.attrs[\"HDCP-LEVEL\"] !== b.attrs[\"HDCP-LEVEL\"]) {\n        return (a.attrs[\"HDCP-LEVEL\"] || \"\") > (b.attrs[\"HDCP-LEVEL\"] || \"\") ? 1 : -1;\n      }\n      if (resolutionFound && a.height !== b.height) {\n        return a.height - b.height;\n      }\n      if (a.frameRate !== b.frameRate) {\n        return a.frameRate - b.frameRate;\n      }\n      if (a.videoRange !== b.videoRange) {\n        return VideoRangeValues.indexOf(a.videoRange) - VideoRangeValues.indexOf(b.videoRange);\n      }\n      if (a.videoCodec !== b.videoCodec) {\n        const valueA = videoCodecPreferenceValue(a.videoCodec);\n        const valueB = videoCodecPreferenceValue(b.videoCodec);\n        if (valueA !== valueB) {\n          return valueB - valueA;\n        }\n      }\n      if (a.uri === b.uri && a.codecSet !== b.codecSet) {\n        const valueA = codecsSetSelectionPreferenceValue(a.codecSet);\n        const valueB = codecsSetSelectionPreferenceValue(b.codecSet);\n        if (valueA !== valueB) {\n          return valueB - valueA;\n        }\n      }\n      if (a.averageBitrate !== b.averageBitrate) {\n        return a.averageBitrate - b.averageBitrate;\n      }\n      return 0;\n    });\n    let firstLevelInPlaylist = unsortedLevels[0];\n    if (this.steering) {\n      levels = this.steering.filterParsedLevels(levels);\n      if (levels.length !== unsortedLevels.length) {\n        for (let i = 0; i < unsortedLevels.length; i++) {\n          if (unsortedLevels[i].pathwayId === levels[0].pathwayId) {\n            firstLevelInPlaylist = unsortedLevels[i];\n            break;\n          }\n        }\n      }\n    }\n    this._levels = levels;\n    for (let i = 0; i < levels.length; i++) {\n      if (levels[i] === firstLevelInPlaylist) {\n        var _this$hls$userConfig;\n        this._firstLevel = i;\n        const firstLevelBitrate = firstLevelInPlaylist.bitrate;\n        const bandwidthEstimate = this.hls.bandwidthEstimate;\n        this.log(`manifest loaded, ${levels.length} level(s) found, first bitrate: ${firstLevelBitrate}`);\n        if (((_this$hls$userConfig = this.hls.userConfig) == null ? void 0 : _this$hls$userConfig.abrEwmaDefaultEstimate) === void 0) {\n          const startingBwEstimate = Math.min(firstLevelBitrate, this.hls.config.abrEwmaDefaultEstimateMax);\n          if (startingBwEstimate > bandwidthEstimate && bandwidthEstimate === hlsDefaultConfig.abrEwmaDefaultEstimate) {\n            this.hls.bandwidthEstimate = startingBwEstimate;\n          }\n        }\n        break;\n      }\n    }\n    const audioOnly = audioCodecFound && !videoCodecFound;\n    const edata = {\n      levels,\n      audioTracks,\n      subtitleTracks,\n      sessionData: data.sessionData,\n      sessionKeys: data.sessionKeys,\n      firstLevel: this._firstLevel,\n      stats: data.stats,\n      audio: audioCodecFound,\n      video: videoCodecFound,\n      altAudio: !audioOnly && audioTracks.some((t) => !!t.url)\n    };\n    this.hls.trigger(Events.MANIFEST_PARSED, edata);\n    if (this.hls.config.autoStartLoad || this.hls.forceStartLoad) {\n      this.hls.startLoad(this.hls.config.startPosition);\n    }\n  }\n  get levels() {\n    if (this._levels.length === 0) {\n      return null;\n    }\n    return this._levels;\n  }\n  get level() {\n    return this.currentLevelIndex;\n  }\n  set level(newLevel) {\n    const levels = this._levels;\n    if (levels.length === 0) {\n      return;\n    }\n    if (newLevel < 0 || newLevel >= levels.length) {\n      const error = new Error(\"invalid level idx\");\n      const fatal = newLevel < 0;\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.OTHER_ERROR,\n        details: ErrorDetails.LEVEL_SWITCH_ERROR,\n        level: newLevel,\n        fatal,\n        error,\n        reason: error.message\n      });\n      if (fatal) {\n        return;\n      }\n      newLevel = Math.min(newLevel, levels.length - 1);\n    }\n    const lastLevelIndex = this.currentLevelIndex;\n    const lastLevel = this.currentLevel;\n    const lastPathwayId = lastLevel ? lastLevel.attrs[\"PATHWAY-ID\"] : void 0;\n    const level = levels[newLevel];\n    const pathwayId = level.attrs[\"PATHWAY-ID\"];\n    this.currentLevelIndex = newLevel;\n    this.currentLevel = level;\n    if (lastLevelIndex === newLevel && level.details && lastLevel && lastPathwayId === pathwayId) {\n      return;\n    }\n    this.log(`Switching to level ${newLevel} (${level.height ? level.height + \"p \" : \"\"}${level.videoRange ? level.videoRange + \" \" : \"\"}${level.codecSet ? level.codecSet + \" \" : \"\"}@${level.bitrate})${pathwayId ? \" with Pathway \" + pathwayId : \"\"} from level ${lastLevelIndex}${lastPathwayId ? \" with Pathway \" + lastPathwayId : \"\"}`);\n    const levelSwitchingData = {\n      level: newLevel,\n      attrs: level.attrs,\n      details: level.details,\n      bitrate: level.bitrate,\n      averageBitrate: level.averageBitrate,\n      maxBitrate: level.maxBitrate,\n      realBitrate: level.realBitrate,\n      width: level.width,\n      height: level.height,\n      codecSet: level.codecSet,\n      audioCodec: level.audioCodec,\n      videoCodec: level.videoCodec,\n      audioGroups: level.audioGroups,\n      subtitleGroups: level.subtitleGroups,\n      loaded: level.loaded,\n      loadError: level.loadError,\n      fragmentError: level.fragmentError,\n      name: level.name,\n      id: level.id,\n      uri: level.uri,\n      url: level.url,\n      urlId: 0,\n      audioGroupIds: level.audioGroupIds,\n      textGroupIds: level.textGroupIds\n    };\n    this.hls.trigger(Events.LEVEL_SWITCHING, levelSwitchingData);\n    const levelDetails = level.details;\n    if (!levelDetails || levelDetails.live) {\n      const hlsUrlParameters = this.switchParams(level.uri, lastLevel == null ? void 0 : lastLevel.details);\n      this.loadPlaylist(hlsUrlParameters);\n    }\n  }\n  get manualLevel() {\n    return this.manualLevelIndex;\n  }\n  set manualLevel(newLevel) {\n    this.manualLevelIndex = newLevel;\n    if (this._startLevel === void 0) {\n      this._startLevel = newLevel;\n    }\n    if (newLevel !== -1) {\n      this.level = newLevel;\n    }\n  }\n  get firstLevel() {\n    return this._firstLevel;\n  }\n  set firstLevel(newLevel) {\n    this._firstLevel = newLevel;\n  }\n  get startLevel() {\n    if (this._startLevel === void 0) {\n      const configStartLevel = this.hls.config.startLevel;\n      if (configStartLevel !== void 0) {\n        return configStartLevel;\n      }\n      return this.hls.firstAutoLevel;\n    }\n    return this._startLevel;\n  }\n  set startLevel(newLevel) {\n    this._startLevel = newLevel;\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.LEVEL && data.context.level === this.level) {\n      this.checkRetry(data);\n    }\n  }\n  // reset errors on the successful load of a fragment\n  onFragBuffered(event, {\n    frag\n  }) {\n    if (frag !== void 0 && frag.type === PlaylistLevelType.MAIN) {\n      const el = frag.elementaryStreams;\n      if (!Object.keys(el).some((type) => !!el[type])) {\n        return;\n      }\n      const level = this._levels[frag.level];\n      if (level != null && level.loadError) {\n        this.log(`Resetting level error count of ${level.loadError} on frag buffered`);\n        level.loadError = 0;\n      }\n    }\n  }\n  onLevelLoaded(event, data) {\n    var _data$deliveryDirecti2;\n    const {\n      level,\n      details\n    } = data;\n    const curLevel = this._levels[level];\n    if (!curLevel) {\n      var _data$deliveryDirecti;\n      this.warn(`Invalid level index ${level}`);\n      if ((_data$deliveryDirecti = data.deliveryDirectives) != null && _data$deliveryDirecti.skip) {\n        details.deltaUpdateFailed = true;\n      }\n      return;\n    }\n    if (level === this.currentLevelIndex) {\n      if (curLevel.fragmentError === 0) {\n        curLevel.loadError = 0;\n      }\n      this.playlistLoaded(level, data, curLevel.details);\n    } else if ((_data$deliveryDirecti2 = data.deliveryDirectives) != null && _data$deliveryDirecti2.skip) {\n      details.deltaUpdateFailed = true;\n    }\n  }\n  loadPlaylist(hlsUrlParameters) {\n    super.loadPlaylist();\n    const currentLevelIndex = this.currentLevelIndex;\n    const currentLevel = this.currentLevel;\n    if (currentLevel && this.shouldLoadPlaylist(currentLevel)) {\n      let url = currentLevel.uri;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      const pathwayId = currentLevel.attrs[\"PATHWAY-ID\"];\n      this.log(`Loading level index ${currentLevelIndex}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== void 0 ? \" at sn \" + hlsUrlParameters.msn + \" part \" + hlsUrlParameters.part : \"\"} with${pathwayId ? \" Pathway \" + pathwayId : \"\"} ${url}`);\n      this.clearTimer();\n      this.hls.trigger(Events.LEVEL_LOADING, {\n        url,\n        level: currentLevelIndex,\n        pathwayId: currentLevel.attrs[\"PATHWAY-ID\"],\n        id: 0,\n        // Deprecated Level urlId\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n  get nextLoadLevel() {\n    if (this.manualLevelIndex !== -1) {\n      return this.manualLevelIndex;\n    } else {\n      return this.hls.nextAutoLevel;\n    }\n  }\n  set nextLoadLevel(nextLevel) {\n    this.level = nextLevel;\n    if (this.manualLevelIndex === -1) {\n      this.hls.nextAutoLevel = nextLevel;\n    }\n  }\n  removeLevel(levelIndex) {\n    var _this$currentLevel;\n    const levels = this._levels.filter((level, index) => {\n      if (index !== levelIndex) {\n        return true;\n      }\n      if (this.steering) {\n        this.steering.removeLevel(level);\n      }\n      if (level === this.currentLevel) {\n        this.currentLevel = null;\n        this.currentLevelIndex = -1;\n        if (level.details) {\n          level.details.fragments.forEach((f) => f.level = -1);\n        }\n      }\n      return false;\n    });\n    reassignFragmentLevelIndexes(levels);\n    this._levels = levels;\n    if (this.currentLevelIndex > -1 && (_this$currentLevel = this.currentLevel) != null && _this$currentLevel.details) {\n      this.currentLevelIndex = this.currentLevel.details.fragments[0].level;\n    }\n    this.hls.trigger(Events.LEVELS_UPDATED, {\n      levels\n    });\n  }\n  onLevelsUpdated(event, {\n    levels\n  }) {\n    this._levels = levels;\n  }\n  checkMaxAutoUpdated() {\n    const {\n      autoLevelCapping,\n      maxAutoLevel,\n      maxHdcpLevel\n    } = this.hls;\n    if (this._maxAutoLevel !== maxAutoLevel) {\n      this._maxAutoLevel = maxAutoLevel;\n      this.hls.trigger(Events.MAX_AUTO_LEVEL_UPDATED, {\n        autoLevelCapping,\n        levels: this.levels,\n        maxAutoLevel,\n        minAutoLevel: this.hls.minAutoLevel,\n        maxHdcpLevel\n      });\n    }\n  }\n}\nfunction assignTrackIdsByGroup(tracks) {\n  const groups = {};\n  tracks.forEach((track) => {\n    const groupId = track.groupId || \"\";\n    track.id = groups[groupId] = groups[groupId] || 0;\n    groups[groupId]++;\n  });\n}\nclass KeyLoader {\n  constructor(config) {\n    this.config = void 0;\n    this.keyUriToKeyInfo = {};\n    this.emeController = null;\n    this.config = config;\n  }\n  abort(type) {\n    for (const uri in this.keyUriToKeyInfo) {\n      const loader = this.keyUriToKeyInfo[uri].loader;\n      if (loader) {\n        var _loader$context;\n        if (type && type !== ((_loader$context = loader.context) == null ? void 0 : _loader$context.frag.type)) {\n          return;\n        }\n        loader.abort();\n      }\n    }\n  }\n  detach() {\n    for (const uri in this.keyUriToKeyInfo) {\n      const keyInfo = this.keyUriToKeyInfo[uri];\n      if (keyInfo.mediaKeySessionContext || keyInfo.decryptdata.isCommonEncryption) {\n        delete this.keyUriToKeyInfo[uri];\n      }\n    }\n  }\n  destroy() {\n    this.detach();\n    for (const uri in this.keyUriToKeyInfo) {\n      const loader = this.keyUriToKeyInfo[uri].loader;\n      if (loader) {\n        loader.destroy();\n      }\n    }\n    this.keyUriToKeyInfo = {};\n  }\n  createKeyLoadError(frag, details = ErrorDetails.KEY_LOAD_ERROR, error, networkDetails, response) {\n    return new LoadError({\n      type: ErrorTypes.NETWORK_ERROR,\n      details,\n      fatal: false,\n      frag,\n      response,\n      error,\n      networkDetails\n    });\n  }\n  loadClear(loadingFrag, encryptedFragments) {\n    if (this.emeController && this.config.emeEnabled) {\n      const {\n        sn,\n        cc\n      } = loadingFrag;\n      for (let i = 0; i < encryptedFragments.length; i++) {\n        const frag = encryptedFragments[i];\n        if (cc <= frag.cc && (sn === \"initSegment\" || frag.sn === \"initSegment\" || sn < frag.sn)) {\n          this.emeController.selectKeySystemFormat(frag).then((keySystemFormat) => {\n            frag.setKeyFormat(keySystemFormat);\n          });\n          break;\n        }\n      }\n    }\n  }\n  load(frag) {\n    if (!frag.decryptdata && frag.encrypted && this.emeController) {\n      return this.emeController.selectKeySystemFormat(frag).then((keySystemFormat) => {\n        return this.loadInternal(frag, keySystemFormat);\n      });\n    }\n    return this.loadInternal(frag);\n  }\n  loadInternal(frag, keySystemFormat) {\n    var _keyInfo, _keyInfo2;\n    if (keySystemFormat) {\n      frag.setKeyFormat(keySystemFormat);\n    }\n    const decryptdata = frag.decryptdata;\n    if (!decryptdata) {\n      const error = new Error(keySystemFormat ? `Expected frag.decryptdata to be defined after setting format ${keySystemFormat}` : \"Missing decryption data on fragment in onKeyLoading\");\n      return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, error));\n    }\n    const uri = decryptdata.uri;\n    if (!uri) {\n      return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Invalid key URI: \"${uri}\"`)));\n    }\n    let keyInfo = this.keyUriToKeyInfo[uri];\n    if ((_keyInfo = keyInfo) != null && _keyInfo.decryptdata.key) {\n      decryptdata.key = keyInfo.decryptdata.key;\n      return Promise.resolve({\n        frag,\n        keyInfo\n      });\n    }\n    if ((_keyInfo2 = keyInfo) != null && _keyInfo2.keyLoadPromise) {\n      var _keyInfo$mediaKeySess;\n      switch ((_keyInfo$mediaKeySess = keyInfo.mediaKeySessionContext) == null ? void 0 : _keyInfo$mediaKeySess.keyStatus) {\n        case void 0:\n        case \"status-pending\":\n        case \"usable\":\n        case \"usable-in-future\":\n          return keyInfo.keyLoadPromise.then((keyLoadedData) => {\n            decryptdata.key = keyLoadedData.keyInfo.decryptdata.key;\n            return {\n              frag,\n              keyInfo\n            };\n          });\n      }\n    }\n    keyInfo = this.keyUriToKeyInfo[uri] = {\n      decryptdata,\n      keyLoadPromise: null,\n      loader: null,\n      mediaKeySessionContext: null\n    };\n    switch (decryptdata.method) {\n      case \"ISO-23001-7\":\n      case \"SAMPLE-AES\":\n      case \"SAMPLE-AES-CENC\":\n      case \"SAMPLE-AES-CTR\":\n        if (decryptdata.keyFormat === \"identity\") {\n          return this.loadKeyHTTP(keyInfo, frag);\n        }\n        return this.loadKeyEME(keyInfo, frag);\n      case \"AES-128\":\n        return this.loadKeyHTTP(keyInfo, frag);\n      default:\n        return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Key supplied with unsupported METHOD: \"${decryptdata.method}\"`)));\n    }\n  }\n  loadKeyEME(keyInfo, frag) {\n    const keyLoadedData = {\n      frag,\n      keyInfo\n    };\n    if (this.emeController && this.config.emeEnabled) {\n      const keySessionContextPromise = this.emeController.loadKey(keyLoadedData);\n      if (keySessionContextPromise) {\n        return (keyInfo.keyLoadPromise = keySessionContextPromise.then((keySessionContext) => {\n          keyInfo.mediaKeySessionContext = keySessionContext;\n          return keyLoadedData;\n        })).catch((error) => {\n          keyInfo.keyLoadPromise = null;\n          throw error;\n        });\n      }\n    }\n    return Promise.resolve(keyLoadedData);\n  }\n  loadKeyHTTP(keyInfo, frag) {\n    const config = this.config;\n    const Loader = config.loader;\n    const keyLoader = new Loader(config);\n    frag.keyLoader = keyInfo.loader = keyLoader;\n    return keyInfo.keyLoadPromise = new Promise((resolve, reject) => {\n      const loaderContext = {\n        keyInfo,\n        frag,\n        responseType: \"arraybuffer\",\n        url: keyInfo.decryptdata.uri\n      };\n      const loadPolicy = config.keyLoadPolicy.default;\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0\n      };\n      const loaderCallbacks = {\n        onSuccess: (response, stats, context, networkDetails) => {\n          const {\n            frag: frag2,\n            keyInfo: keyInfo2,\n            url: uri\n          } = context;\n          if (!frag2.decryptdata || keyInfo2 !== this.keyUriToKeyInfo[uri]) {\n            return reject(this.createKeyLoadError(frag2, ErrorDetails.KEY_LOAD_ERROR, new Error(\"after key load, decryptdata unset or changed\"), networkDetails));\n          }\n          keyInfo2.decryptdata.key = frag2.decryptdata.key = new Uint8Array(response.data);\n          frag2.keyLoader = null;\n          keyInfo2.loader = null;\n          resolve({\n            frag: frag2,\n            keyInfo: keyInfo2\n          });\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`HTTP Error ${response.code} loading key ${response.text}`), networkDetails, _objectSpread2({\n            url: loaderContext.url,\n            data: void 0\n          }, response)));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_TIMEOUT, new Error(\"key loading timed out\"), networkDetails));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.INTERNAL_ABORTED, new Error(\"key loading aborted\"), networkDetails));\n        }\n      };\n      keyLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n    });\n  }\n  resetLoader(context) {\n    const {\n      frag,\n      keyInfo,\n      url: uri\n    } = context;\n    const loader = keyInfo.loader;\n    if (frag.keyLoader === loader) {\n      frag.keyLoader = null;\n      keyInfo.loader = null;\n    }\n    delete this.keyUriToKeyInfo[uri];\n    if (loader) {\n      loader.destroy();\n    }\n  }\n}\nfunction getSourceBuffer() {\n  return self.SourceBuffer || self.WebKitSourceBuffer;\n}\nfunction isMSESupported() {\n  const mediaSource = getMediaSource();\n  if (!mediaSource) {\n    return false;\n  }\n  const sourceBuffer = getSourceBuffer();\n  return !sourceBuffer || sourceBuffer.prototype && typeof sourceBuffer.prototype.appendBuffer === \"function\" && typeof sourceBuffer.prototype.remove === \"function\";\n}\nfunction isSupported() {\n  if (!isMSESupported()) {\n    return false;\n  }\n  const mediaSource = getMediaSource();\n  return typeof (mediaSource == null ? void 0 : mediaSource.isTypeSupported) === \"function\" && ([\"avc1.42E01E,mp4a.40.2\", \"av01.0.01M.08\", \"vp09.00.50.08\"].some((codecsForVideoContainer) => mediaSource.isTypeSupported(mimeTypeForCodec(codecsForVideoContainer, \"video\"))) || [\"mp4a.40.2\", \"fLaC\"].some((codecForAudioContainer) => mediaSource.isTypeSupported(mimeTypeForCodec(codecForAudioContainer, \"audio\"))));\n}\nfunction changeTypeSupported() {\n  var _sourceBuffer$prototy;\n  const sourceBuffer = getSourceBuffer();\n  return typeof (sourceBuffer == null ? void 0 : (_sourceBuffer$prototy = sourceBuffer.prototype) == null ? void 0 : _sourceBuffer$prototy.changeType) === \"function\";\n}\nconst STALL_MINIMUM_DURATION_MS = 250;\nconst MAX_START_GAP_JUMP = 2;\nconst SKIP_BUFFER_HOLE_STEP_SECONDS = 0.1;\nconst SKIP_BUFFER_RANGE_START = 0.05;\nclass GapController {\n  constructor(config, media, fragmentTracker, hls) {\n    this.config = void 0;\n    this.media = null;\n    this.fragmentTracker = void 0;\n    this.hls = void 0;\n    this.nudgeRetry = 0;\n    this.stallReported = false;\n    this.stalled = null;\n    this.moved = false;\n    this.seeking = false;\n    this.config = config;\n    this.media = media;\n    this.fragmentTracker = fragmentTracker;\n    this.hls = hls;\n  }\n  destroy() {\n    this.media = null;\n    this.hls = this.fragmentTracker = null;\n  }\n  /**\n   * Checks if the playhead is stuck within a gap, and if so, attempts to free it.\n   * A gap is an unbuffered range between two buffered ranges (or the start and the first buffered range).\n   *\n   * @param lastCurrentTime - Previously read playhead position\n   */\n  poll(lastCurrentTime, activeFrag) {\n    const {\n      config,\n      media,\n      stalled\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const {\n      currentTime,\n      seeking\n    } = media;\n    const seeked = this.seeking && !seeking;\n    const beginSeek = !this.seeking && seeking;\n    this.seeking = seeking;\n    if (currentTime !== lastCurrentTime) {\n      this.moved = true;\n      if (!seeking) {\n        this.nudgeRetry = 0;\n      }\n      if (stalled !== null) {\n        if (this.stallReported) {\n          const _stalledDuration = self.performance.now() - stalled;\n          logger.warn(`playback not stuck anymore @${currentTime}, after ${Math.round(_stalledDuration)}ms`);\n          this.stallReported = false;\n        }\n        this.stalled = null;\n      }\n      return;\n    }\n    if (beginSeek || seeked) {\n      this.stalled = null;\n      return;\n    }\n    if (media.paused && !seeking || media.ended || media.playbackRate === 0 || !BufferHelper.getBuffered(media).length) {\n      this.nudgeRetry = 0;\n      return;\n    }\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const nextStart = bufferInfo.nextStart || 0;\n    if (seeking) {\n      const hasEnoughBuffer = bufferInfo.len > MAX_START_GAP_JUMP;\n      const noBufferGap = !nextStart || activeFrag && activeFrag.start <= currentTime || nextStart - currentTime > MAX_START_GAP_JUMP && !this.fragmentTracker.getPartialFragment(currentTime);\n      if (hasEnoughBuffer || noBufferGap) {\n        return;\n      }\n      this.moved = false;\n    }\n    if (!this.moved && this.stalled !== null) {\n      var _level$details;\n      const isBuffered = bufferInfo.len > 0;\n      if (!isBuffered && !nextStart) {\n        return;\n      }\n      const startJump = Math.max(nextStart, bufferInfo.start || 0) - currentTime;\n      const level = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null;\n      const isLive = level == null ? void 0 : (_level$details = level.details) == null ? void 0 : _level$details.live;\n      const maxStartGapJump = isLive ? level.details.targetduration * 2 : MAX_START_GAP_JUMP;\n      const partialOrGap = this.fragmentTracker.getPartialFragment(currentTime);\n      if (startJump > 0 && (startJump <= maxStartGapJump || partialOrGap)) {\n        if (!media.paused) {\n          this._trySkipBufferHole(partialOrGap);\n        }\n        return;\n      }\n    }\n    const tnow = self.performance.now();\n    if (stalled === null) {\n      this.stalled = tnow;\n      return;\n    }\n    const stalledDuration = tnow - stalled;\n    if (!seeking && stalledDuration >= STALL_MINIMUM_DURATION_MS) {\n      this._reportStall(bufferInfo);\n      if (!this.media) {\n        return;\n      }\n    }\n    const bufferedWithHoles = BufferHelper.bufferInfo(media, currentTime, config.maxBufferHole);\n    this._tryFixBufferStall(bufferedWithHoles, stalledDuration);\n  }\n  /**\n   * Detects and attempts to fix known buffer stalling issues.\n   * @param bufferInfo - The properties of the current buffer.\n   * @param stalledDurationMs - The amount of time Hls.js has been stalling for.\n   * @private\n   */\n  _tryFixBufferStall(bufferInfo, stalledDurationMs) {\n    const {\n      config,\n      fragmentTracker,\n      media\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    const partial = fragmentTracker.getPartialFragment(currentTime);\n    if (partial) {\n      const targetTime = this._trySkipBufferHole(partial);\n      if (targetTime || !this.media) {\n        return;\n      }\n    }\n    if ((bufferInfo.len > config.maxBufferHole || bufferInfo.nextStart && bufferInfo.nextStart - currentTime < config.maxBufferHole) && stalledDurationMs > config.highBufferWatchdogPeriod * 1e3) {\n      logger.warn(\"Trying to nudge playhead over buffer-hole\");\n      this.stalled = null;\n      this._tryNudgeBuffer();\n    }\n  }\n  /**\n   * Triggers a BUFFER_STALLED_ERROR event, but only once per stall period.\n   * @param bufferLen - The playhead distance from the end of the current buffer segment.\n   * @private\n   */\n  _reportStall(bufferInfo) {\n    const {\n      hls,\n      media,\n      stallReported\n    } = this;\n    if (!stallReported && media) {\n      this.stallReported = true;\n      const error = new Error(`Playback stalling at @${media.currentTime} due to low buffer (${JSON.stringify(bufferInfo)})`);\n      logger.warn(error.message);\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_STALLED_ERROR,\n        fatal: false,\n        error,\n        buffer: bufferInfo.len\n      });\n    }\n  }\n  /**\n   * Attempts to fix buffer stalls by jumping over known gaps caused by partial fragments\n   * @param partial - The partial fragment found at the current time (where playback is stalling).\n   * @private\n   */\n  _trySkipBufferHole(partial) {\n    const {\n      config,\n      hls,\n      media\n    } = this;\n    if (media === null) {\n      return 0;\n    }\n    const currentTime = media.currentTime;\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;\n    if (startTime) {\n      const bufferStarved = bufferInfo.len <= config.maxBufferHole;\n      const waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;\n      const gapLength = startTime - currentTime;\n      if (gapLength > 0 && (bufferStarved || waiting)) {\n        if (gapLength > config.maxBufferHole) {\n          const {\n            fragmentTracker\n          } = this;\n          let startGap = false;\n          if (currentTime === 0) {\n            const startFrag = fragmentTracker.getAppendedFrag(0, PlaylistLevelType.MAIN);\n            if (startFrag && startTime < startFrag.end) {\n              startGap = true;\n            }\n          }\n          if (!startGap) {\n            const startProvisioned = partial || fragmentTracker.getAppendedFrag(currentTime, PlaylistLevelType.MAIN);\n            if (startProvisioned) {\n              let moreToLoad = false;\n              let pos = startProvisioned.end;\n              while (pos < startTime) {\n                const provisioned = fragmentTracker.getPartialFragment(pos);\n                if (provisioned) {\n                  pos += provisioned.duration;\n                } else {\n                  moreToLoad = true;\n                  break;\n                }\n              }\n              if (moreToLoad) {\n                return 0;\n              }\n            }\n          }\n        }\n        const targetTime = Math.max(startTime + SKIP_BUFFER_RANGE_START, currentTime + SKIP_BUFFER_HOLE_STEP_SECONDS);\n        logger.warn(`skipping hole, adjusting currentTime from ${currentTime} to ${targetTime}`);\n        this.moved = true;\n        this.stalled = null;\n        media.currentTime = targetTime;\n        if (partial && !partial.gap) {\n          const error = new Error(`fragment loaded with buffer holes, seeking from ${currentTime} to ${targetTime}`);\n          hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n            fatal: false,\n            error,\n            reason: error.message,\n            frag: partial\n          });\n        }\n        return targetTime;\n      }\n    }\n    return 0;\n  }\n  /**\n   * Attempts to fix buffer stalls by advancing the mediaElement's current time by a small amount.\n   * @private\n   */\n  _tryNudgeBuffer() {\n    const {\n      config,\n      hls,\n      media,\n      nudgeRetry\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    this.nudgeRetry++;\n    if (nudgeRetry < config.nudgeMaxRetry) {\n      const targetTime = currentTime + (nudgeRetry + 1) * config.nudgeOffset;\n      const error = new Error(`Nudging 'currentTime' from ${currentTime} to ${targetTime}`);\n      logger.warn(error.message);\n      media.currentTime = targetTime;\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_NUDGE_ON_STALL,\n        error,\n        fatal: false\n      });\n    } else {\n      const error = new Error(`Playhead still not moving while enough data buffered @${currentTime} after ${config.nudgeMaxRetry} nudges`);\n      logger.error(error.message);\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_STALLED_ERROR,\n        error,\n        fatal: true\n      });\n    }\n  }\n}\nconst TICK_INTERVAL = 100;\nclass StreamController extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, \"[stream-controller]\", PlaylistLevelType.MAIN);\n    this.audioCodecSwap = false;\n    this.gapController = null;\n    this.level = -1;\n    this._forceStartLoad = false;\n    this.altAudio = false;\n    this.audioOnly = false;\n    this.fragPlaying = null;\n    this.onvplaying = null;\n    this.onvseeked = null;\n    this.fragLastKbps = 0;\n    this.couldBacktrack = false;\n    this.backtrackFragment = null;\n    this.audioCodecSwitch = false;\n    this.videoBuffer = null;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n  }\n  startLoad(startPosition) {\n    if (this.levels) {\n      const {\n        lastCurrentTime,\n        hls\n      } = this;\n      this.stopLoad();\n      this.setInterval(TICK_INTERVAL);\n      this.level = -1;\n      if (!this.startFragRequested) {\n        let startLevel = hls.startLevel;\n        if (startLevel === -1) {\n          if (hls.config.testBandwidth && this.levels.length > 1) {\n            startLevel = 0;\n            this.bitrateTest = true;\n          } else {\n            startLevel = hls.firstAutoLevel;\n          }\n        }\n        hls.nextLoadLevel = startLevel;\n        this.level = hls.loadLevel;\n        this.loadedmetadata = false;\n      }\n      if (lastCurrentTime > 0 && startPosition === -1) {\n        this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n        startPosition = lastCurrentTime;\n      }\n      this.state = State.IDLE;\n      this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n      this.tick();\n    } else {\n      this._forceStartLoad = true;\n      this.state = State.STOPPED;\n    }\n  }\n  stopLoad() {\n    this._forceStartLoad = false;\n    super.stopLoad();\n  }\n  doTick() {\n    switch (this.state) {\n      case State.WAITING_LEVEL: {\n        const {\n          levels,\n          level\n        } = this;\n        const currentLevel = levels == null ? void 0 : levels[level];\n        const details = currentLevel == null ? void 0 : currentLevel.details;\n        if (details && (!details.live || this.levelLastLoaded === currentLevel)) {\n          if (this.waitForCdnTuneIn(details)) {\n            break;\n          }\n          this.state = State.IDLE;\n          break;\n        } else if (this.hls.nextLoadLevel !== this.level) {\n          this.state = State.IDLE;\n          break;\n        }\n        break;\n      }\n      case State.FRAG_LOADING_WAITING_RETRY:\n        {\n          var _this$media;\n          const now2 = self.performance.now();\n          const retryDate = this.retryDate;\n          if (!retryDate || now2 >= retryDate || (_this$media = this.media) != null && _this$media.seeking) {\n            const {\n              levels,\n              level\n            } = this;\n            const currentLevel = levels == null ? void 0 : levels[level];\n            this.resetStartWhenNotLoaded(currentLevel || null);\n            this.state = State.IDLE;\n          }\n        }\n        break;\n    }\n    if (this.state === State.IDLE) {\n      this.doTickIdle();\n    }\n    this.onTickEnd();\n  }\n  onTickEnd() {\n    super.onTickEnd();\n    this.checkBuffer();\n    this.checkFragmentChanged();\n  }\n  doTickIdle() {\n    const {\n      hls,\n      levelLastLoaded,\n      levels,\n      media\n    } = this;\n    if (levelLastLoaded === null || !media && (this.startFragRequested || !hls.config.startFragPrefetch)) {\n      return;\n    }\n    if (this.altAudio && this.audioOnly) {\n      return;\n    }\n    const level = hls.nextLoadLevel;\n    if (!(levels != null && levels[level])) {\n      return;\n    }\n    const levelInfo = levels[level];\n    const bufferInfo = this.getMainFwdBufferInfo();\n    if (bufferInfo === null) {\n      return;\n    }\n    const lastDetails = this.getLevelDetails();\n    if (lastDetails && this._streamEnded(bufferInfo, lastDetails)) {\n      const data = {};\n      if (this.altAudio) {\n        data.type = \"video\";\n      }\n      this.hls.trigger(Events.BUFFER_EOS, data);\n      this.state = State.ENDED;\n      return;\n    }\n    if (hls.loadLevel !== level && hls.manualLevel === -1) {\n      this.log(`Adapting to level ${level} from level ${this.level}`);\n    }\n    this.level = hls.nextLoadLevel = level;\n    const levelDetails = levelInfo.details;\n    if (!levelDetails || this.state === State.WAITING_LEVEL || levelDetails.live && this.levelLastLoaded !== levelInfo) {\n      this.level = level;\n      this.state = State.WAITING_LEVEL;\n      return;\n    }\n    const bufferLen = bufferInfo.len;\n    const maxBufLen = this.getMaxBufferLength(levelInfo.maxBitrate);\n    if (bufferLen >= maxBufLen) {\n      return;\n    }\n    if (this.backtrackFragment && this.backtrackFragment.start > bufferInfo.end) {\n      this.backtrackFragment = null;\n    }\n    const targetBufferTime = this.backtrackFragment ? this.backtrackFragment.start : bufferInfo.end;\n    let frag = this.getNextFragment(targetBufferTime, levelDetails);\n    if (this.couldBacktrack && !this.fragPrevious && frag && frag.sn !== \"initSegment\" && this.fragmentTracker.getState(frag) !== FragmentState.OK) {\n      var _this$backtrackFragme;\n      const backtrackSn = ((_this$backtrackFragme = this.backtrackFragment) != null ? _this$backtrackFragme : frag).sn;\n      const fragIdx = backtrackSn - levelDetails.startSN;\n      const backtrackFrag = levelDetails.fragments[fragIdx - 1];\n      if (backtrackFrag && frag.cc === backtrackFrag.cc) {\n        frag = backtrackFrag;\n        this.fragmentTracker.removeFragment(backtrackFrag);\n      }\n    } else if (this.backtrackFragment && bufferInfo.len) {\n      this.backtrackFragment = null;\n    }\n    if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n      const gapStart = frag.gap;\n      if (!gapStart) {\n        const type = this.audioOnly && !this.altAudio ? ElementaryStreamTypes.AUDIO : ElementaryStreamTypes.VIDEO;\n        const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n        if (mediaBuffer) {\n          this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n        }\n      }\n      frag = this.getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n    }\n    if (!frag) {\n      return;\n    }\n    if (frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n      frag = frag.initSegment;\n    }\n    this.loadFragment(frag, levelInfo, targetBufferTime);\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    const fragState = this.fragmentTracker.getState(frag);\n    this.fragCurrent = frag;\n    if (fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n      if (frag.sn === \"initSegment\") {\n        this._loadInitSegment(frag, level);\n      } else if (this.bitrateTest) {\n        this.log(`Fragment ${frag.sn} of level ${frag.level} is being downloaded to test bitrate and will not be buffered`);\n        this._loadBitrateTestFrag(frag, level);\n      } else {\n        this.startFragRequested = true;\n        super.loadFragment(frag, level, targetBufferTime);\n      }\n    } else {\n      this.clearTrackerIfNeeded(frag);\n    }\n  }\n  getBufferedFrag(position) {\n    return this.fragmentTracker.getBufferedFrag(position, PlaylistLevelType.MAIN);\n  }\n  followingBufferedFrag(frag) {\n    if (frag) {\n      return this.getBufferedFrag(frag.end + 0.5);\n    }\n    return null;\n  }\n  /*\n    on immediate level switch :\n     - pause playback if playing\n     - cancel any pending load request\n     - and trigger a buffer flush\n  */\n  immediateLevelSwitch() {\n    this.abortCurrentFrag();\n    this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n  }\n  /**\n   * try to switch ASAP without breaking video playback:\n   * in order to ensure smooth but quick level switching,\n   * we need to find the next flushable buffer range\n   * we should take into account new segment fetch time\n   */\n  nextLevelSwitch() {\n    const {\n      levels,\n      media\n    } = this;\n    if (media != null && media.readyState) {\n      let fetchdelay;\n      const fragPlayingCurrent = this.getAppendedFrag(media.currentTime);\n      if (fragPlayingCurrent && fragPlayingCurrent.start > 1) {\n        this.flushMainBuffer(0, fragPlayingCurrent.start - 1);\n      }\n      const levelDetails = this.getLevelDetails();\n      if (levelDetails != null && levelDetails.live) {\n        const bufferInfo = this.getMainFwdBufferInfo();\n        if (!bufferInfo || bufferInfo.len < levelDetails.targetduration * 2) {\n          return;\n        }\n      }\n      if (!media.paused && levels) {\n        const nextLevelId = this.hls.nextLoadLevel;\n        const nextLevel = levels[nextLevelId];\n        const fragLastKbps = this.fragLastKbps;\n        if (fragLastKbps && this.fragCurrent) {\n          fetchdelay = this.fragCurrent.duration * nextLevel.maxBitrate / (1e3 * fragLastKbps) + 1;\n        } else {\n          fetchdelay = 0;\n        }\n      } else {\n        fetchdelay = 0;\n      }\n      const bufferedFrag = this.getBufferedFrag(media.currentTime + fetchdelay);\n      if (bufferedFrag) {\n        const nextBufferedFrag = this.followingBufferedFrag(bufferedFrag);\n        if (nextBufferedFrag) {\n          this.abortCurrentFrag();\n          const maxStart = nextBufferedFrag.maxStartPTS ? nextBufferedFrag.maxStartPTS : nextBufferedFrag.start;\n          const fragDuration = nextBufferedFrag.duration;\n          const startPts = Math.max(bufferedFrag.end, maxStart + Math.min(Math.max(fragDuration - this.config.maxFragLookUpTolerance, fragDuration * (this.couldBacktrack ? 0.5 : 0.125)), fragDuration * (this.couldBacktrack ? 0.75 : 0.25)));\n          this.flushMainBuffer(startPts, Number.POSITIVE_INFINITY);\n        }\n      }\n    }\n  }\n  abortCurrentFrag() {\n    const fragCurrent = this.fragCurrent;\n    this.fragCurrent = null;\n    this.backtrackFragment = null;\n    if (fragCurrent) {\n      fragCurrent.abortRequests();\n      this.fragmentTracker.removeFragment(fragCurrent);\n    }\n    switch (this.state) {\n      case State.KEY_LOADING:\n      case State.FRAG_LOADING:\n      case State.FRAG_LOADING_WAITING_RETRY:\n      case State.PARSING:\n      case State.PARSED:\n        this.state = State.IDLE;\n        break;\n    }\n    this.nextLoadPosition = this.getLoadPosition();\n  }\n  flushMainBuffer(startOffset, endOffset) {\n    super.flushMainBuffer(startOffset, endOffset, this.altAudio ? \"video\" : null);\n  }\n  onMediaAttached(event, data) {\n    super.onMediaAttached(event, data);\n    const media = data.media;\n    this.onvplaying = this.onMediaPlaying.bind(this);\n    this.onvseeked = this.onMediaSeeked.bind(this);\n    media.addEventListener(\"playing\", this.onvplaying);\n    media.addEventListener(\"seeked\", this.onvseeked);\n    this.gapController = new GapController(this.config, media, this.fragmentTracker, this.hls);\n  }\n  onMediaDetaching() {\n    const {\n      media\n    } = this;\n    if (media && this.onvplaying && this.onvseeked) {\n      media.removeEventListener(\"playing\", this.onvplaying);\n      media.removeEventListener(\"seeked\", this.onvseeked);\n      this.onvplaying = this.onvseeked = null;\n      this.videoBuffer = null;\n    }\n    this.fragPlaying = null;\n    if (this.gapController) {\n      this.gapController.destroy();\n      this.gapController = null;\n    }\n    super.onMediaDetaching();\n  }\n  onMediaPlaying() {\n    this.tick();\n  }\n  onMediaSeeked() {\n    const media = this.media;\n    const currentTime = media ? media.currentTime : null;\n    if (isFiniteNumber(currentTime)) {\n      this.log(`Media seeked to ${currentTime.toFixed(3)}`);\n    }\n    const bufferInfo = this.getMainFwdBufferInfo();\n    if (bufferInfo === null || bufferInfo.len === 0) {\n      this.warn(`Main forward buffer length on \"seeked\" event ${bufferInfo ? bufferInfo.len : \"empty\"})`);\n      return;\n    }\n    this.tick();\n  }\n  onManifestLoading() {\n    this.log(\"Trigger BUFFER_RESET\");\n    this.hls.trigger(Events.BUFFER_RESET, void 0);\n    this.fragmentTracker.removeAllFragments();\n    this.couldBacktrack = false;\n    this.startPosition = this.lastCurrentTime = this.fragLastKbps = 0;\n    this.levels = this.fragPlaying = this.backtrackFragment = this.levelLastLoaded = null;\n    this.altAudio = this.audioOnly = this.startFragRequested = false;\n  }\n  onManifestParsed(event, data) {\n    let aac = false;\n    let heaac = false;\n    data.levels.forEach((level) => {\n      const codec = level.audioCodec;\n      if (codec) {\n        aac = aac || codec.indexOf(\"mp4a.40.2\") !== -1;\n        heaac = heaac || codec.indexOf(\"mp4a.40.5\") !== -1;\n      }\n    });\n    this.audioCodecSwitch = aac && heaac && !changeTypeSupported();\n    if (this.audioCodecSwitch) {\n      this.log(\"Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC\");\n    }\n    this.levels = data.levels;\n    this.startFragRequested = false;\n  }\n  onLevelLoading(event, data) {\n    const {\n      levels\n    } = this;\n    if (!levels || this.state !== State.IDLE) {\n      return;\n    }\n    const level = levels[data.level];\n    if (!level.details || level.details.live && this.levelLastLoaded !== level || this.waitForCdnTuneIn(level.details)) {\n      this.state = State.WAITING_LEVEL;\n    }\n  }\n  onLevelLoaded(event, data) {\n    var _curLevel$details;\n    const {\n      levels\n    } = this;\n    const newLevelId = data.level;\n    const newDetails = data.details;\n    const duration = newDetails.totalduration;\n    if (!levels) {\n      this.warn(`Levels were reset while loading level ${newLevelId}`);\n      return;\n    }\n    this.log(`Level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : \"\"}, cc [${newDetails.startCC}, ${newDetails.endCC}] duration:${duration}`);\n    const curLevel = levels[newLevelId];\n    const fragCurrent = this.fragCurrent;\n    if (fragCurrent && (this.state === State.FRAG_LOADING || this.state === State.FRAG_LOADING_WAITING_RETRY)) {\n      if (fragCurrent.level !== data.level && fragCurrent.loader) {\n        this.abortCurrentFrag();\n      }\n    }\n    let sliding = 0;\n    if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {\n      var _this$levelLastLoaded;\n      this.checkLiveUpdate(newDetails);\n      if (newDetails.deltaUpdateFailed) {\n        return;\n      }\n      sliding = this.alignPlaylists(newDetails, curLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n    }\n    curLevel.details = newDetails;\n    this.levelLastLoaded = curLevel;\n    this.hls.trigger(Events.LEVEL_UPDATED, {\n      details: newDetails,\n      level: newLevelId\n    });\n    if (this.state === State.WAITING_LEVEL) {\n      if (this.waitForCdnTuneIn(newDetails)) {\n        return;\n      }\n      this.state = State.IDLE;\n    }\n    if (!this.startFragRequested) {\n      this.setStartPosition(newDetails, sliding);\n    } else if (newDetails.live) {\n      this.synchronizeToLiveEdge(newDetails);\n    }\n    this.tick();\n  }\n  _handleFragmentLoadProgress(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      part,\n      payload\n    } = data;\n    const {\n      levels\n    } = this;\n    if (!levels) {\n      this.warn(`Levels were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n      return;\n    }\n    const currentLevel = levels[frag.level];\n    const details = currentLevel.details;\n    if (!details) {\n      this.warn(`Dropping fragment ${frag.sn} of level ${frag.level} after level details were reset`);\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    const videoCodec = currentLevel.videoCodec;\n    const accurateTimeOffset = details.PTSKnown || !details.live;\n    const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n    const audioCodec = this._getAudioCodec(currentLevel);\n    const transmuxer = this.transmuxer = this.transmuxer || new TransmuxerInterface(this.hls, PlaylistLevelType.MAIN, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n    const partIndex = part ? part.index : -1;\n    const partial = partIndex !== -1;\n    const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n    const initPTS = this.initPTS[frag.cc];\n    transmuxer.push(payload, initSegmentData, audioCodec, videoCodec, frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n  }\n  onAudioTrackSwitching(event, data) {\n    const fromAltAudio = this.altAudio;\n    const altAudio = !!data.url;\n    if (!altAudio) {\n      if (this.mediaBuffer !== this.media) {\n        this.log(\"Switching on main audio, use media.buffered to schedule main fragment loading\");\n        this.mediaBuffer = this.media;\n        const fragCurrent = this.fragCurrent;\n        if (fragCurrent) {\n          this.log(\"Switching to main audio track, cancel main fragment load\");\n          fragCurrent.abortRequests();\n          this.fragmentTracker.removeFragment(fragCurrent);\n        }\n        this.resetTransmuxer();\n        this.resetLoadingState();\n      } else if (this.audioOnly) {\n        this.resetTransmuxer();\n      }\n      const hls = this.hls;\n      if (fromAltAudio) {\n        hls.trigger(Events.BUFFER_FLUSHING, {\n          startOffset: 0,\n          endOffset: Number.POSITIVE_INFINITY,\n          type: null\n        });\n        this.fragmentTracker.removeAllFragments();\n      }\n      hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n    }\n  }\n  onAudioTrackSwitched(event, data) {\n    const trackId = data.id;\n    const altAudio = !!this.hls.audioTracks[trackId].url;\n    if (altAudio) {\n      const videoBuffer = this.videoBuffer;\n      if (videoBuffer && this.mediaBuffer !== videoBuffer) {\n        this.log(\"Switching on alternate audio, use video.buffered to schedule main fragment loading\");\n        this.mediaBuffer = videoBuffer;\n      }\n    }\n    this.altAudio = altAudio;\n    this.tick();\n  }\n  onBufferCreated(event, data) {\n    const tracks = data.tracks;\n    let mediaTrack;\n    let name;\n    let alternate = false;\n    for (const type in tracks) {\n      const track = tracks[type];\n      if (track.id === \"main\") {\n        name = type;\n        mediaTrack = track;\n        if (type === \"video\") {\n          const videoTrack = tracks[type];\n          if (videoTrack) {\n            this.videoBuffer = videoTrack.buffer;\n          }\n        }\n      } else {\n        alternate = true;\n      }\n    }\n    if (alternate && mediaTrack) {\n      this.log(`Alternate track found, use ${name}.buffered to schedule main fragment loading`);\n      this.mediaBuffer = mediaTrack.buffer;\n    } else {\n      this.mediaBuffer = this.media;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag && frag.type !== PlaylistLevelType.MAIN) {\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      this.warn(`Fragment ${frag.sn}${part ? \" p: \" + part.index : \"\"} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}`);\n      if (this.state === State.PARSED) {\n        this.state = State.IDLE;\n      }\n      return;\n    }\n    const stats = part ? part.stats : frag.stats;\n    this.fragLastKbps = Math.round(8 * stats.total / (stats.buffering.end - stats.loading.first));\n    if (frag.sn !== \"initSegment\") {\n      this.fragPrevious = frag;\n    }\n    this.fragBufferedComplete(frag, part);\n  }\n  onError(event, data) {\n    var _data$context;\n    if (data.fatal) {\n      this.state = State.ERROR;\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_PARSING_ERROR:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        this.onFragmentOrKeyLoadError(PlaylistLevelType.MAIN, data);\n        break;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        if (!data.levelRetry && this.state === State.WAITING_LEVEL && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.LEVEL) {\n          this.state = State.IDLE;\n        }\n        break;\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        if (!data.parent || data.parent !== \"main\") {\n          return;\n        }\n        if (data.details === ErrorDetails.BUFFER_APPEND_ERROR) {\n          this.resetLoadingState();\n          return;\n        }\n        if (this.reduceLengthAndFlushBuffer(data)) {\n          this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n        }\n        break;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n        this.recoverWorkerError(data);\n        break;\n    }\n  }\n  // Checks the health of the buffer and attempts to resolve playback stalls.\n  checkBuffer() {\n    const {\n      media,\n      gapController\n    } = this;\n    if (!media || !gapController || !media.readyState) {\n      return;\n    }\n    if (this.loadedmetadata || !BufferHelper.getBuffered(media).length) {\n      const activeFrag = this.state !== State.IDLE ? this.fragCurrent : null;\n      gapController.poll(this.lastCurrentTime, activeFrag);\n    }\n    this.lastCurrentTime = media.currentTime;\n  }\n  onFragLoadEmergencyAborted() {\n    this.state = State.IDLE;\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n      this.nextLoadPosition = this.startPosition;\n    }\n    this.tickImmediate();\n  }\n  onBufferFlushed(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.AUDIO || this.audioOnly && !this.altAudio) {\n      const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n      this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n      this.tick();\n    }\n  }\n  onLevelsUpdated(event, data) {\n    if (this.level > -1 && this.fragCurrent) {\n      this.level = this.fragCurrent.level;\n    }\n    this.levels = data.levels;\n  }\n  swapAudioCodec() {\n    this.audioCodecSwap = !this.audioCodecSwap;\n  }\n  /**\n   * Seeks to the set startPosition if not equal to the mediaElement's current time.\n   */\n  seekToStartPos() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    let startPosition = this.startPosition;\n    if (startPosition >= 0 && currentTime < startPosition) {\n      if (media.seeking) {\n        this.log(`could not seek to ${startPosition}, already seeking at ${currentTime}`);\n        return;\n      }\n      const buffered = BufferHelper.getBuffered(media);\n      const bufferStart = buffered.length ? buffered.start(0) : 0;\n      const delta = bufferStart - startPosition;\n      if (delta > 0 && (delta < this.config.maxBufferHole || delta < this.config.maxFragLookUpTolerance)) {\n        this.log(`adjusting start position by ${delta} to match buffer start`);\n        startPosition += delta;\n        this.startPosition = startPosition;\n      }\n      this.log(`seek to target start position ${startPosition} from current time ${currentTime}`);\n      media.currentTime = startPosition;\n    }\n  }\n  _getAudioCodec(currentLevel) {\n    let audioCodec = this.config.defaultAudioCodec || currentLevel.audioCodec;\n    if (this.audioCodecSwap && audioCodec) {\n      this.log(\"Swapping audio codec\");\n      if (audioCodec.indexOf(\"mp4a.40.5\") !== -1) {\n        audioCodec = \"mp4a.40.2\";\n      } else {\n        audioCodec = \"mp4a.40.5\";\n      }\n    }\n    return audioCodec;\n  }\n  _loadBitrateTestFrag(frag, level) {\n    frag.bitrateTest = true;\n    this._doFragLoad(frag, level).then((data) => {\n      const {\n        hls\n      } = this;\n      if (!data || this.fragContextChanged(frag)) {\n        return;\n      }\n      level.fragmentError = 0;\n      this.state = State.IDLE;\n      this.startFragRequested = false;\n      this.bitrateTest = false;\n      const stats = frag.stats;\n      stats.parsing.start = stats.parsing.end = stats.buffering.start = stats.buffering.end = self.performance.now();\n      hls.trigger(Events.FRAG_LOADED, data);\n      frag.bitrateTest = false;\n    });\n  }\n  _handleTransmuxComplete(transmuxResult) {\n    var _id3$samples;\n    const id = \"main\";\n    const {\n      hls\n    } = this;\n    const {\n      remuxResult,\n      chunkMeta\n    } = transmuxResult;\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context) {\n      this.resetWhenMissingContext(chunkMeta);\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const {\n      video,\n      text,\n      id3,\n      initSegment\n    } = remuxResult;\n    const {\n      details\n    } = level;\n    const audio = this.altAudio ? void 0 : remuxResult.audio;\n    if (this.fragContextChanged(frag)) {\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    this.state = State.PARSING;\n    if (initSegment) {\n      if (initSegment != null && initSegment.tracks) {\n        const mapFragment = frag.initSegment || frag;\n        this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n        hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n          frag: mapFragment,\n          id,\n          tracks: initSegment.tracks\n        });\n      }\n      const initPTS = initSegment.initPTS;\n      const timescale = initSegment.timescale;\n      if (isFiniteNumber(initPTS)) {\n        this.initPTS[frag.cc] = {\n          baseTime: initPTS,\n          timescale\n        };\n        hls.trigger(Events.INIT_PTS_FOUND, {\n          frag,\n          id,\n          initPTS,\n          timescale\n        });\n      }\n    }\n    if (video && details && frag.sn !== \"initSegment\") {\n      const prevFrag = details.fragments[frag.sn - 1 - details.startSN];\n      const isFirstFragment = frag.sn === details.startSN;\n      const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;\n      if (remuxResult.independent !== false) {\n        const {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        } = video;\n        if (part) {\n          part.elementaryStreams[video.type] = {\n            startPTS,\n            endPTS,\n            startDTS,\n            endDTS\n          };\n        } else {\n          if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {\n            this.couldBacktrack = true;\n          }\n          if (video.dropped && video.independent) {\n            const bufferInfo = this.getMainFwdBufferInfo();\n            const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;\n            const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;\n            if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {\n              this.backtrack(frag);\n              return;\n            } else if (isFirstInDiscontinuity) {\n              frag.gap = true;\n            }\n            frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);\n          } else if (isFirstFragment && startPTS > MAX_START_GAP_JUMP) {\n            frag.gap = true;\n          }\n        }\n        frag.setElementaryStreamInfo(video.type, startPTS, endPTS, startDTS, endDTS);\n        if (this.backtrackFragment) {\n          this.backtrackFragment = frag;\n        }\n        this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);\n      } else if (isFirstFragment || isFirstInDiscontinuity) {\n        frag.gap = true;\n      } else {\n        this.backtrack(frag);\n        return;\n      }\n    }\n    if (audio) {\n      const {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS\n      } = audio;\n      if (part) {\n        part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        };\n      }\n      frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n      this.bufferFragmentData(audio, frag, part, chunkMeta);\n    }\n    if (details && id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n      const emittedID3 = {\n        id,\n        frag,\n        details,\n        samples: id3.samples\n      };\n      hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n    }\n    if (details && text) {\n      const emittedText = {\n        id,\n        frag,\n        details,\n        samples: text.samples\n      };\n      hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n    }\n  }\n  _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n    if (this.state !== State.PARSING) {\n      return;\n    }\n    this.audioOnly = !!tracks.audio && !tracks.video;\n    if (this.altAudio && !this.audioOnly) {\n      delete tracks.audio;\n    }\n    const {\n      audio,\n      video,\n      audiovideo\n    } = tracks;\n    if (audio) {\n      let audioCodec = currentLevel.audioCodec;\n      const ua = navigator.userAgent.toLowerCase();\n      if (this.audioCodecSwitch) {\n        if (audioCodec) {\n          if (audioCodec.indexOf(\"mp4a.40.5\") !== -1) {\n            audioCodec = \"mp4a.40.2\";\n          } else {\n            audioCodec = \"mp4a.40.5\";\n          }\n        }\n        if (audio.metadata.channelCount !== 1 && ua.indexOf(\"firefox\") === -1) {\n          audioCodec = \"mp4a.40.5\";\n        }\n      }\n      if (audioCodec && audioCodec.indexOf(\"mp4a.40.5\") !== -1 && ua.indexOf(\"android\") !== -1 && audio.container !== \"audio/mpeg\") {\n        audioCodec = \"mp4a.40.2\";\n        this.log(`Android: force audio codec to ${audioCodec}`);\n      }\n      if (currentLevel.audioCodec && currentLevel.audioCodec !== audioCodec) {\n        this.log(`Swapping manifest audio codec \"${currentLevel.audioCodec}\" for \"${audioCodec}\"`);\n      }\n      audio.levelCodec = audioCodec;\n      audio.id = \"main\";\n      this.log(`Init audio buffer, container:${audio.container}, codecs[selected/level/parsed]=[${audioCodec || \"\"}/${currentLevel.audioCodec || \"\"}/${audio.codec}]`);\n    }\n    if (video) {\n      video.levelCodec = currentLevel.videoCodec;\n      video.id = \"main\";\n      this.log(`Init video buffer, container:${video.container}, codecs[level/parsed]=[${currentLevel.videoCodec || \"\"}/${video.codec}]`);\n    }\n    if (audiovideo) {\n      this.log(`Init audiovideo buffer, container:${audiovideo.container}, codecs[level/parsed]=[${currentLevel.codecs}/${audiovideo.codec}]`);\n    }\n    this.hls.trigger(Events.BUFFER_CODECS, tracks);\n    Object.keys(tracks).forEach((trackName) => {\n      const track = tracks[trackName];\n      const initSegment = track.initSegment;\n      if (initSegment != null && initSegment.byteLength) {\n        this.hls.trigger(Events.BUFFER_APPENDING, {\n          type: trackName,\n          data: initSegment,\n          frag,\n          part: null,\n          chunkMeta,\n          parent: frag.type\n        });\n      }\n    });\n    this.tickImmediate();\n  }\n  getMainFwdBufferInfo() {\n    return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, PlaylistLevelType.MAIN);\n  }\n  backtrack(frag) {\n    this.couldBacktrack = true;\n    this.backtrackFragment = frag;\n    this.resetTransmuxer();\n    this.flushBufferGap(frag);\n    this.fragmentTracker.removeFragment(frag);\n    this.fragPrevious = null;\n    this.nextLoadPosition = frag.start;\n    this.state = State.IDLE;\n  }\n  checkFragmentChanged() {\n    const video = this.media;\n    let fragPlayingCurrent = null;\n    if (video && video.readyState > 1 && video.seeking === false) {\n      const currentTime = video.currentTime;\n      if (BufferHelper.isBuffered(video, currentTime)) {\n        fragPlayingCurrent = this.getAppendedFrag(currentTime);\n      } else if (BufferHelper.isBuffered(video, currentTime + 0.1)) {\n        fragPlayingCurrent = this.getAppendedFrag(currentTime + 0.1);\n      }\n      if (fragPlayingCurrent) {\n        this.backtrackFragment = null;\n        const fragPlaying = this.fragPlaying;\n        const fragCurrentLevel = fragPlayingCurrent.level;\n        if (!fragPlaying || fragPlayingCurrent.sn !== fragPlaying.sn || fragPlaying.level !== fragCurrentLevel) {\n          this.fragPlaying = fragPlayingCurrent;\n          this.hls.trigger(Events.FRAG_CHANGED, {\n            frag: fragPlayingCurrent\n          });\n          if (!fragPlaying || fragPlaying.level !== fragCurrentLevel) {\n            this.hls.trigger(Events.LEVEL_SWITCHED, {\n              level: fragCurrentLevel\n            });\n          }\n        }\n      }\n    }\n  }\n  get nextLevel() {\n    const frag = this.nextBufferedFrag;\n    if (frag) {\n      return frag.level;\n    }\n    return -1;\n  }\n  get currentFrag() {\n    const media = this.media;\n    if (media) {\n      return this.fragPlaying || this.getAppendedFrag(media.currentTime);\n    }\n    return null;\n  }\n  get currentProgramDateTime() {\n    const media = this.media;\n    if (media) {\n      const currentTime = media.currentTime;\n      const frag = this.currentFrag;\n      if (frag && isFiniteNumber(currentTime) && isFiniteNumber(frag.programDateTime)) {\n        const epocMs = frag.programDateTime + (currentTime - frag.start) * 1e3;\n        return new Date(epocMs);\n      }\n    }\n    return null;\n  }\n  get currentLevel() {\n    const frag = this.currentFrag;\n    if (frag) {\n      return frag.level;\n    }\n    return -1;\n  }\n  get nextBufferedFrag() {\n    const frag = this.currentFrag;\n    if (frag) {\n      return this.followingBufferedFrag(frag);\n    }\n    return null;\n  }\n  get forceStartLoad() {\n    return this._forceStartLoad;\n  }\n}\nclass Hls {\n  /**\n   * Get the video-dev/hls.js package version.\n   */\n  static get version() {\n    return \"1.5.7\";\n  }\n  /**\n   * Check if the required MediaSource Extensions are available.\n   */\n  static isMSESupported() {\n    return isMSESupported();\n  }\n  /**\n   * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.\n   */\n  static isSupported() {\n    return isSupported();\n  }\n  /**\n   * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).\n   */\n  static getMediaSource() {\n    return getMediaSource();\n  }\n  static get Events() {\n    return Events;\n  }\n  static get ErrorTypes() {\n    return ErrorTypes;\n  }\n  static get ErrorDetails() {\n    return ErrorDetails;\n  }\n  /**\n   * Get the default configuration applied to new instances.\n   */\n  static get DefaultConfig() {\n    if (!Hls.defaultConfig) {\n      return hlsDefaultConfig;\n    }\n    return Hls.defaultConfig;\n  }\n  /**\n   * Replace the default configuration applied to new instances.\n   */\n  static set DefaultConfig(defaultConfig) {\n    Hls.defaultConfig = defaultConfig;\n  }\n  /**\n   * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.\n   * @param userConfig - Configuration options applied over `Hls.DefaultConfig`\n   */\n  constructor(userConfig = {}) {\n    this.config = void 0;\n    this.userConfig = void 0;\n    this.coreComponents = void 0;\n    this.networkControllers = void 0;\n    this.started = false;\n    this._emitter = new EventEmitter();\n    this._autoLevelCapping = -1;\n    this._maxHdcpLevel = null;\n    this.abrController = void 0;\n    this.bufferController = void 0;\n    this.capLevelController = void 0;\n    this.latencyController = void 0;\n    this.levelController = void 0;\n    this.streamController = void 0;\n    this.audioTrackController = void 0;\n    this.subtitleTrackController = void 0;\n    this.emeController = void 0;\n    this.cmcdController = void 0;\n    this._media = null;\n    this.url = null;\n    this.triggeringException = void 0;\n    enableLogs(userConfig.debug || false, \"Hls instance\");\n    const config = this.config = mergeConfig(Hls.DefaultConfig, userConfig);\n    this.userConfig = userConfig;\n    if (config.progressive) {\n      enableStreamingMode(config);\n    }\n    const {\n      abrController: ConfigAbrController,\n      bufferController: ConfigBufferController,\n      capLevelController: ConfigCapLevelController,\n      errorController: ConfigErrorController,\n      fpsController: ConfigFpsController\n    } = config;\n    const errorController = new ConfigErrorController(this);\n    const abrController = this.abrController = new ConfigAbrController(this);\n    const bufferController = this.bufferController = new ConfigBufferController(this);\n    const capLevelController = this.capLevelController = new ConfigCapLevelController(this);\n    const fpsController = new ConfigFpsController(this);\n    const playListLoader = new PlaylistLoader(this);\n    const id3TrackController = new ID3TrackController(this);\n    const ConfigContentSteeringController = config.contentSteeringController;\n    const contentSteering = ConfigContentSteeringController ? new ConfigContentSteeringController(this) : null;\n    const levelController = this.levelController = new LevelController(this, contentSteering);\n    const fragmentTracker = new FragmentTracker(this);\n    const keyLoader = new KeyLoader(this.config);\n    const streamController = this.streamController = new StreamController(this, fragmentTracker, keyLoader);\n    capLevelController.setStreamController(streamController);\n    fpsController.setStreamController(streamController);\n    const networkControllers = [playListLoader, levelController, streamController];\n    if (contentSteering) {\n      networkControllers.splice(1, 0, contentSteering);\n    }\n    this.networkControllers = networkControllers;\n    const coreComponents = [abrController, bufferController, capLevelController, fpsController, id3TrackController, fragmentTracker];\n    this.audioTrackController = this.createController(config.audioTrackController, networkControllers);\n    const AudioStreamControllerClass = config.audioStreamController;\n    if (AudioStreamControllerClass) {\n      networkControllers.push(new AudioStreamControllerClass(this, fragmentTracker, keyLoader));\n    }\n    this.subtitleTrackController = this.createController(config.subtitleTrackController, networkControllers);\n    const SubtitleStreamControllerClass = config.subtitleStreamController;\n    if (SubtitleStreamControllerClass) {\n      networkControllers.push(new SubtitleStreamControllerClass(this, fragmentTracker, keyLoader));\n    }\n    this.createController(config.timelineController, coreComponents);\n    keyLoader.emeController = this.emeController = this.createController(config.emeController, coreComponents);\n    this.cmcdController = this.createController(config.cmcdController, coreComponents);\n    this.latencyController = this.createController(LatencyController, coreComponents);\n    this.coreComponents = coreComponents;\n    networkControllers.push(errorController);\n    const onErrorOut = errorController.onErrorOut;\n    if (typeof onErrorOut === \"function\") {\n      this.on(Events.ERROR, onErrorOut, errorController);\n    }\n  }\n  createController(ControllerClass, components) {\n    if (ControllerClass) {\n      const controllerInstance = new ControllerClass(this);\n      if (components) {\n        components.push(controllerInstance);\n      }\n      return controllerInstance;\n    }\n    return null;\n  }\n  // Delegate the EventEmitter through the public API of Hls.js\n  on(event, listener, context = this) {\n    this._emitter.on(event, listener, context);\n  }\n  once(event, listener, context = this) {\n    this._emitter.once(event, listener, context);\n  }\n  removeAllListeners(event) {\n    this._emitter.removeAllListeners(event);\n  }\n  off(event, listener, context = this, once) {\n    this._emitter.off(event, listener, context, once);\n  }\n  listeners(event) {\n    return this._emitter.listeners(event);\n  }\n  emit(event, name, eventObject) {\n    return this._emitter.emit(event, name, eventObject);\n  }\n  trigger(event, eventObject) {\n    if (this.config.debug) {\n      return this.emit(event, event, eventObject);\n    } else {\n      try {\n        return this.emit(event, event, eventObject);\n      } catch (error) {\n        logger.error(\"An internal error happened while handling event \" + event + '. Error message: \"' + error.message + '\". Here is a stacktrace:', error);\n        if (!this.triggeringException) {\n          this.triggeringException = true;\n          const fatal = event === Events.ERROR;\n          this.trigger(Events.ERROR, {\n            type: ErrorTypes.OTHER_ERROR,\n            details: ErrorDetails.INTERNAL_EXCEPTION,\n            fatal,\n            event,\n            error\n          });\n          this.triggeringException = false;\n        }\n      }\n    }\n    return false;\n  }\n  listenerCount(event) {\n    return this._emitter.listenerCount(event);\n  }\n  /**\n   * Dispose of the instance\n   */\n  destroy() {\n    logger.log(\"destroy\");\n    this.trigger(Events.DESTROYING, void 0);\n    this.detachMedia();\n    this.removeAllListeners();\n    this._autoLevelCapping = -1;\n    this.url = null;\n    this.networkControllers.forEach((component) => component.destroy());\n    this.networkControllers.length = 0;\n    this.coreComponents.forEach((component) => component.destroy());\n    this.coreComponents.length = 0;\n    const config = this.config;\n    config.xhrSetup = config.fetchSetup = void 0;\n    this.userConfig = null;\n  }\n  /**\n   * Attaches Hls.js to a media element\n   */\n  attachMedia(media) {\n    logger.log(\"attachMedia\");\n    this._media = media;\n    this.trigger(Events.MEDIA_ATTACHING, {\n      media\n    });\n  }\n  /**\n   * Detach Hls.js from the media\n   */\n  detachMedia() {\n    logger.log(\"detachMedia\");\n    this.trigger(Events.MEDIA_DETACHING, void 0);\n    this._media = null;\n  }\n  /**\n   * Set the source URL. Can be relative or absolute.\n   */\n  loadSource(url) {\n    this.stopLoad();\n    const media = this.media;\n    const loadedSource = this.url;\n    const loadingSource = this.url = urlToolkitExports.buildAbsoluteURL(self.location.href, url, {\n      alwaysNormalize: true\n    });\n    this._autoLevelCapping = -1;\n    this._maxHdcpLevel = null;\n    logger.log(`loadSource:${loadingSource}`);\n    if (media && loadedSource && (loadedSource !== loadingSource || this.bufferController.hasSourceTypes())) {\n      this.detachMedia();\n      this.attachMedia(media);\n    }\n    this.trigger(Events.MANIFEST_LOADING, {\n      url\n    });\n  }\n  /**\n   * Start loading data from the stream source.\n   * Depending on default config, client starts loading automatically when a source is set.\n   *\n   * @param startPosition - Set the start position to stream from.\n   * Defaults to -1 (None: starts from earliest point)\n   */\n  startLoad(startPosition = -1) {\n    logger.log(`startLoad(${startPosition})`);\n    this.started = true;\n    this.networkControllers.forEach((controller) => {\n      controller.startLoad(startPosition);\n    });\n  }\n  /**\n   * Stop loading of any stream data.\n   */\n  stopLoad() {\n    logger.log(\"stopLoad\");\n    this.started = false;\n    this.networkControllers.forEach((controller) => {\n      controller.stopLoad();\n    });\n  }\n  /**\n   * Resumes stream controller segment loading if previously started.\n   */\n  resumeBuffering() {\n    if (this.started) {\n      this.networkControllers.forEach((controller) => {\n        if (\"fragmentLoader\" in controller) {\n          controller.startLoad(-1);\n        }\n      });\n    }\n  }\n  /**\n   * Stops stream controller segment loading without changing 'started' state like stopLoad().\n   * This allows for media buffering to be paused without interupting playlist loading.\n   */\n  pauseBuffering() {\n    this.networkControllers.forEach((controller) => {\n      if (\"fragmentLoader\" in controller) {\n        controller.stopLoad();\n      }\n    });\n  }\n  /**\n   * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)\n   */\n  swapAudioCodec() {\n    logger.log(\"swapAudioCodec\");\n    this.streamController.swapAudioCodec();\n  }\n  /**\n   * When the media-element fails, this allows to detach and then re-attach it\n   * as one call (convenience method).\n   *\n   * Automatic recovery of media-errors by this process is configurable.\n   */\n  recoverMediaError() {\n    logger.log(\"recoverMediaError\");\n    const media = this._media;\n    this.detachMedia();\n    if (media) {\n      this.attachMedia(media);\n    }\n  }\n  removeLevel(levelIndex) {\n    this.levelController.removeLevel(levelIndex);\n  }\n  /**\n   * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH\n   */\n  get levels() {\n    const levels = this.levelController.levels;\n    return levels ? levels : [];\n  }\n  /**\n   * Index of quality level (variant) currently played\n   */\n  get currentLevel() {\n    return this.streamController.currentLevel;\n  }\n  /**\n   * Set quality level index immediately. This will flush the current buffer to replace the quality asap. That means playback will interrupt at least shortly to re-buffer and re-sync eventually. Set to -1 for automatic level selection.\n   */\n  set currentLevel(newLevel) {\n    logger.log(`set currentLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.immediateLevelSwitch();\n  }\n  /**\n   * Index of next quality level loaded as scheduled by stream controller.\n   */\n  get nextLevel() {\n    return this.streamController.nextLevel;\n  }\n  /**\n   * Set quality level index for next loaded data.\n   * This will switch the video quality asap, without interrupting playback.\n   * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).\n   * @param newLevel - Pass -1 for automatic level selection\n   */\n  set nextLevel(newLevel) {\n    logger.log(`set nextLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.nextLevelSwitch();\n  }\n  /**\n   * Return the quality level of the currently or last (of none is loaded currently) segment\n   */\n  get loadLevel() {\n    return this.levelController.level;\n  }\n  /**\n   * Set quality level index for next loaded data in a conservative way.\n   * This will switch the quality without flushing, but interrupt current loading.\n   * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.\n   * @param newLevel - Pass -1 for automatic level selection\n   */\n  set loadLevel(newLevel) {\n    logger.log(`set loadLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n  }\n  /**\n   * get next quality level loaded\n   */\n  get nextLoadLevel() {\n    return this.levelController.nextLoadLevel;\n  }\n  /**\n   * Set quality level of next loaded segment in a fully \"non-destructive\" way.\n   * Same as `loadLevel` but will wait for next switch (until current loading is done).\n   */\n  set nextLoadLevel(level) {\n    this.levelController.nextLoadLevel = level;\n  }\n  /**\n   * Return \"first level\": like a default level, if not set,\n   * falls back to index of first level referenced in manifest\n   */\n  get firstLevel() {\n    return Math.max(this.levelController.firstLevel, this.minAutoLevel);\n  }\n  /**\n   * Sets \"first-level\", see getter.\n   */\n  set firstLevel(newLevel) {\n    logger.log(`set firstLevel:${newLevel}`);\n    this.levelController.firstLevel = newLevel;\n  }\n  /**\n   * Return the desired start level for the first fragment that will be loaded.\n   * The default value of -1 indicates automatic start level selection.\n   * Setting hls.nextAutoLevel without setting a startLevel will result in\n   * the nextAutoLevel value being used for one fragment load.\n   */\n  get startLevel() {\n    const startLevel = this.levelController.startLevel;\n    if (startLevel === -1 && this.abrController.forcedAutoLevel > -1) {\n      return this.abrController.forcedAutoLevel;\n    }\n    return startLevel;\n  }\n  /**\n   * set  start level (level of first fragment that will be played back)\n   * if not overrided by user, first level appearing in manifest will be used as start level\n   * if -1 : automatic start level selection, playback will start from level matching download bandwidth\n   * (determined from download of first segment)\n   */\n  set startLevel(newLevel) {\n    logger.log(`set startLevel:${newLevel}`);\n    if (newLevel !== -1) {\n      newLevel = Math.max(newLevel, this.minAutoLevel);\n    }\n    this.levelController.startLevel = newLevel;\n  }\n  /**\n   * Whether level capping is enabled.\n   * Default value is set via `config.capLevelToPlayerSize`.\n   */\n  get capLevelToPlayerSize() {\n    return this.config.capLevelToPlayerSize;\n  }\n  /**\n   * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.\n   */\n  set capLevelToPlayerSize(shouldStartCapping) {\n    const newCapLevelToPlayerSize = !!shouldStartCapping;\n    if (newCapLevelToPlayerSize !== this.config.capLevelToPlayerSize) {\n      if (newCapLevelToPlayerSize) {\n        this.capLevelController.startCapping();\n      } else {\n        this.capLevelController.stopCapping();\n        this.autoLevelCapping = -1;\n        this.streamController.nextLevelSwitch();\n      }\n      this.config.capLevelToPlayerSize = newCapLevelToPlayerSize;\n    }\n  }\n  /**\n   * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n   */\n  get autoLevelCapping() {\n    return this._autoLevelCapping;\n  }\n  /**\n   * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.\n   */\n  get bandwidthEstimate() {\n    const {\n      bwEstimator\n    } = this.abrController;\n    if (!bwEstimator) {\n      return NaN;\n    }\n    return bwEstimator.getEstimate();\n  }\n  set bandwidthEstimate(abrEwmaDefaultEstimate) {\n    this.abrController.resetEstimator(abrEwmaDefaultEstimate);\n  }\n  /**\n   * get time to first byte estimate\n   * @type {number}\n   */\n  get ttfbEstimate() {\n    const {\n      bwEstimator\n    } = this.abrController;\n    if (!bwEstimator) {\n      return NaN;\n    }\n    return bwEstimator.getEstimateTTFB();\n  }\n  /**\n   * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n   */\n  set autoLevelCapping(newLevel) {\n    if (this._autoLevelCapping !== newLevel) {\n      logger.log(`set autoLevelCapping:${newLevel}`);\n      this._autoLevelCapping = newLevel;\n      this.levelController.checkMaxAutoUpdated();\n    }\n  }\n  get maxHdcpLevel() {\n    return this._maxHdcpLevel;\n  }\n  set maxHdcpLevel(value) {\n    if (isHdcpLevel(value) && this._maxHdcpLevel !== value) {\n      this._maxHdcpLevel = value;\n      this.levelController.checkMaxAutoUpdated();\n    }\n  }\n  /**\n   * True when automatic level selection enabled\n   */\n  get autoLevelEnabled() {\n    return this.levelController.manualLevel === -1;\n  }\n  /**\n   * Level set manually (if any)\n   */\n  get manualLevel() {\n    return this.levelController.manualLevel;\n  }\n  /**\n   * min level selectable in auto mode according to config.minAutoBitrate\n   */\n  get minAutoLevel() {\n    const {\n      levels,\n      config: {\n        minAutoBitrate\n      }\n    } = this;\n    if (!levels)\n      return 0;\n    const len = levels.length;\n    for (let i = 0; i < len; i++) {\n      if (levels[i].maxBitrate >= minAutoBitrate) {\n        return i;\n      }\n    }\n    return 0;\n  }\n  /**\n   * max level selectable in auto mode according to autoLevelCapping\n   */\n  get maxAutoLevel() {\n    const {\n      levels,\n      autoLevelCapping,\n      maxHdcpLevel\n    } = this;\n    let maxAutoLevel;\n    if (autoLevelCapping === -1 && levels != null && levels.length) {\n      maxAutoLevel = levels.length - 1;\n    } else {\n      maxAutoLevel = autoLevelCapping;\n    }\n    if (maxHdcpLevel) {\n      for (let i = maxAutoLevel; i--; ) {\n        const hdcpLevel = levels[i].attrs[\"HDCP-LEVEL\"];\n        if (hdcpLevel && hdcpLevel <= maxHdcpLevel) {\n          return i;\n        }\n      }\n    }\n    return maxAutoLevel;\n  }\n  get firstAutoLevel() {\n    return this.abrController.firstAutoLevel;\n  }\n  /**\n   * next automatically selected quality level\n   */\n  get nextAutoLevel() {\n    return this.abrController.nextAutoLevel;\n  }\n  /**\n   * this setter is used to force next auto level.\n   * this is useful to force a switch down in auto mode:\n   * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)\n   * forced value is valid for one fragment. upon successful frag loading at forced level,\n   * this value will be resetted to -1 by ABR controller.\n   */\n  set nextAutoLevel(nextLevel) {\n    this.abrController.nextAutoLevel = nextLevel;\n  }\n  /**\n   * get the datetime value relative to media.currentTime for the active level Program Date Time if present\n   */\n  get playingDate() {\n    return this.streamController.currentProgramDateTime;\n  }\n  get mainForwardBufferInfo() {\n    return this.streamController.getMainFwdBufferInfo();\n  }\n  /**\n   * Find and select the best matching audio track, making a level switch when a Group change is necessary.\n   * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.\n   */\n  setAudioOption(audioOption) {\n    var _this$audioTrackContr;\n    return (_this$audioTrackContr = this.audioTrackController) == null ? void 0 : _this$audioTrackContr.setAudioOption(audioOption);\n  }\n  /**\n   * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.\n   * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.\n   */\n  setSubtitleOption(subtitleOption) {\n    var _this$subtitleTrackCo;\n    (_this$subtitleTrackCo = this.subtitleTrackController) == null ? void 0 : _this$subtitleTrackCo.setSubtitleOption(subtitleOption);\n    return null;\n  }\n  /**\n   * Get the complete list of audio tracks across all media groups\n   */\n  get allAudioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.allAudioTracks : [];\n  }\n  /**\n   * Get the list of selectable audio tracks\n   */\n  get audioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTracks : [];\n  }\n  /**\n   * index of the selected audio track (index in audio track lists)\n   */\n  get audioTrack() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTrack : -1;\n  }\n  /**\n   * selects an audio track, based on its index in audio track lists\n   */\n  set audioTrack(audioTrackId) {\n    const audioTrackController = this.audioTrackController;\n    if (audioTrackController) {\n      audioTrackController.audioTrack = audioTrackId;\n    }\n  }\n  /**\n   * get the complete list of subtitle tracks across all media groups\n   */\n  get allSubtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.allSubtitleTracks : [];\n  }\n  /**\n   * get alternate subtitle tracks list from playlist\n   */\n  get subtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTracks : [];\n  }\n  /**\n   * index of the selected subtitle track (index in subtitle track lists)\n   */\n  get subtitleTrack() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTrack : -1;\n  }\n  get media() {\n    return this._media;\n  }\n  /**\n   * select an subtitle track, based on its index in subtitle track lists\n   */\n  set subtitleTrack(subtitleTrackId) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleTrack = subtitleTrackId;\n    }\n  }\n  /**\n   * Whether subtitle display is enabled or not\n   */\n  get subtitleDisplay() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleDisplay : false;\n  }\n  /**\n   * Enable/disable subtitle display rendering\n   */\n  set subtitleDisplay(value) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleDisplay = value;\n    }\n  }\n  /**\n   * get mode for Low-Latency HLS loading\n   */\n  get lowLatencyMode() {\n    return this.config.lowLatencyMode;\n  }\n  /**\n   * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.\n   */\n  set lowLatencyMode(mode) {\n    this.config.lowLatencyMode = mode;\n  }\n  /**\n   * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)\n   * @returns null prior to loading live Playlist\n   */\n  get liveSyncPosition() {\n    return this.latencyController.liveSyncPosition;\n  }\n  /**\n   * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)\n   * @returns 0 before first playlist is loaded\n   */\n  get latency() {\n    return this.latencyController.latency;\n  }\n  /**\n   * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```\n   * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```\n   * @returns 0 before first playlist is loaded\n   */\n  get maxLatency() {\n    return this.latencyController.maxLatency;\n  }\n  /**\n   * target distance from the edge as calculated by the latency controller\n   */\n  get targetLatency() {\n    return this.latencyController.targetLatency;\n  }\n  /**\n   * the rate at which the edge of the current live playlist is advancing or 1 if there is none\n   */\n  get drift() {\n    return this.latencyController.drift;\n  }\n  /**\n   * set to true when startLoad is called before MANIFEST_PARSED event\n   */\n  get forceStartLoad() {\n    return this.streamController.forceStartLoad;\n  }\n}\nHls.defaultConfig = void 0;\nexport {\n  AbrController,\n  AttrList,\n  AudioStreamController,\n  AudioTrackController,\n  BasePlaylistController,\n  BaseSegment,\n  BaseStreamController,\n  BufferController,\n  CMCDController,\n  CapLevelController,\n  ChunkMetadata,\n  ContentSteeringController,\n  DateRange,\n  EMEController,\n  ErrorActionFlags,\n  ErrorController,\n  ErrorDetails,\n  ErrorTypes,\n  Events,\n  FPSController,\n  Fragment,\n  Hls,\n  HlsSkip,\n  HlsUrlParameters,\n  KeySystemFormats,\n  KeySystems,\n  Level,\n  LevelDetails,\n  LevelKey,\n  LoadStats,\n  MetadataSchema,\n  NetworkErrorAction,\n  Part,\n  PlaylistLevelType,\n  SubtitleStreamController,\n  SubtitleTrackController,\n  TimelineController,\n  Hls as default,\n  getMediaSource,\n  isMSESupported,\n  isSupported\n};\n", "import { Hls } from \"../node_modules/hls.js/dist/hls.js\";\nconst hlsCompatibilityHelper = (video) => {\n  if (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n    video.play();\n    return;\n  }\n  if (Hls.isSupported()) {\n    const videoUrl = video.src;\n    const hls = new Hls();\n    hls.loadSource(videoUrl || \"\");\n    hls.attachMedia(video);\n    if (video.getAttribute(\"autoplay\") !== null && video.getAttribute(\"autoplay\") !== \"false\") {\n      hls.on(Hls.Events.MANIFEST_PARSED, () => {\n        video.play();\n      });\n    }\n  }\n};\nexport {\n  hlsCompatibilityHelper\n};\n", "import { hlsCompatibilityHelper } from \"../../../utils/hls.js\";\nconst catchHlsPlaybackError = (event) => {\n  const video = event.target;\n  hlsCompatibilityHelper(video);\n};\nexport {\n  catchHlsPlaybackError\n};\n", "(function() {\n  \"use strict\";\n  try {\n    if (typeof document != \"undefined\") {\n      var elementStyle = document.createElement(\"style\");\n      elementStyle.appendChild(document.createTextNode(\"._wrapper_1mtar_1 {\\n  width: 100%;\\n  aspect-ratio: 13 / 21;\\n}\\n\\n@supports not (aspect-ratio: 13 / 21) {\\n  ._wrapper_1mtar_1::before {\\n    content: '';\\n    display: block;\\n    padding-top: calc(21 / 13 * 100%);\\n  }\\n}\\n\\n._video_1mtar_14 {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  object-fit: cover;\\n}\"));\n      document.head.appendChild(elementStyle);\n    }\n  } catch (e) {\n    console.error(\"vite-plugin-css-injected-by-js\", e);\n  }\n})();\nconst wrapper = \"_wrapper_1mtar_1\";\nconst video = \"_video_1mtar_14\";\nconst styles = {\n  wrapper,\n  video\n};\nexport {\n  styles as default,\n  video,\n  wrapper\n};\n", "import { useAnalytics } from \"../../../hooks/analytics/useAnalytics.js\";\nconst useTrackClickPlayLiveContent = () => {\n  const {\n    trackAmplitude\n  } = useAnalytics();\n  const trackClickPlayLiveContent = (campaignKey) => {\n    const properties = {\n      campaign_key: campaignKey\n    };\n    trackAmplitude(\"click_play_live_content\", properties);\n  };\n  return {\n    trackClickPlayLiveContent\n  };\n};\nexport {\n  useTrackClickPlayLiveContent\n};\n", "import { useAppLinkDialog } from \"../../@shared/dialogs/AppLinkDialog/AppLinkDialog.hooks.js\";\nimport { useFetchLiveCampaign } from \"../../../hooks/fetchers/useFetchLiveCampaign.js\";\nimport { useLiveCampaignStatus } from \"../../../hooks/useLiveStatus.js\";\nimport { useTrackClickPlayLiveContent } from \"./LiveCampaignVideo.hooks.event.js\";\nimport { isWebview } from \"../../../utils/device.js\";\nimport { useState, useEffect } from \"react\";\nimport { useInView } from \"framer-motion\";\nimport useInterval from \"../../../node_modules/react-use/esm/useInterval.js\";\nconst MS_IN_SECOND = 1e3;\nconst useIsEnabled = (ref) => {\n  return useInView(ref, {\n    margin: \"200px 0px\",\n    once: true\n  });\n};\nconst useIsImpressed = (ref) => {\n  return useInView(ref, {\n    margin: \"0px\",\n    amount: 0.5\n  });\n};\nconst useLiveCampaignVideo = ({\n  campaignKey,\n  playPreviewStatusList,\n  intervalEnabled,\n  enabled = true\n}) => {\n  const {\n    isLoading,\n    data,\n    mutate\n  } = useFetchLiveCampaign(campaignKey, enabled);\n  const campaign = data == null ? void 0 : data.data;\n  const status = useLiveCampaignStatus(campaign);\n  const shouldRenderPreview = playPreviewStatusList.includes(status);\n  const previewUrl = ((campaign == null ? void 0 : campaign.previewLiveUrl) || (campaign == null ? void 0 : campaign.previewReplayLiveUrl)) ?? void 0;\n  const posterUrl = (campaign == null ? void 0 : campaign.poster2Url) ?? void 0;\n  const isPending = isLoading || !campaign;\n  useInterval(() => {\n    mutate();\n  }, intervalEnabled && shouldRenderPreview && !previewUrl ? MS_IN_SECOND * 10 : null);\n  return {\n    isPending,\n    data,\n    status,\n    shouldRenderPreview,\n    previewUrl,\n    posterUrl\n  };\n};\nconst ACCESS_FROM_APP_MESSAGE = \"\uB77C\uC774\uBE0C \uBC29\uC1A1\uC740 APP \uC804\uC6A9 \uC11C\uBE44\uC2A4\uC608\uC694!\\nAPP\uC5D0\uC11C \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.\";\nconst useLiveCampaignVideoAction = (campaignKey) => {\n  const dialog = useAppLinkDialog({\n    content: ACCESS_FROM_APP_MESSAGE,\n    displayDesktopQRCode: false\n  });\n  const {\n    trackClickPlayLiveContent\n  } = useTrackClickPlayLiveContent();\n  const handleVideoClick = () => {\n    if (!isWebview()) {\n      dialog.show();\n      return;\n    }\n    trackClickPlayLiveContent(campaignKey);\n    document.location.href = `app29cm://content/live/${campaignKey}`;\n  };\n  return {\n    handleVideoClick\n  };\n};\nconst usePlayInView = (isInView) => {\n  const [video, setVideo] = useState(null);\n  useEffect(() => {\n    if (video === null) {\n      return;\n    }\n    if (isInView) {\n      if (video.paused) {\n        video.play();\n      }\n    } else {\n      video.pause();\n    }\n  }, [video, isInView]);\n  return {\n    setVideo\n  };\n};\nexport {\n  useIsEnabled,\n  useIsImpressed,\n  useLiveCampaignVideo,\n  useLiveCampaignVideoAction,\n  usePlayInView\n};\n", "const CampaignStatus = {\n  READY: \"READY\",\n  ONAIR: \"ONAIR\",\n  CLOSED: \"CLOSED\",\n  NOT_EXIST: \"NOT_EXIST\"\n};\nexport {\n  CampaignStatus\n};\n", "import { CampaignStatus } from \"../apis/live-campaign/LiveCampaignApiService.types.js\";\nconst RichCampaignStatus = {\n  ...CampaignStatus,\n  TEASING: \"TEASING\",\n  REHEARSAL: \"REHEARSAL\"\n};\nexport {\n  RichCampaignStatus\n};\n", "import { RichCampaignStatus } from \"../../../types/live-campaign.js\";\nconst PREVIEW_ALLOWED_STATUS_LIST = [RichCampaignStatus.REHEARSAL, RichCampaignStatus.ONAIR, RichCampaignStatus.CLOSED];\nconst MINIMAL_PREVIEW_ALLOWED_STATUS_LIST = [RichCampaignStatus.REHEARSAL, RichCampaignStatus.ONAIR];\nexport {\n  MINIMAL_PREVIEW_ALLOWED_STATUS_LIST,\n  PREVIEW_ALLOWED_STATUS_LIST\n};\n", "import { jsx } from \"react/jsx-runtime\";\nimport { addPropertyControls, ControlType } from \"framer\";\nimport { catchHlsPlaybackError } from \"./LiveCampaignVideo.utils.js\";\nimport styles from \"./LiveCampaignVideo.module.css.js\";\nimport { useIsEnabled, useIsImpressed, useLiveCampaignVideo, useLiveCampaignVideoAction, usePlayInView } from \"./LiveCampaignVideo.hooks.js\";\nimport { useRef } from \"react\";\nimport { PREVIEW_ALLOWED_STATUS_LIST, MINIMAL_PREVIEW_ALLOWED_STATUS_LIST } from \"./LiveCampaignVideo.constants.js\";\nconst LiveCampaignVideo = ({\n  campaignKey,\n  playAfterCampaign\n}) => {\n  const ref = useRef(null);\n  const enabled = useIsEnabled(ref);\n  const isImpressed = useIsImpressed(ref);\n  const playPreviewStatusList = playAfterCampaign ? PREVIEW_ALLOWED_STATUS_LIST : MINIMAL_PREVIEW_ALLOWED_STATUS_LIST;\n  const {\n    isPending,\n    shouldRenderPreview,\n    previewUrl,\n    posterUrl\n  } = useLiveCampaignVideo({\n    campaignKey,\n    playPreviewStatusList,\n    intervalEnabled: isImpressed,\n    enabled\n  });\n  const {\n    handleVideoClick\n  } = useLiveCampaignVideoAction(campaignKey);\n  const {\n    setVideo\n  } = usePlayInView(isImpressed);\n  if (isPending) {\n    return /* @__PURE__ */ jsx(\"div\", { className: styles.wrapper, ref });\n  }\n  return /* @__PURE__ */ jsx(\"div\", { className: styles.wrapper, ref, children: shouldRenderPreview ? /* @__PURE__ */ jsx(\"video\", { ref: setVideo, className: styles.video, src: previewUrl, poster: posterUrl, onClick: handleVideoClick, onError: catchHlsPlaybackError, autoPlay: true, muted: true, playsInline: true }) : null });\n};\naddPropertyControls(LiveCampaignVideo, {\n  campaignKey: {\n    title: \"\uB77C\uC774\uBE0C \uCEA0\uD398\uC778 \uD0A4\",\n    type: ControlType.String,\n    defaultValue: \"745a9de22f66\"\n  },\n  playAfterCampaign: {\n    title: \"\uB2E4\uC2DC\uBCF4\uAE30 \uC7AC\uC0DD\",\n    type: ControlType.Boolean,\n    defaultValue: true,\n    description: \"\uC804\uC0AC \uAE30\uD68D\uC804 \uB4F1 \uC131\uB2A5 \uCD5C\uC801\uD654\uAC00 \uD544\uC694\uD55C \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C, \uB2E4\uC2DC\uBCF4\uAE30 \uBE44\uB514\uC624 \uC7AC\uC0DD \uC5EC\uBD80\uB97C \uC81C\uC5B4\uD569\uB2C8\uB2E4.\"\n  }\n});\nexport {\n  LiveCampaignVideo\n};\n", "// import { LiveCampaignVideo } from \"https://localhost:4173/components/systems/LiveCampaignVideo/LiveCampaignVideo.js\"\nimport{LiveCampaignVideo}from\"https://asset.29cm.co.kr/contents/framer/components/systems/LiveCampaignVideo/LiveCampaignVideo.js\";LiveCampaignVideo.displayName=\"LiveCampaignVideo\";/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default LiveCampaignVideo;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LiveCampaignVideo\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TestLiveCampaignVideo.map", "// Generated by Framer (3bc9980)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ComponentViewportProvider,ControlType,cx,getFonts,getLoadingLazyAtYPosition,Image,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import LiveCampaignBanner from\"https://framerusercontent.com/modules/kLEHE0doU5XnJ9jP3SSX/00N4kr4GA2lyzIEYYNwO/TestLiveCampaignBanner.js\";import LiveCampaignVideo from\"https://framerusercontent.com/modules/yr70XBNJvPzIS15CP2zK/jVDP4pPZiCu0xmHDMBov/TestLiveCampaignVideo.js\";const LiveCampaignVideoFonts=getFonts(LiveCampaignVideo);const LiveCampaignBannerFonts=getFonts(LiveCampaignBanner);const cycleOrder=[\"bMqqiBD3P\",\"oEQJTERRd\"];const serializationHash=\"framer-MwTlx\";const variantClassNames={bMqqiBD3P:\"framer-v-cjwxvt\",oEQJTERRd:\"framer-v-1mtgh0a\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const toResponsiveImage=value=>{if(typeof value===\"object\"&&value!==null&&typeof value.src===\"string\"){return value;}return typeof value===\"string\"?{src:value}:undefined;};const transformTemplate1=(_,t)=>`translateX(-50%) ${t}`;const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion.create(React.Fragment);const humanReadableVariantMap={MO:\"oEQJTERRd\",PC:\"bMqqiBD3P\"};const getProps=({_,_1,_2,_3,bannerImage,height,id,width,...props})=>{var _ref,_ref1,_humanReadableVariantMap_props_variant,_ref2;return{...props,CaATUNmJk:(_ref=_!==null&&_!==void 0?_:props.CaATUNmJk)!==null&&_ref!==void 0?_ref:\"cb4aacc220ee\",d89LhukLI:_3!==null&&_3!==void 0?_3:props.d89LhukLI,Do9fOGhbh:_2!==null&&_2!==void 0?_2:props.Do9fOGhbh,LBZwJjixb:(_ref1=_1!==null&&_1!==void 0?_1:props.LBZwJjixb)!==null&&_ref1!==void 0?_ref1:\"\uBE44\uD130\uC140\uC988\",S1gqWSCvi:bannerImage!==null&&bannerImage!==void 0?bannerImage:props.S1gqWSCvi,variant:(_ref2=(_humanReadableVariantMap_props_variant=humanReadableVariantMap[props.variant])!==null&&_humanReadableVariantMap_props_variant!==void 0?_humanReadableVariantMap_props_variant:props.variant)!==null&&_ref2!==void 0?_ref2:\"bMqqiBD3P\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,CaATUNmJk,LBZwJjixb,aLoiSur4I,jsMhZR5gU,Do9fOGhbh,S1gqWSCvi,hLLhJxEf2,d89LhukLI,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"bMqqiBD3P\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const ref1=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-cjwxvt\",className,classNames),\"data-framer-name\":\"PC\",layoutDependency:layoutDependency,layoutId:\"bMqqiBD3P\",ref:ref!==null&&ref!==void 0?ref:ref1,style:{backgroundColor:\"rgb(255, 255, 255)\",borderBottomLeftRadius:4,borderBottomRightRadius:4,borderTopLeftRadius:4,borderTopRightRadius:4,...style},...addPropertyOverrides({oEQJTERRd:{\"data-framer-name\":\"MO\"}},baseVariant,gestureVariant),children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-26s4le\",\"data-framer-name\":\"Bigbanner\",layoutDependency:layoutDependency,layoutId:\"JemktlopN\",children:/*#__PURE__*/_jsx(Image,{background:{alt:\"\",fit:\"fill\",intrinsicHeight:1210,intrinsicWidth:750,loading:getLoadingLazyAtYPosition(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.y)||0)+0+((((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||589)-0-630)/2+0+0)+0+0),pixelHeight:1210,pixelWidth:750,sizes:(componentViewport===null||componentViewport===void 0?void 0:componentViewport.width)||\"100vw\",...toResponsiveImage(S1gqWSCvi)},className:\"framer-1vzlws0\",\"data-framer-name\":\"bg\",layoutDependency:layoutDependency,layoutId:\"YqCJR8svC\",...addPropertyOverrides({oEQJTERRd:{background:{alt:\"\",fit:\"fill\",intrinsicHeight:1210,intrinsicWidth:750,loading:getLoadingLazyAtYPosition(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.y)||0)+0+((((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||517)-0-541)/2+0+0)+0+0),pixelHeight:1210,pixelWidth:750,sizes:(componentViewport===null||componentViewport===void 0?void 0:componentViewport.width)||\"100vw\",...toResponsiveImage(S1gqWSCvi)}}},baseVariant,gestureVariant)})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(motion.div,{className:\"framer-2puour-container\",layoutDependency:layoutDependency,layoutId:\"QrEe6hEPS-container\",children:/*#__PURE__*/_jsx(LiveCampaignVideo,{campaignKey:CaATUNmJk,height:\"100%\",id:\"QrEe6hEPS\",layoutId:\"QrEe6hEPS\",playAfterCampaign:d89LhukLI,style:{width:\"100%\"},width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(motion.div,{className:\"framer-15dzc95-container\",layoutDependency:layoutDependency,layoutId:\"AMQtYP1Br-container\",transformTemplate:transformTemplate1,children:/*#__PURE__*/_jsx(LiveCampaignBanner,{backgroundColor:\"rgb(0, 0, 0)\",backgroundType:hLLhJxEf2,bannerType:aLoiSur4I,campaignKey:CaATUNmJk,height:\"100%\",id:\"AMQtYP1Br\",layoutId:\"AMQtYP1Br\",style:{width:\"100%\"},teasingContent:Do9fOGhbh,theme:jsMhZR5gU,title:LBZwJjixb,width:\"100%\"})})})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-MwTlx.framer-1oylu9s, .framer-MwTlx .framer-1oylu9s { display: block; }\",\".framer-MwTlx.framer-cjwxvt { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 365px; will-change: var(--framer-will-change-override, transform); }\",\".framer-MwTlx .framer-26s4le { align-content: center; align-items: center; aspect-ratio: 0.6190476190476191 / 1; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: var(--framer-aspect-ratio-supported, 589px); justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-MwTlx .framer-1vzlws0 { align-content: center; align-items: center; aspect-ratio: 0.6190476190476191 / 1; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: var(--framer-aspect-ratio-supported, 589px); justify-content: flex-start; overflow: visible; padding: 0px; position: relative; width: 100%; }\",\".framer-MwTlx .framer-2puour-container { flex: none; height: auto; left: 0px; position: absolute; top: 0px; width: 100%; z-index: 1; }\",\".framer-MwTlx .framer-15dzc95-container { bottom: 0px; flex: none; height: auto; left: 50%; position: absolute; width: 100%; z-index: 1; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-MwTlx.framer-cjwxvt, .framer-MwTlx .framer-26s4le, .framer-MwTlx .framer-1vzlws0 { gap: 0px; } .framer-MwTlx.framer-cjwxvt > *, .framer-MwTlx .framer-1vzlws0 > * { margin: 0px; margin-bottom: calc(10px / 2); margin-top: calc(10px / 2); } .framer-MwTlx.framer-cjwxvt > :first-child, .framer-MwTlx .framer-26s4le > :first-child, .framer-MwTlx .framer-1vzlws0 > :first-child { margin-top: 0px; } .framer-MwTlx.framer-cjwxvt > :last-child, .framer-MwTlx .framer-26s4le > :last-child, .framer-MwTlx .framer-1vzlws0 > :last-child { margin-bottom: 0px; } .framer-MwTlx .framer-26s4le > * { margin: 0px; margin-bottom: calc(0px / 2); margin-top: calc(0px / 2); } }\",\".framer-MwTlx.framer-v-1mtgh0a.framer-cjwxvt { width: 320px; }\",\".framer-MwTlx.framer-v-1mtgh0a .framer-26s4le, .framer-MwTlx.framer-v-1mtgh0a .framer-1vzlws0 { aspect-ratio: 0.6192236598890942 / 1; height: var(--framer-aspect-ratio-supported, 517px); }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 589\n * @framerIntrinsicWidth 364\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]},\"oEQJTERRd\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerVariables {\"CaATUNmJk\":\"_\",\"LBZwJjixb\":\"_1\",\"Do9fOGhbh\":\"_2\",\"S1gqWSCvi\":\"bannerImage\",\"d89LhukLI\":\"_3\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerI2oGGFThg=withCSS(Component,css,\"framer-MwTlx\");export default FramerI2oGGFThg;FramerI2oGGFThg.displayName=\"LivePlayer\";FramerI2oGGFThg.defaultProps={height:589,width:364};addPropertyControls(FramerI2oGGFThg,{variant:{options:[\"bMqqiBD3P\",\"oEQJTERRd\"],optionTitles:[\"PC\",\"MO\"],title:\"Variant\",type:ControlType.Enum},CaATUNmJk:{defaultValue:\"cb4aacc220ee\",title:\"\uB77C\uC774\uBE0C \uCEA0\uD398\uC778 \uD0A4\",type:ControlType.String},LBZwJjixb:{defaultValue:\"\uBE44\uD130\uC140\uC988\",displayTextArea:true,title:\"\uBC30\uB108 \uD0C0\uC774\uD2C0\",type:ControlType.String},Do9fOGhbh:{title:\"\uD2F0\uC800 \uCF58\uD150\uCE20 \uC8FC\uC18C\",type:ControlType.Link},S1gqWSCvi:{title:\"BannerImage\",type:ControlType.ResponsiveImage},d89LhukLI:{defaultValue:false,title:\"\uB2E4\uC2DC\uBCF4\uAE30 \uC7AC\uC0DD\",type:ControlType.Boolean}});addFonts(FramerI2oGGFThg,[{explicitInter:true,fonts:[]},...LiveCampaignVideoFonts,...LiveCampaignBannerFonts],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerI2oGGFThg\",\"slots\":[],\"annotations\":{\"framerComponentViewportWidth\":\"true\",\"framerIntrinsicWidth\":\"364\",\"framerIntrinsicHeight\":\"589\",\"framerVariables\":\"{\\\"CaATUNmJk\\\":\\\"_\\\",\\\"LBZwJjixb\\\":\\\"_1\\\",\\\"Do9fOGhbh\\\":\\\"_2\\\",\\\"S1gqWSCvi\\\":\\\"bannerImage\\\",\\\"d89LhukLI\\\":\\\"_3\\\"}\",\"framerImmutableVariables\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"oEQJTERRd\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\",\"framerContractVersion\":\"1\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./I2oGGFThg.map", "// Generated by Framer (3f9fff0)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,Link,RichText,SVG,useActiveVariantCallback,useComponentViewport,useLocaleInfo,useOnVariantChange,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{withClickEventTracker}from\"https://framerusercontent.com/modules/yZK61XkOIZJL9dEaic8u/85CmEX9zbLWwo4wVChNw/Analytics.js\";const MotionAWithClickEventTracker=withClickEventTracker(motion.a);const cycleOrder=[\"azna2JJnV\",\"OSfXR88xi\",\"Rcva4d_hb\"];const serializationHash=\"framer-2TlWA\";const variantClassNames={azna2JJnV:\"framer-v-72vtf9\",OSfXR88xi:\"framer-v-wkhnq\",Rcva4d_hb:\"framer-v-6j89ky\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={delay:0,duration:.3,ease:[.44,0,.56,1],type:\"tween\"};const transition2={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const humanReadableVariantMap={Appear:\"Rcva4d_hb\",AppearMid:\"OSfXR88xi\",Hide:\"azna2JJnV\"};const getProps=({background,height,id,link,title,width,...props})=>{return{...props,Ey0HP_iV5:link??props.Ey0HP_iV5,RMfXXbAsV:title??props.RMfXXbAsV??\"29% \uC575\uCF5C \uD560\uC778\uC73C\uB85C \uB2E4\uC2DC \uB9CC\uB098\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\",variant:humanReadableVariantMap[props.variant]??props.variant??\"azna2JJnV\",Y0iYOgerg:background??props.Y0iYOgerg??\"rgb(55, 96, 255)\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,RMfXXbAsV,Ey0HP_iV5,Y0iYOgerg,...restProps}=getProps(props);const{baseVariant,classNames,gestureHandlers,gestureVariant,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"azna2JJnV\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const{activeVariantCallback,delay}=useActiveVariantCallback(baseVariant);const onAppearedgnxw=activeVariantCallback(async(...args)=>{await delay(()=>setVariant(\"OSfXR88xi\"),200);});const onAppeargsyvya=activeVariantCallback(async(...args)=>{await delay(()=>setVariant(\"Rcva4d_hb\"),200);});useOnVariantChange(baseVariant,{default:onAppearedgnxw,OSfXR88xi:onAppeargsyvya,Rcva4d_hb:undefined});const ref1=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-72vtf9\",className,classNames),\"data-framer-name\":\"Hide\",\"data-highlight\":true,layoutDependency:layoutDependency,layoutId:\"azna2JJnV\",ref:ref??ref1,style:{...style},...addPropertyOverrides({OSfXR88xi:{\"data-framer-name\":\"AppearMid\"},Rcva4d_hb:{\"data-framer-name\":\"Appear\",\"data-highlight\":undefined}},baseVariant,gestureVariant),children:/*#__PURE__*/_jsx(Transition,{value:transition2,children:/*#__PURE__*/_jsx(Link,{href:Ey0HP_iV5,openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/_jsxs(MotionAWithClickEventTracker,{className:\"framer-u3heog framer-134os77\",\"data-framer-name\":\"HighlighterToast\",layoutDependency:layoutDependency,layoutId:\"nlXJ9AQV3\",style:{backdropFilter:\"blur(20px)\",backgroundColor:Y0iYOgerg,borderBottomLeftRadius:4,borderBottomRightRadius:4,borderTopLeftRadius:4,borderTopRightRadius:4,boxShadow:\"0px 0.6021873017743928px 0.6021873017743928px -1.25px rgba(0, 0, 0, 0.39594), 0px 2.288533303243457px 2.288533303243457px -2.5px rgba(0, 0, 0, 0.34957), 0px 10px 10px -3.75px rgba(0, 0, 0, 0.1375)\",WebkitBackdropFilter:\"blur(20px)\"},variants:{OSfXR88xi:{borderBottomLeftRadius:999,borderBottomRightRadius:999,borderTopLeftRadius:999,borderTopRightRadius:999}},children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1mcq8fz\",layoutDependency:layoutDependency,layoutId:\"lhpok9cAB\",children:/*#__PURE__*/_jsx(motion.div,{className:\"framer-11het6s\",\"data-framer-name\":\"desc\",layoutDependency:layoutDependency,layoutId:\"qcZzrU7mA\",style:{opacity:1},variants:{OSfXR88xi:{opacity:0}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgUmVndWxhcg==\",\"--framer-font-family\":'\"Pretendard Regular\", \"Pretendard Regular Placeholder\", sans-serif',\"--framer-font-size\":\"13px\",\"--framer-line-height\":\"1.5em\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:\"\uC5D0 \uB3CC\uC544\uC624\uB294 \uCD94\uAC00 \uD61C\uD0DD\"})}),className:\"framer-1hqfcno\",\"data-framer-name\":\"Regular\",fonts:[\"CUSTOM;Pretendard Regular\"],layoutDependency:layoutDependency,layoutId:\"ShFcVY7HP\",style:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:RMfXXbAsV,verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({Rcva4d_hb:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgUmVndWxhcg==\",\"--framer-font-family\":'\"Pretendard Regular\", \"Pretendard Regular Placeholder\", sans-serif',\"--framer-font-size\":\"13px\",\"--framer-line-height\":\"1em\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:\"29% \uC575\uCF5C \uD560\uC778\uC73C\uB85C \uB2E4\uC2DC \uB9CC\uB098\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})})}},baseVariant,gestureVariant)})})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-5e8sqp\",layoutDependency:layoutDependency,layoutId:\"CHhi3TaTX\",style:{opacity:0},variants:{Rcva4d_hb:{opacity:1}},children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgQm9sZA==\",\"--framer-font-family\":'\"Pretendard Bold\", \"Pretendard Bold Placeholder\", sans-serif',\"--framer-font-size\":\"13px\",\"--framer-line-height\":\"1em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:\"\uBCF4\uB7EC\uAC00\uAE30\"})}),className:\"framer-1diky5x\",\"data-framer-name\":\"NOW\",fonts:[\"CUSTOM;Pretendard Bold\"],layoutDependency:layoutDependency,layoutId:\"wPu_W2O0S\",style:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-oi0l8f\",layoutDependency:layoutDependency,layoutId:\"Kn7LHNCoe\",children:/*#__PURE__*/_jsx(SVG,{className:\"framer-1l0yc41\",\"data-framer-name\":\"graphic\",fill:\"rgb(255, 255, 255)\",intrinsicHeight:24,intrinsicWidth:24,layoutDependency:layoutDependency,layoutId:\"QiGLw4xXA\",svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"/></svg>',withExternalLayout:true})})]})]})})})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-2TlWA.framer-134os77, .framer-2TlWA .framer-134os77 { display: block; }\",\".framer-2TlWA.framer-72vtf9 { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 332px; }\",\".framer-2TlWA .framer-u3heog { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; height: 1px; justify-content: space-between; overflow: hidden; padding: 0px; position: relative; text-decoration: none; width: 1px; will-change: var(--framer-will-change-override, transform); z-index: 1; }\",\".framer-2TlWA .framer-1mcq8fz { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 255px; }\",\".framer-2TlWA .framer-11het6s { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: flex-start; overflow: hidden; padding: 0px; position: relative; width: min-content; }\",\".framer-2TlWA .framer-1hqfcno, .framer-2TlWA .framer-1diky5x { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-2TlWA .framer-5e8sqp { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 4px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: min-content; }\",\".framer-2TlWA .framer-oi0l8f { flex: none; height: 24px; overflow: visible; position: relative; width: 24px; }\",\".framer-2TlWA .framer-1l0yc41 { aspect-ratio: 1 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 24px); left: 0px; position: absolute; right: 0px; top: 0px; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-2TlWA.framer-72vtf9, .framer-2TlWA .framer-1mcq8fz, .framer-2TlWA .framer-11het6s, .framer-2TlWA .framer-5e8sqp { gap: 0px; } .framer-2TlWA.framer-72vtf9 > * { margin: 0px; margin-bottom: calc(10px / 2); margin-top: calc(10px / 2); } .framer-2TlWA.framer-72vtf9 > :first-child { margin-top: 0px; } .framer-2TlWA.framer-72vtf9 > :last-child { margin-bottom: 0px; } .framer-2TlWA .framer-1mcq8fz > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-2TlWA .framer-1mcq8fz > :first-child, .framer-2TlWA .framer-11het6s > :first-child, .framer-2TlWA .framer-5e8sqp > :first-child { margin-left: 0px; } .framer-2TlWA .framer-1mcq8fz > :last-child, .framer-2TlWA .framer-11het6s > :last-child, .framer-2TlWA .framer-5e8sqp > :last-child { margin-right: 0px; } .framer-2TlWA .framer-11het6s > * { margin: 0px; margin-left: calc(0px / 2); margin-right: calc(0px / 2); } .framer-2TlWA .framer-5e8sqp > * { margin: 0px; margin-left: calc(4px / 2); margin-right: calc(4px / 2); } }\",\".framer-2TlWA.framer-v-wkhnq .framer-u3heog { height: 20px; width: 20px; }\",\".framer-2TlWA.framer-v-6j89ky .framer-u3heog { height: min-content; padding: 8px 8px 8px 12px; width: 100%; }\",\".framer-2TlWA.framer-v-6j89ky .framer-1mcq8fz { flex: 1 0 0px; gap: 6px; height: 20px; justify-content: flex-start; order: 0; width: 1px; }\",\".framer-2TlWA.framer-v-6j89ky .framer-5e8sqp { order: 1; }\",\".framer-2TlWA.framer-v-6j89ky .framer-oi0l8f { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; padding: 0px; width: min-content; }\",\".framer-2TlWA.framer-v-6j89ky .framer-1l0yc41 { height: var(--framer-aspect-ratio-supported, 18px); left: unset; position: relative; right: unset; top: unset; width: 18px; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-2TlWA.framer-v-6j89ky .framer-1mcq8fz, .framer-2TlWA.framer-v-6j89ky .framer-oi0l8f { gap: 0px; } .framer-2TlWA.framer-v-6j89ky .framer-1mcq8fz > * { margin: 0px; margin-left: calc(6px / 2); margin-right: calc(6px / 2); } .framer-2TlWA.framer-v-6j89ky .framer-1mcq8fz > :first-child, .framer-2TlWA.framer-v-6j89ky .framer-oi0l8f > :first-child { margin-left: 0px; } .framer-2TlWA.framer-v-6j89ky .framer-1mcq8fz > :last-child, .framer-2TlWA.framer-v-6j89ky .framer-oi0l8f > :last-child { margin-right: 0px; } .framer-2TlWA.framer-v-6j89ky .framer-oi0l8f > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 1\n * @framerIntrinsicWidth 332\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]},\"OSfXR88xi\":{\"layout\":[\"fixed\",\"auto\"]},\"Rcva4d_hb\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerVariables {\"RMfXXbAsV\":\"title\",\"Ey0HP_iV5\":\"link\",\"Y0iYOgerg\":\"background\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerMCT7neHeu=withCSS(Component,css,\"framer-2TlWA\");export default FramerMCT7neHeu;FramerMCT7neHeu.displayName=\"highlighter/Highlighter\";FramerMCT7neHeu.defaultProps={height:1,width:332};addPropertyControls(FramerMCT7neHeu,{variant:{options:[\"azna2JJnV\",\"OSfXR88xi\",\"Rcva4d_hb\"],optionTitles:[\"Hide\",\"AppearMid\",\"Appear\"],title:\"Variant\",type:ControlType.Enum},RMfXXbAsV:{defaultValue:\"29% \uC575\uCF5C \uD560\uC778\uC73C\uB85C \uB2E4\uC2DC \uB9CC\uB098\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\",displayTextArea:false,title:\"Title\",type:ControlType.String},Ey0HP_iV5:{title:\"Link\",type:ControlType.Link},Y0iYOgerg:{defaultValue:\"rgb(55, 96, 255)\",title:\"Background\",type:ControlType.Color}});addFonts(FramerMCT7neHeu,[{explicitInter:true,fonts:[{family:\"Pretendard Regular\",source:\"custom\",url:\"https://framerusercontent.com/assets/t7lebLYx2xwMs9MrDdMh5EKeA.woff2\"},{family:\"Pretendard Bold\",source:\"custom\",url:\"https://framerusercontent.com/assets/kPPF2VB983PxMSHOYB4oe11uz5c.woff2\"}]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerMCT7neHeu\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"332\",\"framerImmutableVariables\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerVariables\":\"{\\\"RMfXXbAsV\\\":\\\"title\\\",\\\"Ey0HP_iV5\\\":\\\"link\\\",\\\"Y0iYOgerg\\\":\\\"background\\\"}\",\"framerContractVersion\":\"1\",\"framerComponentViewportWidth\":\"true\",\"framerIntrinsicHeight\":\"1\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"OSfXR88xi\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"Rcva4d_hb\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}", "var e=\"undefined\"!==typeof globalThis?globalThis:\"undefined\"!==typeof self?self:global;var t={};var r={exports:t};(function main(e,t,r,n){var a=!!(e.Worker&&e.Blob&&e.Promise&&e.OffscreenCanvas&&e.OffscreenCanvasRenderingContext2D&&e.HTMLCanvasElement&&e.HTMLCanvasElement.prototype.transferControlToOffscreen&&e.URL&&e.URL.createObjectURL);function noop(){}function promise(r){var n=t.exports.Promise;var a=void 0!==n?n:e.Promise;if(\"function\"===typeof a)return new a(r);r(noop,noop);return null}var o=function(){var e=Math.floor(1e3/60);var t,r;var n={};var a=0;if(\"function\"===typeof requestAnimationFrame&&\"function\"===typeof cancelAnimationFrame){t=function(t){var r=Math.random();n[r]=requestAnimationFrame((function onFrame(o){if(a===o||a+e-1<o){a=o;delete n[r];t()}else n[r]=requestAnimationFrame(onFrame)}));return r};r=function(e){n[e]&&cancelAnimationFrame(n[e])}}else{t=function(t){return setTimeout(t,e)};r=function(e){return clearTimeout(e)}}return{frame:t,cancel:r}}();var i=function(){var e;var t;var n={};function decorate(e){function execute(t,r){e.postMessage({options:t||{},callback:r})}e.init=function initWorker(t){var r=t.transferControlToOffscreen();e.postMessage({canvas:r},[r])};e.fire=function fireWorker(r,a,o){if(t){execute(r,null);return t}var i=Math.random().toString(36).slice(2);t=promise((function(a){function workerDone(r){if(r.data.callback===i){delete n[i];e.removeEventListener(\"message\",workerDone);t=null;o();a()}}e.addEventListener(\"message\",workerDone);execute(r,i);n[i]=workerDone.bind(null,{data:{callback:i}})}));return t};e.reset=function resetWorker(){e.postMessage({reset:true});for(var t in n){n[t]();delete n[t]}}}return function(){if(e)return e;if(!r&&a){var t=[\"var CONFETTI, SIZE = {}, module = {};\",\"(\"+main.toString()+\")(this, module, true, SIZE);\",\"onmessage = function(msg) {\",\"  if (msg.data.options) {\",\"    CONFETTI(msg.data.options).then(function () {\",\"      if (msg.data.callback) {\",\"        postMessage({ callback: msg.data.callback });\",\"      }\",\"    });\",\"  } else if (msg.data.reset) {\",\"    CONFETTI.reset();\",\"  } else if (msg.data.resize) {\",\"    SIZE.width = msg.data.resize.width;\",\"    SIZE.height = msg.data.resize.height;\",\"  } else if (msg.data.canvas) {\",\"    SIZE.width = msg.data.canvas.width;\",\"    SIZE.height = msg.data.canvas.height;\",\"    CONFETTI = module.exports.create(msg.data.canvas);\",\"  }\",\"}\"].join(\"\\n\");try{e=new Worker(URL.createObjectURL(new Blob([t])))}catch(e){void 0!==typeof console&&\"function\"===typeof console.warn?console.warn(\"\uD83C\uDF8A Could not load worker\",e):null;return null}decorate(e)}return e}}();var l={particleCount:50,angle:90,spread:45,startVelocity:45,decay:.9,gravity:1,drift:0,ticks:200,x:.5,y:.5,shapes:[\"square\",\"circle\"],zIndex:100,colors:[\"#26ccff\",\"#a25afd\",\"#ff5e7e\",\"#88ff5a\",\"#fcff42\",\"#ffa62d\",\"#ff36ff\"],disableForReducedMotion:false,scalar:1};function convert(e,t){return t?t(e):e}function isOk(e){return!(null===e||void 0===e)}function prop(e,t,r){return convert(e&&isOk(e[t])?e[t]:l[t],r)}function onlyPositiveInt(e){return e<0?0:Math.floor(e)}function randomInt(e,t){return Math.floor(Math.random()*(t-e))+e}function toDecimal(e){return parseInt(e,16)}function colorsToRgb(e){return e.map(hexToRgb)}function hexToRgb(e){var t=String(e).replace(/[^0-9a-f]/gi,\"\");t.length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);return{r:toDecimal(t.substring(0,2)),g:toDecimal(t.substring(2,4)),b:toDecimal(t.substring(4,6))}}function getOrigin(e){var t=prop(e,\"origin\",Object);t.x=prop(t,\"x\",Number);t.y=prop(t,\"y\",Number);return t}function setCanvasWindowSize(e){e.width=document.documentElement.clientWidth;e.height=document.documentElement.clientHeight}function setCanvasRectSize(e){var t=e.getBoundingClientRect();e.width=t.width;e.height=t.height}function getCanvas(e){var t=document.createElement(\"canvas\");t.style.position=\"fixed\";t.style.top=\"0px\";t.style.left=\"0px\";t.style.pointerEvents=\"none\";t.style.zIndex=e;return t}function ellipse(e,t,r,n,a,o,i,l,s){e.save();e.translate(t,r);e.rotate(o);e.scale(n,a);e.arc(0,0,1,i,l,s);e.restore()}function randomPhysics(e){var t=e.angle*(Math.PI/180);var r=e.spread*(Math.PI/180);return{x:e.x,y:e.y,wobble:10*Math.random(),velocity:.5*e.startVelocity+Math.random()*e.startVelocity,angle2D:-t+(.5*r-Math.random()*r),tiltAngle:Math.random()*Math.PI,color:e.color,shape:e.shape,tick:0,totalTicks:e.ticks,decay:e.decay,drift:e.drift,random:Math.random()+5,tiltSin:0,tiltCos:0,wobbleX:0,wobbleY:0,gravity:3*e.gravity,ovalScalar:.6,scalar:e.scalar}}function updateFetti(e,t){t.x+=Math.cos(t.angle2D)*t.velocity+t.drift;t.y+=Math.sin(t.angle2D)*t.velocity+t.gravity;t.wobble+=.1;t.velocity*=t.decay;t.tiltAngle+=.1;t.tiltSin=Math.sin(t.tiltAngle);t.tiltCos=Math.cos(t.tiltAngle);t.random=Math.random()+5;t.wobbleX=t.x+10*t.scalar*Math.cos(t.wobble);t.wobbleY=t.y+10*t.scalar*Math.sin(t.wobble);var r=t.tick++/t.totalTicks;var n=t.x+t.random*t.tiltCos;var a=t.y+t.random*t.tiltSin;var o=t.wobbleX+t.random*t.tiltCos;var i=t.wobbleY+t.random*t.tiltSin;e.fillStyle=\"rgba(\"+t.color.r+\", \"+t.color.g+\", \"+t.color.b+\", \"+(1-r)+\")\";e.beginPath();if(\"circle\"===t.shape)e.ellipse?e.ellipse(t.x,t.y,Math.abs(o-n)*t.ovalScalar,Math.abs(i-a)*t.ovalScalar,Math.PI/10*t.wobble,0,2*Math.PI):ellipse(e,t.x,t.y,Math.abs(o-n)*t.ovalScalar,Math.abs(i-a)*t.ovalScalar,Math.PI/10*t.wobble,0,2*Math.PI);else{e.moveTo(Math.floor(t.x),Math.floor(t.y));e.lineTo(Math.floor(t.wobbleX),Math.floor(a));e.lineTo(Math.floor(o),Math.floor(i));e.lineTo(Math.floor(n),Math.floor(t.wobbleY))}e.closePath();e.fill();return t.tick<t.totalTicks}function animate(e,t,a,i,l){var s=t.slice();var c=e.getContext(\"2d\");var f;var u;var d=promise((function(t){function onDone(){f=u=null;c.clearRect(0,0,i.width,i.height);l();t()}function update(){if(r&&!(i.width===n.width&&i.height===n.height)){i.width=e.width=n.width;i.height=e.height=n.height}if(!i.width&&!i.height){a(e);i.width=e.width;i.height=e.height}c.clearRect(0,0,i.width,i.height);s=s.filter((function(e){return updateFetti(c,e)}));s.length?f=o.frame(update):onDone()}f=o.frame(update);u=onDone}));return{addFettis:function(e){s=s.concat(e);return d},canvas:e,promise:d,reset:function(){f&&o.cancel(f);u&&u()}}}function confettiCannon(t,r){var n=!t;var o=!!prop(r||{},\"resize\");var l=prop(r,\"disableForReducedMotion\",Boolean);var s=a&&!!prop(r||{},\"useWorker\");var c=s?i():null;var f=n?setCanvasWindowSize:setCanvasRectSize;var u=!(!t||!c)&&!!t.__confetti_initialized;var d=\"function\"===typeof matchMedia&&matchMedia(\"(prefers-reduced-motion)\").matches;var h;function fireLocal(e,r,n){var a=prop(e,\"particleCount\",onlyPositiveInt);var o=prop(e,\"angle\",Number);var i=prop(e,\"spread\",Number);var l=prop(e,\"startVelocity\",Number);var s=prop(e,\"decay\",Number);var c=prop(e,\"gravity\",Number);var u=prop(e,\"drift\",Number);var d=prop(e,\"colors\",colorsToRgb);var v=prop(e,\"ticks\",Number);var p=prop(e,\"shapes\");var m=prop(e,\"scalar\");var g=getOrigin(e);var b=a;var y=[];var w=t.width*g.x;var M=t.height*g.y;while(b--)y.push(randomPhysics({x:w,y:M,angle:o,spread:i,startVelocity:l,color:d[b%d.length],shape:p[randomInt(0,p.length)],ticks:v,decay:s,gravity:c,drift:u,scalar:m}));if(h)return h.addFettis(y);h=animate(t,y,f,r,n);return h.promise}function fire(r){var a=l||prop(r,\"disableForReducedMotion\",Boolean);var i=prop(r,\"zIndex\",Number);if(a&&d)return promise((function(e){e()}));if(n&&h)t=h.canvas;else if(n&&!t){t=getCanvas(i);document.body.appendChild(t)}o&&!u&&f(t);var s={width:t.width,height:t.height};c&&!u&&c.init(t);u=true;c&&(t.__confetti_initialized=true);function onResize(){if(c){var e={getBoundingClientRect:function(){if(!n)return t.getBoundingClientRect()}};f(e);c.postMessage({resize:{width:e.width,height:e.height}})}else s.width=s.height=null}function done(){h=null;o&&e.removeEventListener(\"resize\",onResize);if(n&&t){document.body.removeChild(t);t=null;u=false}}o&&e.addEventListener(\"resize\",onResize,false);return c?c.fire(r,s,done):fireLocal(r,s,done)}fire.reset=function(){c&&c.reset();h&&h.reset()};return fire}t.exports=confettiCannon(null,{useWorker:true,resize:true});t.exports.create=confettiCannon})(function(){return\"undefined\"!==typeof window?window:\"undefined\"!==typeof self?self:this||e||{}}(),r,false);var n=r.exports;const a=r.exports.create;export default n;export{a as create};\n\n//# sourceMappingURL=confetti.js.map", "// Welcome to Code in Framer\n// Get Started: https://www.framer.com/developers/\nimport{jsx as _jsx,Fragment as _Fragment}from\"react/jsx-runtime\";import confetti from\"canvas-confetti\";import{useEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * These annotations control how your component sizes\n * Learn more: https://www.framer.com/developers/#code-components-auto-sizing\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function Confetti({keyword}){useEffect(()=>{var duration=5*1e3;var animationEnd=Date.now()+duration;var defaults={startVelocity:30,spread:560,ticks:60,zIndex:100};function randomInRange(min,max){return Math.random()*(max-min)+min;}var interval=setInterval(function(){var timeLeft=animationEnd-Date.now();if(timeLeft<=0){return clearInterval(interval);}var particleCount=50*(timeLeft/duration);// since particles fall down, start a bit higher than random\nconfetti({...defaults,particleCount,origin:{x:randomInRange(.1,.3),y:Math.random()-.2}});confetti({...defaults,particleCount,origin:{x:randomInRange(.7,.9),y:Math.random()-.2}});},250);},[keyword]);return /*#__PURE__*/_jsx(_Fragment,{});}addPropertyControls(Confetti,{keyword:{type:ControlType.String,title:\"URL \uD0A4\uC6CC\uB4DC\",description:\"{keyword}=true\uB85C \uB118\uACA8\uC8FC\uBA74 \uCF58\uD398\uD2F0\uAC00 \uBC1C\uB3D9\uB429\uB2C8\uB2E4\",defaultValue:\"confetti\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Confetti\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Confetti.map", "// Generated by Framer (f7ce5cf)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,ComponentViewportProvider,Container,cx,GeneratedComponentContext,getFonts,getFontsFromSharedStyle,getLoadingLazyAtYPosition,Image,PropertyOverrides,ResolveLinks,RichText,useComponentViewport,useCustomCursors,useHydratedBreakpointVariants,useIsOnFramerCanvas,useLocaleInfo,useRouteElementId,useRouter,withCodeBoundaryForOverrides,withCSS,withFX}from\"framer\";import{LayoutGroup,motion}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import BrandTimeSale from\"https://framerusercontent.com/modules/0MCePSy2QuYUCdNEj0Zs/KIXqBTKBLpptF8jNckOu/BrandTimeSale.js\";import Schedulable from\"https://framerusercontent.com/modules/bv2yzxT3iEOjAMleVPGP/8UbCcuQA0I1fhMsF0CR6/Schedulable.js\";import TabBar from\"https://framerusercontent.com/modules/C9mLjJCax7XlsCkKIP8n/gDxKeWTNa7wUTabDDwhs/TabBar.js\";import Coupon from\"https://framerusercontent.com/modules/hwVvrtY6jYAjyBCi2nlX/dERCvrzQ6yC8r9osMueR/Coupon.js\";import KeyVisual from\"https://framerusercontent.com/modules/Jd4PPpQoFAzEN1eFj2F3/8wS7mUqPxLpfkO3Od8hi/KeyVisual.js\";import CreditCardPromotionBanner from\"https://framerusercontent.com/modules/K2Z3xiRzSZ81YAA4hgqV/iEmpFfNmuR3MOjNMA6dM/QLB9kVNqx.js\";import ProductCuration_ from\"https://framerusercontent.com/modules/k7V9m2arNVlw4WU1lrBg/dLqmtGqvahTNJkOrPys0/ProductCurationExhibition.js\";import Bootstrap from\"https://framerusercontent.com/modules/SJt6X3sESKF8jfod5SiW/59mQHygyjkGhRYLnsiIN/Bootstrap.js\";import Carousel from\"https://framerusercontent.com/modules/UIrMjSS6ZX89L0CsT8k6/ML2P8tpN3NMgUZoox0ho/Carousel.js\";import LegacyBoxButton from\"https://framerusercontent.com/modules/xmkGXj2zhAs7u3jQ4yzG/6IhJFoehMeut98B1oL29/NM9_vRNf4.js\";import Slideshow from\"https://framerusercontent.com/modules/zvkTOpMSuRzRhLzZZIwG/bJnHw5VokAqNKlg6Rp7L/SlideShow.js\";import Week_Myselection from\"#framer/local/canvasComponent/BKZ9H4TeF/BKZ9H4TeF.js\";import UserComponent from\"#framer/local/canvasComponent/hQLMQjI_M/hQLMQjI_M.js\";import LivePlayer from\"#framer/local/canvasComponent/I2oGGFThg/I2oGGFThg.js\";import HighlighterHighlighter from\"#framer/local/canvasComponent/MCT7neHeu/MCT7neHeu.js\";import{withClickEventTracker,withViewEventTracker}from\"#framer/local/codeFile/DHVFOj4/Analytics.js\";import Confetti from\"#framer/local/codeFile/Q6XlUms/Confetti.js\";import{withCSR}from\"#framer/local/codeFile/UfF99fD/CSR.js\";import*as sharedStyle1 from\"#framer/local/css/B5nPqpVQK/B5nPqpVQK.js\";import*as sharedStyle2 from\"#framer/local/css/H43TcLyTY/H43TcLyTY.js\";import*as sharedStyle from\"#framer/local/css/P_sBehajb/P_sBehajb.js\";import metadataProvider from\"#framer/local/webPageMetadata/hoa12SBgY/hoa12SBgY.js\";const BootstrapFonts=getFonts(Bootstrap);const ConfettiFonts=getFonts(Confetti);const KeyVisualFonts=getFonts(KeyVisual);const HighlighterHighlighterFonts=getFonts(HighlighterHighlighter);const UserComponentFonts=getFonts(UserComponent);const ContainerWithFX=withFX(Container);const SchedulableFonts=getFonts(Schedulable);const MotionDivWithCSRopznwy=withCodeBoundaryForOverrides(motion.div,{nodeId:\"gw4mCh5NA\",override:withCSR,scopeId:\"hoa12SBgY\"});const TabBarFonts=getFonts(TabBar);const LivePlayerFonts=getFonts(LivePlayer);const CarouselFonts=getFonts(Carousel);const CouponFonts=getFonts(Coupon);const ProductCuration_Fonts=getFonts(ProductCuration_);const BrandTimeSaleFonts=getFonts(BrandTimeSale);const Week_MyselectionFonts=getFonts(Week_Myselection);const LegacyBoxButtonFonts=getFonts(LegacyBoxButton);const MotionDivWithClickEventTracker1aab93f=withCodeBoundaryForOverrides(motion.div,{nodeId:\"WFr0vIQ0s\",override:withClickEventTracker,scopeId:\"hoa12SBgY\"});const SlideshowFonts=getFonts(Slideshow);const MotionDivWithViewEventTrackergvz9bn=withCodeBoundaryForOverrides(motion.div,{nodeId:\"uU2wjMoRu\",override:withViewEventTracker,scopeId:\"hoa12SBgY\"});const CreditCardPromotionBannerFonts=getFonts(CreditCardPromotionBanner);const MotionDivWithClickEventTracker1g02e8f=withCodeBoundaryForOverrides(motion.div,{nodeId:\"dcZHOWKiU\",override:withClickEventTracker,scopeId:\"hoa12SBgY\"});const MotionDivWithClickEventTrackerv0c4vb=withCodeBoundaryForOverrides(motion.div,{nodeId:\"oTXSzfqXf\",override:withClickEventTracker,scopeId:\"hoa12SBgY\"});const breakpoints={PEhMB2z8p:\"(min-width: 1440px)\",qDn655TQf:\"(max-width: 1023px)\",YM7mEE4Di:\"(min-width: 1024px) and (max-width: 1439px)\"};const isBrowser=()=>typeof document!==\"undefined\";const serializationHash=\"framer-Bsa75\";const variantClassNames={PEhMB2z8p:\"framer-v-1qvvfbq\",qDn655TQf:\"framer-v-1pvb4c9\",YM7mEE4Di:\"framer-v-6zo2cy\"};const addImageAlt=(image,alt)=>{if(!image||typeof image!==\"object\"){return;}return{...image,alt};};const transformTemplate1=(_,t)=>`translateX(-50%) ${t}`;const transition1={delay:0,duration:.8,ease:[0,0,1,1],type:\"tween\"};const animation={opacity:0,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,x:0,y:0};const transformTemplate2=(_,t)=>`translate(-50%, -50%) ${t}`;const HTMLStyle=({value})=>{const onCanvas=useIsOnFramerCanvas();if(onCanvas)return null;return /*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:value},\"data-framer-html-style\":\"\"});};const humanReadableVariantMap={Desktop:\"PEhMB2z8p\",Phone:\"qDn655TQf\",Tablet:\"YM7mEE4Di\"};const getProps=({height,id,width,...props})=>{return{...props,variant:humanReadableVariantMap[props.variant]??props.variant??\"PEhMB2z8p\"};};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);React.useEffect(()=>{const metadata=metadataProvider(undefined,activeLocale);if(metadata.robots){let robotsTag=document.querySelector('meta[name=\"robots\"]');if(robotsTag){robotsTag.setAttribute(\"content\",metadata.robots);}else{robotsTag=document.createElement(\"meta\");robotsTag.setAttribute(\"name\",\"robots\");robotsTag.setAttribute(\"content\",metadata.robots);document.head.appendChild(robotsTag);}}},[undefined,activeLocale]);React.useInsertionEffect(()=>{const metadata=metadataProvider(undefined,activeLocale);document.title=metadata.title||\"\";if(metadata.viewport){document.querySelector('meta[name=\"viewport\"]')?.setAttribute(\"content\",metadata.viewport);}},[undefined,activeLocale]);const[baseVariant,hydratedBaseVariant]=useHydratedBreakpointVariants(variant,breakpoints,false);const gestureVariant=undefined;const sharedStyleClassNames=[sharedStyle.className,sharedStyle1.className,sharedStyle2.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);const router=useRouter();const elementId=useRouteElementId(\"W3oqlAToe\");const ref1=React.useRef(null);const isDisplayed=()=>{if(!isBrowser())return true;if(baseVariant===\"YM7mEE4Di\")return true;return false;};const elementId1=useRouteElementId(\"PREjlDiLb\");const ref2=React.useRef(null);const isDisplayed1=()=>{if(!isBrowser())return true;if(baseVariant===\"qDn655TQf\")return true;return false;};const elementId2=useRouteElementId(\"WFqTjip2R\");const ref3=React.useRef(null);const isDisplayed2=()=>{if(!isBrowser())return true;if([\"qDn655TQf\",\"YM7mEE4Di\"].includes(baseVariant))return false;return true;};const elementId3=useRouteElementId(\"Jehg6GHDf\");const ref4=React.useRef(null);const elementId4=useRouteElementId(\"oFX_oyUTA\");const ref5=React.useRef(null);const elementId5=useRouteElementId(\"Z7xdayhiA\");const ref6=React.useRef(null);const isDisplayed3=()=>{if(!isBrowser())return true;if(baseVariant===\"qDn655TQf\")return false;return true;};const elementId6=useRouteElementId(\"jxufTNWLZ\");const ref7=React.useRef(null);const elementId7=useRouteElementId(\"d6HxtOCGl\");const ref8=React.useRef(null);const elementId8=useRouteElementId(\"OrmspVGIy\");const ref9=React.useRef(null);const elementId9=useRouteElementId(\"SGAN_M9aQ\");const ref10=React.useRef(null);const elementId10=useRouteElementId(\"zxm4DzPrv\");const ref11=React.useRef(null);const elementId11=useRouteElementId(\"dcZHOWKiU\");const ref12=React.useRef(null);const elementId12=useRouteElementId(\"oTXSzfqXf\");const ref13=React.useRef(null);useCustomCursors({});return /*#__PURE__*/_jsx(GeneratedComponentContext.Provider,{value:{primaryVariantId:\"PEhMB2z8p\",variantClassNames},children:/*#__PURE__*/_jsxs(LayoutGroup,{id:layoutId??defaultLayoutId,children:[/*#__PURE__*/_jsx(HTMLStyle,{value:\"html body { background: rgb(255, 255, 255); }\"}),/*#__PURE__*/_jsxs(motion.div,{...restProps,className:cx(scopingClassNames,\"framer-1qvvfbq\",className),ref:refBinding,style:{...style},children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-cqnjfa-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"OPHq_ki6U\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Bootstrap,{contentId:\"929\",excludeSectionIds:[],gnb:{theme:\"Light\",visible:false},height:\"100%\",heroBanner:{layout:\"DesktopHeroBanner\",visible:false},hideShareButton:false,id:\"OPHq_ki6U\",layoutId:\"OPHq_ki6U\",metadata:{description:\"1,957\uAC1C \uBE0C\uB79C\uB4DC \uCD5C\uB300 90% \uD560\uC778! \uCD5C\uC560 \uBE0C\uB79C\uB4DC\uB97C \uB9CC\uB098\uB294 \uC5EC\uB984 \uCD5C\uB300\uC758 \uD61C\uD0DD \uC8FC\uAC04.\",desktopMainVideoURL:\"\",desktopPoster:addImageAlt({pixelHeight:1500,pixelWidth:1500,src:\"https://framerusercontent.com/images/0PCLvbDTPvGdyxi83TRBHQv4HIY.jpg\",srcSet:\"https://framerusercontent.com/images/0PCLvbDTPvGdyxi83TRBHQv4HIY.jpg?scale-down-to=512 512w,https://framerusercontent.com/images/0PCLvbDTPvGdyxi83TRBHQv4HIY.jpg?scale-down-to=1024 1024w,https://framerusercontent.com/images/0PCLvbDTPvGdyxi83TRBHQv4HIY.jpg 1500w\"},\"\"),displayEndAt:{date:\"2024-06-19T00:00:00.000Z\",hours:23,minutes:59},displayStartAt:{date:\"2024-06-10T00:00:00.000Z\",hours:0,minutes:0},hasDisplayEndAt:true,mobileMainVideoURL:\"\",mobilePoster:addImageAlt({pixelHeight:900,pixelWidth:1600,src:\"https://framerusercontent.com/images/OIgBG7kSentBX4zhfzMo2MrMOAs.jpg\",srcSet:\"https://framerusercontent.com/images/OIgBG7kSentBX4zhfzMo2MrMOAs.jpg?scale-down-to=512 512w,https://framerusercontent.com/images/OIgBG7kSentBX4zhfzMo2MrMOAs.jpg?scale-down-to=1024 1024w,https://framerusercontent.com/images/OIgBG7kSentBX4zhfzMo2MrMOAs.jpg 1600w\"},\"\"),promotions:\"\",title:\"\uC774\uAD7F\uC704\uD06C SUMMER BLACK FRIDAY\"},style:{width:\"100%\"},useAdvancedReadingIndexTracking:false,width:\"100%\"})})}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-d3kv6m\",\"data-framer-name\":\"BigBanner\",children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1ck9975-container\",isAuthoredByUser:true,nodeId:\"aLBTdbAKv\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Confetti,{height:\"100%\",id:\"aLBTdbAKv\",keyword:\"confetti\",layoutId:\"aLBTdbAKv\",width:\"100%\"})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{background:{alt:\"\",fit:\"fill\",loading:getLoadingLazyAtYPosition((componentViewport?.y||0)+0+200+0),pixelHeight:780,pixelWidth:780,sizes:componentViewport?.width||\"100vw\",src:\"https://framerusercontent.com/images/ViR7RMRGIG89mREzMedIPxV3zdE.png\",srcSet:\"https://framerusercontent.com/images/ViR7RMRGIG89mREzMedIPxV3zdE.png?scale-down-to=512 512w,https://framerusercontent.com/images/ViR7RMRGIG89mREzMedIPxV3zdE.png 780w\"}}},children:/*#__PURE__*/_jsx(Image,{background:{alt:\"\",fit:\"fill\",loading:getLoadingLazyAtYPosition((componentViewport?.y||0)+0+200+0),pixelHeight:1440,pixelWidth:2880,sizes:componentViewport?.width||\"100vw\",src:\"https://framerusercontent.com/images/kdHCJMGLaRG2Imd4wQw9ldePU.png\",srcSet:\"https://framerusercontent.com/images/kdHCJMGLaRG2Imd4wQw9ldePU.png?scale-down-to=512 512w,https://framerusercontent.com/images/kdHCJMGLaRG2Imd4wQw9ldePU.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/kdHCJMGLaRG2Imd4wQw9ldePU.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/kdHCJMGLaRG2Imd4wQw9ldePU.png 2880w\"},className:\"framer-vug4vp\"})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-19dl3zh-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"DGsPJJOOg\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,poster:\"https://img.29cm.co.kr/next-edition/2024/06/07/d5106926bdd64861bfb141ab2f1d36ae_20240607125421.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/06/07/e1ed922b5b0348108a3b823e113e725e_20240607104445.mp4\"},YM7mEE4Di:{breakpoint:1}},children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:0,height:\"100%\",id:\"DGsPJJOOg\",layoutId:\"DGsPJJOOg\",lazy:false,poster:\"https://img.29cm.co.kr/next-edition/2024/06/07/13c27d15e6a747bcaf3a7af6fda5a20c_20240607125421.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/06/07/52d9aa55bb8b4520adabaeb25018201c_20240607104445.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{width:\"100%\"},type:0,width:\"100%\"})})})}),/*#__PURE__*/_jsx(MotionDivWithCSRopznwy,{className:\"framer-opznwy\",\"data-framer-name\":\"Banner\",transformTemplate:transformTemplate1,children:/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1oid6bu-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"kqZK9rzkm\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsx(ResolveLinks,{links:[{href:{hash:\":Z7xdayhiA\",webPageId:\"hoa12SBgY\"},implicitPathVariables:undefined}],children:resolvedLinks=>/*#__PURE__*/_jsx(ComponentViewportProvider,{height:1,width:\"500px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1hkaop9-container\",\"data-framer-name\":\"29dealBanner\",inComponentSlot:true,name:\"29dealBanner\",nodeId:\"oS4JBZpPY\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(HighlighterHighlighter,{Ey0HP_iV5:resolvedLinks[0],height:\"100%\",id:\"oS4JBZpPY\",layoutId:\"oS4JBZpPY\",name:\"29dealBanner\",RMfXXbAsV:\"\uC624\uB298\uC758 \uAD7F\uB51C, \uD61C\uD0DD\uC740 \uC624\uB298\uAE4C\uC9C0!\",style:{width:\"100%\"},variant:\"azna2JJnV\",width:\"100%\",Y0iYOgerg:\"rgb(40, 82, 250)\"})})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:20,width:\"40px\",children:/*#__PURE__*/_jsx(ContainerWithFX,{__framer__loop:animation,__framer__loopEffectEnabled:true,__framer__loopRepeatDelay:0,__framer__loopRepeatType:\"mirror\",__framer__loopTransition:transition1,__perspectiveFX:false,__targetOpacity:1,className:\"framer-1bzpn31-container\",\"data-framer-name\":\"EmptyBanner\",inComponentSlot:true,name:\"EmptyBanner\",nodeId:\"ObhI6kLQq\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(UserComponent,{height:\"100%\",id:\"ObhI6kLQq\",layoutId:\"ObhI6kLQq\",name:\"EmptyBanner\",style:{width:\"100%\"},variant:\"sRTJp91aL\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ResolveLinks,{links:[{href:{hash:\":SGAN_M9aQ\",webPageId:\"hoa12SBgY\"},implicitPathVariables:undefined}],children:resolvedLinks1=>/*#__PURE__*/_jsx(ComponentViewportProvider,{height:1,width:\"500px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-4lbyxs-container\",\"data-framer-name\":\"\\bdoubleBenefitBanner\",inComponentSlot:true,name:\"\\bdoubleBenefitBanner\",nodeId:\"raV0tlZoo\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(HighlighterHighlighter,{Ey0HP_iV5:resolvedLinks1[0],height:\"100%\",id:\"raV0tlZoo\",layoutId:\"raV0tlZoo\",name:\"\\bdoubleBenefitBanner\",RMfXXbAsV:\"\uD328\uC158, \uB77C\uC774\uD504 \uD2B8\uB80C\uB4DC \uC544\uC774\uD15C\uC740 \uD61C\uD0DD\uC774 \uB450 \uBC30\",style:{width:\"100%\"},variant:\"azna2JJnV\",width:\"100%\",Y0iYOgerg:\"rgb(40, 82, 250)\"})})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:20,width:\"40px\",children:/*#__PURE__*/_jsx(ContainerWithFX,{__framer__loop:animation,__framer__loopEffectEnabled:true,__framer__loopRepeatDelay:0,__framer__loopRepeatType:\"mirror\",__framer__loopTransition:transition1,__perspectiveFX:false,__targetOpacity:1,className:\"framer-1bzpn31-container\",\"data-framer-name\":\"EmptyBanner\",inComponentSlot:true,name:\"EmptyBanner\",nodeId:\"ObhI6kLQq\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(UserComponent,{height:\"100%\",id:\"ObhI6kLQq\",layoutId:\"ObhI6kLQq\",name:\"EmptyBanner\",style:{width:\"100%\"},variant:\"sRTJp91aL\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ResolveLinks,{links:[{href:{hash:\":jxufTNWLZ\",webPageId:\"hoa12SBgY\"},implicitPathVariables:undefined}],children:resolvedLinks2=>/*#__PURE__*/_jsx(ComponentViewportProvider,{height:1,width:\"500px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-f8infg-container\",\"data-framer-name\":\"29welcomingBanner\",inComponentSlot:true,name:\"29welcomingBanner\",nodeId:\"nZc5aN3Wk\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(HighlighterHighlighter,{Ey0HP_iV5:resolvedLinks2[0],height:\"100%\",id:\"nZc5aN3Wk\",layoutId:\"nZc5aN3Wk\",name:\"29welcomingBanner\",RMfXXbAsV:\"29% \uC575\uCF5C \uD560\uC778\uC73C\uB85C \uB2E4\uC2DC \uB9CC\uB098\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\",style:{width:\"100%\"},variant:\"azna2JJnV\",width:\"100%\",Y0iYOgerg:\"rgb(40, 82, 250)\"})})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:20,width:\"40px\",children:/*#__PURE__*/_jsx(ContainerWithFX,{__framer__loop:animation,__framer__loopEffectEnabled:true,__framer__loopRepeatDelay:0,__framer__loopRepeatType:\"mirror\",__framer__loopTransition:transition1,__perspectiveFX:false,__targetOpacity:1,className:\"framer-1bzpn31-container\",\"data-framer-name\":\"EmptyBanner\",inComponentSlot:true,name:\"EmptyBanner\",nodeId:\"ObhI6kLQq\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(UserComponent,{height:\"100%\",id:\"ObhI6kLQq\",layoutId:\"ObhI6kLQq\",name:\"EmptyBanner\",style:{width:\"100%\"},variant:\"sRTJp91aL\",width:\"100%\"})})})],height:\"100%\",id:\"kqZK9rzkm\",layoutId:\"kqZK9rzkm\",repeatSchedules:[{endAt:\"2024-06-19T00:00:00.000Z\",repeatAt:{hours:10,minutes:0,seconds:0},startAt:\"2024-06-10T00:00:00.000Z\"},{endAt:\"2024-06-19T00:00:00.000Z\",repeatAt:{hours:11,minutes:0,seconds:0},startAt:\"2024-06-10T00:00:00.000Z\"},{endAt:\"2024-06-19T00:00:00.000Z\",repeatAt:{hours:14,minutes:0,seconds:0},startAt:\"2024-06-10T00:00:00.000Z\"},{endAt:\"2024-06-19T00:00:00.000Z\",repeatAt:{hours:15,minutes:0,seconds:0},startAt:\"2024-06-10T00:00:00.000Z\"},{endAt:\"2024-06-19T00:00:00.000Z\",repeatAt:{hours:19,minutes:0,seconds:0},startAt:\"2024-06-10T00:00:00.000Z\"},{endAt:\"2024-06-19T00:00:00.000Z\",repeatAt:{hours:20,minutes:0,seconds:0},startAt:\"2024-06-10T00:00:00.000Z\"}],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 14:15:15 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:10,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"Mon Jun 10 2024 14:15:15 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:11,minutes:0,seconds:0},sequence:1}],scheduleType:1,style:{width:\"100%\"},width:\"100%\"})})})})]}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1h6f50q-container\",\"data-framer-name\":\"SchedulableTabBar\",isAuthoredByUser:true,isModuleExternal:true,name:\"SchedulableTabBar\",nodeId:\"SStPcrk6j\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1qmova6-container\",inComponentSlot:true,isAuthoredByUser:true,isModuleExternal:true,nodeId:\"bzxz7j9RI\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(TabBar,{height:\"100%\",id:\"bzxz7j9RI\",isMixed:false,items:[{label:\"\uB7ED\uD0A4\uCFE0\uD3F0\",sectionId:\"coupon\"},{label:\"\uC774\uAD7F\uB51C\",sectionId:\"29deal\"},{label:\"\uC774\uAD7F\uC785\uC810\uD68C\",sectionId:\"29welcoming\"},{label:\"\uB0B4 \uCDE8\uD5A5 \uCC3E\uAE30\",sectionId:\"29product\"},{label:\"\uC2E4\uC2DC\uAC04 \uB7AD\uD0B9\",sectionId:\"ranking\"},{label:\"\uC5EC\uB984 \uD2B8\uB80C\uB4DC\",sectionId:\"benefit\"},{label:\"\uB9C8\uC774\uC140\uB809\uC158\",sectionId:\"myselection\"},{label:\"\uAE08\uC735\uC0AC \uC81C\uD734\",sectionId:\"cardpromotion\"},{label:\"29LIVE\",sectionId:\"live\"}],layoutId:\"bzxz7j9RI\",maxWidth:1114,padding:0,paddingBottom:0,paddingLeft:0,paddingRight:0,paddingTop:0,style:{width:\"100%\"},toggleMaxWidth:true,width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-vdci03-container\",\"data-framer-name\":\"29LiveHighlightedTabBar\",inComponentSlot:true,isAuthoredByUser:true,isModuleExternal:true,name:\"29LiveHighlightedTabBar\",nodeId:\"zBQsotNtZ\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(TabBar,{height:\"100%\",id:\"zBQsotNtZ\",isMixed:false,items:[{label:\"29LIVE\",sectionId:\"live2\"},{label:\"\uB7ED\uD0A4\uCFE0\uD3F0\",sectionId:\"coupon\"},{label:\"\uC774\uAD7F\uB51C\",sectionId:\"29deal\"},{label:\"\uC774\uAD7F\uC785\uC810\uD68C\",sectionId:\"29welcoming\"},{label:\"\uB0B4 \uCDE8\uD5A5 \uCC3E\uAE30\",sectionId:\"29product\"},{label:\"\uC2E4\uC2DC\uAC04 \uB7AD\uD0B9\",sectionId:\"ranking\"},{label:\"\uD2B8\uB80C\uB4DC \uB354\uBE14\uD61C\uD0DD\",sectionId:\"benefit\"},{label:\"\uB9C8\uC774\uC140\uB809\uC158\",sectionId:\"myselection\"},{label:\"\uAE08\uC735\uC0AC \uC81C\uD734\",sectionId:\"cardpromotion\"}],layoutId:\"zBQsotNtZ\",maxWidth:1114,name:\"29LiveHighlightedTabBar\",padding:0,paddingBottom:0,paddingLeft:0,paddingRight:0,paddingTop:0,style:{width:\"100%\"},toggleMaxWidth:true,width:\"100%\"})})})],height:\"100%\",id:\"SStPcrk6j\",layoutId:\"SStPcrk6j\",name:\"SchedulableTabBar\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-15jjhla\",\"data-framer-name\":\"Live\",id:elementId,ref:ref1,children:[isDisplayed()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-6iqla1-container hidden-1qvvfbq hidden-1pvb4c9\",\"data-framer-name\":\"HighlightedTabletSchedulable29Live\",isAuthoredByUser:true,isModuleExternal:true,name:\"HighlightedTabletSchedulable29Live\",nodeId:\"BYwHWTzaT\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-18a81fv\",\"data-framer-name\":\"Empty29Live\"}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1jq5bak\",\"data-framer-name\":\"Tablet29Live\",id:elementId1,ref:ref2,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1llnwfy\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-17cnh3k\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"29LIVE\"})})}),className:\"framer-jsqh7q\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"strong\",{children:\"\uB2E8 \uC138 \uBC88!\"}),/*#__PURE__*/_jsx(\"br\",{}),/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uD6C4 8\uC2DC\uC5D0 \uCC3E\uC544\uC624\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}),className:\"framer-1wuk5hl\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1m55e19\",children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"301.3333px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1hpy61h-container\",\"data-framer-name\":\"LivePlayer_PC3\",inComponentSlot:true,name:\"LivePlayer_PC3\",nodeId:\"r00QizOYn\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"f0992123c883\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/shoppingwithus/2024/06/18/vans\",height:\"100%\",id:\"r00QizOYn\",layoutId:\"r00QizOYn\",LBZwJjixb:\"\uBC18\uC2A4\",name:\"LivePlayer_PC3\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg\",srcSet:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"301.3333px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1e2rmki-container\",\"data-framer-name\":\"LivePlayer_PC2\",inComponentSlot:true,name:\"LivePlayer_PC2\",nodeId:\"Gc9eszMP7\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"b4f5b9d6cf2b\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/I-live-in-LIVE/2024/06/13/wagensteiger\",height:\"100%\",id:\"Gc9eszMP7\",layoutId:\"Gc9eszMP7\",LBZwJjixb:\"\uBC14\uAC90\uC288\uD0C0\uC774\uAC70\",name:\"LivePlayer_PC2\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg\",srcSet:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"301.3333px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-103n5kn-container\",\"data-framer-name\":\"LivePlayer_PC1\",inComponentSlot:true,name:\"LivePlayer_PC1\",nodeId:\"fbZ1_HMw5\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"5effb2bdc630\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/special/2024/06/11/depound\",height:\"100%\",id:\"fbZ1_HMw5\",layoutId:\"fbZ1_HMw5\",LBZwJjixb:\"\uB4DC\uD30C\uC6B4\uB4DC\",name:\"LivePlayer_PC1\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg\",srcSet:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})})]})]})],height:\"100%\",id:\"BYwHWTzaT\",layoutId:\"BYwHWTzaT\",name:\"HighlightedTabletSchedulable29Live\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})}),isDisplayed1()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-mchnqc-container hidden-1qvvfbq hidden-6zo2cy\",\"data-framer-name\":\"HighlightedMobileSchedulable29Live\",isAuthoredByUser:true,isModuleExternal:true,name:\"HighlightedMobileSchedulable29Live\",nodeId:\"oSPaa5rlz\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-18a81fv\",\"data-framer-name\":\"Empty29Live\"}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-82pafs\",\"data-framer-name\":\"Mobile29Live\",id:elementId2,ref:ref3,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1gndw8n\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1pfd532\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"29LIVE\"})})}),className:\"framer-3k4ddf\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"strong\",{children:\"\uB2E8 \uC138 \uBC88!\"}),/*#__PURE__*/_jsx(\"br\",{}),/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uD6C4 8\uC2DC\uC5D0 \uCC3E\uC544\uC624\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}),className:\"framer-ecc4u8\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1nuxlnz-container\",inComponentSlot:true,isAuthoredByUser:true,isModuleExternal:true,nodeId:\"y9i0RyeFC\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Carousel,{align:\"center\",ariaLabel:\"\",arrowObject:{arrowFill:\"rgba(0, 0, 0, 0.2)\",arrowPadding:20,arrowRadius:40,arrowSize:40,showMouseControls:true},axis:true,borderRadius:0,fadeObject:{fadeAlpha:0,fadeContent:false,fadeInset:0,fadeTransition:{damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"},fadeWidth:25},gap:10,height:\"100%\",id:\"y9i0RyeFC\",layoutId:\"y9i0RyeFC\",padding:0,paddingBottom:0,paddingLeft:0,paddingPerSide:true,paddingRight:0,paddingTop:0,progressObject:{dotsActiveOpacity:1,dotsBackground:\"rgba(0, 0, 0, 0.2)\",dotsBlur:4,dotsFill:\"rgb(255, 255, 255)\",dotsGap:10,dotsInset:10,dotSize:10,dotsOpacity:.5,dotsPadding:10,dotsRadius:50,showProgressDots:false,showScrollbar:false},sizingObject:{heightInset:0,heightRows:2,heightType:\"stretch\",widthColumns:2,widthInset:0,widthType:\"auto\"},slots:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-7o2yg7\",\"data-framer-name\":\"10px\"}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1syldk9-container\",\"data-framer-name\":\"LivePlayer_MO3\",inComponentSlot:true,name:\"LivePlayer_MO3\",nodeId:\"YZ93nPQez\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"f0992123c883\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/shoppingwithus/2024/06/18/vans\",height:\"100%\",id:\"YZ93nPQez\",layoutId:\"YZ93nPQez\",LBZwJjixb:\"\uBC18\uC2A4\",name:\"LivePlayer_MO3\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/5SYENatzBR4SQSqpeykyZiqaM.jpg\",srcSet:\"https://framerusercontent.com/images/5SYENatzBR4SQSqpeykyZiqaM.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/5SYENatzBR4SQSqpeykyZiqaM.jpg 780w\"},\"\"),variant:\"oEQJTERRd\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1l0afl7-container\",\"data-framer-name\":\"LivePlayer_MO2\",inComponentSlot:true,name:\"LivePlayer_MO2\",nodeId:\"CqG10FU4N\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"b4f5b9d6cf2b\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/I-live-in-LIVE/2024/06/13/wagensteiger\",height:\"100%\",id:\"CqG10FU4N\",layoutId:\"CqG10FU4N\",LBZwJjixb:\"\uBC14\uAC90\uC288\uD0C0\uC774\uAC70\",name:\"LivePlayer_MO2\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg\",srcSet:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg 780w\"},\"\"),variant:\"oEQJTERRd\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,children:/*#__PURE__*/_jsx(Container,{className:\"framer-5hmrft-container\",\"data-framer-name\":\"LivePlayer_MO1\",inComponentSlot:true,name:\"LivePlayer_MO1\",nodeId:\"Yv1XrHaFq\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"5effb2bdc630\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/special/2024/06/11/depound\",height:\"100%\",id:\"Yv1XrHaFq\",layoutId:\"Yv1XrHaFq\",LBZwJjixb:\"\uB4DC\uD30C\uC6B4\uB4DC\",name:\"LivePlayer_MO1\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg\",srcSet:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg 780w\"},\"\"),variant:\"oEQJTERRd\",width:\"100%\"})})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-7o2yg7\",\"data-framer-name\":\"10px\"})],snapObject:{fluid:false,snap:true,snapEdge:\"center\"},style:{width:\"100%\"},width:\"100%\"})})})]})],height:\"100%\",id:\"oSPaa5rlz\",layoutId:\"oSPaa5rlz\",name:\"HighlightedMobileSchedulable29Live\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})}),isDisplayed2()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1qi3ggd-container hidden-1pvb4c9 hidden-6zo2cy\",\"data-framer-name\":\"HighlightedDesktopSchedulable29Live\",isAuthoredByUser:true,isModuleExternal:true,name:\"HighlightedDesktopSchedulable29Live\",nodeId:\"gDIk216aQ\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-18a81fv\",\"data-framer-name\":\"Empty29Live\"}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-cs8tsh\",\"data-framer-name\":\"Desktop29Live\",id:elementId3,ref:ref4,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1gwmf98\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-jmbqgg\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"29LIVE\"})})}),className:\"framer-1a1p1zt\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"strong\",{children:\"\uB2E8 \uC138 \uBC88!\"}),/*#__PURE__*/_jsx(\"br\",{}),/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uD6C4 8\uC2DC\uC5D0 \uCC3E\uC544\uC624\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}),className:\"framer-1utsu4k\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1el4gk0\",children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"364.75px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-5bhx8z-container\",\"data-framer-name\":\"LivePlayer_PC3\",inComponentSlot:true,name:\"LivePlayer_PC3\",nodeId:\"IrAyCGhxG\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"f0992123c883\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/shoppingwithus/2024/06/18/vans\",height:\"100%\",id:\"IrAyCGhxG\",layoutId:\"IrAyCGhxG\",LBZwJjixb:\"\uBC18\uC2A4\",name:\"LivePlayer_PC3\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg\",srcSet:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"364.75px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1f344c8-container\",\"data-framer-name\":\"LivePlayer_PC2\",inComponentSlot:true,name:\"LivePlayer_PC2\",nodeId:\"OFTF25wOE\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"b4f5b9d6cf2b\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/I-live-in-LIVE/2024/06/13/wagensteiger\",height:\"100%\",id:\"OFTF25wOE\",layoutId:\"OFTF25wOE\",LBZwJjixb:\"\uBC14\uAC90\uC288\uD0C0\uC774\uAC70\",name:\"LivePlayer_PC2\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg\",srcSet:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"364.5px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-k80ohf-container\",\"data-framer-name\":\"LivePlayer_PC1\",inComponentSlot:true,name:\"LivePlayer_PC1\",nodeId:\"G0qhVLsPb\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"5effb2bdc630\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/special/2024/06/11/depound\",height:\"100%\",id:\"G0qhVLsPb\",layoutId:\"G0qhVLsPb\",LBZwJjixb:\"\uB4DC\uD30C\uC6B4\uB4DC\",name:\"LivePlayer_PC1\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg\",srcSet:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})})]})]})],height:\"100%\",id:\"gDIk216aQ\",layoutId:\"gDIk216aQ\",name:\"HighlightedDesktopSchedulable29Live\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-l223uv\",\"data-framer-name\":\"Coupon\",id:elementId4,ref:ref5,children:[/*#__PURE__*/_jsx(\"div\",{className:\"framer-q69wzg\",\"data-framer-name\":\"CouponHeader\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-8qv07z\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",style:{\"--framer-text-alignment\":\"center\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uB298\uC758 \uB7ED\uD0A4\uCFE0\uD3F0\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uB298\uC758 \uB7ED\uD0A4\uCFE0\uD3F0\"})})}),className:\"framer-txkv6j\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-5pdf0p\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"rgb(0, 0, 0)\"},children:\"\uCD5C\uB300 50% \uD61C\uD0DD \uBC1B\uACE0 \uC774\uAD7F\uC704\uD06C \uC785\uC7A5\uD558\uAE30\"})}),className:\"framer-k3y3bq\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"p\",{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-size\":\"14px\",\"--framer-line-height\":\"1.6em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"rgb(160, 160, 160)\"},children:\"(ID \uB2F9 1\uC77C 1\uD68C \uC751\uBAA8 \uAC00\uB2A5)\"})}),className:\"framer-i5zq3z\",\"data-framer-name\":\"Desc\",fonts:[\"CUSTOM;Pretendard Medium\"],verticalAlignment:\"top\",withExternalLayout:true})]})]})}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-3nflgn\",\"data-framer-name\":\"CouponGroup\",children:/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-4j2pfs-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"bpBibnLbO\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{text:\"\uC9C0\uAE08 \uBC14\uB85C \uD61C\uD0DD \uD655\uC778!\"}},children:/*#__PURE__*/_jsx(Coupon,{additionalNotices:[],backgroundColor:\"rgb(0, 0, 0)\",couponIdListString:\"108803, 108804, 108805, 108806, 108807, 108809\",couponType:2,couponUpdateType:0,dailyCouponOptions:[],height:\"100%\",id:\"bpBibnLbO\",layoutId:\"bpBibnLbO\",noticeTheme:\"light\",style:{width:\"100%\"},text:\"\uCFE0\uD3F0\uC744 \uB20C\uB7EC \uD61C\uD0DD\uC744 \uD655\uC778\uD558\uC138\uC694\",textColor:\"rgb(255, 255, 255)\",theme:3,width:\"100%\"})})})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-amgo51\",\"data-framer-name\":\"29deal\",id:elementId5,ref:ref6,children:[/*#__PURE__*/_jsxs(\"div\",{className:\"framer-jfnmjk\",\"data-framer-name\":\"Assets\",children:[isDisplayed3()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1hvpklh-container hidden-1pvb4c9\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"PVl7enqXM\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{YM7mEE4Di:{breakpoint:1}},children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:0,height:\"100%\",id:\"PVl7enqXM\",layoutId:\"PVl7enqXM\",lazy:true,poster:\"https://img.29cm.co.kr/next-edition/2024/05/31/03186eeafb374820b4ebf61bd7658e1f_20240531213652.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/05/31/f7cf7918bb0a4089b2c7c1f27ec1da3f_20240531164714.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{height:\"100%\",width:\"100%\"},type:0,width:\"100%\"})})})}),isDisplayed1()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-179ziiy-container hidden-1qvvfbq hidden-6zo2cy\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"JLcaePmI4\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:2,height:\"100%\",id:\"JLcaePmI4\",layoutId:\"JLcaePmI4\",lazy:true,poster:\"https://img.29cm.co.kr/next-edition/2024/05/31/1eb13b9a0ee64a19936fa6f68be3f0eb_20240531213652.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/05/31/1275593b53854f05ab6f52439d1ae198_20240531202524.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{height:\"100%\",width:\"100%\"},type:0,width:\"100%\"})})}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-1bqn5bb\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-1naz9nw\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",style:{\"--framer-text-alignment\":\"center\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC774\uAD7F\uB51C\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC774\uAD7F\uB51C\"})})}),className:\"framer-50kj9i\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"rgb(56, 95, 255)\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB9E4\uC77C \uC624\uC804 10\uC2DC \uC624\uD508\"})}),/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uC624\uB298\uC758 \uAD7F\uB51C, \uD61C\uD0DD\uC740 \uC624\uB298\uAE4C\uC9C0!\"})]}),className:\"framer-dylo0g\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})})]}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-5jebqo\",\"data-framer-name\":\"Component\",children:/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-ffk6b5-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"vZ9Bve1Ml\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,layoutType:\"CARD_3x3\"}},children:/*#__PURE__*/_jsx(ProductCuration_,{breakpoint:0,button:{style:\"fill\",text:\"\uB354 \uB9CE\uC740 \uC774\uAD7F\uB51C \uB458\uB7EC\uBCF4\uAE30\",theme:\"line\"},buttonStyle:\"fill\",collectionId:\"6730\",collectionType:\"keyword\",componentId:\"29deal\",couponButton:{text:\"\",theme:\"light\",variant:\"primary\"},displayCoupon:false,environment:\"live\",facet:\"\",hasButton:true,hasRank:false,height:\"100%\",id:\"vZ9Bve1Ml\",isDevMode:false,layoutId:\"vZ9Bve1Ml\",layoutType:\"CARD_6x2\",needShuffle:true,sortOption:\"EXHIBITION\",style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-1w0y32w\",\"data-framer-name\":\"29welcoming\",id:elementId6,ref:ref7,children:[/*#__PURE__*/_jsxs(\"div\",{className:\"framer-wbjjwb\",\"data-framer-name\":\"Assets\",children:[isDisplayed3()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1o5m75i-container hidden-1pvb4c9\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"WTX4TfG7Z\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{YM7mEE4Di:{breakpoint:1}},children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:0,height:\"100%\",id:\"WTX4TfG7Z\",layoutId:\"WTX4TfG7Z\",lazy:true,poster:\"https://img.29cm.co.kr/next-edition/2024/05/31/a235505fc18d432fbd01c5c460f86dc2_20240531213652.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/05/31/e8c34dc7ee5145048cda30991561e592_20240531175244.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{height:\"100%\",width:\"100%\"},type:0,width:\"100%\"})})})}),isDisplayed1()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1jwscy3-container hidden-1qvvfbq hidden-6zo2cy\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"F6i3edpZ4\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:2,height:\"100%\",id:\"F6i3edpZ4\",layoutId:\"F6i3edpZ4\",lazy:true,poster:\"https://img.29cm.co.kr/next-edition/2024/05/31/435af1f2995d4aa78c59ed31ffc0a57b_20240531213652.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/05/31/83187aa4c4364dc897d5482d31fc1123_20240531204330.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{height:\"100%\",width:\"100%\"},type:0,width:\"100%\"})})}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-xdn3id\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-1iqnkul\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",style:{\"--framer-text-alignment\":\"center\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC774\uAD7F\uC785\uC810\uD68C\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC774\uAD7F\uC785\uC810\uD68C\"})})}),className:\"framer-1i0ycln\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"rgb(56, 95, 255)\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB9E4\uC77C \uC624\uD6C4 7\uC2DC \uC624\uD508\"})}),/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"29% \uC575\uCF5C \uD560\uC778\uC73C\uB85C\"}),/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uB2E4\uC2DC \uB9CC\uB098\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"rgb(56, 95, 255)\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB9E4\uC77C \uC624\uD6C4 7\uC2DC \uC624\uD508\"})}),/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"29% \uC575\uCF5C \uD560\uC778\uC73C\uB85C \uB2E4\uC2DC \uB9CC\uB098\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]}),className:\"framer-1rz6mw2\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})})]})})]}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-2virxj\",id:\"2virxj\",children:/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-7ma6tp-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"i7t4cxW3R\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,layoutType:2},YM7mEE4Di:{breakpoint:1}},children:/*#__PURE__*/_jsx(BrandTimeSale,{brandSaleGroupId:\"1\",breakpoint:0,componentId:\"29welcoming\",exhibitionFacet:\"\",height:\"100%\",id:\"i7t4cxW3R\",layoutId:\"i7t4cxW3R\",layoutType:0,style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-rq2gha\",\"data-framer-name\":\"29product\",id:elementId7,ref:ref8,children:[/*#__PURE__*/_jsxs(\"div\",{className:\"framer-17drur0\",\"data-framer-name\":\"Assets\",children:[isDisplayed3()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-ray5xp-container hidden-1pvb4c9\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"QcfuxR8r2\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{YM7mEE4Di:{breakpoint:1}},children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:0,height:\"100%\",id:\"QcfuxR8r2\",layoutId:\"QcfuxR8r2\",lazy:true,poster:\"https://img.29cm.co.kr/next-edition/2024/05/31/f8f8170e82d5434f910a9e7e03c0f85e_20240531213652.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/05/31/8b3929d642c648a8936472e266e2133c_20240531182743.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{height:\"100%\",width:\"100%\"},type:0,width:\"100%\"})})})}),isDisplayed1()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-gcpbja-container hidden-1qvvfbq hidden-6zo2cy\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"s21tgQD8b\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(KeyVisual,{breakpoint:2,height:\"100%\",id:\"s21tgQD8b\",layoutId:\"s21tgQD8b\",lazy:true,poster:\"https://img.29cm.co.kr/next-edition/2024/05/31/464aab71547c4fb18e4b66b0b7d56a22_20240531213658.jpg\",source:\"https://asset.29cm.co.kr/next-edition/2024/05/31/e7e04982668c4458b026b5e0e9800a46_20240531211348.mp4\",sourceImage:\"\",sourceWebm:\"\",style:{height:\"100%\",width:\"100%\"},type:0,width:\"100%\"})})}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-1oy17zl\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-hnkwd4\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",style:{\"--framer-text-alignment\":\"center\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB0B4 \uCDE8\uD5A5 \uCC3E\uAE30\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB0B4 \uCDE8\uD5A5 \uCC3E\uAE30\"})})}),className:\"framer-1s0zc2h\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uCD5C\uB300 90% \uD560\uC778!\"}),/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uC774\uAD7F\uC704\uD06C \uC0C1\uD488 \uB458\uB7EC\uBCF4\uAE30\"})]}),className:\"framer-k6ipq\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\"],verticalAlignment:\"top\",withExternalLayout:true})]})})]}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-fgb8c6-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"Apj9oLhPO\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,layoutType:\"CARD_3x3\"}},children:/*#__PURE__*/_jsx(ProductCuration_,{breakpoint:0,button:{style:\"fill\",text:\"\uB354 \uB9CE\uC740 \uC774\uAD7F\uC0C1\uD488 \uB458\uB7EC\uBCF4\uAE30\",theme:\"line\"},buttonStyle:\"fill\",collectionId:\"950\",collectionType:\"category\",componentId:\"recommend\",couponButton:{text:\"\",theme:\"light\",variant:\"primary\"},displayCoupon:false,environment:\"live\",facet:\"\uC774\uAD7F\uC704\uD06C\",hasButton:true,hasRank:false,height:\"100%\",id:\"Apj9oLhPO\",isDevMode:false,layoutId:\"Apj9oLhPO\",layoutType:\"CARD_6x2\",needShuffle:false,sortOption:\"RECOMMEND\",style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-3iiv4m\",\"data-framer-name\":\"Ranking\",id:elementId8,ref:ref9,children:[/*#__PURE__*/_jsx(\"div\",{className:\"framer-emxhts\",\"data-framer-name\":\"CurationHeader\",children:/*#__PURE__*/_jsx(\"div\",{className:\"framer-rokqmg\",\"data-framer-name\":\"Text\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-rxzjdv\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC2E4\uC2DC\uAC04 \uB7AD\uD0B9\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uC2E4\uC2DC\uAC04 \uB7AD\uD0B9\"})})}),className:\"framer-gofr5x\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uB0B4 \uCD5C\uC560 \uBE0C\uB79C\uB4DC, \uC5EC\uAE30\uC5D0 \uC788\uC744\uC9C0\uB3C4!\"})}),className:\"framer-1be0jhk\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\"],verticalAlignment:\"top\",withExternalLayout:true})]})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1drxrle-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"wz1TD6luf\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,layoutType:\"CARD_3x3\"},YM7mEE4Di:{breakpoint:1}},children:/*#__PURE__*/_jsx(ProductCuration_,{breakpoint:0,button:{style:\"fill\",text:\"\uB354\uBCF4\uAE30\",theme:\"line\"},buttonStyle:\"fill\",collectionId:\"950\",collectionType:\"category\",componentId:\"ranking\",couponButton:{text:\"\",theme:\"light\",variant:\"primary\"},displayCoupon:false,environment:\"live\",facet:\"\uC774\uAD7F\uC704\uD06C\",hasButton:true,hasRank:false,height:\"100%\",id:\"wz1TD6luf\",isDevMode:false,layoutId:\"wz1TD6luf\",layoutType:\"CARD_6x2\",needShuffle:false,sortOption:\"EXHIBITION\",style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-1ysc9v\",\"data-framer-name\":\"DoubleBenefit\",id:elementId9,ref:ref10,children:[/*#__PURE__*/_jsxs(\"div\",{className:\"framer-11yw311\",\"data-framer-name\":\"Fashion\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"framer-dc1ydh\",\"data-framer-name\":\"CurationHeader\",children:/*#__PURE__*/_jsx(\"div\",{className:\"framer-vd5nom\",\"data-framer-name\":\"Text\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-17leluw\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uD2B8\uB80C\uB514\uD55C \uC5EC\uB984 \uC900\uBE44\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uD2B8\uB80C\uB514\uD55C \uC5EC\uB984 \uC900\uBE44\"})})}),className:\"framer-mdhl7a\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-bmmlq6\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{\"--framer-text-color\":\"rgb(56, 95, 255)\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uD328\uC158 \uD2B8\uB80C\uB4DC\"})}),/*#__PURE__*/_jsx(\"br\",{}),\"\uC62C\uC5EC\uB984 \uD2B8\uB80C\uB4DC\uB294 \uC774 \uC544\uC774\uD15C\uC774\uB798\uC694.\",/*#__PURE__*/_jsx(\"br\",{}),\"\uAE30\uBCF8 \uD560\uC778\uB3C4 \uC544\uC26C\uC6CC\uC11C \uCD94\uAC00 \uD61C\uD0DD \uD55C \uBC88 \uB354!\"]})}),className:\"framer-1rvfxl4\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})})]})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-mhus99-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"pd2xgSkeE\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,layoutType:\"CARD_3x3\"}},children:/*#__PURE__*/_jsx(ProductCuration_,{breakpoint:0,button:{style:\"fill\",text:\"\uB354 \uB9CE\uC740 \uC544\uC774\uD15C \uB458\uB7EC\uBCF4\uAE30\",theme:\"line\"},buttonStyle:\"fill\",collectionId:\"6478\",collectionType:\"keyword\",componentId:\"double_benefit_fashion\",couponButton:{text:\"\",theme:\"light\",variant:\"primary\"},displayCoupon:false,environment:\"live\",facet:\"\",hasButton:true,hasRank:false,height:\"100%\",id:\"pd2xgSkeE\",isDevMode:false,layoutId:\"pd2xgSkeE\",layoutType:\"CARD_6x2\",needShuffle:true,sortOption:\"EXHIBITION\",style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"framer-1exwxhr\",\"data-framer-name\":\"Life\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"framer-132fem5\",\"data-framer-name\":\"CurationHeader\",children:/*#__PURE__*/_jsx(\"div\",{className:\"framer-zuc9ln\",\"data-framer-name\":\"Text\",children:/*#__PURE__*/_jsx(\"div\",{className:\"framer-2nzvei\",\"data-framer-name\":\"Description\",children:/*#__PURE__*/_jsx(\"div\",{className:\"framer-dt5ch8\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{\"--framer-text-color\":\"rgb(56, 95, 255)\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB77C\uC774\uD504 \uD2B8\uB80C\uB4DC\"})}),/*#__PURE__*/_jsx(\"br\",{}),\"\uC694\uC998 \uC9D1\uC740 \uC774\uB807\uAC8C \uAFB8\uBBFC\uB300\uC694.\",/*#__PURE__*/_jsx(\"br\",{}),\"\uD560\uC778\uC5D0 \uCFE0\uD3F0\uAE4C\uC9C0 \uB354\uD574 \uC6B0\uB9AC \uC9D1 \uC5C5\uADF8\uB808\uC774\uB4DC!\"]})}),className:\"framer-9leafv\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})})})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-11klslm-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"Dwlp31yb7\",scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{breakpoint:2,layoutType:\"CARD_3x3\"}},children:/*#__PURE__*/_jsx(ProductCuration_,{breakpoint:0,button:{style:\"fill\",text:\"\uB354 \uB9CE\uC740 \uC544\uC774\uD15C \uB458\uB7EC\uBCF4\uAE30\",theme:\"line\"},buttonStyle:\"fill\",collectionId:\"6767\",collectionType:\"keyword\",componentId:\"double_benefit_life\",couponButton:{text:\"\",theme:\"light\",variant:\"primary\"},displayCoupon:false,environment:\"live\",facet:\"\",hasButton:true,hasRank:false,height:\"100%\",id:\"Dwlp31yb7\",isDevMode:false,layoutId:\"Dwlp31yb7\",layoutType:\"CARD_6x2\",needShuffle:true,sortOption:\"EXHIBITION\",style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})]})]}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-1gnsrut\",\"data-framer-name\":\"MySelection\",id:elementId10,ref:ref11,children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-y83vy2\",\"data-framer-name\":\"my-selection\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"framer-1g82jda\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"framer-1y7b9rd\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",style:{\"--framer-text-alignment\":\"center\"},children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB9C8\uC774\uC140\uB809\uC158\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uB9C8\uC774\uC140\uB809\uC158\"})})}),className:\"framer-5rcabd\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uAC01\uC790\uC758 \uCDE8\uD5A5\uC73C\uB85C \uCC44\uC6B4 \uC140\uB809\uC158\uC744 \uCC38\uACE0\uD574\"}),/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uB098\uB9CC\uC758 \uC544\uC774\uD15C\uC744 \uBC1C\uACAC\uD574 \uBCF4\uC138\uC694.\"})]}),className:\"framer-iswxfu\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsxs(MotionDivWithViewEventTrackergvz9bn,{className:\"framer-gvz9bn\",\"data-framer-name\":\"InfluencerSelection\",children:[isDisplayed3()&&/*#__PURE__*/_jsx(motion.div,{className:\"framer-nhaypb hidden-1pvb4c9\",\"data-framer-name\":\"ContentsImage\",children:/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-cmrmzc-container\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"fARgS7M5a\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{YM7mEE4Di:{gap:40}},children:/*#__PURE__*/_jsx(Carousel,{align:\"flex-start\",ariaLabel:\"\",arrowObject:{arrowFill:\"rgba(0, 0, 0, 0.2)\",arrowPadding:20,arrowRadius:100,arrowSize:24,leftArrow:\"https://framerusercontent.com/images/8wKrVPpbhOZJlPJTaOKWuRuHpCw.png\",rightArrow:\"https://framerusercontent.com/images/AvB0foqgfazZ2Os2yhJBb6nBps.png\",showMouseControls:true},axis:true,borderRadius:0,fadeObject:{fadeAlpha:0,fadeContent:true,fadeInset:0,fadeTransition:{damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"},fadeWidth:4},gap:48,height:\"100%\",id:\"fARgS7M5a\",layoutId:\"fARgS7M5a\",padding:0,paddingBottom:0,paddingLeft:0,paddingPerSide:false,paddingRight:0,paddingTop:0,progressObject:{dotsActiveOpacity:1,dotsBackground:\"rgba(0, 0, 0, 0)\",dotsBlur:0,dotsFill:\"rgba(0, 0, 0, 0.3)\",dotsGap:10,dotsInset:10,dotSize:10,dotsOpacity:.5,dotsPadding:10,dotsRadius:50,showProgressDots:false,showScrollbar:false},sizingObject:{heightInset:0,heightRows:2,heightType:\"auto\",widthColumns:3,widthInset:0,widthType:\"auto\"},slots:[/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-19mdpx8-container\",\"data-framer-name\":\"Myselection_PC_1\",inComponentSlot:true,name:\"Myselection_PC_1\",nodeId:\"nZ6aatNkd\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC8FC\uBBF8\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/hYUJx1ZDRzlAeg5JaAU15vQ1I.png\",srcSet:\"https://framerusercontent.com/images/hYUJx1ZDRzlAeg5JaAU15vQ1I.png?scale-down-to=512 512w,https://framerusercontent.com/images/hYUJx1ZDRzlAeg5JaAU15vQ1I.png 760w\"},\"\"),height:\"100%\",id:\"nZ6aatNkd\",layoutId:\"nZ6aatNkd\",name:\"Myselection_PC_1\",Omadol5g7:\"\uCCAD\uB7C9\uD55C \uC5EC\uB984\uB8E9\",qBroyAc_o:\"\uBCC0\uD638\uC0AC\",quvKO9jNv:addImageAlt({pixelHeight:2737,pixelWidth:2929,src:\"https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg\",srcSet:\"https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg?scale-down-to=2048 2048w,https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg 2929w\"},\"\"),variant:\"FlWW6Sg1p\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-gfuPgO7vt9SRHQYVvsekweT9eaHWsTEN?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-v97twj-container\",\"data-framer-name\":\"Myselection_PC_2\",inComponentSlot:true,name:\"Myselection_PC_2\",nodeId:\"UN0QP7Bbr\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC9C0\uC6B0\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/lLwoaMsAa4yku0ABjWt0XpaOe9E.png\",srcSet:\"https://framerusercontent.com/images/lLwoaMsAa4yku0ABjWt0XpaOe9E.png?scale-down-to=512 512w,https://framerusercontent.com/images/lLwoaMsAa4yku0ABjWt0XpaOe9E.png 760w\"},\"\"),height:\"100%\",id:\"UN0QP7Bbr\",layoutId:\"UN0QP7Bbr\",name:\"Myselection_PC_2\",Omadol5g7:\"\uCD94\uCC9C \uD2B8\uB80C\uB4DC \uC544\uC774\uD15C\",qBroyAc_o:\"\uD06C\uB9AC\uC5D0\uC774\uD130\",quvKO9jNv:addImageAlt({pixelHeight:1333,pixelWidth:1333,src:\"https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg\",srcSet:\"https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg 1333w\"},\"\"),variant:\"FlWW6Sg1p\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-ZKuu0EBg7JRfzQZmsPC8njBGFNDTCWzt?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-bwwhoh-container\",\"data-framer-name\":\"Myselection_PC_3\",inComponentSlot:true,name:\"Myselection_PC_3\",nodeId:\"LRIRwT8r3\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uB178\uB178\uB8E8\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/gIrut5pmSELIlkFs9ivl3cYTDU.png\",srcSet:\"https://framerusercontent.com/images/gIrut5pmSELIlkFs9ivl3cYTDU.png?scale-down-to=512 512w,https://framerusercontent.com/images/gIrut5pmSELIlkFs9ivl3cYTDU.png 760w\"},\"\"),height:\"100%\",id:\"LRIRwT8r3\",layoutId:\"LRIRwT8r3\",name:\"Myselection_PC_3\",Omadol5g7:\"\uD648\uB370\uCF54 \uCE58\uD2B8\uD0A4\",qBroyAc_o:\"\uC778\uD14C\uB9AC\uC5B4\uB514\uC790\uC774\uB108\",quvKO9jNv:addImageAlt({pixelHeight:3727,pixelWidth:2534,src:\"https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg\",srcSet:\"https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg?scale-down-to=1024 696w,https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg?scale-down-to=2048 1392w,https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg 2534w\"},\"\"),variant:\"FlWW6Sg1p\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-62sEyYX0Vht2HgUDscxUt0RVQ8QwNBzt?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-139likw-container\",\"data-framer-name\":\"Myselection_PC_4\",inComponentSlot:true,name:\"Myselection_PC_4\",nodeId:\"S5DFeO48J\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uD61C\uC778\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/wbqnp4doKI6KFlPER9Xf9YnI0.png\",srcSet:\"https://framerusercontent.com/images/wbqnp4doKI6KFlPER9Xf9YnI0.png?scale-down-to=512 512w,https://framerusercontent.com/images/wbqnp4doKI6KFlPER9Xf9YnI0.png 760w\"},\"\"),height:\"100%\",id:\"S5DFeO48J\",layoutId:\"S5DFeO48J\",name:\"Myselection_PC_4\",Omadol5g7:\"10\uAC00\uC9C0 \uC5EC\uB984 \uC6D0\uD53C\uC2A4\",qBroyAc_o:\"\uD06C\uB9AC\uC5D0\uC774\uD130\",quvKO9jNv:addImageAlt({pixelHeight:810,pixelWidth:810,src:\"https://framerusercontent.com/images/qP2tQHFdYPjQJM58IQrslx40V0.jpeg\",srcSet:\"https://framerusercontent.com/images/qP2tQHFdYPjQJM58IQrslx40V0.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/qP2tQHFdYPjQJM58IQrslx40V0.jpeg 810w\"},\"\"),variant:\"FlWW6Sg1p\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-pcg50cmP79qchVZPN8posDA2oL1m3zun?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1gbi38y-container\",\"data-framer-name\":\"Myselection_PC_5\",inComponentSlot:true,name:\"Myselection_PC_5\",nodeId:\"OX5JXPGdl\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC774\uC9C0\uBCF4\uC774\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/Hns1SkrttJ0RPTSTQm3QrWCseM4.png\",srcSet:\"https://framerusercontent.com/images/Hns1SkrttJ0RPTSTQm3QrWCseM4.png?scale-down-to=512 512w,https://framerusercontent.com/images/Hns1SkrttJ0RPTSTQm3QrWCseM4.png 760w\"},\"\"),height:\"100%\",id:\"OX5JXPGdl\",layoutId:\"OX5JXPGdl\",name:\"Myselection_PC_5\",Omadol5g7:\"\uB2F9\uC77C\uCE58\uAE30 \uC5EC\uD589\uB8E9 \uC544\uBE60 ver.\",qBroyAc_o:\"\uB514\uB809\uD130\",quvKO9jNv:addImageAlt({pixelHeight:3024,pixelWidth:3024,src:\"https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg\",srcSet:\"https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg?scale-down-to=2048 2048w,https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg 3024w\"},\"\"),variant:\"FlWW6Sg1p\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-DQL5ixnPkJOE7o9VjoI8cFLR3JCnnhq5?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,width:\"380px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-ae87s-container\",\"data-framer-name\":\"Myselection_PC_6\",inComponentSlot:true,name:\"Myselection_PC_6\",nodeId:\"GOse2B63_\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC720\uB85C\uC774\uD648\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/DFDbxu8Rf1dPyo4EQcvzi06TJgI.png\",srcSet:\"https://framerusercontent.com/images/DFDbxu8Rf1dPyo4EQcvzi06TJgI.png?scale-down-to=512 512w,https://framerusercontent.com/images/DFDbxu8Rf1dPyo4EQcvzi06TJgI.png 760w\"},\"\"),height:\"100%\",id:\"GOse2B63_\",layoutId:\"GOse2B63_\",name:\"Myselection_PC_6\",Omadol5g7:\"\uAC10\uC131 \uBE0C\uB7F0\uCE58 \uC544\uC774\uD15C\",qBroyAc_o:\"\uD06C\uB9AC\uC5D0\uC774\uD130\",quvKO9jNv:addImageAlt({pixelHeight:1872,pixelWidth:1875,src:\"https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg\",srcSet:\"https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg 1875w\"},\"\"),variant:\"FlWW6Sg1p\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-gbYZzbyjPgHUFdNB5OKxKRtvlXKxAjv4?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})})],snapObject:{fluid:true,snap:false,snapEdge:\"start\"},style:{maxWidth:\"100%\",width:\"100%\"},width:\"100%\"})})})})}),/*#__PURE__*/_jsx(MotionDivWithClickEventTracker1aab93f,{className:\"framer-1aab93f\",\"data-framer-name\":\"InfluencerSelectionMore\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{width:`calc(min(${componentViewport?.width||\"100vw\"}, 1114px) - 40px)`,y:(componentViewport?.y||0)+0+5905.7+64+0+0+383.2+0+412+0+0},YM7mEE4Di:{width:`min(min(${componentViewport?.width||\"100vw\"}, 1114px) - 100px, 1114px)`}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:50,width:`min(${componentViewport?.width||\"100vw\"}, 1114px)`,y:(componentViewport?.y||0)+0+6626.2+100+0+0+419.2+0+260+0+0,children:/*#__PURE__*/_jsx(Container,{className:\"framer-f4f5w9-container\",isModuleExternal:true,nodeId:\"Kvcmeq6QV\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LegacyBoxButton,{BRAGgKktB:false,czjuHKRCJ:\"rgb(255, 255, 255)\",height:\"100%\",HIQRWK0x1:\"https://shop.29cm.co.kr/selection/influencer-feed?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&29cm_title=\uC778\uD50C\uB8E8\uC5B8\uC11C \uC140\uB809\uC158 \uB458\uB7EC\uBCF4\uAE30&source=29week_homemain\",id:\"Kvcmeq6QV\",JV6cJQR3f:true,layoutId:\"Kvcmeq6QV\",pCFLiWKBe:true,RbsSRLpDT:\"\uB354 \uB9CE\uC740 \uC140\uB809\uC158 \uB458\uB7EC\uBCF4\uAE30\",style:{width:\"100%\"},variant:\"Zp9F7twj7\",width:\"100%\",Yj7_fQ1WY:addImageAlt({pixelHeight:24,pixelWidth:24,src:\"https://framerusercontent.com/images/6giz8AxE7QB62lstk1LECtBe0.svg\"},\"\")})})})})}),isDisplayed1()&&/*#__PURE__*/_jsx(motion.div,{className:\"framer-19uod44 hidden-1qvvfbq hidden-6zo2cy\",\"data-framer-name\":\"MO\",children:isDisplayed1()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1kavopu-container hidden-1qvvfbq\",isAuthoredByUser:true,isModuleExternal:true,nodeId:\"MGBrNQTJ9\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Slideshow,{alignment:\"center\",arrowOptions:{arrowFill:\"rgba(255, 255, 255, 0)\",arrowGap:10,arrowPadding:12,arrowPaddingBottom:0,arrowPaddingLeft:0,arrowPaddingRight:0,arrowPaddingTop:0,arrowPosition:\"auto\",arrowRadius:0,arrowShouldFadeIn:false,arrowShouldSpace:true,arrowSize:20,leftArrow:\"https://framerusercontent.com/images/ucDgVUVFbqedDE0yqWWcUCvQ2EM.svg\",rightArrow:\"https://framerusercontent.com/images/6giz8AxE7QB62lstk1LECtBe0.svg\",showMouseControls:false},autoPlayControl:false,borderRadius:0,direction:\"left\",dragControl:true,effectsOptions:{effectsHover:true,effectsOpacity:.5,effectsPerspective:1200,effectsRotate:0,effectsScale:.7,playOffscreen:false},fadeOptions:{fadeAlpha:0,fadeContent:false,fadeInset:0,fadeWidth:25,overflow:false},gap:16,height:\"100%\",id:\"MGBrNQTJ9\",intervalControl:3,itemAmount:1.2,layoutId:\"MGBrNQTJ9\",padding:0,paddingBottom:0,paddingLeft:54,paddingPerSide:true,paddingRight:0,paddingTop:0,progressOptions:{dotsActiveOpacity:1,dotsBackground:\"rgba(0, 0, 0, 0)\",dotsBlur:0,dotsFill:\"rgb(0, 0, 0)\",dotsGap:8,dotsInset:10,dotSize:8,dotsOpacity:.3,dotsPadding:10,dotsRadius:50,showProgressDots:true},slots:[/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1mlu1yk-container\",\"data-framer-name\":\"Myselection_MO_1\",inComponentSlot:true,name:\"Myselection_MO_1\",nodeId:\"xGUCS_HJR\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC8FC\uBBF8\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/hYUJx1ZDRzlAeg5JaAU15vQ1I.png\",srcSet:\"https://framerusercontent.com/images/hYUJx1ZDRzlAeg5JaAU15vQ1I.png?scale-down-to=512 512w,https://framerusercontent.com/images/hYUJx1ZDRzlAeg5JaAU15vQ1I.png 760w\"},\"\"),height:\"100%\",id:\"xGUCS_HJR\",layoutId:\"xGUCS_HJR\",name:\"Myselection_MO_1\",Omadol5g7:\"\uCCAD\uB7C9\uD55C \uC5EC\uB984\uB8E9\",qBroyAc_o:\"\uBCC0\uD638\uC0AC\",quvKO9jNv:addImageAlt({pixelHeight:2737,pixelWidth:2929,src:\"https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg\",srcSet:\"https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg?scale-down-to=2048 2048w,https://framerusercontent.com/images/j5osAIpFL3yE8O2Vl65t2ZVSM.jpeg 2929w\"},\"\"),variant:\"JbHmkfuVH\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-gfuPgO7vt9SRHQYVvsekweT9eaHWsTEN?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-6m8zcy-container\",\"data-framer-name\":\"Myselection_MO_2\",inComponentSlot:true,name:\"Myselection_MO_2\",nodeId:\"eTOtCGmmi\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC9C0\uC6B0\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/lLwoaMsAa4yku0ABjWt0XpaOe9E.png\",srcSet:\"https://framerusercontent.com/images/lLwoaMsAa4yku0ABjWt0XpaOe9E.png?scale-down-to=512 512w,https://framerusercontent.com/images/lLwoaMsAa4yku0ABjWt0XpaOe9E.png 760w\"},\"\"),height:\"100%\",id:\"eTOtCGmmi\",layoutId:\"eTOtCGmmi\",name:\"Myselection_MO_2\",Omadol5g7:\"\uCD94\uCC9C \uD2B8\uB80C\uB4DC \uC544\uC774\uD15C\",qBroyAc_o:\"\uD06C\uB9AC\uC5D0\uC774\uD130\",quvKO9jNv:addImageAlt({pixelHeight:1333,pixelWidth:1333,src:\"https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg\",srcSet:\"https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/eQcFickRbNOJWxWiM2QAkNfdU.jpeg 1333w\"},\"\"),variant:\"JbHmkfuVH\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-ZKuu0EBg7JRfzQZmsPC8njBGFNDTCWzt?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1idbzhw-container\",\"data-framer-name\":\"Myselection_MO_3\",inComponentSlot:true,name:\"Myselection_MO_3\",nodeId:\"bbJkESi0p\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uB178\uB178\uB8E8\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/gIrut5pmSELIlkFs9ivl3cYTDU.png\",srcSet:\"https://framerusercontent.com/images/gIrut5pmSELIlkFs9ivl3cYTDU.png?scale-down-to=512 512w,https://framerusercontent.com/images/gIrut5pmSELIlkFs9ivl3cYTDU.png 760w\"},\"\"),height:\"100%\",id:\"bbJkESi0p\",layoutId:\"bbJkESi0p\",name:\"Myselection_MO_3\",Omadol5g7:\"\uD648\uB370\uCF54 \uCE58\uD2B8\uD0A4\",qBroyAc_o:\"\uC778\uD14C\uB9AC\uC5B4\uB514\uC790\uC774\uB108\",quvKO9jNv:addImageAlt({pixelHeight:3727,pixelWidth:2534,src:\"https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg\",srcSet:\"https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg?scale-down-to=1024 696w,https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg?scale-down-to=2048 1392w,https://framerusercontent.com/images/MsbpNIBl99cuj5zPiioqqqLSUQ.jpeg 2534w\"},\"\"),variant:\"JbHmkfuVH\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-62sEyYX0Vht2HgUDscxUt0RVQ8QwNBzt?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-129kkxu-container\",\"data-framer-name\":\"Myselection_MO_4\",inComponentSlot:true,name:\"Myselection_MO_4\",nodeId:\"CvJCWHH7n\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uD61C\uC778\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/wbqnp4doKI6KFlPER9Xf9YnI0.png\",srcSet:\"https://framerusercontent.com/images/wbqnp4doKI6KFlPER9Xf9YnI0.png?scale-down-to=512 512w,https://framerusercontent.com/images/wbqnp4doKI6KFlPER9Xf9YnI0.png 760w\"},\"\"),height:\"100%\",id:\"CvJCWHH7n\",layoutId:\"CvJCWHH7n\",name:\"Myselection_MO_4\",Omadol5g7:\"10\uAC00\uC9C0 \uC5EC\uB984 \uC6D0\uD53C\uC2A4\",qBroyAc_o:\"\uD06C\uB9AC\uC5D0\uC774\uD130\",quvKO9jNv:addImageAlt({pixelHeight:810,pixelWidth:810,src:\"https://framerusercontent.com/images/qP2tQHFdYPjQJM58IQrslx40V0.jpeg\",srcSet:\"https://framerusercontent.com/images/qP2tQHFdYPjQJM58IQrslx40V0.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/qP2tQHFdYPjQJM58IQrslx40V0.jpeg 810w\"},\"\"),variant:\"JbHmkfuVH\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-pcg50cmP79qchVZPN8posDA2oL1m3zun?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1vtcdh6-container\",\"data-framer-name\":\"Myselection_MO_5\",inComponentSlot:true,name:\"Myselection_MO_5\",nodeId:\"JO8W7iPE1\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC774\uC9C0\uBCF4\uC774\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/Hns1SkrttJ0RPTSTQm3QrWCseM4.png\",srcSet:\"https://framerusercontent.com/images/Hns1SkrttJ0RPTSTQm3QrWCseM4.png?scale-down-to=512 512w,https://framerusercontent.com/images/Hns1SkrttJ0RPTSTQm3QrWCseM4.png 760w\"},\"\"),height:\"100%\",id:\"JO8W7iPE1\",layoutId:\"JO8W7iPE1\",name:\"Myselection_MO_5\",Omadol5g7:\"\uB2F9\uC77C\uCE58\uAE30 \uC5EC\uD589\uB8E9 \uC544\uBE60 ver.\",qBroyAc_o:\"\uB514\uB809\uD130\",quvKO9jNv:addImageAlt({pixelHeight:3024,pixelWidth:3024,src:\"https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg\",srcSet:\"https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg?scale-down-to=2048 2048w,https://framerusercontent.com/images/yp0gZ3XoQDDIMEQhiFqG9j2DrtY.jpeg 3024w\"},\"\"),variant:\"JbHmkfuVH\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-DQL5ixnPkJOE7o9VjoI8cFLR3JCnnhq5?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:411,width:\"275px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1tiy6oz-container\",\"data-framer-name\":\"Myselection_MO_6\",inComponentSlot:true,name:\"Myselection_MO_6\",nodeId:\"RBgnfW7LJ\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Week_Myselection,{a1NzGJkn9:\"\uC720\uB85C\uC774\uD648\",geLGa9LTN:addImageAlt({pixelHeight:650,pixelWidth:760,src:\"https://framerusercontent.com/images/DFDbxu8Rf1dPyo4EQcvzi06TJgI.png\",srcSet:\"https://framerusercontent.com/images/DFDbxu8Rf1dPyo4EQcvzi06TJgI.png?scale-down-to=512 512w,https://framerusercontent.com/images/DFDbxu8Rf1dPyo4EQcvzi06TJgI.png 760w\"},\"\"),height:\"100%\",id:\"RBgnfW7LJ\",layoutId:\"RBgnfW7LJ\",name:\"Myselection_MO_6\",Omadol5g7:\"\uAC10\uC131 \uBE0C\uB7F0\uCE58 \uC544\uC774\uD15C\",qBroyAc_o:\"\uD06C\uB9AC\uC5D0\uC774\uD130\",quvKO9jNv:addImageAlt({pixelHeight:1872,pixelWidth:1875,src:\"https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg\",srcSet:\"https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg?scale-down-to=512 512w,https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg?scale-down-to=1024 1024w,https://framerusercontent.com/images/8UpekI4vHVniOkwoxNHB78FnuY.jpeg 1875w\"},\"\"),variant:\"JbHmkfuVH\",width:\"100%\",x11Up3evN:\"https://shop.29cm.co.kr/selections/S-gbYZzbyjPgHUFdNB5OKxKRtvlXKxAjv4?29cm_nav_cart=off&29cm_nav_home=off&29cm_nav_search=off&source=29week_homemain\"})})})],startFrom:0,style:{height:\"100%\",width:\"100%\"},transitionControl:{damping:40,delay:0,mass:1,stiffness:180,type:\"spring\"},width:\"100%\"})})})})]})]})}),/*#__PURE__*/_jsxs(MotionDivWithClickEventTracker1g02e8f,{className:\"framer-1g02e8f\",\"data-framer-name\":\"CardPromotion\",id:elementId11,ref:ref12,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-d1toz6\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-unso1d\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uAE08\uC735\uC0AC \uC81C\uD734\"})})})}},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"\uAE08\uC735\uC0AC \uC81C\uD734\"})})}),className:\"framer-9kt82u\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:\"\uC0B4\uB730\uD55C \uD61C\uD0DD, \uCD5C\uB300\uB85C \uCC59\uACA8\uAC00\uC138\uC694.\"})}),className:\"framer-f4vwfo\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-1n2514c\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{transformTemplate:undefined}},children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-6t1qby\",\"data-framer-name\":\"CardList\",\"data-hide-scrollbars\":true,transformTemplate:transformTemplate2,children:[/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+0,children:/*#__PURE__*/_jsx(Container,{className:\"framer-18lmgvg-container\",isModuleExternal:true,nodeId:\"G1YTVSzhg\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"~15,000\uC6D0 \uD560\uC778\",height:\"100%\",id:\"G1YTVSzhg\",IPQqxIy38:\"\uC0BC\uC131\uCE74\uB4DC LINK \uC5F0\uACB0 \uBC0F \uACB0\uC81C \uC2DC\",layoutId:\"G1YTVSzhg\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/sslink\",SFWvDmfwf:false,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/mv0GH1HBFmroaBDv1clqUXxHM.png\",srcSet:\"https://framerusercontent.com/images/mv0GH1HBFmroaBDv1clqUXxHM.png?scale-down-to=512 512w,https://framerusercontent.com/images/mv0GH1HBFmroaBDv1clqUXxHM.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(0, 121, 255)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+0,children:/*#__PURE__*/_jsx(Container,{className:\"framer-7li28o-container\",isModuleExternal:true,nodeId:\"FBEg9AWOf\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"10,000\uC6D0 \uD560\uC778\",height:\"100%\",id:\"FBEg9AWOf\",IPQqxIy38:\"\uC804\uBD81\uC740\uD589 JB\uCE74\uB4DC \uACB0\uC81C \uC2DC\",layoutId:\"FBEg9AWOf\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/jbcard\",SFWvDmfwf:false,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/M6xMGW0N9K89rjdMmcINcxo16aY.png\",srcSet:\"https://framerusercontent.com/images/M6xMGW0N9K89rjdMmcINcxo16aY.png?scale-down-to=512 512w,https://framerusercontent.com/images/M6xMGW0N9K89rjdMmcINcxo16aY.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(0, 130, 201)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+0,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1a8gm9o-container\",isModuleExternal:true,nodeId:\"paUExy1EF\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"7,000\uC6D0 \uD61C\uD0DD\",height:\"100%\",id:\"paUExy1EF\",IPQqxIy38:\"\uD1A0\uC2A4\uD398\uC774 \uACC4\uC88C \uC774\uCCB4\uB85C \uACB0\uC81C \uC2DC\",layoutId:\"paUExy1EF\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/toss/discount\",SFWvDmfwf:false,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/jFcXtdhmHRB0wSrvJ3TWZpdfq8.png\",srcSet:\"https://framerusercontent.com/images/jFcXtdhmHRB0wSrvJ3TWZpdfq8.png?scale-down-to=512 512w,https://framerusercontent.com/images/jFcXtdhmHRB0wSrvJ3TWZpdfq8.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(2, 100, 255)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+144,children:/*#__PURE__*/_jsx(Container,{className:\"framer-fetriz-container\",isModuleExternal:true,nodeId:\"CC096FYES\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"4000\uC6D0 \uD560\uC778\",height:\"100%\",id:\"CC096FYES\",IPQqxIy38:\"\uCE74\uCE74\uC624\uD398\uC774\uB85C \uC0BC\uC131\uCE74\uB4DC \uACB0\uC81C \uC2DC\",layoutId:\"CC096FYES\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/kakaoss\",SFWvDmfwf:true,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/DxIDowKz2P44PwnkxQWBfYSHfw.png\",srcSet:\"https://framerusercontent.com/images/DxIDowKz2P44PwnkxQWBfYSHfw.png?scale-down-to=512 512w,https://framerusercontent.com/images/DxIDowKz2P44PwnkxQWBfYSHfw.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(255, 240, 0)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+144,children:/*#__PURE__*/_jsx(Container,{className:\"framer-14uwjlq-container\",isModuleExternal:true,nodeId:\"qk1R2ziDE\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"4,000\uC6D0 \uD560\uC778\",height:\"100%\",id:\"qk1R2ziDE\",IPQqxIy38:\"\uCE74\uCE74\uC624\uD398\uC774 \uBA38\uB2C8\uB85C \uACB0\uC81C \uC2DC\",layoutId:\"qk1R2ziDE\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/kakao/discount\",SFWvDmfwf:true,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/DxIDowKz2P44PwnkxQWBfYSHfw.png\",srcSet:\"https://framerusercontent.com/images/DxIDowKz2P44PwnkxQWBfYSHfw.png?scale-down-to=512 512w,https://framerusercontent.com/images/DxIDowKz2P44PwnkxQWBfYSHfw.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(255, 240, 0)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+144,children:/*#__PURE__*/_jsx(Container,{className:\"framer-9rrun0-container\",isModuleExternal:true,nodeId:\"gW5VEw3_x\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"3,000\uC6D0 \uD560\uC778\",height:\"100%\",id:\"gW5VEw3_x\",IPQqxIy38:\"\uD398\uC774\uCF54 \uD3EC\uC778\uD2B8\uB85C \uACB0\uC81C \uC2DC\",layoutId:\"gW5VEw3_x\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/payco/discount\",SFWvDmfwf:false,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/3oXipxVqFHaagJBKqRjYStDytp0.png\",srcSet:\"https://framerusercontent.com/images/3oXipxVqFHaagJBKqRjYStDytp0.png?scale-down-to=512 512w,https://framerusercontent.com/images/3oXipxVqFHaagJBKqRjYStDytp0.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(250, 40, 40)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})}),/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{y:(componentViewport?.y||0)+0+6814.9+64+229.2+0+0+0}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:124,y:(componentViewport?.y||0)+0+7455.4+100+267.2+42+0+288,children:/*#__PURE__*/_jsx(Container,{className:\"framer-427qm6-container\",isModuleExternal:true,nodeId:\"N39kxIyug\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{variant:\"FGn4yOsTU\"}},children:/*#__PURE__*/_jsx(CreditCardPromotionBanner,{ChOOBYCm8:\"5,000\uC6D0 \uD560\uC778\",height:\"100%\",id:\"N39kxIyug\",IPQqxIy38:\"NH\uB18D\uD611\uCE74\uB4DC\uB85C \uACB0\uC81C \uC2DC\",layoutId:\"N39kxIyug\",mFBeyCGUA:\"https://content.29cm.co.kr/cardpromotion/nonghyup\",SFWvDmfwf:false,SigzId2ik:addImageAlt({pixelHeight:142,pixelWidth:810,src:\"https://framerusercontent.com/images/Xqegumlgd6BhzidYtHdvx3sU8Lo.png\",srcSet:\"https://framerusercontent.com/images/Xqegumlgd6BhzidYtHdvx3sU8Lo.png?scale-down-to=512 512w,https://framerusercontent.com/images/Xqegumlgd6BhzidYtHdvx3sU8Lo.png 810w\"},\"\"),variant:\"PoZoea8T4\",width:\"100%\",YGgaq9ZpE:\"rgb(31, 167, 75)\",ZzCSuM_Y9:\"rgb(244, 244, 244)\"})})})})})]})})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-rnjyk0\",\"data-framer-name\":\"Cta\",children:/*#__PURE__*/_jsx(PropertyOverrides,{breakpoint:baseVariant,overrides:{qDn655TQf:{width:`calc(min(${componentViewport?.width||\"100vw\"}, 1114px) - 40px)`,y:(componentViewport?.y||0)+0+6814.9+64+401.2+0+0},YM7mEE4Di:{width:`calc(${componentViewport?.width||\"100vw\"} - 100px)`}},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:50,width:`min(${componentViewport?.width||\"100vw\"}, 1114px)`,y:(componentViewport?.y||0)+0+7455.4+100+803.2+24+0,children:/*#__PURE__*/_jsx(Container,{className:\"framer-11iazoq-container\",isModuleExternal:true,nodeId:\"CmVda2jpd\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LegacyBoxButton,{BRAGgKktB:false,czjuHKRCJ:\"rgb(255, 255, 255)\",height:\"100%\",HIQRWK0x1:\"https://content.29cm.co.kr/post/20053\",id:\"CmVda2jpd\",JV6cJQR3f:true,layoutId:\"CmVda2jpd\",pCFLiWKBe:true,RbsSRLpDT:\"\uC81C\uD734 \uD61C\uD0DD \uC790\uC138\uD788 \uC54C\uC544\uBCF4\uAE30\",style:{width:\"100%\"},variant:\"Zp9F7twj7\",width:\"100%\",Yj7_fQ1WY:addImageAlt({pixelHeight:24,pixelWidth:24,src:\"https://framerusercontent.com/images/6giz8AxE7QB62lstk1LECtBe0.svg\"},\"\")})})})})})]}),/*#__PURE__*/_jsxs(MotionDivWithClickEventTrackerv0c4vb,{className:\"framer-v0c4vb\",\"data-framer-name\":\"Live\",id:elementId12,ref:ref13,children:[isDisplayed2()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-t7iu72-container hidden-1pvb4c9 hidden-6zo2cy\",\"data-framer-name\":\"DesktopSchedulable29Live\",isAuthoredByUser:true,isModuleExternal:true,name:\"DesktopSchedulable29Live\",nodeId:\"j1k8zPqy2\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsxs(motion.div,{className:\"framer-cs8tsh\",\"data-framer-name\":\"Desktop29Live\",id:elementId3,ref:ref4,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1gwmf98\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-jmbqgg\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"29LIVE\"})})}),className:\"framer-1a1p1zt\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"strong\",{children:\"\uB2E8 \uC138 \uBC88!\"}),/*#__PURE__*/_jsx(\"br\",{}),/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uD6C4 8\uC2DC\uC5D0 \uCC3E\uC544\uC624\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}),className:\"framer-1utsu4k\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1el4gk0\",children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"364.75px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-5bhx8z-container\",\"data-framer-name\":\"LivePlayer_PC3\",inComponentSlot:true,name:\"LivePlayer_PC3\",nodeId:\"IrAyCGhxG\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"f0992123c883\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/shoppingwithus/2024/06/18/vans\",height:\"100%\",id:\"IrAyCGhxG\",layoutId:\"IrAyCGhxG\",LBZwJjixb:\"\uBC18\uC2A4\",name:\"LivePlayer_PC3\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg\",srcSet:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"364.75px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1f344c8-container\",\"data-framer-name\":\"LivePlayer_PC2\",inComponentSlot:true,name:\"LivePlayer_PC2\",nodeId:\"OFTF25wOE\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"b4f5b9d6cf2b\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/I-live-in-LIVE/2024/06/13/wagensteiger\",height:\"100%\",id:\"OFTF25wOE\",layoutId:\"OFTF25wOE\",LBZwJjixb:\"\uBC14\uAC90\uC288\uD0C0\uC774\uAC70\",name:\"LivePlayer_PC2\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg\",srcSet:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"364.5px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-k80ohf-container\",\"data-framer-name\":\"LivePlayer_PC1\",inComponentSlot:true,name:\"LivePlayer_PC1\",nodeId:\"G0qhVLsPb\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"5effb2bdc630\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/special/2024/06/11/depound\",height:\"100%\",id:\"G0qhVLsPb\",layoutId:\"G0qhVLsPb\",LBZwJjixb:\"\uB4DC\uD30C\uC6B4\uB4DC\",name:\"LivePlayer_PC1\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg\",srcSet:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})})]})]}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-18a81fv\",\"data-framer-name\":\"Empty29Live\"})],height:\"100%\",id:\"j1k8zPqy2\",layoutId:\"j1k8zPqy2\",name:\"DesktopSchedulable29Live\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})}),isDisplayed1()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-5zjmvo-container hidden-1qvvfbq hidden-6zo2cy\",\"data-framer-name\":\"MobileSchedulable29Live\",isAuthoredByUser:true,isModuleExternal:true,name:\"MobileSchedulable29Live\",nodeId:\"ixmd28RpC\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsxs(motion.div,{className:\"framer-82pafs\",\"data-framer-name\":\"Mobile29Live\",id:elementId2,ref:ref3,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1gndw8n\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1pfd532\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h6\",{className:\"framer-styles-preset-1y1o3k3\",\"data-styles-preset\":\"H43TcLyTY\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"29LIVE\"})})}),className:\"framer-3k4ddf\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"strong\",{children:\"\uB2E8 \uC138 \uBC88!\"}),/*#__PURE__*/_jsx(\"br\",{}),/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uD6C4 8\uC2DC\uC5D0 \uCC3E\uC544\uC624\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}),className:\"framer-ecc4u8\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1nuxlnz-container\",inComponentSlot:true,isAuthoredByUser:true,isModuleExternal:true,nodeId:\"y9i0RyeFC\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Carousel,{align:\"center\",ariaLabel:\"\",arrowObject:{arrowFill:\"rgba(0, 0, 0, 0.2)\",arrowPadding:20,arrowRadius:40,arrowSize:40,showMouseControls:true},axis:true,borderRadius:0,fadeObject:{fadeAlpha:0,fadeContent:false,fadeInset:0,fadeTransition:{damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"},fadeWidth:25},gap:10,height:\"100%\",id:\"y9i0RyeFC\",layoutId:\"y9i0RyeFC\",padding:0,paddingBottom:0,paddingLeft:0,paddingPerSide:true,paddingRight:0,paddingTop:0,progressObject:{dotsActiveOpacity:1,dotsBackground:\"rgba(0, 0, 0, 0.2)\",dotsBlur:4,dotsFill:\"rgb(255, 255, 255)\",dotsGap:10,dotsInset:10,dotSize:10,dotsOpacity:.5,dotsPadding:10,dotsRadius:50,showProgressDots:false,showScrollbar:false},sizingObject:{heightInset:0,heightRows:2,heightType:\"stretch\",widthColumns:2,widthInset:0,widthType:\"auto\"},slots:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-7o2yg7\",\"data-framer-name\":\"10px\"}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1syldk9-container\",\"data-framer-name\":\"LivePlayer_MO3\",inComponentSlot:true,name:\"LivePlayer_MO3\",nodeId:\"YZ93nPQez\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"f0992123c883\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/shoppingwithus/2024/06/18/vans\",height:\"100%\",id:\"YZ93nPQez\",layoutId:\"YZ93nPQez\",LBZwJjixb:\"\uBC18\uC2A4\",name:\"LivePlayer_MO3\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/5SYENatzBR4SQSqpeykyZiqaM.jpg\",srcSet:\"https://framerusercontent.com/images/5SYENatzBR4SQSqpeykyZiqaM.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/5SYENatzBR4SQSqpeykyZiqaM.jpg 780w\"},\"\"),variant:\"oEQJTERRd\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,children:/*#__PURE__*/_jsx(Container,{className:\"framer-1l0afl7-container\",\"data-framer-name\":\"LivePlayer_MO2\",inComponentSlot:true,name:\"LivePlayer_MO2\",nodeId:\"CqG10FU4N\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"b4f5b9d6cf2b\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/I-live-in-LIVE/2024/06/13/wagensteiger\",height:\"100%\",id:\"CqG10FU4N\",layoutId:\"CqG10FU4N\",LBZwJjixb:\"\uBC14\uAC90\uC288\uD0C0\uC774\uAC70\",name:\"LivePlayer_MO2\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg\",srcSet:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg 780w\"},\"\"),variant:\"oEQJTERRd\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,children:/*#__PURE__*/_jsx(Container,{className:\"framer-5hmrft-container\",\"data-framer-name\":\"LivePlayer_MO1\",inComponentSlot:true,name:\"LivePlayer_MO1\",nodeId:\"Yv1XrHaFq\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"5effb2bdc630\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/special/2024/06/11/depound\",height:\"100%\",id:\"Yv1XrHaFq\",layoutId:\"Yv1XrHaFq\",LBZwJjixb:\"\uB4DC\uD30C\uC6B4\uB4DC\",name:\"LivePlayer_MO1\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg\",srcSet:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg 780w\"},\"\"),variant:\"oEQJTERRd\",width:\"100%\"})})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-7o2yg7\",\"data-framer-name\":\"10px\"})],snapObject:{fluid:false,snap:true,snapEdge:\"center\"},style:{width:\"100%\"},width:\"100%\"})})})]}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-18a81fv\",\"data-framer-name\":\"Empty29Live\"})],height:\"100%\",id:\"ixmd28RpC\",layoutId:\"ixmd28RpC\",name:\"MobileSchedulable29Live\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})}),isDisplayed()&&/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1mit7tf-container hidden-1qvvfbq hidden-1pvb4c9\",\"data-framer-name\":\"TabletSchedulable29Live\",isAuthoredByUser:true,isModuleExternal:true,name:\"TabletSchedulable29Live\",nodeId:\"gNah8Y6Kz\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(Schedulable,{components:[/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1jq5bak\",\"data-framer-name\":\"Tablet29Live\",id:elementId1,ref:ref2,children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1llnwfy\",\"data-framer-name\":\"Header\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-17cnh3k\",\"data-framer-name\":\"Description\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(\"h4\",{className:\"framer-styles-preset-15lyrgf\",\"data-styles-preset\":\"P_sBehajb\",children:/*#__PURE__*/_jsx(\"strong\",{children:\"29LIVE\"})})}),className:\"framer-jsqh7q\",\"data-framer-name\":\"Title\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(\"p\",{className:\"framer-styles-preset-11xdkob\",\"data-styles-preset\":\"B5nPqpVQK\",style:{\"--framer-text-alignment\":\"center\"},children:[/*#__PURE__*/_jsx(\"strong\",{children:\"\uB2E8 \uC138 \uBC88!\"}),/*#__PURE__*/_jsx(\"br\",{}),/*#__PURE__*/_jsx(\"strong\",{children:\"\uC624\uD6C4 8\uC2DC\uC5D0 \uCC3E\uC544\uC624\uB294 \uCD5C\uC560 \uBE0C\uB79C\uB4DC\"})]})}),className:\"framer-1wuk5hl\",\"data-framer-name\":\"Desc\",fonts:[\"Inter\",\"Inter-Bold\"],verticalAlignment:\"top\",withExternalLayout:true})]})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1m55e19\",children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"301.3333px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1hpy61h-container\",\"data-framer-name\":\"LivePlayer_PC3\",inComponentSlot:true,name:\"LivePlayer_PC3\",nodeId:\"r00QizOYn\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"f0992123c883\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/shoppingwithus/2024/06/18/vans\",height:\"100%\",id:\"r00QizOYn\",layoutId:\"r00QizOYn\",LBZwJjixb:\"\uBC18\uC2A4\",name:\"LivePlayer_PC3\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg\",srcSet:\"https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/ILHO5zIQ3AId6xNE5vvBxIcNTuQ.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"301.3333px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-1e2rmki-container\",\"data-framer-name\":\"LivePlayer_PC2\",inComponentSlot:true,name:\"LivePlayer_PC2\",nodeId:\"Gc9eszMP7\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"b4f5b9d6cf2b\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/I-live-in-LIVE/2024/06/13/wagensteiger\",height:\"100%\",id:\"Gc9eszMP7\",layoutId:\"Gc9eszMP7\",LBZwJjixb:\"\uBC14\uAC90\uC288\uD0C0\uC774\uAC70\",name:\"LivePlayer_PC2\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg\",srcSet:\"https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/UYyE5sTpI0a2WpUVAqmIlo8th0.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})}),/*#__PURE__*/_jsx(ComponentViewportProvider,{height:589,width:\"301.3333px\",children:/*#__PURE__*/_jsx(Container,{className:\"framer-103n5kn-container\",\"data-framer-name\":\"LivePlayer_PC1\",inComponentSlot:true,name:\"LivePlayer_PC1\",nodeId:\"fbZ1_HMw5\",rendersWithMotion:true,scopeId:\"hoa12SBgY\",children:/*#__PURE__*/_jsx(LivePlayer,{CaATUNmJk:\"5effb2bdc630\",d89LhukLI:false,Do9fOGhbh:\"https://content.29cm.co.kr/29live/special/2024/06/11/depound\",height:\"100%\",id:\"fbZ1_HMw5\",layoutId:\"fbZ1_HMw5\",LBZwJjixb:\"\uB4DC\uD30C\uC6B4\uB4DC\",name:\"LivePlayer_PC1\",S1gqWSCvi:addImageAlt({pixelHeight:1260,pixelWidth:780,src:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg\",srcSet:\"https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg?scale-down-to=1024 633w,https://framerusercontent.com/images/u9IyrmN5EAaxhlcJXbaaHrlZBBs.jpg 780w\"},\"\"),style:{width:\"100%\"},variant:\"bMqqiBD3P\",width:\"100%\"})})})]})]}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-18a81fv\",\"data-framer-name\":\"Empty29Live\"})],height:\"100%\",id:\"gNah8Y6Kz\",layoutId:\"gNah8Y6Kz\",name:\"TabletSchedulable29Live\",repeatSchedules:[],schedules:[{scheduledAt:{date:\"Mon Jun 10 2024 12:29:20 GMT+0900 (\uD55C\uAD6D \uD45C\uC900\uC2DC)\",hours:0,minutes:0,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-11T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-13T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:19,minutes:50,seconds:0},sequence:2},{scheduledAt:{date:\"2024-06-18T00:00:00.000Z\",hours:21,minutes:15,seconds:0},sequence:1}],scheduleType:0,style:{width:\"100%\"},width:\"100%\"})})})]}),/*#__PURE__*/_jsx(\"div\",{className:\"framer-1ac9sn9\"})]}),/*#__PURE__*/_jsx(\"div\",{id:\"overlay\"})]})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-Bsa75.framer-1nypatt, .framer-Bsa75 .framer-1nypatt { display: block; }\",\".framer-Bsa75.framer-1qvvfbq { align-content: center; align-items: center; background-color: #ffffff; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 1440px; }\",\".framer-Bsa75 .framer-cqnjfa-container, .framer-Bsa75 .framer-19dl3zh-container, .framer-Bsa75 .framer-1oid6bu-container, .framer-Bsa75 .framer-6iqla1-container, .framer-Bsa75 .framer-mchnqc-container, .framer-Bsa75 .framer-1nuxlnz-container, .framer-Bsa75 .framer-1qi3ggd-container, .framer-Bsa75 .framer-f4f5w9-container, .framer-Bsa75 .framer-11iazoq-container, .framer-Bsa75 .framer-t7iu72-container, .framer-Bsa75 .framer-5zjmvo-container, .framer-Bsa75 .framer-1mit7tf-container { flex: none; height: auto; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-d3kv6m { align-content: center; align-items: center; background-color: #1756c9; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1ck9975-container { flex: none; height: auto; position: relative; width: auto; }\",\".framer-Bsa75 .framer-vug4vp { flex: none; height: 100%; left: calc(50.00000000000002% - 100% / 2); overflow: hidden; position: absolute; top: 0px; width: 100%; z-index: 1; }\",\".framer-Bsa75 .framer-opznwy { align-content: center; align-items: center; bottom: 40px; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; left: 50%; overflow: visible; padding: 0px; position: absolute; transform: translateX(-50%); width: 636px; z-index: 8; }\",\".framer-Bsa75 .framer-1hkaop9-container, .framer-Bsa75 .framer-4lbyxs-container, .framer-Bsa75 .framer-f8infg-container { height: auto; position: relative; width: 500px; z-index: 1; }\",\".framer-Bsa75 .framer-1bzpn31-container { height: auto; position: relative; width: 40px; z-index: 2; }\",\".framer-Bsa75 .framer-1h6f50q-container { flex: none; height: auto; position: sticky; top: -1px; width: 100%; z-index: 9; }\",\".framer-Bsa75 .framer-1qmova6-container { height: auto; position: relative; width: 1440px; z-index: 9; }\",\".framer-Bsa75 .framer-vdci03-container { height: 50px; position: relative; width: 1440px; z-index: 9; }\",\".framer-Bsa75 .framer-15jjhla { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 32px; height: min-content; justify-content: center; max-width: 1114px; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-18a81fv { height: 1px; overflow: hidden; position: relative; width: 100px; }\",\".framer-Bsa75 .framer-1jq5bak { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 48px; height: min-content; justify-content: center; overflow: hidden; padding: 100px 0px 0px 0px; position: relative; width: 1024px; }\",\".framer-Bsa75 .framer-1llnwfy, .framer-Bsa75 .framer-1gndw8n, .framer-Bsa75 .framer-1pfd532, .framer-Bsa75 .framer-1gwmf98, .framer-Bsa75 .framer-d1toz6 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 12px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-17cnh3k, .framer-Bsa75 .framer-jmbqgg, .framer-Bsa75 .framer-q69wzg, .framer-Bsa75 .framer-8qv07z, .framer-Bsa75 .framer-1bqn5bb, .framer-Bsa75 .framer-1naz9nw, .framer-Bsa75 .framer-xdn3id, .framer-Bsa75 .framer-1iqnkul, .framer-Bsa75 .framer-1oy17zl, .framer-Bsa75 .framer-hnkwd4, .framer-Bsa75 .framer-rokqmg, .framer-Bsa75 .framer-rxzjdv, .framer-Bsa75 .framer-vd5nom, .framer-Bsa75 .framer-zuc9ln, .framer-Bsa75 .framer-1g82jda, .framer-Bsa75 .framer-1y7b9rd, .framer-Bsa75 .framer-unso1d { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 16px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-jsqh7q, .framer-Bsa75 .framer-3k4ddf, .framer-Bsa75 .framer-1a1p1zt, .framer-Bsa75 .framer-txkv6j, .framer-Bsa75 .framer-50kj9i, .framer-Bsa75 .framer-1i0ycln, .framer-Bsa75 .framer-1s0zc2h, .framer-Bsa75 .framer-gofr5x, .framer-Bsa75 .framer-mdhl7a, .framer-Bsa75 .framer-5rcabd, .framer-Bsa75 .framer-9kt82u { --framer-link-text-color: #0099ff; --framer-link-text-decoration: underline; flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-Bsa75 .framer-1wuk5hl, .framer-Bsa75 .framer-ecc4u8, .framer-Bsa75 .framer-1utsu4k, .framer-Bsa75 .framer-k3y3bq, .framer-Bsa75 .framer-i5zq3z, .framer-Bsa75 .framer-dylo0g, .framer-Bsa75 .framer-1rz6mw2, .framer-Bsa75 .framer-k6ipq, .framer-Bsa75 .framer-1be0jhk, .framer-Bsa75 .framer-1rvfxl4, .framer-Bsa75 .framer-9leafv, .framer-Bsa75 .framer-iswxfu, .framer-Bsa75 .framer-f4vwfo { --framer-link-text-color: #0099ff; --framer-link-text-decoration: underline; flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",\".framer-Bsa75 .framer-1m55e19 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px 50px 0px 50px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1hpy61h-container, .framer-Bsa75 .framer-1e2rmki-container, .framer-Bsa75 .framer-103n5kn-container, .framer-Bsa75 .framer-5bhx8z-container, .framer-Bsa75 .framer-1f344c8-container { flex: 1 0 0px; height: auto; position: relative; width: 1px; }\",\".framer-Bsa75 .framer-82pafs { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 34px; height: min-content; justify-content: center; overflow: hidden; padding: 64px 0px 0px 0px; position: relative; width: 390px; }\",\".framer-Bsa75 .framer-7o2yg7 { aspect-ratio: 0.019342359767891684 / 1; background-color: #ffffff; height: var(--framer-aspect-ratio-supported, 517px); overflow: hidden; position: relative; width: 10px; }\",\".framer-Bsa75 .framer-1syldk9-container, .framer-Bsa75 .framer-1l0afl7-container, .framer-Bsa75 .framer-5hmrft-container, .framer-Bsa75 .framer-19mdpx8-container, .framer-Bsa75 .framer-v97twj-container, .framer-Bsa75 .framer-bwwhoh-container, .framer-Bsa75 .framer-139likw-container, .framer-Bsa75 .framer-1gbi38y-container, .framer-Bsa75 .framer-ae87s-container, .framer-Bsa75 .framer-1mlu1yk-container, .framer-Bsa75 .framer-6m8zcy-container, .framer-Bsa75 .framer-1idbzhw-container, .framer-Bsa75 .framer-129kkxu-container, .framer-Bsa75 .framer-1vtcdh6-container, .framer-Bsa75 .framer-1tiy6oz-container { height: auto; position: relative; width: auto; }\",\".framer-Bsa75 .framer-cs8tsh { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 48px; height: min-content; justify-content: center; overflow: hidden; padding: 100px 0px 0px 0px; position: relative; width: 1440px; }\",\".framer-Bsa75 .framer-1el4gk0 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 1114px; }\",\".framer-Bsa75 .framer-k80ohf-container { flex: none; height: auto; position: relative; width: 365px; }\",\".framer-Bsa75 .framer-l223uv { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 32px; height: min-content; justify-content: center; max-width: 1114px; overflow: hidden; padding: 100px 0px 100px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-5pdf0p, .framer-Bsa75 .framer-jfnmjk, .framer-Bsa75 .framer-wbjjwb, .framer-Bsa75 .framer-17drur0 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-3nflgn { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 6px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-4j2pfs-container { flex: none; height: auto; position: relative; width: 600px; }\",\".framer-Bsa75 .framer-amgo51 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: hidden; padding: 0px 0px 100px 0px; position: relative; width: 1440px; }\",\".framer-Bsa75 .framer-1hvpklh-container, .framer-Bsa75 .framer-1o5m75i-container, .framer-Bsa75 .framer-ray5xp-container { aspect-ratio: 3.5555555555555554 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 405px); position: relative; width: 100%; z-index: 1; }\",\".framer-Bsa75 .framer-179ziiy-container, .framer-Bsa75 .framer-1jwscy3-container, .framer-Bsa75 .framer-gcpbja-container { aspect-ratio: 1.6016427104722792 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 125px); position: relative; width: 100%; z-index: 1; }\",\".framer-Bsa75 .framer-5jebqo { align-content: center; align-items: center; background-color: #ffffff; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-ffk6b5-container, .framer-Bsa75 .framer-7ma6tp-container, .framer-Bsa75 .framer-fgb8c6-container, .framer-Bsa75 .framer-mhus99-container, .framer-Bsa75 .framer-11klslm-container { flex: none; height: auto; max-width: 1114px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1w0y32w { align-content: center; align-items: center; background-color: #ffffff; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 1440px; }\",\".framer-Bsa75 .framer-2virxj { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px 0px 100px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-rq2gha { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 1440px; }\",\".framer-Bsa75 .framer-3iiv4m { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: hidden; padding: 100px 0px 0px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-emxhts, .framer-Bsa75 .framer-dc1ydh, .framer-Bsa75 .framer-132fem5 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 32px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1drxrle-container { flex: none; height: auto; max-width: 1114px; position: relative; width: 1114px; }\",\".framer-Bsa75 .framer-1ysc9v { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 80px; height: min-content; justify-content: center; overflow: hidden; padding: 100px 0px 0px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-11yw311, .framer-Bsa75 .framer-1exwxhr { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-17leluw, .framer-Bsa75 .framer-2nzvei { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 24px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-bmmlq6, .framer-Bsa75 .framer-dt5ch8 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 4px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1gnsrut { align-content: center; align-items: center; background-color: #ffffff; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 100px; height: min-content; justify-content: center; overflow: hidden; padding: 100px 0px 0px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-y83vy2 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 48px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-gvz9bn { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 60px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-nhaypb { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-cmrmzc-container { flex: 1 0 0px; height: auto; max-width: 1114px; position: relative; width: 1px; }\",\".framer-Bsa75 .framer-1aab93f { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: center; max-width: 1114px; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-19uod44 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: flex-end; min-height: 465px; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1kavopu-container { aspect-ratio: 1.0263157894736843 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 195px); position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1g02e8f { align-content: center; align-items: center; background-color: #ffffff; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: visible; padding: 100px 0px 0px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1n2514c { flex: none; height: 496px; overflow: hidden; position: relative; width: 850px; }\",\".framer-Bsa75 .framer-6t1qby { display: grid; flex: none; gap: 20px; grid-auto-rows: min-content; grid-template-columns: repeat(3, minmax(270px, 1fr)); grid-template-rows: repeat(2, min-content); height: min-content; justify-content: center; left: 50%; overflow: auto; padding: 0px; position: absolute; top: 50%; transform: translate(-50%, -50%); width: min-content; }\",\".framer-Bsa75 .framer-18lmgvg-container, .framer-Bsa75 .framer-7li28o-container, .framer-Bsa75 .framer-1a8gm9o-container, .framer-Bsa75 .framer-fetriz-container, .framer-Bsa75 .framer-14uwjlq-container, .framer-Bsa75 .framer-9rrun0-container, .framer-Bsa75 .framer-427qm6-container { align-self: start; flex: none; height: auto; justify-self: start; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-rnjyk0 { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 12px; height: min-content; justify-content: center; max-width: 1114px; overflow: hidden; padding: 24px 0px 0px 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-v0c4vb { align-content: center; align-items: center; background-color: #ffffff; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 40px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 100%; }\",\".framer-Bsa75 .framer-1ac9sn9 { flex: none; height: 100px; overflow: hidden; position: relative; width: 100%; }\",\"@supports (background: -webkit-named-image(i)) and (not (scale:1)) { .framer-Bsa75.framer-1qvvfbq, .framer-Bsa75 .framer-d3kv6m, .framer-Bsa75 .framer-opznwy, .framer-Bsa75 .framer-15jjhla, .framer-Bsa75 .framer-1jq5bak, .framer-Bsa75 .framer-1llnwfy, .framer-Bsa75 .framer-17cnh3k, .framer-Bsa75 .framer-1m55e19, .framer-Bsa75 .framer-82pafs, .framer-Bsa75 .framer-1gndw8n, .framer-Bsa75 .framer-1pfd532, .framer-Bsa75 .framer-cs8tsh, .framer-Bsa75 .framer-1gwmf98, .framer-Bsa75 .framer-jmbqgg, .framer-Bsa75 .framer-1el4gk0, .framer-Bsa75 .framer-l223uv, .framer-Bsa75 .framer-q69wzg, .framer-Bsa75 .framer-8qv07z, .framer-Bsa75 .framer-5pdf0p, .framer-Bsa75 .framer-3nflgn, .framer-Bsa75 .framer-amgo51, .framer-Bsa75 .framer-jfnmjk, .framer-Bsa75 .framer-1bqn5bb, .framer-Bsa75 .framer-1naz9nw, .framer-Bsa75 .framer-5jebqo, .framer-Bsa75 .framer-1w0y32w, .framer-Bsa75 .framer-wbjjwb, .framer-Bsa75 .framer-xdn3id, .framer-Bsa75 .framer-1iqnkul, .framer-Bsa75 .framer-2virxj, .framer-Bsa75 .framer-rq2gha, .framer-Bsa75 .framer-17drur0, .framer-Bsa75 .framer-1oy17zl, .framer-Bsa75 .framer-hnkwd4, .framer-Bsa75 .framer-3iiv4m, .framer-Bsa75 .framer-emxhts, .framer-Bsa75 .framer-rokqmg, .framer-Bsa75 .framer-rxzjdv, .framer-Bsa75 .framer-1ysc9v, .framer-Bsa75 .framer-11yw311, .framer-Bsa75 .framer-dc1ydh, .framer-Bsa75 .framer-vd5nom, .framer-Bsa75 .framer-17leluw, .framer-Bsa75 .framer-bmmlq6, .framer-Bsa75 .framer-1exwxhr, .framer-Bsa75 .framer-132fem5, .framer-Bsa75 .framer-zuc9ln, .framer-Bsa75 .framer-2nzvei, .framer-Bsa75 .framer-dt5ch8, .framer-Bsa75 .framer-1gnsrut, .framer-Bsa75 .framer-y83vy2, .framer-Bsa75 .framer-1g82jda, .framer-Bsa75 .framer-1y7b9rd, .framer-Bsa75 .framer-gvz9bn, .framer-Bsa75 .framer-nhaypb, .framer-Bsa75 .framer-1aab93f, .framer-Bsa75 .framer-19uod44, .framer-Bsa75 .framer-1g02e8f, .framer-Bsa75 .framer-d1toz6, .framer-Bsa75 .framer-unso1d, .framer-Bsa75 .framer-rnjyk0, .framer-Bsa75 .framer-v0c4vb { gap: 0px; } .framer-Bsa75.framer-1qvvfbq > *, .framer-Bsa75 .framer-d3kv6m > *, .framer-Bsa75 .framer-5pdf0p > *, .framer-Bsa75 .framer-jfnmjk > *, .framer-Bsa75 .framer-wbjjwb > *, .framer-Bsa75 .framer-17drur0 > *, .framer-Bsa75 .framer-1aab93f > * { margin: 0px; margin-bottom: calc(0px / 2); margin-top: calc(0px / 2); } .framer-Bsa75.framer-1qvvfbq > :first-child, .framer-Bsa75 .framer-d3kv6m > :first-child, .framer-Bsa75 .framer-opznwy > :first-child, .framer-Bsa75 .framer-15jjhla > :first-child, .framer-Bsa75 .framer-1jq5bak > :first-child, .framer-Bsa75 .framer-1llnwfy > :first-child, .framer-Bsa75 .framer-17cnh3k > :first-child, .framer-Bsa75 .framer-82pafs > :first-child, .framer-Bsa75 .framer-1gndw8n > :first-child, .framer-Bsa75 .framer-1pfd532 > :first-child, .framer-Bsa75 .framer-cs8tsh > :first-child, .framer-Bsa75 .framer-1gwmf98 > :first-child, .framer-Bsa75 .framer-jmbqgg > :first-child, .framer-Bsa75 .framer-l223uv > :first-child, .framer-Bsa75 .framer-q69wzg > :first-child, .framer-Bsa75 .framer-8qv07z > :first-child, .framer-Bsa75 .framer-5pdf0p > :first-child, .framer-Bsa75 .framer-3nflgn > :first-child, .framer-Bsa75 .framer-amgo51 > :first-child, .framer-Bsa75 .framer-jfnmjk > :first-child, .framer-Bsa75 .framer-1bqn5bb > :first-child, .framer-Bsa75 .framer-1naz9nw > :first-child, .framer-Bsa75 .framer-5jebqo > :first-child, .framer-Bsa75 .framer-1w0y32w > :first-child, .framer-Bsa75 .framer-wbjjwb > :first-child, .framer-Bsa75 .framer-xdn3id > :first-child, .framer-Bsa75 .framer-1iqnkul > :first-child, .framer-Bsa75 .framer-2virxj > :first-child, .framer-Bsa75 .framer-rq2gha > :first-child, .framer-Bsa75 .framer-17drur0 > :first-child, .framer-Bsa75 .framer-1oy17zl > :first-child, .framer-Bsa75 .framer-hnkwd4 > :first-child, .framer-Bsa75 .framer-3iiv4m > :first-child, .framer-Bsa75 .framer-emxhts > :first-child, .framer-Bsa75 .framer-rokqmg > :first-child, .framer-Bsa75 .framer-rxzjdv > :first-child, .framer-Bsa75 .framer-1ysc9v > :first-child, .framer-Bsa75 .framer-11yw311 > :first-child, .framer-Bsa75 .framer-dc1ydh > :first-child, .framer-Bsa75 .framer-vd5nom > :first-child, .framer-Bsa75 .framer-17leluw > :first-child, .framer-Bsa75 .framer-bmmlq6 > :first-child, .framer-Bsa75 .framer-1exwxhr > :first-child, .framer-Bsa75 .framer-132fem5 > :first-child, .framer-Bsa75 .framer-zuc9ln > :first-child, .framer-Bsa75 .framer-2nzvei > :first-child, .framer-Bsa75 .framer-dt5ch8 > :first-child, .framer-Bsa75 .framer-1gnsrut > :first-child, .framer-Bsa75 .framer-y83vy2 > :first-child, .framer-Bsa75 .framer-1g82jda > :first-child, .framer-Bsa75 .framer-1y7b9rd > :first-child, .framer-Bsa75 .framer-gvz9bn > :first-child, .framer-Bsa75 .framer-1aab93f > :first-child, .framer-Bsa75 .framer-1g02e8f > :first-child, .framer-Bsa75 .framer-d1toz6 > :first-child, .framer-Bsa75 .framer-unso1d > :first-child, .framer-Bsa75 .framer-rnjyk0 > :first-child, .framer-Bsa75 .framer-v0c4vb > :first-child { margin-top: 0px; } .framer-Bsa75.framer-1qvvfbq > :last-child, .framer-Bsa75 .framer-d3kv6m > :last-child, .framer-Bsa75 .framer-opznwy > :last-child, .framer-Bsa75 .framer-15jjhla > :last-child, .framer-Bsa75 .framer-1jq5bak > :last-child, .framer-Bsa75 .framer-1llnwfy > :last-child, .framer-Bsa75 .framer-17cnh3k > :last-child, .framer-Bsa75 .framer-82pafs > :last-child, .framer-Bsa75 .framer-1gndw8n > :last-child, .framer-Bsa75 .framer-1pfd532 > :last-child, .framer-Bsa75 .framer-cs8tsh > :last-child, .framer-Bsa75 .framer-1gwmf98 > :last-child, .framer-Bsa75 .framer-jmbqgg > :last-child, .framer-Bsa75 .framer-l223uv > :last-child, .framer-Bsa75 .framer-q69wzg > :last-child, .framer-Bsa75 .framer-8qv07z > :last-child, .framer-Bsa75 .framer-5pdf0p > :last-child, .framer-Bsa75 .framer-3nflgn > :last-child, .framer-Bsa75 .framer-amgo51 > :last-child, .framer-Bsa75 .framer-jfnmjk > :last-child, .framer-Bsa75 .framer-1bqn5bb > :last-child, .framer-Bsa75 .framer-1naz9nw > :last-child, .framer-Bsa75 .framer-5jebqo > :last-child, .framer-Bsa75 .framer-1w0y32w > :last-child, .framer-Bsa75 .framer-wbjjwb > :last-child, .framer-Bsa75 .framer-xdn3id > :last-child, .framer-Bsa75 .framer-1iqnkul > :last-child, .framer-Bsa75 .framer-2virxj > :last-child, .framer-Bsa75 .framer-rq2gha > :last-child, .framer-Bsa75 .framer-17drur0 > :last-child, .framer-Bsa75 .framer-1oy17zl > :last-child, .framer-Bsa75 .framer-hnkwd4 > :last-child, .framer-Bsa75 .framer-3iiv4m > :last-child, .framer-Bsa75 .framer-emxhts > :last-child, .framer-Bsa75 .framer-rokqmg > :last-child, .framer-Bsa75 .framer-rxzjdv > :last-child, .framer-Bsa75 .framer-1ysc9v > :last-child, .framer-Bsa75 .framer-11yw311 > :last-child, .framer-Bsa75 .framer-dc1ydh > :last-child, .framer-Bsa75 .framer-vd5nom > :last-child, .framer-Bsa75 .framer-17leluw > :last-child, .framer-Bsa75 .framer-bmmlq6 > :last-child, .framer-Bsa75 .framer-1exwxhr > :last-child, .framer-Bsa75 .framer-132fem5 > :last-child, .framer-Bsa75 .framer-zuc9ln > :last-child, .framer-Bsa75 .framer-2nzvei > :last-child, .framer-Bsa75 .framer-dt5ch8 > :last-child, .framer-Bsa75 .framer-1gnsrut > :last-child, .framer-Bsa75 .framer-y83vy2 > :last-child, .framer-Bsa75 .framer-1g82jda > :last-child, .framer-Bsa75 .framer-1y7b9rd > :last-child, .framer-Bsa75 .framer-gvz9bn > :last-child, .framer-Bsa75 .framer-1aab93f > :last-child, .framer-Bsa75 .framer-1g02e8f > :last-child, .framer-Bsa75 .framer-d1toz6 > :last-child, .framer-Bsa75 .framer-unso1d > :last-child, .framer-Bsa75 .framer-rnjyk0 > :last-child, .framer-Bsa75 .framer-v0c4vb > :last-child { margin-bottom: 0px; } .framer-Bsa75 .framer-opznwy > *, .framer-Bsa75 .framer-2virxj > * { margin: 0px; margin-bottom: calc(10px / 2); margin-top: calc(10px / 2); } .framer-Bsa75 .framer-15jjhla > *, .framer-Bsa75 .framer-l223uv > *, .framer-Bsa75 .framer-emxhts > *, .framer-Bsa75 .framer-dc1ydh > *, .framer-Bsa75 .framer-132fem5 > * { margin: 0px; margin-bottom: calc(32px / 2); margin-top: calc(32px / 2); } .framer-Bsa75 .framer-1jq5bak > *, .framer-Bsa75 .framer-cs8tsh > *, .framer-Bsa75 .framer-y83vy2 > * { margin: 0px; margin-bottom: calc(48px / 2); margin-top: calc(48px / 2); } .framer-Bsa75 .framer-1llnwfy > *, .framer-Bsa75 .framer-1gndw8n > *, .framer-Bsa75 .framer-1pfd532 > *, .framer-Bsa75 .framer-1gwmf98 > *, .framer-Bsa75 .framer-d1toz6 > *, .framer-Bsa75 .framer-rnjyk0 > * { margin: 0px; margin-bottom: calc(12px / 2); margin-top: calc(12px / 2); } .framer-Bsa75 .framer-17cnh3k > *, .framer-Bsa75 .framer-jmbqgg > *, .framer-Bsa75 .framer-q69wzg > *, .framer-Bsa75 .framer-8qv07z > *, .framer-Bsa75 .framer-1bqn5bb > *, .framer-Bsa75 .framer-1naz9nw > *, .framer-Bsa75 .framer-xdn3id > *, .framer-Bsa75 .framer-1iqnkul > *, .framer-Bsa75 .framer-1oy17zl > *, .framer-Bsa75 .framer-hnkwd4 > *, .framer-Bsa75 .framer-rokqmg > *, .framer-Bsa75 .framer-rxzjdv > *, .framer-Bsa75 .framer-vd5nom > *, .framer-Bsa75 .framer-zuc9ln > *, .framer-Bsa75 .framer-1g82jda > *, .framer-Bsa75 .framer-1y7b9rd > *, .framer-Bsa75 .framer-unso1d > * { margin: 0px; margin-bottom: calc(16px / 2); margin-top: calc(16px / 2); } .framer-Bsa75 .framer-1m55e19 > *, .framer-Bsa75 .framer-1el4gk0 > *, .framer-Bsa75 .framer-nhaypb > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-Bsa75 .framer-1m55e19 > :first-child, .framer-Bsa75 .framer-1el4gk0 > :first-child, .framer-Bsa75 .framer-nhaypb > :first-child, .framer-Bsa75 .framer-19uod44 > :first-child { margin-left: 0px; } .framer-Bsa75 .framer-1m55e19 > :last-child, .framer-Bsa75 .framer-1el4gk0 > :last-child, .framer-Bsa75 .framer-nhaypb > :last-child, .framer-Bsa75 .framer-19uod44 > :last-child { margin-right: 0px; } .framer-Bsa75 .framer-82pafs > * { margin: 0px; margin-bottom: calc(34px / 2); margin-top: calc(34px / 2); } .framer-Bsa75 .framer-3nflgn > * { margin: 0px; margin-bottom: calc(6px / 2); margin-top: calc(6px / 2); } .framer-Bsa75 .framer-amgo51 > *, .framer-Bsa75 .framer-5jebqo > *, .framer-Bsa75 .framer-1w0y32w > *, .framer-Bsa75 .framer-rq2gha > *, .framer-Bsa75 .framer-3iiv4m > *, .framer-Bsa75 .framer-11yw311 > *, .framer-Bsa75 .framer-1exwxhr > *, .framer-Bsa75 .framer-1g02e8f > *, .framer-Bsa75 .framer-v0c4vb > * { margin: 0px; margin-bottom: calc(40px / 2); margin-top: calc(40px / 2); } .framer-Bsa75 .framer-1ysc9v > * { margin: 0px; margin-bottom: calc(80px / 2); margin-top: calc(80px / 2); } .framer-Bsa75 .framer-17leluw > *, .framer-Bsa75 .framer-2nzvei > * { margin: 0px; margin-bottom: calc(24px / 2); margin-top: calc(24px / 2); } .framer-Bsa75 .framer-bmmlq6 > *, .framer-Bsa75 .framer-dt5ch8 > * { margin: 0px; margin-bottom: calc(4px / 2); margin-top: calc(4px / 2); } .framer-Bsa75 .framer-1gnsrut > * { margin: 0px; margin-bottom: calc(100px / 2); margin-top: calc(100px / 2); } .framer-Bsa75 .framer-gvz9bn > * { margin: 0px; margin-bottom: calc(60px / 2); margin-top: calc(60px / 2); } .framer-Bsa75 .framer-19uod44 > * { margin: 0px; margin-left: calc(0px / 2); margin-right: calc(0px / 2); } }\",...sharedStyle.css,...sharedStyle1.css,...sharedStyle2.css,'.framer-Bsa75[data-hide-scrollbars=\"true\"]::-webkit-scrollbar, .framer-Bsa75 [data-hide-scrollbars=\"true\"]::-webkit-scrollbar { width: 0px; height: 0px; }','.framer-Bsa75[data-hide-scrollbars=\"true\"]::-webkit-scrollbar-thumb, .framer-Bsa75 [data-hide-scrollbars=\"true\"]::-webkit-scrollbar-thumb { background: transparent; }','.framer-Bsa75[data-hide-scrollbars=\"true\"], .framer-Bsa75 [data-hide-scrollbars=\"true\"] { scrollbar-width: none; }',\"@media (max-width: 1023px) { .framer-Bsa75.framer-1qvvfbq { width: 390px; } .framer-Bsa75 .framer-cqnjfa-container { order: 0; } .framer-Bsa75 .framer-d3kv6m { order: 1; } .framer-Bsa75 .framer-opznwy { bottom: 20px; flex-direction: row; gap: 0px; width: 90%; } .framer-Bsa75 .framer-1oid6bu-container { flex: 1 0 0px; width: 1px; } .framer-Bsa75 .framer-1h6f50q-container { order: 3; } .framer-Bsa75 .framer-15jjhla { order: 4; padding: 0px 20px 0px 20px; } .framer-Bsa75 .framer-l223uv { order: 5; padding: 64px 20px 64px 20px; } .framer-Bsa75 .framer-txkv6j { white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; } .framer-Bsa75 .framer-4j2pfs-container, .framer-Bsa75 .framer-1drxrle-container { width: 100%; } .framer-Bsa75 .framer-amgo51 { order: 6; padding: 0px 0px 64px 0px; width: 100%; } .framer-Bsa75 .framer-179ziiy-container, .framer-Bsa75 .framer-1jwscy3-container, .framer-Bsa75 .framer-gcpbja-container { height: var(--framer-aspect-ratio-supported, 244px); } .framer-Bsa75 .framer-1w0y32w { order: 7; width: 100%; } .framer-Bsa75 .framer-rq2gha { order: 8; width: 100%; } .framer-Bsa75 .framer-hnkwd4, .framer-Bsa75 .framer-rxzjdv, .framer-Bsa75 .framer-unso1d { gap: 12px; } .framer-Bsa75 .framer-3iiv4m { order: 9; padding: 64px 0px 0px 0px; } .framer-Bsa75 .framer-emxhts, .framer-Bsa75 .framer-dc1ydh, .framer-Bsa75 .framer-132fem5 { gap: 24px; } .framer-Bsa75 .framer-1ysc9v { gap: 64px; order: 10; padding: 64px 0px 0px 0px; } .framer-Bsa75 .framer-17leluw { gap: 16px; } .framer-Bsa75 .framer-1gnsrut { gap: 64px; order: 11; overflow: visible; padding: 64px 0px 0px 0px; } .framer-Bsa75 .framer-y83vy2 { gap: 40px; order: 0; } .framer-Bsa75 .framer-gvz9bn { gap: 32px; } .framer-Bsa75 .framer-1aab93f { order: 2; padding: 0px 20px 0px 20px; } .framer-Bsa75 .framer-19uod44 { min-height: unset; order: 0; } .framer-Bsa75 .framer-1kavopu-container { height: var(--framer-aspect-ratio-supported, 380px); } .framer-Bsa75 .framer-1g02e8f { align-content: flex-start; align-items: flex-start; border-bottom-left-radius: unset; border-bottom-right-radius: unset; border-top-left-radius: unset; border-top-right-radius: unset; gap: 32px; order: 12; padding: 64px 0px 0px 0px; } .framer-Bsa75 .framer-d1toz6 { padding: 0px 0px 2px 0px; } .framer-Bsa75 .framer-1n2514c { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: auto; padding: 0px; width: 100%; } .framer-Bsa75 .framer-6t1qby { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 8px; justify-content: flex-start; left: unset; overflow: hidden; padding: 0px 20px 16px 20px; position: relative; top: unset; transform: unset; } .framer-Bsa75 .framer-18lmgvg-container, .framer-Bsa75 .framer-7li28o-container, .framer-Bsa75 .framer-1a8gm9o-container, .framer-Bsa75 .framer-fetriz-container, .framer-Bsa75 .framer-14uwjlq-container, .framer-Bsa75 .framer-9rrun0-container, .framer-Bsa75 .framer-427qm6-container { align-self: unset; width: auto; } .framer-Bsa75 .framer-rnjyk0 { gap: 0px; padding: 0px 20px 0px 20px; } .framer-Bsa75 .framer-v0c4vb { align-content: flex-start; align-items: flex-start; border-bottom-left-radius: unset; border-bottom-right-radius: unset; border-top-left-radius: unset; border-top-right-radius: unset; gap: 32px; order: 13; } .framer-Bsa75 .framer-1ac9sn9 { height: 64px; order: 14; } @supports (background: -webkit-named-image(i)) and (not (scale:1)) { .framer-Bsa75 .framer-opznwy, .framer-Bsa75 .framer-hnkwd4, .framer-Bsa75 .framer-emxhts, .framer-Bsa75 .framer-rxzjdv, .framer-Bsa75 .framer-1ysc9v, .framer-Bsa75 .framer-dc1ydh, .framer-Bsa75 .framer-17leluw, .framer-Bsa75 .framer-132fem5, .framer-Bsa75 .framer-1gnsrut, .framer-Bsa75 .framer-y83vy2, .framer-Bsa75 .framer-gvz9bn, .framer-Bsa75 .framer-1g02e8f, .framer-Bsa75 .framer-unso1d, .framer-Bsa75 .framer-1n2514c, .framer-Bsa75 .framer-6t1qby, .framer-Bsa75 .framer-rnjyk0, .framer-Bsa75 .framer-v0c4vb { gap: 0px; } .framer-Bsa75 .framer-opznwy > * { margin: 0px; margin-left: calc(0px / 2); margin-right: calc(0px / 2); } .framer-Bsa75 .framer-opznwy > :first-child, .framer-Bsa75 .framer-6t1qby > :first-child { margin-left: 0px; } .framer-Bsa75 .framer-opznwy > :last-child, .framer-Bsa75 .framer-6t1qby > :last-child { margin-right: 0px; } .framer-Bsa75 .framer-hnkwd4 > *, .framer-Bsa75 .framer-rxzjdv > *, .framer-Bsa75 .framer-unso1d > * { margin: 0px; margin-bottom: calc(12px / 2); margin-top: calc(12px / 2); } .framer-Bsa75 .framer-hnkwd4 > :first-child, .framer-Bsa75 .framer-emxhts > :first-child, .framer-Bsa75 .framer-rxzjdv > :first-child, .framer-Bsa75 .framer-1ysc9v > :first-child, .framer-Bsa75 .framer-dc1ydh > :first-child, .framer-Bsa75 .framer-17leluw > :first-child, .framer-Bsa75 .framer-132fem5 > :first-child, .framer-Bsa75 .framer-1gnsrut > :first-child, .framer-Bsa75 .framer-y83vy2 > :first-child, .framer-Bsa75 .framer-gvz9bn > :first-child, .framer-Bsa75 .framer-1g02e8f > :first-child, .framer-Bsa75 .framer-unso1d > :first-child, .framer-Bsa75 .framer-1n2514c > :first-child, .framer-Bsa75 .framer-rnjyk0 > :first-child, .framer-Bsa75 .framer-v0c4vb > :first-child { margin-top: 0px; } .framer-Bsa75 .framer-hnkwd4 > :last-child, .framer-Bsa75 .framer-emxhts > :last-child, .framer-Bsa75 .framer-rxzjdv > :last-child, .framer-Bsa75 .framer-1ysc9v > :last-child, .framer-Bsa75 .framer-dc1ydh > :last-child, .framer-Bsa75 .framer-17leluw > :last-child, .framer-Bsa75 .framer-132fem5 > :last-child, .framer-Bsa75 .framer-1gnsrut > :last-child, .framer-Bsa75 .framer-y83vy2 > :last-child, .framer-Bsa75 .framer-gvz9bn > :last-child, .framer-Bsa75 .framer-1g02e8f > :last-child, .framer-Bsa75 .framer-unso1d > :last-child, .framer-Bsa75 .framer-1n2514c > :last-child, .framer-Bsa75 .framer-rnjyk0 > :last-child, .framer-Bsa75 .framer-v0c4vb > :last-child { margin-bottom: 0px; } .framer-Bsa75 .framer-emxhts > *, .framer-Bsa75 .framer-dc1ydh > *, .framer-Bsa75 .framer-132fem5 > * { margin: 0px; margin-bottom: calc(24px / 2); margin-top: calc(24px / 2); } .framer-Bsa75 .framer-1ysc9v > *, .framer-Bsa75 .framer-1gnsrut > * { margin: 0px; margin-bottom: calc(64px / 2); margin-top: calc(64px / 2); } .framer-Bsa75 .framer-17leluw > * { margin: 0px; margin-bottom: calc(16px / 2); margin-top: calc(16px / 2); } .framer-Bsa75 .framer-y83vy2 > * { margin: 0px; margin-bottom: calc(40px / 2); margin-top: calc(40px / 2); } .framer-Bsa75 .framer-gvz9bn > *, .framer-Bsa75 .framer-1g02e8f > *, .framer-Bsa75 .framer-v0c4vb > * { margin: 0px; margin-bottom: calc(32px / 2); margin-top: calc(32px / 2); } .framer-Bsa75 .framer-1n2514c > * { margin: 0px; margin-bottom: calc(10px / 2); margin-top: calc(10px / 2); } .framer-Bsa75 .framer-6t1qby > * { margin: 0px; margin-left: calc(8px / 2); margin-right: calc(8px / 2); } .framer-Bsa75 .framer-rnjyk0 > * { margin: 0px; margin-bottom: calc(0px / 2); margin-top: calc(0px / 2); } }}\",\"@media (min-width: 1024px) and (max-width: 1439px) { .framer-Bsa75.framer-1qvvfbq { width: 1024px; } .framer-Bsa75 .framer-opznwy { width: 500px; } .framer-Bsa75 .framer-amgo51, .framer-Bsa75 .framer-1drxrle-container { width: 100%; } .framer-Bsa75 .framer-1hvpklh-container, .framer-Bsa75 .framer-1o5m75i-container { height: var(--framer-aspect-ratio-supported, 288px); } .framer-Bsa75 .framer-5jebqo, .framer-Bsa75 .framer-2virxj { padding: 0px 50px 0px 50px; } .framer-Bsa75 .framer-1w0y32w { padding: 0px 0px 100px 0px; width: 100%; } .framer-Bsa75 .framer-rq2gha { padding: 0px 50px 0px 50px; width: 100%; } .framer-Bsa75 .framer-ray5xp-container { height: var(--framer-aspect-ratio-supported, 260px); } .framer-Bsa75 .framer-3iiv4m, .framer-Bsa75 .framer-1ysc9v { padding: 100px 50px 0px 50px; } .framer-Bsa75 .framer-gvz9bn { max-width: 1114px; padding: 0px 50px 0px 50px; } .framer-Bsa75 .framer-rnjyk0 { max-width: unset; padding: 24px 50px 0px 50px; }}\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 11115\n * @framerIntrinsicWidth 1440\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]},\"qDn655TQf\":{\"layout\":[\"fixed\",\"auto\"]},\"YM7mEE4Di\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n * @framerAcceptsLayoutTemplate true\n * @framerScrollSections {\"W3oqlAToe\":{\"pattern\":\":W3oqlAToe\",\"name\":\"live2\"},\"PREjlDiLb\":{\"pattern\":\":PREjlDiLb\",\"name\":\"live\"},\"WFqTjip2R\":{\"pattern\":\":WFqTjip2R\",\"name\":\"live\"},\"Jehg6GHDf\":{\"pattern\":\":Jehg6GHDf\",\"name\":\"live\"},\"oFX_oyUTA\":{\"pattern\":\":oFX_oyUTA\",\"name\":\"coupon\"},\"Z7xdayhiA\":{\"pattern\":\":Z7xdayhiA\",\"name\":\"29deal\"},\"jxufTNWLZ\":{\"pattern\":\":jxufTNWLZ\",\"name\":\"29welcoming\"},\"d6HxtOCGl\":{\"pattern\":\":d6HxtOCGl\",\"name\":\"29product\"},\"OrmspVGIy\":{\"pattern\":\":OrmspVGIy\",\"name\":\"ranking\"},\"SGAN_M9aQ\":{\"pattern\":\":SGAN_M9aQ\",\"name\":\"benefit\"},\"zxm4DzPrv\":{\"pattern\":\":zxm4DzPrv\",\"name\":\"myselection\"},\"dcZHOWKiU\":{\"pattern\":\":dcZHOWKiU\",\"name\":\"cardpromotion\"},\"oTXSzfqXf\":{\"pattern\":\":oTXSzfqXf\",\"name\":\"live\"}}\n * @framerResponsiveScreen\n */const Framerhoa12SBgY=withCSS(Component,css,\"framer-Bsa75\");export default Framerhoa12SBgY;Framerhoa12SBgY.displayName=\"Page\";Framerhoa12SBgY.defaultProps={height:11115,width:1440};addFonts(Framerhoa12SBgY,[{explicitInter:true,fonts:[{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/JeYwfuaPfZHQhEG8U5gtPDZ7WQ.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/vQyevYAyHtARFwPqUzQGpnDs.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/b6Y37FthZeALduNqHicBT6FutY.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/DpPBYI0sL4fYLgAkX8KXOPVt7c.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/4RAEQdEOrcnDkhHiiCbJOw92Lk.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/1K3W8DizY3v4emK8Mb08YHxTbs.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/tUSCtfYVM1I1IchuyCwz9gDdQ.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/VgYFWiwsAC5OYxAycRXXvhze58.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/DXD0Q7LSl7HEvDzucnyLnGBHM.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/GIryZETIX4IFypco5pYZONKhJIo.woff2\",weight:\"700\"},{family:\"Pretendard Medium\",source:\"custom\",url:\"https://framerusercontent.com/assets/Zz1SyNcAE05UfirXmAdWGcSx5I.woff2\"}]},...BootstrapFonts,...ConfettiFonts,...KeyVisualFonts,...HighlighterHighlighterFonts,...UserComponentFonts,...SchedulableFonts,...TabBarFonts,...LivePlayerFonts,...CarouselFonts,...CouponFonts,...ProductCuration_Fonts,...BrandTimeSaleFonts,...Week_MyselectionFonts,...LegacyBoxButtonFonts,...SlideshowFonts,...CreditCardPromotionBannerFonts,...getFontsFromSharedStyle(sharedStyle.fonts),...getFontsFromSharedStyle(sharedStyle1.fonts),...getFontsFromSharedStyle(sharedStyle2.fonts)],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Framerhoa12SBgY\",\"slots\":[],\"annotations\":{\"framerAutoSizeImages\":\"true\",\"framerComponentViewportWidth\":\"true\",\"framerColorSyntax\":\"true\",\"framerIntrinsicWidth\":\"1440\",\"framerIntrinsicHeight\":\"11115\",\"framerResponsiveScreen\":\"\",\"framerDisplayContentsDiv\":\"false\",\"framerScrollSections\":\"{\\\"W3oqlAToe\\\":{\\\"pattern\\\":\\\":W3oqlAToe\\\",\\\"name\\\":\\\"live2\\\"},\\\"PREjlDiLb\\\":{\\\"pattern\\\":\\\":PREjlDiLb\\\",\\\"name\\\":\\\"live\\\"},\\\"WFqTjip2R\\\":{\\\"pattern\\\":\\\":WFqTjip2R\\\",\\\"name\\\":\\\"live\\\"},\\\"Jehg6GHDf\\\":{\\\"pattern\\\":\\\":Jehg6GHDf\\\",\\\"name\\\":\\\"live\\\"},\\\"oFX_oyUTA\\\":{\\\"pattern\\\":\\\":oFX_oyUTA\\\",\\\"name\\\":\\\"coupon\\\"},\\\"Z7xdayhiA\\\":{\\\"pattern\\\":\\\":Z7xdayhiA\\\",\\\"name\\\":\\\"29deal\\\"},\\\"jxufTNWLZ\\\":{\\\"pattern\\\":\\\":jxufTNWLZ\\\",\\\"name\\\":\\\"29welcoming\\\"},\\\"d6HxtOCGl\\\":{\\\"pattern\\\":\\\":d6HxtOCGl\\\",\\\"name\\\":\\\"29product\\\"},\\\"OrmspVGIy\\\":{\\\"pattern\\\":\\\":OrmspVGIy\\\",\\\"name\\\":\\\"ranking\\\"},\\\"SGAN_M9aQ\\\":{\\\"pattern\\\":\\\":SGAN_M9aQ\\\",\\\"name\\\":\\\"benefit\\\"},\\\"zxm4DzPrv\\\":{\\\"pattern\\\":\\\":zxm4DzPrv\\\",\\\"name\\\":\\\"myselection\\\"},\\\"dcZHOWKiU\\\":{\\\"pattern\\\":\\\":dcZHOWKiU\\\",\\\"name\\\":\\\"cardpromotion\\\"},\\\"oTXSzfqXf\\\":{\\\"pattern\\\":\\\":oTXSzfqXf\\\",\\\"name\\\":\\\"live\\\"}}\",\"framerAcceptsLayoutTemplate\":\"true\",\"framerContractVersion\":\"1\",\"framerImmutableVariables\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"qDn655TQf\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"YM7mEE4Di\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "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",
  "names": ["cycleOrder", "serializationHash", "variantClassNames", "addPropertyOverrides", "overrides", "variants", "nextOverrides", "variant", "transition1", "toResponsiveImage", "value", "negate", "Transition", "children", "config", "re", "MotionConfigContext", "transition", "contextValue", "se", "p", "Variants", "motion", "x", "humanReadableVariantMap", "getProps", "background", "cardColor", "height", "iconBlack", "id", "link", "logo", "price", "title", "width", "props", "_ref", "_ref1", "_ref2", "_ref3", "_humanReadableVariantMap_props_variant", "_ref4", "_ref5", "_ref6", "createLayoutDependency", "Component", "Y", "ref", "activeLocale", "setLocale", "useLocaleInfo", "style", "className", "layoutId", "ZzCSuM_Y9", "YGgaq9ZpE", "IPQqxIy38", "ChOOBYCm8", "SigzId2ik", "mFBeyCGUA", "SFWvDmfwf", "restProps", "baseVariant", "classNames", "gestureHandlers", "gestureVariant", "setGestureState", "setVariant", "useVariantState", "layoutDependency", "ref1", "pe", "visible", "defaultLayoutId", "ae", "sharedStyleClassNames", "componentViewport", "useComponentViewport", "LayoutGroup", "u", "cx", "RichText2", "Link", "Image2", "SVG", "css", "FramerQLB9kVNqx", "withCSS", "QLB9kVNqx_default", "addPropertyControls", "ControlType", "addFonts", "elementStyle", "container", "status", "title", "notice", "buttonText", "css", "elementStyle", "root", "outerCircle", "innerCircle", "indicator", "styles", "CIRCLE_SIZES", "CIRCLE_OPACITY", "CIRCLE_TRANSITION", "OnAirIndicator", "variant", "u", "motion", "styles", "p", "CIRCLE_SIZES", "CIRCLE_OPACITY", "CIRCLE_TRANSITION", "LIVE_STATUS_TEXT", "LIVE_STATUS_TEXT2", "LIVE_DATE_FORMAT", "LIVE_DATE_FORMAT2", "ACCESS_FROM_APP_MESSAGE", "SIMPLE_ACCESS_FROM_APP_MESSAGE", "APP_DOWNLOAD_MESSAGE", "LIVE_CAMPAIGN_NOTICE_LIST", "LIVE_CAMPAIGN_BUTTON_TEXT", "LIVE_CAMPAIGN_BUTTON_TEXT2", "formatLiveDate", "scheduledAt", "target", "parseISO", "isValid", "minutes", "getMinutes", "format", "LIVE_DATE_FORMAT", "ko", "MS_IN_SECOND", "useCountdown", "target", "remaining", "setRemaining", "ye", "differenceInMilliseconds", "useInterval", "diff", "isEnd", "LiveCampaignStatusText", "status", "scheduledAt", "remaining", "useCountdown", "parseISO", "p", "l", "formatLiveDate", "formatLiveCountdown", "LIVE_STATUS_TEXT", "getLiveCampaignButtonText", "status", "LIVE_CAMPAIGN_BUTTON_TEXT", "useTrackClickPlayLiveContent", "trackAmplitude", "useAnalytics", "campaignKey", "useTrackSubscribeLiveContent", "useLiveButtonAction", "status", "campaign", "teasingContent", "trackSubscribeLiveContent", "useTrackSubscribeLiveContent", "trackClickPlayLiveContent", "useTrackClickPlayLiveContent", "isRegistered", "registerNotification", "notifyAlreadyRegistered", "useNotification", "appLinkDialog", "useAppLinkDialog", "SIMPLE_ACCESS_FROM_APP_MESSAGE", "isWebview", "spacing", "size", "direction", "LiveCampaignButtonBanner", "campaign", "status", "title", "backgroundType", "backgroundColor", "teasingContent", "theme", "styles", "useStyles", "buttonText", "getLiveCampaignButtonText", "handleClick", "useLiveButtonAction", "shouldRenderNotices", "hasTitle", "u", "css", "l", "p", "spacing", "OnAirIndicator", "LiveCampaignStatusText", "Default", "LIVE_CAMPAIGN_NOTICE_LIST", "notice", "i", "createUseStyles", "elementStyle", "status", "css", "QR_CODE_FALLBACK_MESSAGE", "LiveCampaignQRCodeBanner", "title", "campaign", "status", "styles", "useStyles", "oneLink", "useCreateOneLink", "getCurrentHref", "u", "p", "OnAirIndicator", "css", "LiveCampaignStatusText", "spacing", "ACCESS_FROM_APP_MESSAGE", "isContentOrigin", "QRCodeSVG", "APP_DOWNLOAD_MESSAGE", "createUseStyles", "LIVE_CAMPAIGN_FETCHER_KEY", "useFetchLiveCampaign", "campaignKey", "enabled", "isLoading", "rest", "useSWR", "liveCampaignApi", "MS_IN_SECOND", "MS_IN_MINUTE", "getCurrentCampaignStatus", "remaining", "duration", "useLiveCampaignStatus", "campaign", "teasingContent", "status", "setStatus", "ye", "initialRemaining", "diffFromNowInMilliseconds", "parseISO", "pe", "se", "differenceInMilliseconds", "useInterval", "incoming", "nextStatus", "baseSectionStyle", "LiveCampaignBanner", "style", "campaignKey", "title", "bannerType", "backgroundType", "backgroundColor", "teasingContent", "theme", "ref", "pe", "isInView", "useInView", "isLoading", "data", "useFetchLiveCampaign", "campaign", "isPending", "status", "useLiveCampaignStatus", "sectionStyle", "p", "LiveCampaignQRCodeBanner", "LiveCampaignButtonBanner", "isQRCodeBanner", "props", "addPropertyControls", "ControlType", "LiveCampaignBanner", "TestLiveCampaignBanner_default", "getDefaultExportFromCjs", "x", "urlToolkit", "module", "exports", "root", "URL_REGEX", "FIRST_SEGMENT_REGEX", "SLASH_DOT_REGEX", "SLASH_DOT_DOT_REGEX", "URLToolkit", "baseURL", "relativeURL", "opts", "basePartsForNormalise", "relativeParts", "baseParts", "pathParts", "builtParts", "baseURLPath", "newPath", "url", "parts", "path", "urlToolkitExports", "ownKeys", "e", "r", "o", "r2", "_objectSpread2", "_defineProperty", "_toPrimitive", "t", "i", "_toPropertyKey", "obj", "key", "value", "_extends", "target", "source", "isFiniteNumber", "isSafeInteger", "MAX_SAFE_INTEGER", "Events", "Events2", "ErrorTypes", "ErrorTypes2", "ErrorDetails", "ErrorDetails2", "noop", "fakeLogger", "exportedLogger", "consolePrintFn", "type", "func", "exportLoggerFunctions", "debugConfig", "functions", "enableLogs", "id", "logger", "DECIMAL_RESOLUTION_REGEX", "ATTR_LIST_REGEX", "AttrList", "_AttrList", "attrs", "attr", "attrName", "intValue", "stringValue", "defaultValue", "res", "input", "match", "quote", "name", "isDateRangeCueAttribute", "isSCTE35Attribute", "DateRange", "dateRangeAttr", "dateRangeWithSameId", "previousAttr", "endDate", "duration", "LoadStats", "ElementaryStreamTypes", "BaseSegment", "baseurl", "previous", "params", "start", "Fragment", "levelkeys", "keyFormats", "_this$_decryptdata", "len", "keyFormat", "_this$loader", "_this$keyLoader", "startPTS", "endPTS", "startDTS", "endDTS", "partial", "elementaryStreams", "info", "Part", "partAttrs", "frag", "index", "byteRange", "DEFAULT_TARGET_DURATION", "LevelDetails", "baseUrl", "partSnDiff", "partIndexDiff", "runTime", "_this$partList", "_this$fragments", "_this$partList2", "_this$partList3", "base64Decode", "base64encodedStr", "c", "getKeyIdBytes", "str", "keyIdbytes", "strToUtf8array", "paddedkeyIdbytes", "changeEndianness", "keyId", "swap", "array", "from", "to", "cur", "convertDataUriToArrayBytes", "uri", "colonsplit", "keydata", "semicolonsplit", "commasplit", "isbase64", "data", "optionalSelf", "KeySystems", "KeySystemFormats", "keySystemFormatToKeySystemDomain", "format2", "KeySystemIds", "keySystemIdToKeySystemDomain", "systemId", "keySystemDomainToKeySystemFormat", "keySystem", "getKeySystemsForConfig", "config", "drmSystems", "widevineLicenseUrl", "keySystemsToAttempt", "requestMediaKeySystemAccess", "_optionalSelf$navigat", "getSupportedMediaKeySystemConfigurations", "audioCodecs", "videoCodecs", "drmSystemOptions", "initDataTypes", "createMediaKeySystemConfigurations", "codec", "sliceUint8", "end", "isHeader$2", "offset", "isFooter", "getID3Data", "front", "length", "size", "readSize", "canParse$2", "getTimeStamp", "frames", "getID3Frames", "frame", "isTimeStampFrame", "readTimeStamp", "getFrameData", "id3Data", "frameData", "decodeFrame", "decodePrivFrame", "decodeURLFrame", "decodeTextFrame", "owner", "utf8ArrayToStr", "privateData", "description", "text", "timeStampFrame", "pts33Bit", "timestamp", "exitOnNull", "decoder2", "getTextDecoder", "decoded", "idx", "char2", "char3", "out", "decoder", "navigator", "Hex", "h", "UINT32_MAX$1", "push", "RemuxerTrackIdConfig", "bin2str", "readUint16", "buffer", "val", "readUint32", "readSint32", "readUint64", "result", "writeUint32", "hasMoofData", "findBox", "results", "endbox", "subresults", "parseSegmentIndex", "sidx", "references", "version", "timescale", "earliestPresentationTime", "firstOffset", "startByte", "referencesCount", "referenceIndex", "referenceInfo", "referenceSize", "subsegmentDuration", "parseInitSegment", "initSegment", "traks", "trak", "tkhd", "trackId", "mdhd", "hdlr", "hdlrType", "stsd", "stsdData", "parseStsd", "trex2", "track", "sampleEntries", "sampleEntriesEnd", "fourCC", "encrypted", "encBoxChildren", "sinf", "schm", "scheme", "frma", "avcCBox", "toHex", "codecBox", "esdsBox", "skipBERInteger", "flags", "objectType", "firstByte", "audioObjectType", "hvcCBox", "profileByte", "profileSpace", "generalProfileIdc", "profileCompat", "tierFlag", "levelIDC", "constraintIndicator", "constraintString", "byte", "dvcCBox", "profile", "level", "addLeadingZero", "vpcCBox", "bitDepth", "av1CBox", "highBitDepth", "twelveBit", "monochrome", "chromaSubsamplingX", "chromaSubsamplingY", "chromaSamplePosition", "bytes", "limit", "num", "patchEncyptionData", "decryptdata", "encBoxes", "isAudio", "enc", "tenc", "parseSinf", "tencKeyId", "b", "getStartDTS", "initData", "fmp4", "traf", "tfdt", "result2", "tfhd", "baseTime", "scale", "startTime", "getDuration", "rawDuration", "videoDuration", "audioDuration", "trafs", "trackDefault", "tfhdFlags", "sampleDuration", "truns", "j", "computeRawDurationFromSamples", "sampleCount", "sidxMinStart", "sidxMaxEnd", "sidxDuration", "sidxs", "subSegmentDuration", "dur", "ref", "trun", "offsetStartDTS", "timeOffset", "baseMediaDecodeTime", "upper", "lower", "segmentValidRange", "segmentedRange", "moofs", "last", "appendUint8Array", "data1", "data2", "temp", "parseSamples", "seiSamples", "videoData", "isHEVCFlavor", "moof", "moofOffset", "baseDataOffsetPresent", "sampleDescriptionIndexPresent", "defaultSampleDurationPresent", "defaultSampleDuration", "defaultSampleSizePresent", "defaultSampleSize", "defaultSampleFlagsPresent", "tfhdOffset", "isHEVC", "dataOffsetPresent", "dataOffset", "firstSampleFlagsPresent", "sampleDurationPresent", "sampleSizePresent", "sampleSize", "sampleFlagsPresent", "sampleCompositionOffsetsPresent", "compositionOffset", "trunOffset", "sampleOffset", "ix", "naluTotalSize", "naluSize", "isSEIMessage", "parseSEIMessageFromNALu", "delimit", "baseCodec", "naluHeader", "naluType", "unescapedData", "headerSize", "pts", "samples", "discardEPB", "seiPtr", "payloadType", "payloadSize", "leftOver", "payPtr", "providerCode", "userStructure", "userDataType", "totalCCs", "enabled", "totalBytes", "byteArray", "uuidStrArray", "_b", "userDataBytes", "EPBPositions", "newLength", "newData", "sourceIndex", "parseEmsg", "schemeIdUri", "timeScale", "presentationTimeDelta", "presentationTime", "eventDuration", "leftPresentationTime", "rightPresentationTime", "payload", "mp4Box", "mp4pssh", "keyids", "kids", "k", "kidCount", "dataSize", "parsePssh", "view", "boxSize", "dataSizeOrKidCount", "keyUriToKeyIdMap", "LevelKey", "_LevelKey", "method", "formatversions", "iv", "sn", "createInitializationVector", "keyBytes", "PlayReadyKeySystemUUID", "keyBytesUtf16", "keyByteStr", "xmlKeyBytes", "keyData", "keyIdArray", "padded", "segmentNumber", "uint8View", "VARIABLE_REPLACEMENT_REGEX", "hasVariableReferences", "substituteVariablesInAttributes", "parsed", "attributeNames", "substituteVariables", "variableList", "variableReference", "variableName", "variableValue", "addVariableDefinition", "parentUrl", "NAME", "VALUE", "searchParams", "error", "importVariableDefinition", "sourceVariableList", "IMPORT", "getMediaSource", "preferManagedMediaSource", "sampleEntryCodesISO", "isCodecType", "typeCodes", "areCodecsMediaSourceSupported", "codecs", "isCodecMediaSourceSupported", "_MediaSource$isTypeSu", "MediaSource", "mimeTypeForCodec", "videoCodecPreferenceValue", "videoCodec", "codecsSetSelectionPreferenceValue", "codecSet", "preferenceValue", "CODEC_COMPATIBLE_NAMES", "getCodecCompatibleNameLower", "lowerCaseCodec", "codecsToCheck", "AUDIO_CODEC_REGEXP", "getCodecCompatibleName", "m", "pickMostCompleteCodecName", "parsedCodec", "levelCodec", "convertAVC1ToAVCOTI", "avcdata", "MASTER_PLAYLIST_REGEX", "MASTER_PLAYLIST_MEDIA_REGEX", "IS_MEDIA_PLAYLIST", "LEVEL_PLAYLIST_REGEX_FAST", "LEVEL_PLAYLIST_REGEX_SLOW", "M3U8Parser", "_M3U8Parser", "groups", "mediaGroupId", "group", "string", "hasVariableRefs", "levelsWithKnownCodecs", "_level$unknownCodecs", "resolution", "setCodecs", "tag", "attributes", "sessionAttrs", "dataId", "sessionKey", "parseKey", "variableAttributes", "contentSteeringAttributes", "parseStartTimeOffset", "stripUnknownCodecLevels", "levels", "groupsByType", "medias", "lang", "assocLang", "channels", "characteristics", "instreamId", "media", "groupCodec", "assignCodec", "levelUrlId", "multivariantVariableList", "fragments", "currentInitSegment", "currentSN", "currentPart", "totalduration", "discontinuityCounter", "prevFrag", "firstPdtIndex", "createNextFrag", "nextByteRange", "title", "setFragLevelKeys", "assignProgramDateTime", "value1", "value2", "skipAttrs", "skippedSegments", "_i", "recentlyRemovedDateranges", "dateRange", "levelKey", "mapAttrs", "init", "setInitSegment", "serverControlAttrs", "partInfAttrs", "partList", "previousFragmentPart", "part", "preloadHintAttrs", "renditionReportAttrs", "fragmentLength", "firstFragment", "lastFragment", "lastSn", "backfillProgramDateTimes", "keyTagAttributes", "_keyAttrs$METHOD", "_keyAttrs$KEYFORMAT", "keyAttrs", "decryptmethod", "decrypturi", "decryptiv", "decryptkeyformatversions", "decryptkeyformat", "resolvedUri", "keyFormatVersions", "startAttributes", "startTimeOffset", "codecsAttributeValue", "filtered", "groupItem", "codecProperty", "codecValue", "fragPrev", "encryptedFragments", "PlaylistContextType", "PlaylistLevelType", "mapContextToLevelType", "context", "getResponseUrl", "response", "PlaylistLoader", "hls", "startPosition", "PLoader", "Loader", "InternalLoader", "loader", "contextType", "event", "pathwayId", "deliveryDirectives", "groupId", "_context$deliveryDire", "loaderContext", "loadPolicy", "levelDetails", "partTarget", "targetDuration", "maxLowLatencyPlaylistRefresh", "legacyRetryCompatibility", "loaderConfig", "loaderCallbacks", "stats", "context2", "networkDetails", "loader2", "parsedResult", "contentSteering", "sessionData", "sessionKeys", "audioTracks", "subtitles", "captions", "audioTrack", "levelId", "levelType", "singleLevel", "timeout", "message", "details", "fatal", "errorData", "parent", "levelIndex", "_error", "sendAddTrackEvent", "videoEl", "addCueToTrack", "cue", "mode", "err", "textTrackCue", "err2", "clearCurrentCues", "removeCuesInRange", "predicate", "cues", "getCuesInRange", "getFirstCueIndexAfterTime", "time", "left", "right", "mid", "cuesFound", "firstCueInRange", "filterSubtitleTracks", "textTrackList", "tracks", "MetadataSchema", "MIN_CUE_DURATION", "getCueClass", "createCueWithDataFields", "Cue", "endTime", "MAX_CUE_ENDTIME", "dateRangeDateToTimelineSeconds", "date", "hexToArrayBuffer", "ID3TrackController", "textTracks", "textTrack", "enableEmsgMetadataCues", "enableID3MetadataCues", "_this$id3Track", "startOffset", "endOffset", "id3Track", "dateRangeCuesAppended", "dateRanges", "ids", "idsToRemove", "dateTimeOffset", "appendedDateRangeCues", "durationKnown", "nextDateRangeWithSameClass", "candidateDateRange", "id2", "otherDateRange", "_cue", "LatencyController", "holdBack", "partHoldBack", "targetduration", "liveSyncDuration", "liveSyncDurationCount", "lowLatencyMode", "userConfig", "targetLatency", "maxLiveSyncOnStallIncrease", "liveEdge", "edge", "syncPosition", "min", "max", "maxLevelUpdateAge", "bufferedRanges", "_this$levelDetails", "latency", "maxLiveSyncPlaybackRate", "distanceFromTarget", "liveMinLatencyDuration", "rate", "HdcpLevels", "isHdcpLevel", "VideoRangeValues", "isVideoRange", "HlsSkip", "getSkipValue", "msn", "canSkipUntil", "canSkipDateRanges", "endSN", "snChangeGoal", "HlsUrlParameters", "skip", "Level", "s", "hasGroup", "audioGroups", "subtitleGroups", "_this$audioGroups", "_this$subtitleGroups", "updateFromToPTS", "fragFrom", "fragTo", "fragToPTS", "updateFragPTSDTS", "maxStartPTS", "minEndPTS", "fragStartPts", "fragEndPts", "deltaPTS", "drift", "fragIdx", "mergeDetails", "oldDetails", "newDetails", "oldFragments", "oldInit", "ccOffset", "PTSFrag", "mapFragmentIntersection", "oldFrag", "newFrag", "_currentInitSegment", "mergeDateRanges", "newFragments", "mapPartIntersection", "oldPart", "newPart", "adjustSliding", "advancedDateTime", "oldDateRanges", "deltaDateRanges", "oldParts", "newParts", "intersectionFn", "delta", "newFrags", "oldFrags", "addSliding", "computeReloadInterval", "distanceToLiveEdgeMs", "reloadInterval", "lastSegmentDuration", "getFragmentWithSN", "fragCurrent", "fragment", "getPartWith", "partIndex", "_level$details", "findPart", "reassignFragmentLevelIndexes", "isTimeoutError", "getRetryConfig", "isTimeout", "getRetryDelay", "retryConfig", "retryCount", "backoffFactor", "getLoaderConfigWithoutReties", "loderConfig", "shouldRetry", "loaderResponse", "httpStatus", "retry", "retryForHttpStatus", "BinarySearch", "list", "comparisonFn", "minIndex", "maxIndex", "currentIndex", "currentElement", "comparisonResult", "findFragmentByPDT", "PDTValue", "maxFragLookUpTolerance", "startPDT", "endPDT", "seg", "pdtWithinToleranceTest", "findFragmentByPTS", "fragPrevious", "bufferEnd", "fragNext", "bufferEdgeError", "fragmentWithinToleranceTest", "foundFragment", "candidate", "candidateLookupTolerance", "pdtBufferEnd", "findFragWithCC", "cc", "NetworkErrorAction", "ErrorActionFlags", "ErrorController", "_data$frag", "_data$level", "_data$context", "_data$context$levelDe", "restrictedHdcpLevel", "errorAction", "variantLevelIndex", "fragLoadPolicy", "keyLoadPolicy", "fragmentErrors", "acc", "level2", "_data$frag2", "_data$context2", "errorDetails", "nextLevel", "loadLevel", "minAutoLevel", "maxAutoLevel", "fragErrorType", "findAudioCodecAlternate", "audioCodec", "findVideoCodecAlternate", "playlistErrorType", "playlistErrorGroupId", "_level$audioGroups", "_level$subtitleGroups", "levelCandidate", "fragCandidate", "_data$errorAction", "hdcpLevel", "nextAutoLevel", "BasePlaylistController", "logPrefix", "playlistUri", "renditionReports", "foundIndex", "currentGoal", "hlsUrlParameters", "playlist", "previousDetails", "now2", "elapsed", "lastPartSn", "endSn", "lastPartIndex", "hasParts", "lastPart", "nextSnStartIndex", "lastAdvanced", "cdnAge", "segments", "bufferInfo", "position", "estimatedTimeUntilUpdate", "previousDeliveryDirectives", "errorEvent", "action", "_errorEvent$context", "delay", "EWMA", "halfLife", "estimate", "weight", "adjAlpha", "zeroFactor", "EwmaBandWidthEstimator", "slow", "fast", "defaultEstimate", "defaultTTFB", "slow_", "fast_", "ttfb_", "durationMs", "numBytes", "numBits", "durationS", "bandwidthInBps", "ttfb", "seconds", "SUPPORTED_INFO_DEFAULT", "SUPPORTED_INFO_CACHE", "requiresMediaCapabilitiesDecodingInfo", "audioTracksByGroup", "currentVideoRange", "currentFrameRate", "currentBw", "audioPreference", "audioCodecPreference", "channelsPreference", "maxChannels", "audioChannels", "audioTrackGroup", "getMediaDecodingInfoPromise", "mediaCapabilities", "baseVideoConfiguration", "videoRange", "configurations", "audioGroupId", "_audioTracksByGroup$g", "channelsNumber", "configuration", "decodingInfoKey", "getMediaDecodingInfoKey", "decodingInfoResults", "audio", "video", "mediaConfig", "isHdrSupported", "mediaQueryList", "badQuery", "getVideoSelectionOptions", "videoPreference", "preferHDR", "allowedVideoRanges", "range", "getStartCodecTier", "codecTiers", "codecSets", "preferStereo", "hasStereo", "hasCurrentVideoRange", "minHeight", "minFramerate", "minBitrate", "selectedScore", "videoRanges", "tier", "matchingVideoRanges", "maxHeight", "maxFramerate", "selected", "candidateTier", "logStartCodecCandidateIgnored", "codeSet", "reason", "getAudioTracksByGroup", "allAudioTracks", "trackGroup", "channelsKey", "getCodecTiers", "tiers", "lesserWidthOrHeight", "audioGroup", "findMatchingOption", "option", "matchPredicate", "matchesOption", "isDefault", "forced", "characteristicsMatch", "characteristicsA", "characteristicsB", "arrA", "arrB", "el", "audioMatchPredicate", "findClosestLevelWithAudioGroup", "searchIndex", "currentLevel", "renditions", "variantMap", "currentVideoCodec", "matchingVideo", "searchDownAndUpList", "arr", "AbrController", "_hls", "autoLevelEnabled", "timeLoading", "ttfbEstimate", "playbackRate", "bufferStarvationDelay", "loadedFirstByte", "bwEstimate", "expectedLen", "timeStreaming", "loadRate", "fragLoadedDelay", "bwe", "fragLevelNextLoadedDelay", "nextLoadLevel", "levelNextBitrate", "nextLoadLevelBitrate", "abrEwmaDefaultEstimate", "_data$part", "timeToFirstByteSec", "bandwidth", "fragSizeBits", "isSwitch", "fragLoadSec", "playlistLoadSec", "loading", "timeLoadingMs", "loadedBytes", "loadedDuration", "fragBufferedData", "processingMs", "maxStartDelay", "abrAutoLevel", "firstLevel", "clamped", "forcedAutoLevel", "useEstimate", "loadedFirstFrag", "nextABRAutoLevel", "partCurrent", "currentFragDuration", "avgbw", "bwFactor", "bwUpFactor", "_bestLevel", "maxStarvationDelay", "bitrateTestDelay", "bestLevel", "minLevel", "autoLevel", "maxFetchDuration", "lastLoadedFragLevel", "selectionBaseLevel", "live", "firstSelection", "currentCodecSet", "startTier", "ttfbEstimateSec", "levelsSkipped", "_levelInfo$supportedR", "levelInfo", "upSwitch", "decodingInfo", "levels2", "avgDuration", "adjustedbw", "bitrate", "fetchDuration", "TaskLoop", "millis", "FragmentState", "FragmentTracker", "activeParts", "activePart", "appendedPTS", "keys", "fragmentEntity", "elementaryStream", "timeRange", "playlistType", "appendedPart", "appendedPartSn", "esData", "isNotBuffered", "timeRanges", "fragKey", "getFragmentKey", "isFragHint", "streamInfo", "isPartial", "snToKeep", "force", "buffered", "bestFragment", "timePadding", "bestOverlap", "bufferPadding", "lastFragmentEntity", "loaded", "_this$activePartLists", "withGapOnly", "unbufferedOnly", "snToRemove", "_fragmentEntity$range", "_fragmentEntity$range2", "_fragmentEntity$range3", "noopBuffered", "BufferHelper", "_BufferHelper", "pos", "maxHoleDuration", "vbuffered", "a", "diff", "buffered2", "buf2len", "buf2end", "bufferLen", "bufferStartNext", "bufferStart", "ChunkMetadata", "getNewPerformanceTiming", "findFirstFragWithCC", "_fragments$i", "shouldAlignOnDiscontinuities", "lastFrag", "switchDetails", "findDiscontinuousReferenceFrag", "prevDetails", "curDetails", "prevFrags", "curFrags", "prevStartFrag", "adjustFragmentStart", "sliding", "adjustSlidingStart", "alignStream", "alignDiscontinuities", "alignMediaPlaylistByPDT", "referenceFrag", "refDetails", "refFragments", "refFrag", "targetCC", "refPDT", "targetPDT", "MIN_CHUNK_SIZE", "FragmentLoader", "onProgress", "LoadError", "FragmentILoader", "DefaultILoader", "resolve", "reject", "tags", "createGapLoadError", "createLoaderContext", "partLoadedData", "fragStats", "partStats", "partTotal", "estTotalParts", "estLoadedParts", "estRemainingBytes", "fragLoading", "partLoading", "segment", "_frag$decryptdata", "byteRangeStart", "byteRangeEnd", "fragmentLen", "AESCrypto", "subtle", "FastAESKey", "removePadding", "outputBytes", "paddingBytes", "AESDecryptor", "arrayBuffer", "newArray", "sBox", "invSBox", "subMix", "subMix0", "subMix1", "subMix2", "subMix3", "invSubMix", "invSubMix0", "invSubMix1", "invSubMix2", "invSubMix3", "d", "xi", "sx", "x2", "x4", "x8", "keyBuffer", "sameKey", "keySize", "ksRows", "ksRow", "invKsRow", "keySchedule", "invKeySchedule", "sbox", "rcon", "prev", "word", "inputArrayBuffer", "aesIV", "nRounds", "invSBOX", "initVector", "initVector0", "initVector1", "initVector2", "initVector3", "inputInt32", "outputInt32", "t0", "t1", "t2", "t3", "s0", "s1", "s2", "s3", "inputWords0", "inputWords1", "inputWords2", "inputWords3", "swapWord", "CHUNK_SIZE", "Decrypter", "removePKCS7Padding", "browserCrypto", "currentResult", "remainderData", "decryptResult", "currentIV", "currentChunk", "softwareDecrypter", "aesKey", "splitPoint", "msg", "TimeRanges", "log", "State", "BaseStreamController", "fragmentTracker", "keyLoader", "_this$levelLastLoaded", "mediaBuffer", "state", "currentTime", "tolerance", "fragStartOffset", "fragEndOffset", "pastFragment", "targetBufferTime", "progressCallback", "_this$mediaBuffer", "bufferedInfo", "minForwardBufferLength", "flushScope", "decryptData", "decryptedData", "_frag$startPTS", "_frag$endPTS", "_this$fragCurrent", "_this$fragPrevious", "_this$levels", "fragLoadedEndData", "transmuxer", "partsLoaded", "complete", "fragLoaded", "chunkMeta", "keyLoadingPromise", "keyLoadedData", "_result", "dataOnProgress", "fragLoadedData", "fromPart", "initialPartList", "loadPart", "loadedPart", "nextPart", "noBacktracking", "_buffer", "fragDuration", "segmentFraction", "bufferable", "maxBufferHole", "bufferedFragAtPos", "levelBitrate", "maxBufLen", "threshold", "minLength", "fragOrPart", "fragLen", "initialLiveManifestSize", "trackerState", "gapStart", "nextFragment", "nextbufferInfo", "contiguous", "independentAttrOmitted", "targetSN", "liveStart", "fragmentHint", "loadingParts", "lookupTolerance", "curSNIdx", "fragState", "nextFrag", "liveSyncPosition", "withinSlidingWindow", "maxLatency", "slidingStart", "firstLevelLoad", "aligned", "alignedSlidingStart", "offsetInMultivariantPlaylist", "filterType", "_this$fragCurrent2", "gapTagEncountered", "flushBuffer", "bufferType", "bufferedTimeRanges", "_this$transmuxer", "parsedDuration", "nextState", "previousState", "ChunkCache", "chunk", "chunks", "dataLength", "concatUint8Arrays", "hasUMDWorker", "injectWorker", "blob", "objectURL", "loadWorker", "scriptURL", "dummyTrack", "inputTimeScale", "BaseAudioDemuxer", "trackDuration", "deaultTimestamp", "lastDataIndex", "initPTSFn", "partialData", "cachedData", "initPTS", "init90kHz", "getAudioConfig", "observer", "adtsObjectType", "adtsExtensionSamplingIndex", "adtsChannelConfig", "userAgent", "manifestCodec", "adtsSamplingRates", "adtsSamplingIndex", "isHeaderPattern$1", "getHeaderLength", "getFullFrameLength", "canGetFrameLength", "isHeader$1", "canParse$1", "probe$1", "headerLength", "frameLength", "newOffset", "initTrackConfig", "getFrameDuration", "samplerate", "parseFrameHeader", "appendFrame$2", "frameIndex", "frameDuration", "stamp", "header", "unit", "_length", "missing", "_sample", "chromeVersion$1", "BitratesMap", "SamplingRateMap", "SamplesCoefficients", "BytesInSlot", "appendFrame$1", "parseHeader", "sample", "mpegVersion", "mpegLayer", "bitRateIndex", "sampleRateIndex", "paddingBit", "channelMode", "columnInBitrates", "bitRate", "sampleRate", "channelCount", "sampleCoefficient", "bytesInSlot", "samplesPerFrame", "isHeaderPattern", "isHeader", "canParse", "probe", "AACDemuxer", "emsgSchemePattern", "MP4Demuxer", "videoTrack", "captionTrack", "videoSamples", "segmentedData", "emsgs", "emsgInfo", "getAudioBSID", "bsid", "mask", "bits", "shift", "AC3Demuxer", "appendFrame", "samplingRateCode", "frameSizeCode", "skipCount", "lfeon", "bsmod", "BaseVideoParser", "dts", "debug", "_VideoSample", "VideoSample", "lastUnit", "units", "nbSamples", "lastSample", "ExpGolomb", "bytesAvailable", "workingBytes", "availableBytes", "count", "skipBytes", "valu", "leadingZeroCount", "clz", "lastScale", "nextScale", "deltaScale", "frameCropLeftOffset", "frameCropRightOffset", "frameCropTopOffset", "frameCropBottomOffset", "numRefFramesInPicOrderCntCycle", "scalingListCount", "readUByte", "readBits", "readUEG", "readBoolean", "skipBits", "skipEG", "skipUEG", "skipScalingList", "profileIdc", "chromaFormatIdc", "picOrderCntType", "picWidthInMbsMinus1", "picHeightInMapUnitsMinus1", "frameMbsOnlyFlag", "pixelRatio", "AvcVideoParser", "pes", "push2", "spsfound", "_VideoSample2", "iskey", "sliceType", "_track$pixelRatio", "_track$pixelRatio2", "sps", "codecarray", "codecstring", "lastState", "overflow", "unitType", "lastUnitStart", "lastUnitType", "SampleAesDecrypter", "encryptedData", "sampleIndex", "callback", "curUnit", "encryptedBuffer", "decryptedBuffer", "decodedData", "encryptedDataLen", "outputPos", "inputPos", "uint8DecryptedData", "unitIndex", "curUnits", "PACKET_LENGTH", "TSDemuxer", "_TSDemuxer", "typeSupported", "syncOffset", "scanwindow", "foundPat", "packetStart", "tsPackets", "parsePID", "_audioTrack", "_videoTrack", "_id3Track", "isSampleAes", "flush", "videoPid", "audioPid", "id3Pid", "audioData", "unknownPID", "pmtParsed", "pmtId", "tsPacketErrors", "stt", "pid", "atf", "parsePES", "parsePAT", "parsedPIDs", "parsePMT", "demuxResult", "sampleAes", "aacOverFlow", "frameMissingBytes", "sampleLength", "frameOverflowBytes", "recoverable", "id3Sample", "sectionLength", "tableEnd", "programInfoLength", "esInfoLength", "logEncryptedSamplesFoundInUnencryptedStream", "parsePos", "remaining", "descriptorLen", "stream", "pesLen", "pesHdrLen", "pesPts", "pesDts", "pesFlags", "payloadStartOffset", "pesData", "dataLen", "MP3Demuxer", "AAC", "UINT32_MAX", "MP4", "_MP4", "videoHdlr", "audioHdlr", "dref", "stco", "majorBrand", "avc1Brand", "minorVersion", "upperWordDuration", "lowerWordDuration", "sequenceNumber", "boxes", "pps", "avcc", "width", "height", "hSpacing", "vSpacing", "configlen", "sampleDependencyTable", "upperWordBaseMediaDecodeTime", "lowerWordBaseMediaDecodeTime", "arraylen", "cts", "movie", "MPEG_TS_CLOCK_FREQ_HZ", "toTimescaleFromBase", "destScale", "srcBase", "round", "toTimescaleFromScale", "srcScale", "toMsFromMpegTsClock", "toMpegTsClockFromTimescale", "MAX_SILENT_FRAME_DURATION", "AAC_SAMPLES_PER_FRAME", "MPEG_AUDIO_SAMPLE_PER_FRAME", "AC3_SAMPLES_PER_FRAME", "chromeVersion", "safariWebkitVersion", "MP4Remuxer", "vendor", "defaultTimeStamp", "rolloverDetected", "minPTS", "normalizePts", "accurateTimeOffset", "id3", "independent", "audioTimeOffset", "videoTimeOffset", "hasAudio", "hasVideo", "enoughAudioSamples", "enoughVideoSamples", "_videoTrack$pixelRati", "_config$pixelRatio", "_videoTrack$pixelRati2", "_config$pixelRatio2", "isVideoContiguous", "firstKeyFrameIndex", "firstKeyFramePTS", "findKeyframeIndex", "audiovideoTimestampDelta", "audioTrackLength", "flushTextTrackMetadataCueSamples", "flushTextTrackUserdataCueSamples", "audioSamples", "_initPTS", "computePTSDTS", "container", "initDTS", "inputSamples", "outputSamples", "nextAvcDts", "mp4SampleDuration", "firstDTS", "lastDTS", "maxPTS", "sortSamples", "initTime", "deltadts", "deltapts", "inputDuration", "averageSampleDuration", "foundHole", "foundOverlap", "firstPTS", "nbNalu", "naluLen", "dtsStep", "nbUnits", "sampleLen", "mdatSize", "mdat", "stretchedLastFrame", "minDtsDelta", "minPtsDelta", "maxDtsDelta", "maxPtsDelta", "VideoSampleUnits", "mp4SampleLength", "unitData", "unitDataLen", "ptsDelta", "lastFrameDuration", "gapTolerance", "deltaToFrameEnd", "compositionTimeOffset", "Mp4Sample", "nextDts", "nextPts", "mp4timeScale", "scaleFactor", "inputSampleDuration", "rawMPEG", "alignedWithVideo", "nextAudioPts", "timeOffsetMpegTS", "maxAudioFramesDrift", "newStamp", "fillFrame", "lastPTS", "_nbSamples", "audioSample", "prevSample", "unitLen", "silentFrame", "reference", "isKeyframe", "PassThroughRemuxer", "defaultInitPTS", "getParsedTrackCodec", "_initData", "_initData2", "lastEndTime", "decodeTime", "isInvalidInitPts", "minDuration", "now", "muxConfig", "Transmuxer", "transmuxConfig", "uintData", "currentTransmuxState", "discontinuity", "trackSwitch", "initSegmentChange", "defaultInitPts", "initSegmentData", "getEncryptionType", "decrypter", "emptyResult", "resetMuxers", "currentState", "decryptionPromise", "transmuxResults", "demuxer", "remuxer", "demuxResultOrPromise", "isPromise", "remuxResult", "mux", "_muxConfig$i$demux", "Remuxer", "Demuxer", "encryptionType", "p", "TransmuxConfig", "TransmuxState", "eventemitter3", "has", "prefix", "EE", "fn", "once", "addListener", "emitter", "listener", "evt", "clearEvent", "EventEmitter2", "names", "events", "handlers", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "args", "eventemitter3Exports", "EventEmitter", "TransmuxerInterface", "onTransmuxComplete", "onFlush", "forwardMessage", "ev", "m2tsTypeSupported", "worker", "_frag$initSegment", "_lastFrag$initSegment", "snDiff", "partDiff", "progressive", "transmuxResult", "_this$workerContext", "subtitleOptionsIdentical", "trackList1", "trackList2", "mediaAttributesIdentical", "attrs1", "attrs2", "customAttributes", "stableRenditionId", "subtitleAttribute", "subtitleTrackMatchesTextTrack", "subtitleTrack", "TICK_INTERVAL$2", "AudioStreamController", "lastCurrentTime", "_levels$trackId", "_this$media", "retryDate", "waitingData", "cache", "trackDetails", "bufferedTrack", "switchingTrack", "mainBufferInfo", "atGap", "atBufferSyncLimit", "mainFrag", "mainBufferLength", "maxConfigBuffer", "mediaPlaylist", "altAudio", "_track$details", "mainDetails", "_id3$samples", "mapFragment", "emittedID3", "emittedText", "variantAudioCodecs", "_track$details2", "bufferedAttributes", "switchAttributes", "AudioTrackController", "trackInActiveGroup", "currentGroups", "currentTrack", "groupIndex", "allIndex", "audioTracksUpdated", "selectedTrackId", "_this$groupIds", "newId", "audioOption", "switchIndex", "withoutCodecAndChannelsMatch", "lastTrack", "trackLoaded", "TICK_INTERVAL$1", "SubtitleStreamController", "success", "fragStart", "fragEnd", "endOffsetSubtitles", "subtitleTracks", "currentTrackId", "mainSlidingStartFragment", "foundFrag", "BufferableInstance", "timeranges", "getRange", "SubtitleTrackController", "subtitlePreference", "subtitleTracksUpdated", "selectDefault", "subtitleOption", "allSubtitleTracks", "nextTrack", "BufferOperationQueue", "sourceBufferReference", "operation", "pending", "queue", "execute", "promise", "sb", "VIDEO_CODEC_PROFILE_REPLACE", "BufferController", "mediaSource", "mediaSrc", "_objectUrl", "codecEvents", "_ms$constructor", "ms", "objectUrl", "MMS", "removeSourceChildren", "addSource", "_this$mediaSource", "sourceBufferCount", "trackNames", "trackName", "_trackCodec", "metadata", "currentCodecFull", "currentCodec", "trackCodec", "nextCodec", "mimeType", "bufferCodecEventsExpected", "operationQueue", "eventData", "chunkStats", "bufferAppendingStart", "fragBuffering", "partBuffering", "checkTimestampOffset", "sourceBuffer", "type2", "event2", "appendErrorCount", "flushOperation", "buffersAppendedTo", "onUnblocked", "backBufferLength", "maxBackBufferLength", "targetBackBufferPosition", "frontBufferLength", "maxFrontBufferLength", "targetFrontBufferPosition", "numBufferedRanges", "levelDuration", "mediaDuration", "msDuration", "pendingTracks", "pendingTracksCount", "buffers", "sbName", "removedRanges", "_this$mediaSource2", "_this$mediaSource3", "removeStart", "removeEnd", "blockingOperations", "node", "sourceChildren", "specialCea608CharsCodes", "getCharForByte", "charCode", "NR_ROWS", "NR_COLS", "rowsLowCh1", "rowsHighCh1", "rowsLowCh2", "rowsHighCh2", "backgroundColors", "CaptionsLogger", "severity", "numArrayToHexArray", "numArray", "hexArray", "PenState", "styles", "attribs", "style", "other", "newPenState", "StyledUnicodeChar", "uchar", "newChar", "Row", "logger2", "empty", "absPos", "relPos", "newPos", "char", "startPos", "chars", "CaptionScreen", "equal", "pacData", "newRow", "topRowIndex", "lastOutputScreen", "prevLineTime", "row", "indent", "prevPos", "bkgData", "nrRows", "topRow", "asOneRow", "displayText", "rowNr", "rowText", "Cea608Channel", "channelNumber", "outputFilter", "newHandler", "newMode", "screen", "tmp", "nrCols", "secondByte", "colorIndex", "colors", "dispatch", "Cea608Parser", "field", "out1", "out2", "createCmdHistory", "channel", "byteList", "cmdFound", "charsFound", "currChNr", "cmdHistory", "cond1", "cond2", "hasCmdRepeated", "setLastCmd", "chNr", "case1", "case2", "pacIndex", "channelNr", "charCodes", "charCode1", "oneCode", "hexCodes", "OutputFilter", "timelineController", "VTTCue", "AllowedDirections", "AllowedAlignments", "isAllowedValue", "allowed", "lcValue", "findDirectionSetting", "findAlignSetting", "extend", "rest", "cobj", "VTTCue2", "baseObj", "_id", "_pauseOnExit", "_startTime", "_endTime", "_text", "_region", "_vertical", "_snapToLines", "_line", "_lineAlign", "_position", "_positionAlign", "_size", "_align", "setting", "StringDecoder", "options", "parseTimeStamp", "computeSeconds", "m2", "f", "Settings", "v", "dflt", "defaultKey", "n", "percent", "parseOptions", "keyValueDelim", "groupDelim", "kv", "defaults", "center", "parseCue", "regionList", "oInput", "consumeTimeStamp", "ts", "consumeCueSettings", "input2", "cue2", "settings", "vals", "line", "skipWhitespace", "fixLineBreaks", "VTTParser", "_this", "collectNextLine", "parseHeader2", "alreadyCollectedLine", "hasSubstring", "LINEBREAKS", "startsWith", "inputString", "searchString", "cueString2millis", "timeString", "secs", "mins", "hours", "hash", "_hash", "generateCueId", "calculateOffset", "vttCCs", "currCC", "prevCC", "_prevCC", "parseWebVTT", "vttByteArray", "callBack", "errorCallBack", "parser", "vttLines", "cueTime", "timestampMapMPEGTS", "timestampMapLOCAL", "parsingError", "inHeader", "cueOffset", "webVttMpegTsMapOffset", "IMSC1_CODEC", "HMSF_REGEX", "TIME_UNIT_REGEX", "textAlignToLineAlign", "parseIMSC1", "ttmlList", "syncTime", "ttml", "parseTTML", "tt", "defaultRateInfo", "rateInfo", "trim", "styleElements", "collectionToDictionary", "getElementCollection", "regionElements", "cueElements", "cueElement", "cueText", "getTextContent", "parseTtmlTime", "timestampParsingError", "region", "getTtmlStyles", "textAlign", "lineAlign", "fromElement", "parentName", "childName", "elementsWithId", "dict", "element", "_node$childNodes", "ttsNs", "regionStyle", "styleAttributes", "regionStyleName", "getAttributeNS", "ns", "timeAttributeValue", "parseHoursMinutesSecondsFrames", "parseTimeUnits", "TimelineController", "newVTTCCs", "channel1", "channel2", "channel3", "channel4", "cueRanges", "merged", "cueRange", "overlap", "intersection", "unparsedVttFrags", "frag2", "label", "language", "canReuseVttTextTrack", "captionsProperties", "captionsTracks", "languageCode", "existingTrack", "trackProperties", "kind", "hasIMSC1", "inUseTracks", "inUseTrack", "textTrackKind", "captionsOrSubtitlesFromCharacteristics", "unusedTextTracks", "tracksList", "captionsTrack", "instreamIdMatch", "cea608Parser1", "cea608Parser2", "lastCc", "_data$part$index", "decrypted", "trackPlaylistMedia", "maxAvCC", "payloadWebVTT", "missingInitPTS", "fragLevel", "ccBytes", "ccdatas", "actualCCBytes", "tmpByte", "ccbyte1", "ccbyte2", "ccType", "manifestTrack", "x1", "y1", "y2", "CapLevelController", "_CapLevelController", "streamController", "maxLevel", "capLevelIndex", "validLevels", "boundsRect", "clientRect", "restrictedLevel", "atGreatestBandwidth", "curLevel", "maxLevelIndex", "squareSize", "FPSController", "decodedFrames", "droppedFrames", "currentPeriod", "currentDropped", "currentDecoded", "droppedFPS", "videoPlaybackQuality", "LOGGER_PREFIX", "EMEController", "_EMEController", "keySystemConfiguration", "uniqueCodec", "attempt", "keySystems", "mediaKeys", "EMEKeyError", "supportedConfigurations", "requestMediaKeySystemAccessFunc", "errMessage", "mediaKeySystemConfigs", "keySystemAccessPromises", "keySystemAccess", "_keySystemAccessPromises", "mediaKeySystemAccess", "certificateRequest", "certificate", "mediaKeysSession", "mediaKeySessionContext", "keySessionContext", "_mediaKeySessionConte", "keySession", "keySystemsInConfig", "keySystemFormat", "keyDetails", "keySessionContextPromise", "initDataType", "keySystemDomain", "json", "psshInfo", "keyIdHex", "keyIdToKeySessionPromise", "mediaKeySessions", "keyContext", "oldKeyIdHex", "_keySystemToKeySystem", "setMediaKeysPromise", "_this$config$drmSyste", "_this$config$drmSyste2", "generateRequestFilter", "mappedInitData", "_this$hls", "licenseStatus", "onmessage", "messageType", "onkeystatuseschange", "keyStatus", "keyUsablePromise", "_context$mediaKeysSes", "status2", "certLoader", "contex", "cert", "keyMessage", "xhr", "licenseChallenge", "xmlString", "keyMessageXml", "headers", "_header$querySelector", "_header$querySelector2", "challengeElement", "challengeText", "keysListItem", "licenseXhrSetup", "licenseXhrSetupResult", "licenseResponseCallback", "maxNumRetry", "attemptsLeft", "xhr2", "licenseChallenge2", "mediaKeysList", "keySessionCount", "formats", "licenseXhr", "CmObjectType", "CmObjectType2", "CmStreamingFormat", "CmStreamingFormat2", "CmcdHeaderField", "CmcdHeaderField2", "CmcdHeaderMap", "SfItem", "_SfItem", "SfToken", "DICT", "format", "throwError", "src", "cause", "BARE_ITEM", "BOOLEAN", "BYTES", "DECIMAL", "INTEGER", "isInvalidInt", "STRING_REGEX", "TOKEN", "KEY", "serializeError", "serializeBoolean", "base64encode", "binary", "serializeByteSequence", "serializeInteger", "serializeDate", "roundToEven", "precision", "decimalShift", "flooredValue", "serializeDecimal", "roundedValue", "STRING", "serializeString", "symbolToStr", "symbol", "serializeToken", "token", "serializeBareItem", "serializeKey", "serializeParams", "serializeItem", "serializeInnerList", "serializeDict", "entries", "optionalWhiteSpace", "item", "output", "encodeSfDict", "isTokenField", "isValid", "urlToRelativePath", "base", "toPath", "fromPath", "uuid", "uuid2", "dt", "toRounded", "toUrlSafe", "toHundred", "CmcdFormatters", "processCmcd", "formatters", "filter", "formatter", "encodeCmcd", "cmcd", "toCmcdHeaders", "headerMap", "shards", "entry", "_headerMap$find", "_acc$field", "entry2", "appendCmcdHeaders", "CMCD_PARAM", "toCmcdQuery", "REGEX", "appendCmcdQuery", "query", "separator", "CMCDController", "ot", "_data$tracks$audio", "_data$tracks$video", "isVideo", "includeKeys", "pLoader", "apply", "Ctor", "callbacks", "fLoader", "PATHWAY_PENALTY_DURATION_MS", "ContentSteeringController", "ttl", "levelToRemove", "pathwayPriority", "errorPathway", "pathways", "pathwayLevels", "penalizedPathways", "selectedIndex", "selectedLevel", "levelAfterChange", "defaultPathway", "pathwayClones", "audioGroupCloneMap", "subtitleGroupCloneMap", "pathwayClone", "cloneId", "baseId", "uriReplacement", "clonedVariants", "baseLevel", "clonedAudioGroupId", "clonedSubtitleGroupId", "performUriReplacement", "clonedLevel", "cloneRenditionGroups", "throughput", "steeringData", "reloadUri", "loadedSteeringData", "retryAfter", "ttlMs", "groupCloneMap", "clonedTracks", "clonedTrack", "stableId", "perOptionKey", "host", "perOptionUris", "perVariantUri", "AGE_HEADER_LINE_REGEX", "XhrLoader", "_this$callbacks", "xhrSetup", "maxTimeToFirstByteMs", "maxLoadTimeMs", "readyState", "useResponse", "_this$config", "_this$context", "ageHeader", "fetchSupported", "BYTERANGE", "FetchLoader", "getRequest", "initParams", "getRequestParameters", "isArrayBuffer", "LENGTH", "first", "statusText", "FetchError", "getContentLength", "responseData", "total", "code", "highWaterMark", "chunkCache", "reader", "pump", "signal", "getByteRangeLength", "byteRangeHeader", "contentRange", "byteRangeLength", "contentLength", "WHITESPACE_CHAR", "Cues", "captionScreen", "indenting", "_track$cues", "cueA", "cueB", "defaultLoadPolicy", "hlsDefaultConfig", "timelineConfig", "mergeConfig", "defaultConfig", "defaultsCopy", "deepCpy", "deprecatedSettingTypes", "deprecatedSettings", "policyName", "policyNotSet", "report", "deprecatedSetting", "enableStreamingMode", "currentLoader", "chromeOrFirefox", "LevelController", "contentSteeringController", "redundantSet", "generatePathwaySet", "resolutionFound", "videoCodecFound", "audioCodecFound", "levelParsed", "_audioCodec", "_videoCodec", "unknownCodecs", "CODECS", "FRAMERATE", "HDCP", "PATHWAY", "RESOLUTION", "VIDEO_RANGE", "pathwayCount", "filteredLevels", "assignTrackIdsByGroup", "unsortedLevels", "valueA", "valueB", "firstLevelInPlaylist", "_this$hls$userConfig", "firstLevelBitrate", "bandwidthEstimate", "startingBwEstimate", "audioOnly", "edata", "newLevel", "lastLevelIndex", "lastLevel", "lastPathwayId", "levelSwitchingData", "configStartLevel", "_data$deliveryDirecti2", "_data$deliveryDirecti", "currentLevelIndex", "_this$currentLevel", "autoLevelCapping", "maxHdcpLevel", "KeyLoader", "_loader$context", "keyInfo", "loadingFrag", "_keyInfo", "_keyInfo2", "_keyInfo$mediaKeySess", "keyInfo2", "getSourceBuffer", "isMSESupported", "isSupported", "codecsForVideoContainer", "codecForAudioContainer", "changeTypeSupported", "_sourceBuffer$prototy", "STALL_MINIMUM_DURATION_MS", "MAX_START_GAP_JUMP", "SKIP_BUFFER_HOLE_STEP_SECONDS", "SKIP_BUFFER_RANGE_START", "GapController", "activeFrag", "stalled", "seeking", "seeked", "beginSeek", "_stalledDuration", "nextStart", "hasEnoughBuffer", "noBufferGap", "startJump", "maxStartGapJump", "partialOrGap", "tnow", "stalledDuration", "bufferedWithHoles", "stalledDurationMs", "stallReported", "bufferStarved", "waiting", "gapLength", "startGap", "startFrag", "startProvisioned", "moreToLoad", "provisioned", "targetTime", "nudgeRetry", "TICK_INTERVAL", "StreamController", "startLevel", "levelLastLoaded", "lastDetails", "_this$backtrackFragme", "backtrackFrag", "fetchdelay", "fragPlayingCurrent", "nextLevelId", "fragLastKbps", "bufferedFrag", "nextBufferedFrag", "maxStart", "startPts", "aac", "heaac", "_curLevel$details", "newLevelId", "fromAltAudio", "videoBuffer", "mediaTrack", "alternate", "gapController", "isFirstFragment", "isFirstInDiscontinuity", "audiovideo", "ua", "fragPlaying", "fragCurrentLevel", "epocMs", "Hls", "_Hls", "ConfigAbrController", "ConfigBufferController", "ConfigCapLevelController", "ConfigErrorController", "ConfigFpsController", "errorController", "abrController", "bufferController", "capLevelController", "fpsController", "playListLoader", "id3TrackController", "ConfigContentSteeringController", "levelController", "networkControllers", "coreComponents", "AudioStreamControllerClass", "SubtitleStreamControllerClass", "onErrorOut", "ControllerClass", "components", "controllerInstance", "eventObject", "component", "loadedSource", "loadingSource", "controller", "shouldStartCapping", "newCapLevelToPlayerSize", "bwEstimator", "minAutoBitrate", "_this$audioTrackContr", "_this$subtitleTrackCo", "audioTrackController", "audioTrackId", "subtitleTrackController", "subtitleTrackId", "hlsCompatibilityHelper", "video", "Hls", "videoUrl", "hls", "catchHlsPlaybackError", "event", "video", "hlsCompatibilityHelper", "elementStyle", "wrapper", "video", "styles", "useTrackClickPlayLiveContent", "trackAmplitude", "useAnalytics", "campaignKey", "MS_IN_SECOND", "useIsEnabled", "ref", "useInView", "useIsImpressed", "useLiveCampaignVideo", "campaignKey", "playPreviewStatusList", "intervalEnabled", "enabled", "isLoading", "data", "mutate", "useFetchLiveCampaign", "campaign", "status", "useLiveCampaignStatus", "shouldRenderPreview", "previewUrl", "posterUrl", "isPending", "useInterval", "ACCESS_FROM_APP_MESSAGE", "useLiveCampaignVideoAction", "dialog", "useAppLinkDialog", "trackClickPlayLiveContent", "useTrackClickPlayLiveContent", "isWebview", "usePlayInView", "isInView", "video", "setVideo", "ye", "ue", "CampaignStatus", "RichCampaignStatus", "CampaignStatus", "PREVIEW_ALLOWED_STATUS_LIST", "RichCampaignStatus", "MINIMAL_PREVIEW_ALLOWED_STATUS_LIST", "LiveCampaignVideo", "campaignKey", "playAfterCampaign", "ref", "pe", "enabled", "useIsEnabled", "isImpressed", "useIsImpressed", "playPreviewStatusList", "PREVIEW_ALLOWED_STATUS_LIST", "MINIMAL_PREVIEW_ALLOWED_STATUS_LIST", "isPending", "shouldRenderPreview", "previewUrl", "posterUrl", "useLiveCampaignVideo", "handleVideoClick", "useLiveCampaignVideoAction", "setVideo", "usePlayInView", "p", "styles", "catchHlsPlaybackError", "addPropertyControls", "ControlType", "LiveCampaignVideo", "TestLiveCampaignVideo_default", "LiveCampaignVideoFonts", "getFonts", "TestLiveCampaignVideo_default", "LiveCampaignBannerFonts", "TestLiveCampaignBanner_default", "cycleOrder", "serializationHash", "variantClassNames", "addPropertyOverrides", "overrides", "variants", "nextOverrides", "variant", "transition1", "toResponsiveImage", "value", "transformTemplate1", "_", "t", "Transition", "children", "config", "re", "MotionConfigContext", "transition", "contextValue", "se", "p", "Variants", "motion", "x", "humanReadableVariantMap", "getProps", "_1", "_2", "_3", "bannerImage", "height", "id", "width", "props", "_ref", "_ref1", "_humanReadableVariantMap_props_variant", "_ref2", "createLayoutDependency", "Component", "Y", "ref", "activeLocale", "setLocale", "useLocaleInfo", "style", "className", "layoutId", "CaATUNmJk", "LBZwJjixb", "aLoiSur4I", "jsMhZR5gU", "Do9fOGhbh", "S1gqWSCvi", "hLLhJxEf2", "d89LhukLI", "restProps", "baseVariant", "classNames", "clearLoadingGesture", "gestureHandlers", "gestureVariant", "isLoading", "setGestureState", "setVariant", "useVariantState", "layoutDependency", "ref1", "pe", "defaultLayoutId", "ae", "sharedStyleClassNames", "componentViewport", "useComponentViewport", "LayoutGroup", "u", "cx", "Image2", "getLoadingLazyAtYPosition", "ComponentViewportProvider", "css", "FramerI2oGGFThg", "withCSS", "I2oGGFThg_default", "addPropertyControls", "ControlType", "addFonts", "MotionAWithClickEventTracker", "withClickEventTracker", "motion", "cycleOrder", "serializationHash", "variantClassNames", "addPropertyOverrides", "overrides", "variants", "nextOverrides", "variant", "transition1", "transition2", "Transition", "value", "children", "config", "re", "MotionConfigContext", "transition", "contextValue", "se", "p", "Variants", "x", "humanReadableVariantMap", "getProps", "background", "height", "id", "link", "title", "width", "props", "createLayoutDependency", "Component", "Y", "ref", "activeLocale", "setLocale", "useLocaleInfo", "style", "className", "layoutId", "RMfXXbAsV", "Ey0HP_iV5", "Y0iYOgerg", "restProps", "baseVariant", "classNames", "gestureHandlers", "gestureVariant", "setGestureState", "setVariant", "useVariantState", "layoutDependency", "activeVariantCallback", "delay", "useActiveVariantCallback", "onAppearedgnxw", "args", "onAppeargsyvya", "useOnVariantChange", "ref1", "pe", "defaultLayoutId", "ae", "sharedStyleClassNames", "componentViewport", "useComponentViewport", "LayoutGroup", "cx", "Link", "u", "RichText2", "SVG", "css", "FramerMCT7neHeu", "withCSS", "MCT7neHeu_default", "addPropertyControls", "ControlType", "addFonts", "e", "global", "t", "r", "main", "n", "a", "noop", "promise", "o", "onFrame", "i", "decorate", "execute", "workerDone", "l", "convert", "isOk", "prop", "onlyPositiveInt", "randomInt", "toDecimal", "colorsToRgb", "hexToRgb", "getOrigin", "setCanvasWindowSize", "setCanvasRectSize", "getCanvas", "ellipse", "s", "randomPhysics", "updateFetti", "animate", "c", "f", "u", "d", "onDone", "update", "confettiCannon", "h", "fireLocal", "v", "p", "m", "g", "b", "y", "w", "M", "fire", "onResize", "done", "window", "confetti_default", "Confetti", "keyword", "ue", "duration", "animationEnd", "defaults", "randomInRange", "min", "max", "interval", "timeLeft", "particleCount", "confetti_default", "p", "l", "addPropertyControls", "ControlType", "BootstrapFonts", "getFonts", "Bootstrap", "ConfettiFonts", "Confetti", "KeyVisualFonts", "KeyVisual_default", "HighlighterHighlighterFonts", "MCT7neHeu_default", "UserComponentFonts", "hQLMQjI_M_default", "ContainerWithFX", "withFX", "Container", "SchedulableFonts", "Schedulable_default", "MotionDivWithCSRopznwy", "withCodeBoundaryForOverrides", "motion", "withCSR", "TabBarFonts", "TabBar_default", "LivePlayerFonts", "I2oGGFThg_default", "CarouselFonts", "Carousel", "CouponFonts", "Coupon_default", "ProductCuration_Fonts", "ExhibitionProductCuration", "BrandTimeSaleFonts", "BrandTimeSale_default", "Week_MyselectionFonts", "BKZ9H4TeF_default", "LegacyBoxButtonFonts", "NM9_vRNf4_default", "MotionDivWithClickEventTracker1aab93f", "withClickEventTracker", "SlideshowFonts", "Slideshow", "MotionDivWithViewEventTrackergvz9bn", "withViewEventTracker", "CreditCardPromotionBannerFonts", "QLB9kVNqx_default", "MotionDivWithClickEventTracker1g02e8f", "MotionDivWithClickEventTrackerv0c4vb", "breakpoints", "isBrowser", "serializationHash", "variantClassNames", "addImageAlt", "image", "alt", "transformTemplate1", "_", "t", "transition1", "animation", "transformTemplate2", "HTMLStyle", "value", "useIsOnFramerCanvas", "p", "humanReadableVariantMap", "getProps", "height", "id", "width", "props", "Component", "Y", "ref", "fallbackRef", "pe", "refBinding", "defaultLayoutId", "ae", "activeLocale", "setLocale", "useLocaleInfo", "componentViewport", "useComponentViewport", "style", "className", "layoutId", "variant", "restProps", "ue", "metadata", "robotsTag", "ie", "baseVariant", "hydratedBaseVariant", "useHydratedBreakpointVariants", "gestureVariant", "scopingClassNames", "cx", "router", "useRouter", "elementId", "useRouteElementId", "ref1", "isDisplayed", "elementId1", "ref2", "isDisplayed1", "elementId2", "ref3", "isDisplayed2", "elementId3", "ref4", "elementId4", "ref5", "elementId5", "ref6", "isDisplayed3", "elementId6", "ref7", "elementId7", "ref8", "elementId8", "ref9", "elementId9", "ref10", "elementId10", "ref11", "elementId11", "ref12", "elementId12", "ref13", "useCustomCursors", "GeneratedComponentContext", "u", "LayoutGroup", "ComponentViewportProvider", "PropertyOverrides2", "getLoadingLazyAtYPosition", "Image2", "ResolveLinks", "resolvedLinks", "resolvedLinks1", "resolvedLinks2", "RichText2", "x", "css", "Framerhoa12SBgY", "withCSS", "hoa12SBgY_default", "addFonts", "getFontsFromSharedStyle", "fonts", "__FramerMetadata__"]
}
