xgplayer 2.32.0 → 2.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/controls/danmu.js +1 -1
- package/browser/controls/errorRetry.js +1 -1
- package/browser/controls/nativeTextTrack.js +1 -1
- package/browser/controls/screenShot.js +1 -1
- package/browser/core_player.js +1 -1
- package/browser/core_player.js.map +1 -1
- package/browser/index.js +2 -2
- package/browser/index.js.map +1 -1
- package/browser/simple_player.js +1 -1
- package/browser/simple_player.js.map +1 -1
- package/dist/controls/danmu.js +1 -1
- package/dist/controls/errorRetry.js +1 -1
- package/dist/controls/nativeTextTrack.js +1 -1
- package/dist/controls/screenShot.js +1 -1
- package/dist/core_player.js +1 -1
- package/dist/core_player.js.map +1 -1
- package/dist/index.js +23 -11
- package/dist/index.js.map +1 -1
- package/dist/simple_player.js +1 -1
- package/dist/simple_player.js.map +1 -1
- package/es/controls/danmu.js +1 -1
- package/es/controls/errorRetry.js +1 -1
- package/es/controls/nativeTextTrack.js +1 -1
- package/es/controls/screenShot.js +1 -1
- package/es/core_player.js +1 -1
- package/es/core_player.js.map +1 -1
- package/es/index.js +3 -3
- package/es/index.js.map +1 -1
- package/es/simple_player.js +1 -1
- package/es/simple_player.js.map +1 -1
- package/package.json +4 -4
- package/src/controls/screenShot.js +13 -4
- package/src/skin/style/controls/danmu.scss +2 -0
- package/version.json +1 -1
- package/webpack.config.js +21 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://Player/webpack/bootstrap","webpack://Player/./src/utils/util.js","webpack://Player/./node_modules/css-loader/lib/css-base.js","webpack://Player/./node_modules/style-loader/lib/addStyles.js","webpack://Player/./node_modules/es5-ext/object/is-value.js","webpack://Player/./src/error.js","webpack://Player/./src/utils/sniffer.js","webpack://Player/./node_modules/type/value/is.js","webpack://Player/./src/utils/xgplayerTimeRange.js","webpack://Player/./src/player.js","webpack://Player/./src/skin/controls/i18n.js","webpack://Player/./src/proxy.js","webpack://Player/./node_modules/event-emitter/index.js","webpack://Player/./node_modules/d/index.js","webpack://Player/./node_modules/type/plain-function/is.js","webpack://Player/./node_modules/type/function/is.js","webpack://Player/./node_modules/type/prototype/is.js","webpack://Player/./node_modules/type/object/is.js","webpack://Player/./node_modules/es5-ext/object/assign/index.js","webpack://Player/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://Player/./node_modules/es5-ext/object/assign/shim.js","webpack://Player/./node_modules/es5-ext/object/keys/index.js","webpack://Player/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://Player/./node_modules/es5-ext/object/keys/shim.js","webpack://Player/./node_modules/es5-ext/function/noop.js","webpack://Player/./node_modules/es5-ext/object/valid-value.js","webpack://Player/./node_modules/es5-ext/object/normalize-options.js","webpack://Player/./node_modules/es5-ext/string/#/contains/index.js","webpack://Player/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Player/./node_modules/es5-ext/string/#/contains/shim.js","webpack://Player/./node_modules/es5-ext/object/valid-callable.js","webpack://Player/./node_modules/event-emitter/all-off.js","webpack://Player/./node_modules/es5-ext/object/valid-object.js","webpack://Player/./node_modules/es5-ext/object/is-object.js","webpack://Player/./src/skin/style/index.scss?a7b1","webpack://Player/./src/skin/style/index.scss","webpack://Player/./node_modules/style-loader/lib/urls.js","webpack://Player/./src/controls/mobile.js","webpack://Player/./src/controls/pc.js","webpack://Player/./src/controls/start.js","webpack://Player/./src/skin/controls/start.js","webpack://Player/./src/skin/assets/startPlay.svg","webpack://Player/./src/skin/assets/startPause.svg","webpack://Player/./src/skin/style/controls/start.scss?7bb8","webpack://Player/./src/skin/style/controls/start.scss","webpack://Player/./src/core_player.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","createDom","hasClass","addClass","removeClass","toggleClass","findDom","padStart","format","event","typeOf","deepCopy","getBgImage","copyDom","_setInterval","_clearInterval","createImgBtn","isWeiXin","isUc","computeWatchDur","offInDestroy","on","once","getBuffered2","checkIsBrowser","setStyle","checkWebkitSetPresentationMode","video","el","tpl","attrs","cname","dom","document","item","className","Array","some","RegExp","reg","sel","e","str","length","pad","charstr","String","len","maxlen","Math","chars","time","window","hour","minute","second","touch","obj","dst","src","url","a","back","node","context","eventName","intervalFunc","frequency","setInterval","clearInterval","imgUrl","width","height","btn","w","h","unit","Number","ua","played","arr","begin","end","j","b","watch_dur","fn","offEvent","_fn","data","vbuffered","maxHoleDuration","buffered","start","diff","buffered_2","buf2len","buf2end","XgplayerTimeRange","elem","style","error","PresentationMode","PIP","INLINE","FULLSCREEN","util","useSourceMap","list","toString","this","map","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","push","memo","stylesInDom","isOldIE","all","atob","apply","arguments","getTarget","target","querySelector","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","type","addAttrs","keys","forEach","setAttribute","update","remove","result","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","href","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","undefined","convertToAbsoluteUrls","blob","oldSrc","_undefined","require","val","ErrorTypes","network","code","msg","remark","mse","parse","decoder","runtime","timeout","other","errd","line","handle","version","errorCode","mediaError","arg","sniffer","navigator","ie","firfox","chrome","opera","safari","isWindowsPhone","test","isSymbian","isAndroid","isFireFox","isTablet","isPhone","isPc","bufferedList","Player","ignores","whitelist","lang","inactive","volume","controls","controlsList","unselectable","onselectstart","Errors","vid","console","s_i18n","self","fetch","method","headers","Accept","res","err","evName","evFunc","player","videoWidth","containerSize","videoHeight","setTimeout","nodeType","root","config","playPromise","isDelDom","_interval","classNameList","split","clearTimeout","keyShortcut","destroyFunc","_replay","param","defaultUserGestureEventHandler","userGestureEventMiddleware","descriptor","enablePausedInactive","k","controlLst","control","Proxy","HAVE_NOTHING","HAVE_METADATA","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","NETWORK_EMPTY","NETWORK_IDLE","NETWORK_LOADING","NETWORK_NO_SOURCE","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","REPLAY","ERROR","PLAY_TIPS","PAUSE_TIPS","PLAYNEXT_TIPS","DOWNLOAD_TIPS","ROTATE_TIPS","RELOAD_TIPS","FULLSCREEN_TIPS","EXITFULLSCREEN_TIPS","CSSFULLSCREEN_TIPS","EXITCSSFULLSCREEN_TIPS","TEXTTRACK","MINIPLAYER","SCREENSHOT","LIVE","OFF","MINIPLAYER_DRAG","AIRPLAY_TIPS","set","autoplay","playsinline","airplay","tabindex","mediaType","textTrackDom","nativeTextTrack","track","styleStr","wrap","XgVideoProxy","constructor","videoConfig","getElementsByTagName","trackDoms","lastBuffer","defaultVideoEventHandler","Date","curBuffer","videoEventHandler","canPlayType","range","currentTime","bool","isTrue","isFinite","ended","status","en","cn","rate","posterUrl","poster","vol","off","emit","methods","descriptors","callable","Function","defineProperties","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","args","slice","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","desc","gs","isFunction","classRe","functionToString","isPrototype","isObject","possibleTypes","foo","bar","trzy","max","dest","TypeError","process","opts1","searchString","emitter","function","locals","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","clk","_click_","clickedTime","first","element","onTouch","fullscreen","Event","onCanPlay","StartPlayIcon","StartPauseIcon","onPlayerReady","Mobile","Pc","Start","S_start"],"mappings":"0BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,mHChFrCC,Y,EAkBAC,W,EAcAC,W,EAcAC,c,EAiBAC,c,EAcAC,U,EAcAC,W,EAYAC,S,EAUAC,Q,EAWAC,S,EAIAC,W,EAkBAC,a,EAWAC,U,EAeAC,e,EAMAC,iB,EAKAC,e,EA2BAC,W,EAKAC,O,EAKAC,kB,EAqCAC,e,EAQAC,K,EAaAC,O,EAaAC,e,EAoCAC,iB,EAIAC,W,EAeAC,+BAAT,YACL,yBAAcC,EAAP,2BA7VT,I,EAAA,O,oCAEO,SAAS1B,IAAwD,IAA9C2B,EAA8C,uDAAzC,MAAOC,EAAkC,uDAA5B,GAAIC,EAAwB,uDAAhB,GAAIC,EAAY,uDAAJ,GAC9DC,EAAMC,SAASA,cAAnB,GAcA,OAbAD,cACAA,cACArD,wBAA2B,SAAAuD,GACzB,IAAI1C,EAAJ,EACIN,EAAQ4C,EAAZ,GACWF,UAAPA,GAAJ,UAAsBA,EACpB,GACEI,oBAGFA,uBAGJ,EAGK,SAAS9B,EAAS0B,EAAIO,GAC3B,YAIIP,EAAJ,UACSQ,MAAMvC,UAAUwC,KAAKjE,KAAKwD,EAA1B,WAAwC,SAAAM,GAAA,OAAQA,IAAR,OACtCN,EAAJ,aACIA,EAAGA,UAAUA,MAAM,IAAIU,OAAO,UAAYH,EAAnD,aAMG,SAAShC,EAASyB,EAAIO,GAC3B,IAIIP,EAAJ,UACEO,oDAA4D,SAAAD,GAC1DA,GAAQN,EAAGA,UAAUA,IAArBM,MAEQhC,EAASA,EAAd,KACL0B,aAAgB,IAAhBA,IAIG,SAASxB,EAAYwB,EAAIO,GAC9B,IAIIP,EAAJ,UACEO,yBAAgC,SAAAD,GAC9BN,yBAEO1B,EAASA,EAAb,IACLiC,yBAAgC,SAAAD,GAC9B,IAAIK,EAAM,IAAID,OAAO,UAAYJ,EAAjC,WACAN,YAAeA,EAAGA,UAAUA,QAAQA,EAApCA,SAKC,SAASvB,EAAYuB,EAAIO,GAC9B,GAIAA,yBAAgC,SAAAD,GAC1BhC,EAASA,EAAb,GACEE,OAEAD,UAKC,SAASG,IAA4B,IAApBsB,EAAoB,uDAAfK,SAAUO,EAAK,aACtCR,SAGJ,IACEA,EAAMJ,EAAGA,cAATI,GACA,MAAOS,GACP,IAAID,EAAIA,QAAQA,OACdR,EAAMJ,EAAGA,eAAeY,EAAIA,MAA5BR,KAGJ,SAGK,SAASzB,EAASmC,EAAKC,EAAQC,GAMpC,IALA,IAAIC,EAAUC,OAAd,GACIC,EAAMJ,GAAV,EACIK,EAASC,KAAKA,KAAKF,EAAMF,EAA7B,QACIK,EAAJ,GACInE,EAAI+D,OAAR,GACA,KACEI,UAEF,OAAOA,EAAMA,KAAKA,IAAIA,UAAUA,EAAGH,EAAMhE,EAAlCmE,QAAPnE,EAGK,SAASyB,EAAO2C,GACrB,GAAIC,OAAOA,MAAX,GACE,SAEF,IAAIC,EAAO9C,EAAS0C,KAAKA,MAAME,EAApB5C,QAAX,GACI+C,EAAS/C,EAAS0C,KAAKA,OAAOE,EAAD,KAAQE,GAA5B9C,MAAb,GACIgD,EAAShD,EAAS0C,KAAKA,MAAOE,OAAOE,EAA5B9C,GAA0C+C,GAA1C/C,EAAb,GACA,OAAiB8C,OAATA,EAAgB,CAACC,EAAjBD,GAAmC,CAACA,EAAMC,EAA3C,SAAP,KAGK,SAAS7C,EAAMgC,GACpB,GAAIA,EAAJ,QAAe,CACb,IAAIe,EAAQf,EAAEA,QAAQA,IAAMA,EAAEA,eAA9B,GACAA,UAAYe,EAAMA,SAAlBf,EACAA,UAAYe,EAAMA,SAAlBf,EACAA,UAAYe,EAAMA,MAAQA,EAAMA,OAAhCf,WACAA,UAAYe,EAAMA,MAAQA,EAAMA,OAAhCf,UAEFA,UAAYA,EAAEA,QAAUA,EAAxBA,WAGK,SAAS/B,EAAO+C,GACrB,OAAO9E,OAAOA,UAAUA,SAASA,KAAKA,GAAKA,MAAMA,qBAAjD,GAGK,SAASgC,EAAS+C,EAAKC,GAC5B,GAAoBjD,WAAhBA,EAAOA,IAAX,WAAgCA,EAAOA,GAcrC,OAbA/B,wBAAyB,SAAAa,GACnBkB,aAAOiD,EAAPjD,KAAmCiD,EAAIA,aAA3C,KAMO,UAAIjD,EAAOiD,EAAPjD,IACTgD,KAAWhD,YAAOgD,EAAPhD,IAA+BgD,EAAIA,GAAKA,OAAOC,EAA/CjD,IAA2DiD,EAAtED,GAEAA,KAAWC,EAAXD,GARKA,EAAL,GAGE/C,EAAS+C,EAAT/C,GAAmBgD,EAAnBhD,IAFA+C,KAAWC,EAAXD,MAUN,EAGG,SAAS9C,EAAWgB,GAEzB,IAAIgC,GAAOhC,EAAGA,cAAgBwB,OAAOA,iBAAiBA,EAA5C,OAAV,gBACA,IAAKQ,GAAL,SAAYA,EACV,SAEF,IAAIC,EAAI5B,SAASA,cAAjB,KAEA,OADA4B,OAASD,EAAIA,QAAQA,cAArBC,IACOA,EAAP,KAGK,SAAShD,EAAQmB,GACtB,GAAIA,GAAJ,IAAWA,EAAIA,SAAgB,CAC7B,IAAI8B,EAAO7B,SAASA,cAAcD,EAAlC,SAOA,OANAI,6BAA6BJ,EAA7BI,YAA6C,YAC3C0B,eAAkBC,EAAlBD,KAA6BC,EAA7BD,UAEE9B,EAAJ,YACE8B,YAAiB9B,EAAjB8B,WAEF,EAEA,SAIG,SAAShD,EAAakD,EAASC,EAAWC,EAAcC,GACxDH,EAAQA,UAAb,KACEA,eAA+BI,YAAYF,EAAaA,KAAzBE,GAA/BJ,IAIG,SAASjD,EAAeiD,EAASC,GACtCI,cAAcL,EAAQA,UAAtBK,IACAL,oBAGK,SAAShD,EAAaxC,EAAM8F,EAAQC,EAAOC,GAChD,IAAIC,EAAMxE,EAAUA,MAAVA,sBAAV,QAEA,GADAwE,uCACIF,GAAJ,EAAqB,CACnB,IAAIG,SAAGC,SAAGC,SACV,sDAA6D,YAC3D,QAAIL,EAAMA,QAAQA,IAAdA,GAA4BC,EAAOA,QAAQA,IAA/C,KACEE,EAAIG,OAAON,EAAMA,MAAMA,EAAGA,EAAMA,QAArBA,IAAXG,QACAC,EAAIE,OAAOL,EAAOA,MAAMA,EAAGA,EAAOA,QAAvBA,IAAXG,QACAC,KACA,MAKJH,qBACAA,sBACAA,sCAEEA,eADF,UAAIjG,EACFiG,IAAuBE,EAAvBF,mBAAkDC,EAAlDD,IAEAA,oBAGJ,SAGK,SAASxD,IAEZ,OADSmC,OAAOA,UAAUA,UAA1B,cACU0B,QAAQA,mBAAlB,EAGG,SAAS5D,IAEd,OADSkC,OAAOA,UAAUA,UAA1B,cACU0B,QAAQA,cAAlB,EAGK,SAAS3D,IAEd,IAF2C,IAAb4D,EAAa,uDAAJ,GACnCC,EAAJ,GACS/G,EAAT,EAAgBA,EAAI8G,EAApB,WACE,MAAIA,EAAOA,GAAR,KAAkBA,EAAOA,GAAGA,MAA5B,GAAyCA,EAAOA,GAAGA,IAAnD,GAA8DA,EAAOA,GAAGA,IAAMA,EAAOA,GAAxF,OAGA,GAAGC,EAAIA,OAAP,EACEA,OAAS,CAACC,MAAOF,EAAOA,GAAf,MAAyBG,IAAKH,EAAOA,GAA9CC,WAEA,IAAK,IAAIG,EAAT,EAAgBA,EAAIH,EAApB,WAAqC,CACnC,IAAIC,EAAQF,EAAOA,GAAnB,MACIG,EAAMH,EAAOA,GAAjB,IACA,GAAGG,EAAMF,EAAIA,GAAb,MAAuB,CACrBA,aAAiB,CAACC,MAAD,EAAQC,IAAzBF,IACA,MACK,KAAGC,EAAQD,EAAIA,GAAf,KAKA,CACL,IAAII,EAAIJ,EAAIA,GAAZ,MACIvC,EAAIuC,EAAIA,GAAZ,IACAA,WAAe/B,KAAKA,IAAIA,EAAxB+B,GACAA,SAAa/B,KAAKA,IAAIA,EAAtB+B,GACA,MATA,GAAGG,EAAIH,EAAIA,OAAX,EAAuB,CACrBA,OAAS,CAACC,MAAD,EAAQC,IAAjBF,IACA,OAaV,IADA,IAAIK,EAAJ,EACSpH,EAAT,EAAgBA,EAAI+G,EAApB,WACEK,GAAaL,EAAIA,GAAJA,IAAaA,EAAIA,GAA9BK,MAEF,SAGK,SAASjE,EAAazB,EAAQc,EAAO6E,EAAIC,GAK9C5F,UAJA,aACEA,WACAA,cAKG,SAAS0B,EAAG1B,EAAQc,EAAO6E,EAAIC,GACpC,KACE5F,UACAyB,eACK,CAKLzB,QAJU,SAAN6F,EAAMC,GACRH,KACA3F,eAMC,SAAS2B,EAAK3B,EAAQc,EAAO6E,EAAIC,GACtC,KACE5F,YACAyB,eACK,CAKLzB,UAJU,SAAN6F,EAAMC,GACRH,KACA3F,eAMC,SAAS4B,EAAamE,GAE3B,IAF6D,IAAvBC,EAAuB,uDAAL,GACpDC,EAAJ,GACS3H,EAAT,EAAgBA,EAAIyH,EAApB,WACEE,OAAc,CAAEC,MAAOH,EAAUA,MAAMA,GAAKA,GAAMA,EAAIA,EAAUA,MAAlD,GAA4DR,IAAKQ,EAAUA,IAAzFE,KAEFA,QAAc,SAAU/B,EAAGuB,GACzB,IAAIU,EAAOjC,EAAEA,MAAQuB,EAArB,MACA,UAGSA,EAAEA,IAAMvB,EAAf,OAGJ,IAAIkC,EAAJ,GACA,KACE,IAAK,IAAI9H,EAAT,EAAgBA,EAAI2H,EAApB,WAA0C,CACxC,IAAII,EAAUD,EAAd,OACA,KAAa,CACX,IAAIE,EAAUF,EAAWC,EAAXD,GAAd,IACKH,EAASA,GAATA,MAAD,EAAJ,EACMA,EAASA,GAATA,IAAJ,IACEG,EAAWC,EAAXD,OAA8BH,EAASA,GAAvCG,KAGFA,OAAgBH,EAAhBG,SAGFA,OAAgBH,EAAhBG,SAIJA,IAEF,OAAO,IAAIG,EAAJ,QAAP,GAGK,SAAS1E,IACd,QAAS,qCAAyC4B,OAAP,eAA3C,IAA6FA,OAAOA,SAAd,eAGjF,SAAS3B,EAAS0E,EAAM3H,EAAMU,GACnC,IAAIkH,EAAQD,EAAZ,MACA,IACEC,OACA,MAAOC,GACPD,oBAI4BE,EAAnBA,iBAAmB,CAC9BC,IAD8B,qBAE9BC,OAF8B,SAG9BC,WAAY,cAOMC,EAAPA,KAAO,CAClBzG,UADkB,EACPC,SADO,EACGC,SADH,EACaC,YADb,EAC0BC,YAD1B,EACuCC,QADvC,EACgDC,SADhD,EAC0DC,OAD1D,EACkEC,MADlE,EACyEC,OADzE,EAElBC,SAFkB,EAERC,WAFQ,EAEIC,QAFJ,EAEauD,YAFb,EAEwCC,cAFxC,EAEuErD,aAFvE,EAEqFC,SAFrF,EAE+FC,KAF/F,EAEqGC,gBAFrG,EAGlBC,aAHkB,EAGJC,GAHI,EAGAC,KAHA,EAGMC,aAHN,EAGoBC,eAHpB,EAGoCC,a,cC9VxDzD,EAAOD,QAAU,SAAS4I,GACzB,IAAIC,EAAO,GAwCX,OArCAA,EAAKC,SAAW,WACf,OAAOC,KAAKC,KAAI,SAAU7E,GACzB,IAAI8E,EAsCP,SAAgC9E,EAAMyE,GACrC,IAAIK,EAAU9E,EAAK,IAAM,GACrB+E,EAAa/E,EAAK,GACtB,IAAK+E,EACJ,OAAOD,EAGR,GAAIL,GAAgC,mBAATO,KAAqB,CAC/C,IAAIC,GAYaC,EAZaH,EAiBxB,mEAHMC,KAAKG,SAASC,mBAAmBC,KAAKC,UAAUJ,MAGtC,OAhBlBK,EAAaR,EAAWS,QAAQX,KAAI,SAAUY,GACjD,MAAO,iBAAmBV,EAAWW,WAAaD,EAAS,SAG5D,MAAO,CAACX,GAASa,OAAOJ,GAAYI,OAAO,CAACV,IAAgBW,KAAK,MAOnE,IAAmBV,EAJlB,MAAO,CAACJ,GAASc,KAAK,MAtDNC,CAAuB7F,EAAMyE,GAC3C,OAAGzE,EAAK,GACA,UAAYA,EAAK,GAAK,IAAM8E,EAAU,IAEtCA,KAENc,KAAK,KAITlB,EAAK3I,EAAI,SAASE,EAAS6J,GACJ,iBAAZ7J,IACTA,EAAU,CAAC,CAAC,KAAMA,EAAS,MAE5B,IADA,IAAI8J,EAAyB,GACrBhK,EAAI,EAAGA,EAAI6I,KAAKnE,OAAQ1E,IAAK,CACpC,IAAIiK,EAAKpB,KAAK7I,GAAG,GACA,iBAAPiK,IACTD,EAAuBC,IAAM,GAE/B,IAAIjK,EAAI,EAAGA,EAAIE,EAAQwE,OAAQ1E,IAAK,CACnC,IAAIiE,EAAO/D,EAAQF,GAKG,iBAAZiE,EAAK,IAAoB+F,EAAuB/F,EAAK,MAC3D8F,IAAe9F,EAAK,GACtBA,EAAK,GAAK8F,EACDA,IACT9F,EAAK,GAAK,IAAMA,EAAK,GAAK,UAAY8F,EAAa,KAEpDpB,EAAKuB,KAAKjG,MAIN0E,I,gBCzCR,IAEwBtB,EACnB8C,EAHDC,EAAc,GAWdC,GAToBhD,EASF,WAMrB,OAAOlC,QAAUnB,UAAYA,SAASsG,MAAQnF,OAAOoF,MAZ9C,WAEN,YADoB,IAATJ,IAAsBA,EAAO9C,EAAGmD,MAAM3B,KAAM4B,YAChDN,IAaLO,EAAY,SAAUC,GACxB,OAAO3G,SAAS4G,cAAcD,IAG5BE,EAAa,SAAWxD,GAC3B,IAAI8C,EAAO,GAEX,OAAO,SAASQ,GAMD,GAAsB,mBAAXA,EACH,OAAOA,IAEf,QAA4B,IAAjBR,EAAKQ,GAAyB,CACtD,IAAIG,EAAcJ,EAAUvK,KAAK0I,KAAM8B,GAEvC,GAAIxF,OAAO4F,mBAAqBD,aAAuB3F,OAAO4F,kBAC7D,IAGCD,EAAcA,EAAYE,gBAAgBC,KACzC,MAAMzG,GACPsG,EAAc,KAGhBX,EAAKQ,GAAUG,EAEhB,OAAOX,EAAKQ,IA1BG,GA8BbO,EAAY,KACZC,EAAmB,EACnBC,EAAsB,GAEtBC,EAAU,EAAQ,IAqDtB,SAASC,EAAgBC,EAAQC,GAChC,IAAK,IAAIxL,EAAI,EAAGA,EAAIuL,EAAO7G,OAAQ1E,IAAK,CACvC,IAAIiE,EAAOsH,EAAOvL,GACdyL,EAAWrB,EAAYnG,EAAKgG,IAEhC,GAAGwB,EAAU,CACZA,EAASC,OAET,IAAI,IAAIxE,EAAI,EAAGA,EAAIuE,EAASE,MAAMjH,OAAQwC,IACzCuE,EAASE,MAAMzE,GAAGjD,EAAK0H,MAAMzE,IAG9B,KAAMA,EAAIjD,EAAK0H,MAAMjH,OAAQwC,IAC5BuE,EAASE,MAAMzB,KAAK0B,EAAS3H,EAAK0H,MAAMzE,GAAIsE,QAEvC,CACN,IAAIG,EAAQ,GAEZ,IAAQzE,EAAI,EAAGA,EAAIjD,EAAK0H,MAAMjH,OAAQwC,IACrCyE,EAAMzB,KAAK0B,EAAS3H,EAAK0H,MAAMzE,GAAIsE,IAGpCpB,EAAYnG,EAAKgG,IAAM,CAACA,GAAIhG,EAAKgG,GAAIyB,KAAM,EAAGC,MAAOA,KAKxD,SAASE,EAAclD,EAAM6C,GAI5B,IAHA,IAAID,EAAS,GACTO,EAAY,GAEP9L,EAAI,EAAGA,EAAI2I,EAAKjE,OAAQ1E,IAAK,CACrC,IAAIiE,EAAO0E,EAAK3I,GACZiK,EAAKuB,EAAQO,KAAO9H,EAAK,GAAKuH,EAAQO,KAAO9H,EAAK,GAIlD+H,EAAO,CAACC,IAHFhI,EAAK,GAGOiI,MAFVjI,EAAK,GAEmBkF,UADpBlF,EAAK,IAGjB6H,EAAU7B,GACT6B,EAAU7B,GAAI0B,MAAMzB,KAAK8B,GADXT,EAAOrB,KAAK4B,EAAU7B,GAAM,CAACA,GAAIA,EAAI0B,MAAO,CAACK,KAIjE,OAAOT,EAGR,SAASY,EAAoBX,EAASrD,GACrC,IAAIwC,EAASE,EAAWW,EAAQY,YAEhC,IAAKzB,EACJ,MAAM,IAAI0B,MAAM,+GAGjB,IAAIC,EAAgClB,EAAoBA,EAAoB1G,OAAS,GAErF,GAAyB,QAArB8G,EAAQe,SACND,EAEMA,EAA8BE,YACxC7B,EAAO8B,aAAatE,EAAOmE,EAA8BE,aAEzD7B,EAAO+B,YAAYvE,GAJnBwC,EAAO8B,aAAatE,EAAOwC,EAAOgC,YAMnCvB,EAAoBlB,KAAK/B,QACnB,GAAyB,WAArBqD,EAAQe,SAClB5B,EAAO+B,YAAYvE,OACb,IAAgC,iBAArBqD,EAAQe,WAAyBf,EAAQe,SAASK,OAInE,MAAM,IAAIP,MAAM,8LAHhB,IAAIG,EAAc3B,EAAWW,EAAQY,WAAa,IAAMZ,EAAQe,SAASK,QACzEjC,EAAO8B,aAAatE,EAAOqE,IAM7B,SAASK,EAAoB1E,GAC5B,GAAyB,OAArBA,EAAM2E,WAAqB,OAAO,EACtC3E,EAAM2E,WAAWC,YAAY5E,GAE7B,IAAI6E,EAAM5B,EAAoB6B,QAAQ9E,GACnC6E,GAAO,GACT5B,EAAoB8B,OAAOF,EAAK,GAIlC,SAASG,EAAoB3B,GAC5B,IAAIrD,EAAQnE,SAASoJ,cAAc,SAOnC,OALA5B,EAAQ3H,MAAMwJ,KAAO,WAErBC,EAASnF,EAAOqD,EAAQ3H,OACxBsI,EAAmBX,EAASrD,GAErBA,EAeR,SAASmF,EAAU3J,EAAIE,GACtBnD,OAAO6M,KAAK1J,GAAO2J,SAAQ,SAAUjM,GACpCoC,EAAG8J,aAAalM,EAAKsC,EAAMtC,OAI7B,SAASqK,EAAUpG,EAAKgG,GACvB,IAAIrD,EAAOuF,EAAQC,EAAQC,EAG3B,GAAIpC,EAAQqC,WAAarI,EAAIyG,IAAK,CAG9B,KAFA2B,EAASpC,EAAQqC,UAAUrI,EAAIyG,MAS9B,OAAO,aAJPzG,EAAIyG,IAAM2B,EAUf,GAAIpC,EAAQN,UAAW,CACtB,IAAI4C,EAAa3C,IAEjBhD,EAAQ+C,IAAcA,EAAYiC,EAAmB3B,IAErDkC,EAASK,EAAoBvM,KAAK,KAAM2G,EAAO2F,GAAY,GAC3DH,EAASI,EAAoBvM,KAAK,KAAM2G,EAAO2F,GAAY,QAG3DtI,EAAI2D,WACW,mBAAR6E,KACwB,mBAAxBA,IAAIC,iBACoB,mBAAxBD,IAAIE,iBACK,mBAATC,MACS,mBAATlF,MAEPd,EAtDF,SAA4BqD,GAC3B,IAAI4C,EAAOpK,SAASoJ,cAAc,QAQlC,OANA5B,EAAQ3H,MAAMwJ,KAAO,WACrB7B,EAAQ3H,MAAMwK,IAAM,aAEpBf,EAASc,EAAM5C,EAAQ3H,OACvBsI,EAAmBX,EAAS4C,GAErBA,EA6CEE,CAAkB9C,GAC1BkC,EAASa,EAAW/M,KAAK,KAAM2G,EAAOqD,GACtCmC,EAAS,WACRd,EAAmB1E,GAEhBA,EAAMqG,MAAMR,IAAIE,gBAAgB/F,EAAMqG,SAG1CrG,EAAQgF,EAAmB3B,GAC3BkC,EAASe,EAAWjN,KAAK,KAAM2G,GAC/BwF,EAAS,WACRd,EAAmB1E,KAMrB,OAFAuF,EAAOlI,GAEA,SAAsBkJ,GAC5B,GAAIA,EAAQ,CACX,GACCA,EAAOzC,MAAQzG,EAAIyG,KACnByC,EAAOxC,QAAU1G,EAAI0G,OACrBwC,EAAOvF,YAAc3D,EAAI2D,UAEzB,OAGDuE,EAAOlI,EAAMkJ,QAEbf,KArOH5N,EAAOD,QAAU,SAAS6I,EAAM6C,GAC/B,GAAqB,oBAAVmD,OAAyBA,OACX,iBAAb3K,SAAuB,MAAM,IAAIqI,MAAM,iEAGnDb,EAAUA,GAAW,IAEb3H,MAAiC,iBAAlB2H,EAAQ3H,MAAqB2H,EAAQ3H,MAAQ,GAI/D2H,EAAQN,WAA0C,kBAAtBM,EAAQN,YAAyBM,EAAQN,UAAYb,KAG1EmB,EAAQY,aAAYZ,EAAQY,WAAa,QAGhDZ,EAAQe,WAAUf,EAAQe,SAAW,UAE1C,IAAIhB,EAASM,EAAalD,EAAM6C,GAIhC,OAFAF,EAAeC,EAAQC,GAEhB,SAAiBoD,GAGvB,IAFA,IAAIC,EAAY,GAEP7O,EAAI,EAAGA,EAAIuL,EAAO7G,OAAQ1E,IAAK,CACvC,IAAIiE,EAAOsH,EAAOvL,IACdyL,EAAWrB,EAAYnG,EAAKgG,KAEvByB,OACTmD,EAAU3E,KAAKuB,GAGbmD,GAEFtD,EADgBO,EAAa+C,EAASpD,GACZA,GAG3B,IAASxL,EAAI,EAAGA,EAAI6O,EAAUnK,OAAQ1E,IAAK,CAC1C,IAAIyL,EAEJ,GAAqB,KAFjBA,EAAWoD,EAAU7O,IAEb0L,KAAY,CACvB,IAAK,IAAIxE,EAAI,EAAGA,EAAIuE,EAASE,MAAMjH,OAAQwC,IAAKuE,EAASE,MAAMzE,YAExDkD,EAAYqB,EAASxB,QA6LhC,IACK6E,EADDC,GACCD,EAAY,GAET,SAAUE,EAAOC,GAGvB,OAFAH,EAAUE,GAASC,EAEZH,EAAUI,OAAOC,SAAStF,KAAK,QAIxC,SAASkE,EAAqB5F,EAAO6G,EAAOrB,EAAQnI,GACnD,IAAIyG,EAAM0B,EAAS,GAAKnI,EAAIyG,IAE5B,GAAI9D,EAAMiH,WACTjH,EAAMiH,WAAWC,QAAUN,EAAYC,EAAO/C,OACxC,CACN,IAAIqD,EAAUtL,SAASuL,eAAetD,GAClCuD,EAAarH,EAAMqH,WAEnBA,EAAWR,IAAQ7G,EAAM4E,YAAYyC,EAAWR,IAEhDQ,EAAW9K,OACdyD,EAAMsE,aAAa6C,EAASE,EAAWR,IAEvC7G,EAAMuE,YAAY4C,IAKrB,SAASb,EAAYtG,EAAO3C,GAC3B,IAAIyG,EAAMzG,EAAIyG,IACVC,EAAQ1G,EAAI0G,MAMhB,GAJGA,GACF/D,EAAMsF,aAAa,QAASvB,GAG1B/D,EAAMiH,WACRjH,EAAMiH,WAAWC,QAAUpD,MACrB,CACN,KAAM9D,EAAMwE,YACXxE,EAAM4E,YAAY5E,EAAMwE,YAGzBxE,EAAMuE,YAAY1I,SAASuL,eAAetD,KAI5C,SAASsC,EAAYH,EAAM5C,EAAShG,GACnC,IAAIyG,EAAMzG,EAAIyG,IACV9C,EAAY3D,EAAI2D,UAQhBsG,OAAgDC,IAAlClE,EAAQmE,uBAAuCxG,GAE7DqC,EAAQmE,uBAAyBF,KACpCxD,EAAMZ,EAAQY,IAGX9C,IAEH8C,GAAO,uDAAyDhD,KAAKG,SAASC,mBAAmBC,KAAKC,UAAUJ,MAAgB,OAGjI,IAAIyG,EAAO,IAAIzB,KAAK,CAAClC,GAAM,CAAEoB,KAAM,aAE/BwC,EAASzB,EAAKI,KAElBJ,EAAKI,KAAOR,IAAIC,gBAAgB2B,GAE7BC,GAAQ7B,IAAIE,gBAAgB2B,K,6BCpXhC,IAAIC,EAAaC,EAAQ,GAARA,GAEjBhQ,EAAOD,QAAU,SAAUkQ,GAAO,OAAOA,IAAQF,GAAsB,OAARE,I,8ECJ/D,W,8FACA,IAAMC,EAAa,CACjBC,QAAS,CACPC,KADO,EAEPC,IAFO,SAGPC,OAAQ,mDAEVC,IAAK,CACHH,KADG,EAEHC,IAFG,QAGHC,OAAQ,gCAEVE,MAAO,CACLJ,KADK,EAELC,IAFK,OAGLC,OAAQ,4CAEV9N,OAAQ,CACN4N,KADM,EAENC,IAFM,OAGNC,OAAQ,qBAEVG,QAAS,CACPL,KADO,EAEPC,IAFO,OAGPC,OAAQ,mBAEVI,QAAS,CACPN,KADO,EAEPC,IAFO,OAGPC,OAAQ,WAEVK,QAAS,CACPP,KADO,EAEPC,IAFO,OAGPC,OAAQ,0BAEVM,MAAO,CACLR,KADK,EAELC,IAFK,OAGLC,OAAQ,oB,UAKV,4BACqF,IAA5EO,EAA4E,uDAArE,CAACC,KAAD,GAAWC,OAAX,GAAuBV,IAAvB,GAAgCW,QAAhC,IAA8CC,EAAuB,aAAZC,EAAY,wBACnF,IAAInQ,EAAJ,GACA,GAAI2J,UAAUA,OAAd,EACE3J,gBAAkBiQ,EADM,QAExBjQ,cACAA,SAAWkD,SAHa,OAIxBlD,WAJwB,EAKxBA,gBACAA,iBACAA,eACAA,eACAA,QACAA,UACAA,OAXwB,EAYxBA,MAAQmP,EAAWA,IAAZ,IAZiB,IAaxBnP,cACAA,mBACK,CACL,IAAMoQ,EAAMzG,UAAZ,GACA/J,oBAAqB,SAAAa,GACnBT,KAASoQ,EAATpQ,MAEFA,MAASoQ,EAAIA,MAAQjB,EAAWiB,EAAxB,OAAD,IAAPpQ,IAEF,OAAAA,G,mGCtEJ,IAAIqQ,EAAJ,GAEAzQ,OAAOA,eAAeA,EAASA,SAAU,CACvCG,IAAK,WAEH,OADQsQ,EAAR,GACSrQ,KAAOA,KAAhB,YAKJJ,OAAOA,eAAeA,EAASA,UAAW,CACxCG,IAAK,WACH,IAAIgG,EAAKuK,UAAUA,UAAnB,cACI9M,EAAM,CACR+M,GADQ,2BAERC,OAFQ,oBAGRC,OAHQ,mBAIRC,MAJQ,iBAKRC,OAAQ,6BAEV,MAAO,GAAG7H,OAAOlJ,OAAO6M,KAAKjJ,GAAK4K,QAAO,SAAA3N,GAAA,OAAO+C,EAAIA,GAAKA,KAAhB,OAAlC,IAAP,MAIJ5D,OAAOA,eAAeA,EAASA,KAAM,CACnCG,IAAK,WACH,IAAIgG,EAAKuK,UAAT,UACIM,EAAiB,oBAAoBC,KAAzC,GACIC,EAAY,gBAAgBD,KAAK9K,IAArC,EACIgL,EAAY,cAAcF,KAA9B,GACIG,EAAY,cAAcH,KAA9B,GACII,EAAW,oBAAoBJ,KAAK9K,IAAQgL,IAAc,aAAaF,KAA5D,IAA0EG,GAAa,aAAaH,KAAnH,GACIK,EAAU,aAAaL,KAAK9K,KAAhC,EAEA,MAAO,CACLkL,SADK,EAELC,QAFK,EAGLH,UAHK,EAILI,OALUD,GAAD,MAAX,GAMEJ,UALK,EAMLF,eANK,EAOLI,gB,UAKSX,E,kDCzCfpR,EAAOD,QAAU,SAAUmB,GAAS,OAAOA,U,2UCLtBgH,E,WACjB,e,4FAA0B,SACtBY,KAAA,e,wCAGGmG,GACL,OAAOnG,KAAKqJ,aAAalD,GAAzB,Q,0BAGGA,GACD,OAAOnG,KAAKqJ,aAAalD,GAAzB,M,6BAIA,OAAOnG,KAAKqJ,aAAZ,W,eAdajK,E,spBCArB,OACA,O,IACA,M,IACA,M,IACA,M,IACA,O,IACA,OACA,MAEA,W,0NAGMkK,E,YACJ,e,4FAAsB,4EA0BpB,GAxBA,UAAc,IAAAzP,UAAS,CACrB4D,MADqB,IAErBC,OAFqB,MAGrB6L,QAHqB,GAIrBC,UAJqB,GAKrBC,MAAOtO,SAASA,gBAAgBA,aAAaA,SAAWoN,UAAjDpN,UAAD,SALe,oBAMrBuO,SANqB,IAOrBC,OAPqB,GAQrBC,UARqB,EASrBC,aAAc,CAAC,eATjB,GAWA,UAAe3B,EAAf,QACA,iBACA,iBACA,aACA,sBACA,QAAY,IAAA1O,SAAA,aAAsB,SAAlC,IACA,YAAgB,IAAAL,WAAA,iBAA6B,CAC3C2Q,aAD2C,KAE3CC,cAAe,gBAFjB,qBAII,SAAJ,gBACE,kCAEG,EAAL,KAAgB,CACd,IAAIjP,EAAK,SAAT,GACA,IAAIA,GAAJ,IAAUA,EAAGA,SAaX,OAVA,eAAmB,IAAIkP,EAAJ,QAAW,CAC5BxF,KAD4B,MAE5BuD,KAAM,CACJC,KADI,GAEJC,OAFI,cAGJV,IAAK,+BAEP0C,IAAK,SAAYA,OAEnBC,8CACA,UAZA,SAqDJ,IArCA,IAAA7Q,UAAS,EAAT,0BAAyCiP,UAAzC,4CAA2F,qBAA3F,yBACA,mBAAsB,EAAtB,UACI,SAAJ,OACE,iCACA,0BACA,wBACA,4BAAoC,oBAA2B,SAA/D,UAEA,kCACA,sBACA,yBAII,SAAJ,QACE,iBAAW,SAAP,MACF,mBAAwB,SAAxB,MAEA,mBAA2B,SAA3B,YAGA,SAAJ,SACE,iBAAW,SAAP,OACF,oBAAyB,SAAzB,OAEA,oBAA4B,SAA5B,cAIF,SAAJ,uBACE,wCAA0C,SAAAlN,GACxCA,eAGA,SAAJ,WACEkO,UAAea,UAAfb,KAA4Ba,UAA5Bb,QAEE,uBAAJ,YAAgC,IAAA1P,QAAO,SAAP,cAA+C,CAC7E,IAAIwQ,EAAJ,EACAC,MAAMD,EAAKA,OAAXC,aAAgC,CAC9BC,OAD8B,MAE9BC,QAAS,CACPC,OAAQ,sBAHZH,MAKQ,SAAUI,GACZA,EAAJ,IACEA,eAAgB,SAAU9N,GACxB,IAAK,IAAL,OACMA,EAAIA,eAAR,KACEyN,YAAoBzN,EAApByN,IAGJA,sBAbNC,OAgBS,SAAUK,GACjBR,YAAY,WAAZA,WAGF,gBAEC,SAAH,gBACEZ,cAAmB,SAAnBA,kBAEF,cAAgB,YACd,IAAIqB,EAAS9S,OAAOA,KAAKA,GAAzB,GACI+S,EAAS,EAAKxP,EAAlB,IACA,GACE,aAIJ,0BAA0B,SAAAA,GACxB,OAAc,EAAK,KAAOA,EAAKA,OAAOA,GAAnB,cAAsCA,EAAKA,MAA9D,QAEF,IAAIyP,EAAJ,EAxHoB,OAyHpB,gBAAqB,WACnBA,gBACKA,EAAOA,OAAZ,sBACEA,iBAGJ,oCAAwC,EAAxC,eACA,WAAgB,WACdA,gBACKA,EAAOA,OAAZ,qBACEA,iBAGJA,cAAoB,EAApBA,UAEA,eAAoB,WAClB,GAAI7K,KAAKnF,MAAMiQ,YAAc9K,KAAKnF,MAAlC,YAAqD,CACnD,IAAIkQ,EAAgBF,EAAOA,KAA3B,wBACA,SAAIA,EAAOA,OAAOA,aACZE,EAAcA,MAAQA,EAAtBA,OAA6C/K,KAAKnF,MAAMiQ,WAAa9K,KAAKnF,MAA9E,YACEgQ,oBAA8B7K,KAAKnF,MAAMmQ,YAAchL,KAAKnF,MAA9B,WAAiDkQ,EAA/EF,WAEAA,mBAA6B7K,KAAKnF,MAAMiQ,WAAa9K,KAAKnF,MAA7B,YAAiDkQ,EAA9EF,YAEG,aAAIA,EAAOA,OAAOA,aACvBA,oBAA8B7K,KAAKnF,MAAMmQ,YAAchL,KAAKnF,MAA9B,WAAiDkQ,EAA/EF,WACK,cAAIA,EAAOA,OAAOA,eACvBA,mBAA6B7K,KAAKnF,MAAMiQ,WAAa9K,KAAKnF,MAA7B,YAAiDkQ,EAA9EF,eAINA,oBAA0B,EAA1BA,cAEAI,YAAW,WACT,gBACA,eAFFA,GAKI,SAAJ,YACM,IAAA7R,UAAS,EAAT,KAAJ,qBACE,UAGAyR,EAAOA,OAAX,SACEA,yBAA+B,EAA/BA,iBACAA,sBAA4B,EAA5BA,kBAOFA,kBAJA,aACEA,uCAA6CA,EAA7CA,eACAA,sBA3KkB,E,+WAgLP,WACV7K,KAAKnF,OAAR,IAAiBmF,KAAKnF,MAAMqQ,UAC1BlL,KAAA,kBAAuBA,KAAvB,MAAmCA,KAAKmL,KAAxC,YAEFF,YAAW,WACT,mBACG,SAAH,mBAAwB,QAAP,QACf,mBAHJA,K,8BAQ4B,WAAvBnO,EAAuB,uDAAjBkD,KAAKoL,OAAOtO,IACvB,GAAIkD,KAAJ,OACA,IAAI6K,EAAJ,KACK/N,GAAL,KAAYA,GAIZkD,KAAA,YAAmB,WACjB6K,gBAAsBA,EAAtBA,aACA,IAAIQ,EAAcR,EAAOA,MAAzB,YACoBQ,IAAhBA,GAAJ,GACEA,QAAiB,WACfR,8BADFQ,OAES,WACPR,kCACA,IAAAxR,UAASwR,EAAT,iCAIN,WAAI,IAAAjR,QAAA,GACE,gBAAAA,QAAA,IAA4BkD,EAAIA,QAAQA,UAAxC,GAAyDA,IAAQkD,KAAKnF,MAA1E,MAGEmF,KAAA,aAGFlD,WAAY,SAAA1B,GACV,qBAAuB,IAAAjC,WAAA,YAAwB,CAC7C0D,OAAQzB,EADqC,IAE7CoJ,SAASpJ,EAAKA,MAAdoJ,UAIFxE,KAAKoL,OAAT,WACM9C,aAAJ,QACEtI,KAAA,cAEAA,KAAA,aAAmBA,KAAnB,cAGAA,KAAKoL,OAAT,kBACEpL,KAAA,aAEFA,KAAA,eAvCEA,KAAA,mB,+BA2CFA,KAAA,aACAA,KAAA,WAAkB,WAEhB,IAAIqL,EAAcrL,KAAlB,YACoBqL,IAAhBA,GAAJ,GACEA,SAAkB,SAAAX,QAGtB1K,KAAA,kBAAwBA,KAAxB,c,gCAGwB,WAAjBsL,IAAiB,yDACpBT,EAAJ,KAEA,IAAK,IAAL,KADAtN,cAAcyC,KAAdzC,mBACcyC,KAAd,UACEzC,cAAcyC,KAAKuL,UAAnBhO,IACAyC,KAAA,kBAyCF,aAQE,GAPAA,KAAA,gBAKAA,KAAA,sBANsB,OAOtBA,KAAA,aACA,EAAc,CAEZA,KAAA,kBACA,IAAIwL,EAAgBxL,KAAKmL,KAAK9P,UAAUoQ,MAAxC,KACID,EAAcA,OAAlB,EACExL,KAAA,eAAsBwL,EAAcnF,QAAO,SAAA3O,GAAA,OAAQA,EAAKA,QAAQA,YAArB,KAArB,KAAtB,KAEAsI,KAAA,kBAIJ,IAAK,IAAL,iBAESA,KAAP,IAGF,mBA/DEA,KAAJ,YACEzC,cAAcyC,KAAdzC,YAEEyC,KAAJ,WACE0L,aAAa1L,KAAb0L,WAEF1L,KAAA,YAAgB,YACd,IAAI2K,EAAS9S,OAAOA,KAAKA,GAAzB,GACI+S,EAAS,EAAKxP,EAAlB,IACA,GACE,cAGA4E,KAAJ,gBACEA,KAAA,iBAAuBA,KAAvB,gBAEEA,KAAJ,YACEA,KAAA,iBAAuBA,KAAvB,YAEEA,KAAJ,YACEA,KAAA,WAAiBA,KAAjB,YAEEA,KAAJ,UACEA,KAAA,WAAiBA,KAAjB,UAEEA,KAAJ,cACEA,KAAA,iBAAuBA,KAAvB,cAEF,0BAA0B,SAAA5E,GACxB,QAAe,EAAK,KAAOA,EAAKA,OAAOA,GAAnB,cAAsCA,EAAKA,MAA/D,QAEG4E,KAAKoL,OAAN,aAAJ,OAAgCpL,KAAKoL,OAAOO,aAC1C,8BAA8B,SAAAvQ,GACxB,EAAJ,IACE,oCAA0C,SAAUO,GAAKkP,uBAoC/De,aAEA,yF,+BAIA,IACIC,EAAU7L,KAAd,QAQA,IANA,IAAA1G,aAAY0G,KAAZ,uBACGsI,iCAAH,IACEtI,KAAA,aACAA,KAAA,iBAGE6L,GAAWA,aAAf,SACEA,QACK,CACL7L,KAAA,cAEA,IAAIqL,EAAcrL,KAAlB,YACoBqL,IAAhBA,GAAJ,GACEA,SAAkB,SAAAX,U,2CAKFhT,EAAMoU,GAAO,WAC3BC,EAAiC,SAACrU,EAAMoU,GAC5C,aAEC9L,KAAKoL,OAAOY,4BAAf,mBAAoDhM,KAAKoL,OAAOY,2BAAnB,GAC3ChM,KAAA,0CAAAA,UAAA,OAEA+L,mB,oCAIW,WACVzC,EAAOA,QAAPA,QACDA,iCAEF,IAAIc,EAAJ,KACA,GAAId,EAAJ,QAAoB,CAClB,IAAIC,EAAUvJ,KAAKoL,OAAnB,QACAvT,YAAYyR,EAAZzR,kBAAoC,SAAAH,GAClC,IAAIuU,EAAa3C,EAAOA,QAAxB,GACI2C,GAAJ,mBAAyBA,EAGlB1C,EAAQhO,MAAK,SAAAH,GAAA,OAAQ1D,IAASA,GAAQA,IAAS,KAAlC0D,MAAlB,WAAoE1D,IAC9D,CAAC,KAAM,SAAU,UAAU6D,MAAK,SAAAiJ,GAAA,OAAQA,IAAR,KAC9B9M,IAAS4Q,UAAb,QACE2C,YAAW,WAEJb,EAAL,OACA6B,cAHFhB,GAOFgB,aAZJ/B,iD,gCAqBN,IAAIW,EAAJ,MACG,IAAAzR,UAAS4G,KAAT,KAAH,sBACE6K,uBAEF,IAAAvR,aAAY0G,KAAZ,0BACI6K,EAAJ,WACEa,aAAab,EAAba,WAEFb,YAAmBI,YAAW,WAC5BJ,iBACCA,EAAOA,OAFVA,Y,gCAOK7K,KAAKoL,OAAOc,sBAAyBlM,KAAtC,QAAuDA,KAAvD,OAAsEA,KAAKoL,OAA/E,iBACM,IAAAhS,UAAS4G,KAAT,KAAJ,sBACEA,KAAA,qBAEF,IAAA3G,UAAS2G,KAAT,6B,gCAKF,IAAA3G,UAAS2G,KAAT,4BACA,IAAA3G,UAAS2G,KAAT,0BACA,IAAA1G,aAAY0G,KAAZ,yB,iCAIA,IAAA3G,UAAS2G,KAAT,uBACIA,KAAJ,WACE0L,aAAa1L,KAAb0L,WAEF1L,KAAA,gB,iCAIA,IAAA3G,UAAS2G,KAAT,wBACA,IAAA1G,aAAY0G,KAAZ,2B,kCAIAA,KAAA,aAEAA,KAAA,c,iCAaU,WAEVA,KAAA,mBAAwB,WACtB,kBAEEA,KAAJ,WACE0L,aAAa1L,KAAb0L,YAEF,IAAApS,aAAY0G,KAAZ,6B,kCAIA,IAAIoK,EAAJ,KACIA,EAAJ,WACEsB,aAAatB,EAAbsB,WAEEtB,EAAJ,aACE7M,cAAc6M,EAAd7M,YACA6M,mBAEF,IAAI/N,EAAO+N,EAAX,YACAA,YAAiBa,YAAW,YAC1B,IAAA5R,UAAS+Q,EAAT,2BACAA,aAAkB9M,aAAY,WACxB8M,EAAKA,cAAT,KACE,IAAA9Q,aAAY8Q,EAAZ,2BACA7M,cAAc6M,EAAd7M,YACA6M,qBAJJA,OAFFA,O,kCAcIpK,KAAJ,SAGAA,KAAA,aACIA,KAAJ,WACE0L,aAAa1L,KAAb0L,YAEF,IAAApS,aAAY0G,KAAZ,6GACA,IAAA3G,UAAS2G,KAAT,6B,+BAGctI,EAAMuU,IACf,IAAL,oBAGK3C,EAAL,UACEA,cAEGA,EAAOA,QAAZ,KACEA,mB,iCAIexJ,GACjB,IAAI,IAAIqM,EAAR,EAAeA,EAAIrM,EAAnB,WACEwJ,UAAexJ,EAAKA,GAApBwJ,KAA6BxJ,EAAKA,GAAlCwJ,U,0BAIQ5R,EAAMuU,GACX3C,EAAL,UACEA,cAEFA,iB,6BAGaxJ,GACb,IAAK,IAAL,OACEwJ,MAAWxJ,EAAKA,GAAhBwJ,KAAyBxJ,EAAKA,GAA9BwJ,U,kCAIgB8C,EAAYlP,GAC9BkP,WAAmB,YACjBC,wB,GAlhBeC,WAuhBrBhD,EAAOA,KAAO1J,EAAd0J,KACAA,EAAOA,QAAUhB,EAAjBgB,QACAA,EAAOA,OAASU,EAAhBV,QACAA,EAAOA,kBAAoBlK,EAA3BkK,Q,UAEeA,E,mGCxiBf,W,UAoKe,CACb5R,KADa,SAEb4S,OApKW,WACX,IAAIO,EAAJ,KAAuBpB,EAAJ,CACnBA,GAAU,CACR8C,aADQ,0DAERC,cAFQ,iCAGRC,kBAHQ,qHAIRC,iBAJQ,sDAKRC,iBALQ,oDAMRC,cANQ,uCAORC,aAPQ,oFAQRC,gBARQ,sCASRC,kBATQ,kCAURC,kBAVQ,2CAWRC,kBAXQ,sCAYRC,iBAZQ,mCAaRC,4BAbQ,+BAcRC,OAdQ,SAeRC,MAfQ,qBAgBRC,UAhBQ,OAiBRC,WAjBQ,QAkBRC,cAlBQ,YAmBRC,cAnBQ,WAoBRC,YApBQ,SAqBRC,YArBQ,SAsBRC,gBAtBQ,aAuBRC,oBAvBQ,kBAwBRC,mBAxBQ,gBAyBRC,uBAzBQ,qBA0BRC,UA1BQ,UA2BRvO,IA3BQ,MA4BRwO,WA5BQ,aA6BRC,WA7BQ,aA8BRC,KA9BQ,OA+BRC,IA/BQ,MAgCRC,gBAhCQ,yBAiCRC,aAAc,WAEhB7E,QAAgB,CACd8C,aADc,mBAEdC,cAFc,eAGdC,kBAHc,oCAIdC,iBAJc,kBAKdC,iBALc,aAMdC,cANc,aAOdC,aAPc,0BAQdC,gBARc,YASdC,kBATc,aAUdC,kBAVc,YAWdC,kBAXc,WAYdC,iBAZc,WAadC,4BAbc,cAcdC,OAdc,KAedC,MAfc,cAgBdC,UAhBc,KAiBdC,WAjBc,KAkBdC,cAlBc,MAmBdC,cAnBc,KAoBdC,YApBc,KAqBdC,YArBc,OAsBdC,gBAtBc,OAuBdC,oBAvBc,OAwBdC,mBAxBc,SAyBdC,uBAzBc,SA0BdC,UA1Bc,KA2BdvO,IA3Bc,MA4BdwO,WA5Bc,QA6BdC,WA7Bc,KA8BdC,KA9Bc,OA+BdC,IA/Bc,KAgCdC,gBAhCc,YAiCdC,aAAc,QAEhB7E,QAAgB,CACd8C,aADc,mBAEdC,cAFc,eAGdC,kBAHc,oCAIdC,iBAJc,kBAKdC,iBALc,aAMdC,cANc,aAOdC,aAPc,0BAQdC,gBARc,YASdC,kBATc,aAUdC,kBAVc,YAWdC,kBAXc,WAYdC,iBAZc,WAadC,4BAbc,cAcdC,OAdc,KAedC,MAfc,cAgBdC,UAhBc,KAiBdC,WAjBc,KAkBdC,cAlBc,MAmBdC,cAnBc,KAoBdC,YApBc,KAqBdC,YArBc,OAsBdC,gBAtBc,OAuBdC,oBAvBc,OAwBdC,mBAxBc,SAyBdC,uBAzBc,SA0BdC,UA1Bc,KA2BdvO,IA3Bc,MA4BdwO,WA5Bc,QA6BdC,WA7Bc,KA8BdC,KA9Bc,OA+BdC,IA/Bc,KAgCdC,gBAhCc,YAiCdC,aAAc,QAEhB7E,GAAa,CACX8C,aADW,6BAEXC,cAFW,2BAGXC,kBAHW,uDAIXC,iBAJW,4BAKXC,iBALW,yBAMXC,cANW,uBAOXC,aAPW,kDAQXC,gBARW,wBASXC,kBATW,yBAUXC,kBAVW,2BAWXC,kBAXW,qBAYXC,iBAZW,mBAaXC,4BAbW,4BAcXC,OAdW,OAeXC,MAfW,sBAgBXC,UAhBW,MAiBXC,WAjBW,OAkBXC,cAlBW,QAmBXC,cAnBW,SAoBXC,YApBW,KAqBXC,YArBW,QAsBXC,gBAtBW,UAuBXC,oBAvBW,aAwBXC,mBAxBW,UAyBXC,uBAzBW,aA0BXC,UA1BW,KA2BXvO,IA3BW,UA4BXwO,WA5BW,UA6BXC,WA7BW,YA8BXC,KA9BW,MA+BXC,IA/BW,KAgCXC,gBAhCW,mBAiCXC,aAAc,SAGhBzW,+BAAsC,CACpCG,IAAK,WACH,OAAI6S,EAAJ,QACSpB,EAAKoB,EAAOA,OAAZpB,OAEAA,MAGX8E,IAAK,YACH,YAAI,IAAA3U,QAAA,IACF/B,wBAA2B,SAAAa,GACzB+Q,KAAYrR,EAAZqR,W,gWC5JV,OACA,O,IACA,M,uDAEM6C,E,WACJ,cAAsB,Y,4FAAA,SACpBtM,KAAA,aACAA,KAAA,YAAmB,CACjB4J,WAAYjH,EADK,cAEjB6L,SAAU7L,EAFO,SAGjB8L,YAAa9L,EAHI,YAIjB,qBAAsBA,EAJL,YAKjB,iBAAkBA,EALD,YAMjB,uBAAwBA,EAAQA,yBAA2BA,oBAC3D,6BAA8BA,EAAQA,+BAAiCA,0BACvE,uBAAwBA,EAAQA,yBAA2BA,qBAC3D+L,QAAS/L,UACT,iBAAkBA,UAClBgM,SAXiB,EAYjBC,UAAWjM,EAAQA,WAAa,SAE9BA,EAAJ,QACE3C,KAAA,2BAEE2C,EAAJ,OACE3C,KAAA,yBAEF,IAAI6O,EAAJ,GAuBA,GAtBA7O,KAAA,wBACI2C,EAAQA,iBAAmBrH,MAAMA,QAAQqH,EAA7C,mBACMA,EAAQA,gBAAgBA,OAASA,IAAMA,EAAQmM,gBAAgBvT,MAAK,SAAAwT,GAAW,OAAOA,EAAP,aACjFpM,gCACA3C,KAAA,yBAEF2C,wBAA6B,SAAAoM,GAC3B,GAAIA,EAAMA,KAAOA,EAAbA,OAA4BA,EAAhC,QAUE,OATAF,kBAA+BE,EAA/BF,SACIE,EAAJ,OACEF,YAAyBE,EAAzBF,WAEFA,aAA0BE,EAA1BF,WACIE,EAAJ,UACEF,eAA4BE,EAA5BF,cAEFA,IAAmBE,EAAMA,QAAUA,UAAnCF,SACA,KAGJ7O,KAAA,qCAEE2C,EAAJ,eAA4B,CAC1B,IAAIrD,EAAQnE,SAASA,cAArB,SACA6E,KAAA,iBACA7E,6BACA,IAAI6T,EAAJ,GACA,IAAK,IAAL,KAAkBrM,EAAlB,eACEqM,UAAyBrM,EAAQA,eAAjCqM,OAEF,IAAIC,EAAOtM,EAAQA,GAAKA,IAAIA,EAAjBA,GAAiCA,EAAQA,GAAGA,GAAKA,IAAIA,EAAQA,GAA5BA,OAA0CA,EAAQA,GAA9F,UACIrD,EAAMA,MAAV,WACEA,gDACSA,EAAMA,MAAV,SACLA,mCAGJ,IAAIxE,EAAK6H,EAAQA,GAAKA,EAAbA,IAA0B,IAAAnJ,SAAA,aAAsBmJ,EAAzD,IACMuM,EAAelP,KAAKmP,YAA1B,cACGD,GAAgBlP,KAAKoP,YAAYR,YAAcM,EAAlD,UACElP,KAAA,MAAa,IAAIkP,EAAapU,EAA9B,GAEAkF,KAAA,OAAa,IAAA7G,WAAU6G,KAAKoP,YAAf,YAAoDpP,KAApD,YAAb,IAEE2C,EAAJ,YACE9K,YAAY8K,EAAZ9K,qBAAwC,SAAAa,IACtC,IAAAiC,UAAS,EAAT,QAA0BgI,EAAQA,WAAlC,QAGC3C,KAAD,sBAAJ,KACkBA,KAAKnF,MAAMwU,qBAA3B,SACAC,wBAEE3M,EAAJ,WACE3C,KAAA,kBACI2C,EAAJ,gBACE3C,KAAA,iBAIJA,KAAA,GAAU,CAAC,OAAQ,UAAW,QAAS,QAAS,QAAS,UAAW,SAAU,WAAY,aAAhF,kIAEJ,YACJ,O,EAAA,G,EAAA,E,EAAA,KACe5E,EAAKA,OAAOA,GAD3B,cAC8CA,EAAKA,MADnD,G,6GAIF,mBAEA4E,KAAA,aACA,IAAIuP,EAAJ,MACInF,EAAJ,KAEMoF,EAA2B,SAAA9X,GAE/B,IAGA,SAAIA,EACF,cACK,YAAIA,GACT,IAAA4B,aAAY,EAAZ,0BACK,YAAI5B,EACT,kBAAsB,IAAI+X,MAA1B,UACK,YAAI/X,KACT,IAAA4B,aAAY,EAAZ,0BACI,EAAJ,iBACE,0BAGJ,UAAI5B,EAEF,cAEA,YAGE,iBAAJ,eACM,CAAC,QAAS,QAAS,cAAc0M,QAAQ1M,GAA7C,IACE,IAAAuC,gBAAA,qBACA,IAAAD,cAAA,oBAAqC,WACnC,GAAIgG,KAAKnF,OAASmF,KAAKnF,MAAvB,SAAuC,CAErC,IADA,IAAI6U,EAAJ,GACSvY,EAAJ,EAAW8E,EAAM+D,KAAKnF,MAAMiE,SAAjC,OAAkD3H,EAAlD,MACEuY,OAAe,CAAC1P,KAAKnF,MAAMiE,SAASC,MAArB,GAA+BiB,KAAKnF,MAAMiE,SAASV,IAAlEsR,KAEEA,EAAUA,aAAd,IACEH,EAAaG,EAAbH,WACAvP,KAAA,6BARN,MAaA,eAAItI,IACF,IAAAuC,gBAAA,uBAMF0V,EAAoB,SAAAjY,GACrBiL,EAAQA,sBAAX,mBAA0CA,EAAQA,qBAAf,GACjCA,wCAEA6M,aAIJxP,KAAA,YAAgB,SAAA5E,GACdgP,SAAcvS,OAAOA,KAAKA,GAA1BuS,GACA,IAAI1S,EAAOG,OAAOA,KAAKA,GAAvB,GACAuS,yBAA4BvS,OAAOA,KAAKA,GAAxCuS,GAAkDuF,EAAkBA,KAAKA,EAAzEvF,O,2CAMM1S,GACJsI,KAAKnF,OAASmF,KAAKnF,MAAvB,OACEmF,KAAA,OAAgB,IAAIgK,EAAJ,gBAAoBhK,KAApB,YAAsCA,KAAtC,SAAqDA,KAArD,aAAwEA,KAAxE,WAAyFA,KAAzF,WAA0GA,KAA1G,IACdA,KADc,MACF,CACVgI,KADU,IAEVT,IAAKvH,KAFK,MAGViI,OAAQ,eACPjI,KAAKnF,MAAM0E,MALA,KAKYS,KAAKnF,MALjC,U,gCAmBEmF,KAAJ,gBACEA,KAAA,sCAA2CA,KAA3C,kB,6BAIF,OAAOA,KAAKnF,MAAZ,S,8BAGAmF,KAAA,gB,kCAEWwE,GACX,OAAOxE,KAAKnF,MAAM+U,YAAlB,K,uCAEgB9Q,GAChB,IAAI+Q,EAAQ,CAAC,EAAb,GACIhV,EAAQmF,KAAZ,MACA,IAAclB,EAAWjE,EAAXiE,UACd,IAAIgR,EAAcjV,EAAlB,YACA,KACE,IAAK,IAAI1D,EAAJ,EAAW8E,EAAM6C,EAAtB,OAAuC3H,EAAvC,IACE0Y,KAAW/Q,EAASA,MAApB+Q,GACAA,KAAW/Q,EAASA,IAApB+Q,KACIA,EAAMA,IAAMA,GAAeC,GAAeD,EAA9C,KAHF,KAQF,OAAIA,EAAMA,GAAKA,GAAeA,GAAKC,EAAcD,EAAdC,IAAnC,EACE,EAEO,CAAC,EAAR,K,8BAGKnW,EAAO6E,IACd,IAAAjE,IAAA,sB,gCAESZ,EAAO6E,IAChB,IAAAhE,MAAA,sB,+BA9CA,OAAOwF,KAAP,W,aAEY+P,GACQ,kBAATA,IAAP,IAA6BA,GAAkB/P,KAAnD,YACEA,KAAA,aACAA,KAAA,oB,6BA2CUgQ,GACThQ,KAAH,QACEA,KAAA,mB,eAIF,QAAGA,KAAH,OACSA,KAAKnF,MAAZ,W,+BAMF,OAAGmF,KAAH,MACSA,KAAKnF,MAAZ,cAEA,I,gCAIF,OAAO,IAAAJ,cAAauF,KAAKnF,MAAzB,Y,kCAGA,QAAGmF,KAAH,OACSA,KAAKnF,MAAZ,a,aAKamV,GACZhQ,KAAH,QACEA,KAAA,uB,iCAIF,OAAGA,KAAH,MACSA,KAAKnF,MAAZ,gBAEA,I,kCAIF,OAAGmF,KAAH,OACSA,KAAKnF,MAAMiV,aAElB,G,aAGazT,GAAM,YACG,mBAAb4T,UAA4BA,SAAvC,OACI,IAAA7W,UAAS4G,KAAT,KAAJ,mBACEA,KAAA,gBAAqB,WAAQ,yBAC7BA,KAAA,UAEAA,KAAA,oBAEFA,KAAA,+B,mCAGA,QAAGA,KAAH,OACSA,KAAKnF,MAAZ,c,aAKcmV,GACbhQ,KAAH,QACEA,KAAA,wB,+BAIF,OAAGA,KAAKoL,OAAR,SACKpL,KAAH,MAAsB7D,KAAKA,IAAI6D,KAAKoL,OAAdjP,SAA+B6D,KAAKnF,MAA1D,UACYmF,KAAKoL,OAAZ,SAEFpL,KAAL,MACOA,KAAKnF,MAAZ,SADwB,O,4BAIxB,OAAGmF,KAAH,QACSA,KAAKnF,MAAMqV,QAAlB,K,4BAMF,IAAIxF,EAAM1K,KAAKnF,MAAf,MACA,MACE,YAEF,IAAIsV,EAAS,CAAC,CACZC,GADY,oBAEZC,GAAI,aACH,CACDD,GADC,oBAEDC,GAAI,YACH,CACDD,GADC,mBAEDC,GAAI,YACH,CACDD,GADC,8BAEDC,GAAI,aAEN,OAAOrQ,KAAKyJ,KAAOzJ,KAAKyJ,KAAK0G,EAAOzF,EAAIA,KAAXyF,GAAtB,IAAiDA,EAAOzF,EAAIA,KAAXyF,GAAxD,K,2BAGA,QAAGnQ,KAAH,OACSA,KAAKnF,MAAZ,M,aAKMmV,GACLhQ,KAAH,QACEA,KAAA,gB,4BAIF,QAAGA,KAAH,OACSA,KAAKnF,MAAZ,O,aAKOmV,GACNhQ,KAAH,QACEA,KAAA,iB,mCAIF,IAAImQ,EAAS,CAAC,CACZC,GADY,gBAEZC,GAAI,cACH,CACDD,GADC,eAEDC,GAAI,2BACH,CACDD,GADC,kBAEDC,GAAI,aACH,CACDD,GADC,oBAEDC,GAAI,eAEN,OAAOrQ,KAAKyJ,KAAOzJ,KAAKyJ,KAAK0G,EAAOnQ,KAAKnF,MAAZsV,cAAtB,IAA4DA,EAAOnQ,KAAKnF,MAAZsV,cAAnE,K,6BAQA,OAAO,IAAA/W,UAAS4G,KAAT,KAAP,oB,mCAGA,OAAGA,KAAH,MACSA,KAAKnF,MAAZ,aAEA,G,aAGcyV,GACbtQ,KAAH,QACEA,KAAA,wB,6BAIF,OAAGA,KAAH,MACSA,KAAKnF,MAAZ,YAEA,I,8BAIF,QAAGmF,KAAH,OACSA,KAAKnF,MAAZ,S,aAKSmV,GACRhQ,KAAH,QACEA,KAAA,mB,iCAIF,IAAImQ,EAAS,CAAC,CACZC,GADY,eAEZC,GAAI,oBACH,CACDD,GADC,gBAEDC,GAAI,iBACH,CACDD,GADC,oBAEDC,GAAI,qCACH,CACDD,GADC,mBAEDC,GAAI,mBACH,CACDD,GADC,mBAEDC,GAAI,eAEN,OAAOrQ,KAAKyJ,KAAOzJ,KAAKyJ,KAAK0G,EAAOnQ,KAAKnF,MAAZsV,YAAtB,IAA0DA,EAAOnQ,KAAKnF,MAA7E,c,+BAGA,QAAGmF,KAAH,OACSA,KAAKnF,MAAZ,W,8BAMF,QAAGmF,KAAH,OACSA,KAAKnF,MAAZ,U,0BAMF,OAAGmF,KAAH,MACSA,KAAKnF,MAAZ,SAEA,G,aAGKiC,IACF,IAAA1D,UAAS4G,KAAT,KAAL,mBACEA,KAAA,iBAAuBA,KAAKnF,MAA5B,MAEF,IAAAvB,aAAY0G,KAAZ,4DACAA,KAAA,cACAA,KAAA,cACAA,KAAA,YACAA,KAAA,oB,2BAEUuQ,GACV,IAAIC,GAAS,IAAAhX,SAAQwG,KAAR,KAAb,oBACA,IACEwQ,wC,6BAIF,OAAGxQ,KAAH,MACSA,KAAKnF,MAAZ,OAEA,G,aAGQ4V,GACPzQ,KAAH,QACEA,KAAA,kB,iCAIF,OAAO,IAAA5G,UAAS4G,KAAT,iCAAiD,IAAA5G,UAAS4G,KAAT,KAAxD,gC,6BAGA,SAAO,IAAAxG,SAAQwG,KAAR,mBAAiC,IAAA5G,WAAS,IAAAI,SAAQwG,KAAR,KAAT,YAAjC,wB,gCAGP,OAAO,IAAA5G,UAAS4G,KAAT,KAAP,2B,0BAGA,OAAO,IAAA5G,UAAS4G,KAAT,KAAP,yB,mCAGA,OAAO,IAAA5G,UAAS4G,KAAT,KAAP,kC,eAIWsM,E,kDC5ef,IASI/R,EAAIC,EAAMkW,EAAKC,EAAMC,EAASC,EAAa3N,EAT3CzL,EAAWyP,EAAQ,IACnB4J,EAAW5J,EAAQ,IAEnBvF,EAAQoP,SAAShY,UAAU4I,MAAOrK,EAAOyZ,SAAShY,UAAUzB,KAC5DmB,EAASZ,OAAOY,OAAQX,EAAiBD,OAAOC,eAChDkZ,EAAmBnZ,OAAOmZ,iBAC1BhY,EAAiBnB,OAAOkB,UAAUC,eAClCiT,EAAa,CAAEgF,cAAc,EAAMlZ,YAAY,EAAOmZ,UAAU,GAuBpE1W,EAAO,SAAUgK,EAAM2M,GACtB,IAAI3W,EAAM4P,EAUV,OARA0G,EAASK,GACT/G,EAAOpK,KACPzF,EAAGjD,KAAK0I,KAAMwE,EAAMhK,EAAO,WAC1BkW,EAAIpZ,KAAK8S,EAAM5F,EAAMhK,GACrBmH,EAAMrK,KAAK6Z,EAAUnR,KAAM4B,aAG5BpH,EAAK4W,mBAAqBD,EACnBnR,MAqER4Q,EAAU,CACTrW,GApGDA,EAAK,SAAUiK,EAAM2M,GACpB,IAAIxS,EAeJ,OAbAmS,EAASK,GAEJnY,EAAe1B,KAAK0I,KAAM,UAK9BrB,EAAOqB,KAAKqR,QAJZ1S,EAAOsN,EAAW7T,MAAQK,EAAO,MACjCX,EAAekI,KAAM,SAAUiM,GAC/BA,EAAW7T,MAAQ,MAIfuG,EAAK6F,GACqB,iBAAf7F,EAAK6F,GAAoB7F,EAAK6F,GAAMnD,KAAK8P,GACpDxS,EAAK6F,GAAQ,CAAC7F,EAAK6F,GAAO2M,GAFdxS,EAAK6F,GAAQ2M,EAIvBnR,MAqFPxF,KAAMA,EACNkW,IArEDA,EAAM,SAAUlM,EAAM2M,GACrB,IAAIxS,EAAM2S,EAAWC,EAAWpa,EAIhC,GAFA2Z,EAASK,IAEJnY,EAAe1B,KAAK0I,KAAM,UAAW,OAAOA,KAEjD,KADArB,EAAOqB,KAAKqR,QACF7M,GAAO,OAAOxE,KAGxB,GAAyB,iBAFzBsR,EAAY3S,EAAK6F,IAGhB,IAAKrN,EAAI,EAAIoa,EAAYD,EAAUna,KAAOA,EACpCoa,IAAcJ,GAChBI,EAAUH,qBAAuBD,IACV,IAArBG,EAAUzV,OAAc8C,EAAK6F,GAAQ8M,EAAUna,EAAI,EAAI,GACtDma,EAAUjN,OAAOlN,EAAG,SAItBma,IAAcH,GAChBG,EAAUF,qBAAuBD,UAC5BxS,EAAK6F,GAId,OAAOxE,MA6CP2Q,KA1CDA,EAAO,SAAUnM,GAChB,IAAIrN,EAAGC,EAAG+Z,EAAUG,EAAWE,EAE/B,GAAKxY,EAAe1B,KAAK0I,KAAM,YAC/BsR,EAAYtR,KAAKqR,OAAO7M,IAGxB,GAAyB,iBAAd8M,EAAwB,CAGlC,IAFAla,EAAIwK,UAAU/F,OACd2V,EAAO,IAAIlW,MAAMlE,EAAI,GAChBD,EAAI,EAAGA,EAAIC,IAAKD,EAAGqa,EAAKra,EAAI,GAAKyK,UAAUzK,GAGhD,IADAma,EAAYA,EAAUG,QACjBta,EAAI,EAAIga,EAAWG,EAAUna,KAAOA,EACxCwK,EAAMrK,KAAK6Z,EAAUnR,KAAMwR,QAG5B,OAAQ5P,UAAU/F,QAClB,KAAK,EACJvE,EAAKA,KAAKga,EAAWtR,MACrB,MACD,KAAK,EACJ1I,EAAKA,KAAKga,EAAWtR,KAAM4B,UAAU,IACrC,MACD,KAAK,EACJtK,EAAKA,KAAKga,EAAWtR,KAAM4B,UAAU,GAAIA,UAAU,IACnD,MACD,QAGC,IAFAxK,EAAIwK,UAAU/F,OACd2V,EAAO,IAAIlW,MAAMlE,EAAI,GAChBD,EAAI,EAAGA,EAAIC,IAAKD,EACpBqa,EAAKra,EAAI,GAAKyK,UAAUzK,GAEzBwK,EAAMrK,KAAKga,EAAWtR,KAAMwR,MAY/BX,EAAc,CACbtW,GAAI9C,EAAE8C,GACNC,KAAM/C,EAAE+C,GACRkW,IAAKjZ,EAAEiZ,GACPC,KAAMlZ,EAAEkZ,IAGTzN,EAAO8N,EAAiB,GAAIH,GAE5B3Z,EAAOD,QAAUA,EAAU,SAAUW,GACpC,OAAa,MAALA,EAAaa,EAAOyK,GAAQ8N,EAAiBnZ,OAAOD,GAAIiZ,IAEjE5Z,EAAQ2Z,QAAUA,G,6BCjIlB,IAAIc,EAAkBxK,EAAQ,GAC1ByK,EAAkBzK,EAAQ,IAC1B0K,EAAkB1K,EAAQ,IAC1B2K,EAAkB3K,EAAQ,IAC1B4K,EAAkB5K,EAAQ,KAErBhQ,EAAOD,QAAU,SAAU8a,EAAM3Z,GACzC,IAAIZ,EAAGmE,EAAGiC,EAAG+E,EAASqP,EAkBtB,OAjBIpQ,UAAU/F,OAAS,GAAqB,iBAATkW,GAClCpP,EAAUvK,EACVA,EAAQ2Z,EACRA,EAAO,MAEPpP,EAAUf,UAAU,GAEjB8P,EAAQK,IACXva,EAAIsa,EAASxa,KAAKya,EAAM,KACxBpW,EAAImW,EAASxa,KAAKya,EAAM,KACxBnU,EAAIkU,EAASxa,KAAKya,EAAM,OAExBva,EAAIoG,GAAI,EACRjC,GAAI,GAGLqW,EAAO,CAAE5Z,MAAOA,EAAO6Y,aAAczZ,EAAGO,WAAY4D,EAAGuV,SAAUtT,GACzD+E,EAAiBiP,EAAOC,EAAclP,GAAUqP,GAAtCA,IAGjBC,GAAK,SAAUF,EAAM/Z,EAAKuW,GAC3B,IAAI/W,EAAGmE,EAAGgH,EAASqP,EA6BnB,MA5BoB,iBAATD,GACVpP,EAAU4L,EACVA,EAAMvW,EACNA,EAAM+Z,EACNA,EAAO,MAEPpP,EAAUf,UAAU,GAEhB8P,EAAQ1Z,GAED2Z,EAAgB3Z,GAGhB0Z,EAAQnD,GAERoD,EAAgBpD,KAC3B5L,EAAU4L,EACVA,OAAM1H,GAHN0H,OAAM1H,GAHNlE,EAAU3K,EACVA,EAAMuW,OAAM1H,GAHZ7O,OAAM6O,EAUH6K,EAAQK,IACXva,EAAIsa,EAASxa,KAAKya,EAAM,KACxBpW,EAAImW,EAASxa,KAAKya,EAAM,OAExBva,GAAI,EACJmE,GAAI,GAGLqW,EAAO,CAAEha,IAAKA,EAAKuW,IAAKA,EAAK0C,aAAczZ,EAAGO,WAAY4D,GAClDgH,EAAiBiP,EAAOC,EAAclP,GAAUqP,GAAtCA,I,6BC1DnB,IAAIE,EAAahL,EAAQ,IAErBiL,EAAU,mBAAoBC,EAAmBrB,SAAShY,UAAUgH,SAExE7I,EAAOD,QAAU,SAAUmB,GAC1B,QAAK8Z,EAAW9Z,KACZ+Z,EAAQrJ,KAAKsJ,EAAiB9a,KAAKc,M,6BCNxC,IAAIia,EAAcnL,EAAQ,IAE1BhQ,EAAOD,QAAU,SAAUmB,GAC1B,GAAqB,mBAAVA,EAAsB,OAAO,EAExC,IAAKY,eAAe1B,KAAKc,EAAO,UAAW,OAAO,EAElD,IACC,GAA4B,iBAAjBA,EAAMyD,OAAqB,OAAO,EAC7C,GAA0B,mBAAfzD,EAAMd,KAAqB,OAAO,EAC7C,GAA2B,mBAAhBc,EAAMuJ,MAAsB,OAAO,EAC7C,MAAOpC,GACR,OAAO,EAGR,OAAQ8S,EAAYja,K,6BCfrB,IAAIka,EAAWpL,EAAQ,IAEvBhQ,EAAOD,QAAU,SAAUmB,GAC1B,IAAKka,EAASla,GAAQ,OAAO,EAC7B,IACC,QAAKA,EAAM+W,aACJ/W,EAAM+W,YAAYpW,YAAcX,EACtC,MAAOmH,GACR,OAAO,K,6BCRT,IAAImS,EAAUxK,EAAQ,GAGlBqL,EAAgB,CAAE,QAAU,EAAM,UAAY,EAAM,WAAa,GAErErb,EAAOD,QAAU,SAAUmB,GAC1B,QAAKsZ,EAAQtZ,IACNY,eAAe1B,KAAKib,SAAsBna,K,6BCPlDlB,EAAOD,QAAUiQ,EAAQ,GAARA,GAAgCrP,OAAO+Z,OAAS1K,EAAQ,K,6BCAzEhQ,EAAOD,QAAU,WAChB,IAA4B0F,EAAxBiV,EAAS/Z,OAAO+Z,OACpB,MAAsB,mBAAXA,IAEXA,EADAjV,EAAM,CAAE6V,IAAK,OACD,CAAEC,IAAK,OAAS,CAAEC,KAAM,SAC7B/V,EAAI6V,IAAM7V,EAAI8V,IAAM9V,EAAI+V,OAAS,gB,6BCLzC,IAAIhO,EAAQwC,EAAQ,IAChB9O,EAAQ8O,EAAQ,IAChByL,EAAQxW,KAAKwW,IAEjBzb,EAAOD,QAAU,SAAU2b,EAAM/V,GAChC,IAAI0C,EAAOpI,EAAsCya,EAAnC/V,EAAS8W,EAAI/Q,UAAU/F,OAAQ,GAS7C,IARA+W,EAAO/a,OAAOO,EAAMwa,IACpBhB,EAAS,SAAUlZ,GAClB,IACCka,EAAKla,GAAOmE,EAAInE,GACf,MAAOiD,GACH4D,IAAOA,EAAQ5D,KAGjBxE,EAAI,EAAGA,EAAI0E,IAAU1E,EAEzBuN,EADA7H,EAAM+E,UAAUzK,IACNwN,QAAQiN,GAEnB,QAAc/K,IAAVtH,EAAqB,MAAMA,EAC/B,OAAOqT,I,6BCnBR1b,EAAOD,QAAUiQ,EAAQ,GAARA,GAAgCrP,OAAO6M,KAAOwC,EAAQ,K,6BCAvEhQ,EAAOD,QAAU,WAChB,IAEC,OADAY,OAAO6M,KAAK,cACL,EACN,MAAO/I,GACR,OAAO,K,6BCLT,IAAI+V,EAAUxK,EAAQ,GAElBxC,EAAO7M,OAAO6M,KAElBxN,EAAOD,QAAU,SAAU4B,GAAU,OAAO6L,EAAKgN,EAAQ7Y,GAAUhB,OAAOgB,GAAUA,K,6BCHpF3B,EAAOD,QAAU,c,6BCDjB,IAAIya,EAAUxK,EAAQ,GAEtBhQ,EAAOD,QAAU,SAAUmB,GAC1B,IAAKsZ,EAAQtZ,GAAQ,MAAM,IAAIya,UAAU,gCACzC,OAAOza,I,6BCJR,IAAIsZ,EAAUxK,EAAQ,GAElBvC,EAAUrJ,MAAMvC,UAAU4L,QAASlM,EAASZ,OAAOY,OAEnDqa,EAAU,SAAUjW,EAAKF,GAC5B,IAAIjE,EACJ,IAAKA,KAAOmE,EAAKF,EAAIjE,GAAOmE,EAAInE,IAIjCxB,EAAOD,QAAU,SAAU8b,GAC1B,IAAIhO,EAAStM,EAAO,MAKpB,OAJAkM,EAAQrN,KAAKsK,WAAW,SAAUe,GAC5B+O,EAAQ/O,IACbmQ,EAAQjb,OAAO8K,GAAUoC,MAEnBA,I,6BChBR7N,EAAOD,QAAUiQ,EAAQ,GAARA,GAAgClL,OAAOjD,UAAU+Y,SAAW5K,EAAQ,K,6BCArF,IAAItL,EAAM,aAEV1E,EAAOD,QAAU,WAChB,MAA4B,mBAAjB2E,EAAIkW,YACgB,IAAxBlW,EAAIkW,SAAS,SAA2C,IAAxBlW,EAAIkW,SAAS,U,6BCJrD,IAAI1N,EAAUpI,OAAOjD,UAAUqL,QAE/BlN,EAAOD,QAAU,SAAU+b,GAC1B,OAAO5O,EAAQ9M,KAAK0I,KAAMgT,EAAcpR,UAAU,KAAO,I,6BCH1D1K,EAAOD,QAAU,SAAUuH,GAC1B,GAAkB,mBAAPA,EAAmB,MAAM,IAAIqU,UAAUrU,EAAK,sBACvD,OAAOA,I,6BCFR,IAAIpG,EAAQ8O,EAAQ,IAEhBlO,EAAiBnB,OAAOkB,UAAUC,eAEtC9B,EAAOD,QAAU,SAAUgc,GAC1B,IAAyBtU,EAArB6F,EAAO5C,UAAU,GAIrB,GAFAxJ,EAAM6a,QAEOpM,IAATrC,EAMAxL,EAAe1B,KAAK2b,EAAS,kBAAkBA,EAAQ5B,WAN3D,CAEC,KADA1S,EAAO3F,EAAe1B,KAAK2b,EAAS,WAAaA,EAAQ5B,QAC9C,OACP1S,EAAK6F,WAAc7F,EAAK6F,M,6BCZ9B,IAAI8N,EAAWpL,EAAQ,IAEvBhQ,EAAOD,QAAU,SAAUmB,GAC1B,IAAKka,EAASla,GAAQ,MAAM,IAAIya,UAAUza,EAAQ,qBAClD,OAAOA,I,6BCJR,IAAIsZ,EAAUxK,EAAQ,GAElBjH,EAAM,CAAEiT,UAAU,EAAMra,QAAQ,GAEpC3B,EAAOD,QAAU,SAAUmB,GAAS,OAAQsZ,EAAQtZ,IAAU6H,SAAW7H,KAAW,I,gBCLpF,IAAI8H,EAAU,EAAQ,IAEA,iBAAZA,IAAsBA,EAAU,CAAC,CAAChJ,EAAOC,EAAI+I,EAAS,MAOhE,IAAIyC,EAAU,CAAC,KAAM,EAErB,eAPIqC,EAQJ,gBAAqB6B,GAER,EAAQ,EAAR,CAAgE3G,EAASyC,GAEnFzC,EAAQiT,SAAQjc,EAAOD,QAAUiJ,EAAQiT,S,iBCjBlCjc,EAAOD,QAAU,EAAQ,EAAR,EAA4D,IAK/EoK,KAAK,CAACnK,EAAOC,EAAI,0tFAA2tF,M,cCSpvFD,EAAOD,QAAU,SAAUmM,GAEzB,IAAIgQ,EAA6B,oBAAX9W,QAA0BA,OAAO8W,SAEvD,IAAKA,EACH,MAAM,IAAI5P,MAAM,oCAInB,IAAKJ,GAAsB,iBAARA,EACjB,OAAOA,EAGR,IAAIiQ,EAAUD,EAASE,SAAW,KAAOF,EAASG,KAC9CC,EAAaH,EAAUD,EAASK,SAASC,QAAQ,YAAa,KA2DnE,OA/BetQ,EAAIsQ,QAAQ,uDAAuD,SAASC,EAAWC,GAErG,IAWIC,EAXAC,EAAkBF,EACpBG,OACAL,QAAQ,YAAY,SAAS9b,EAAGoc,GAAK,OAAOA,KAC5CN,QAAQ,YAAY,SAAS9b,EAAGoc,GAAK,OAAOA,KAG9C,MAAI,oDAAoDlL,KAAKgL,GACpDH,GAQRE,EAFqC,IAAlCC,EAAgB1P,QAAQ,MAElB0P,EACkC,IAAjCA,EAAgB1P,QAAQ,KAEzBiP,EAAUS,EAGVN,EAAaM,EAAgBJ,QAAQ,QAAS,IAIjD,OAASjT,KAAKC,UAAUmT,GAAU,U,8ECnF3C,W,UAgGe,CACbnc,KADa,SAEb4S,OAhGW,WACX,IAAIO,EAAJ,KACIM,EAAON,EAAX,KACIoJ,EAAJ,EAAiBC,SACbC,EAAc,CAChBC,MADgB,GAEhB3X,OAAQ,IAiEV,cACEoO,qCAA0C,SAAUlP,GAClDkP,sBAA4BA,EAA5BA,UAEFA,uCAA4C,WAC1CA,oBAEFA,sCAA2C,WACzCA,oBAEEA,EAAOA,OAAX,UACEA,UAzEJA,oBAA2B,SAAUlP,EAAG0Y,GAClCrU,KAAKoL,OAAT,0BACEzP,mBAEEqE,KAAKoL,OAAT,2BACEzP,oBAEF,IAAIkP,EAAJ,KAMA,IALI,IAAAzR,UAAA,EAAJ,qBACEyR,gBAEAA,gBAEGA,EAAOA,OAAR,kBAAmCA,EAAvC,YAA2D,OACzD,WACEqJ,EAAUjJ,YAAW,WACnB,IAAI,IAAA7R,UAASyR,EAAT,KAAJ,oBACE,SACK,IAAKA,EAAL,MACL,GAAIA,EAAJ,OAAmB,CACjB,IAAIQ,EAAcR,EAAlB,YACoBQ,IAAhBA,GAAJ,GACEA,SAAkB,SAAAX,YAGpBG,UAGJoJ,MAbFC,MAgBGrJ,EAAOA,OAAZ,kBACEoJ,IACA,GACEvI,gBAEF,IAAIuI,EACCpJ,EAAOA,OAAV,oBACEsJ,QAAoB,IAApBA,KAEAG,IAEG,IAAIL,GACNpJ,EAAOA,OAAV,qBACEsJ,SAAqB,IAArBA,KACIhY,KAAKA,IAAIgY,EAAYA,MAAQA,EAA7BhY,QAAJ,IAEEmY,KAEAH,QAAoB,IAApBA,KACAF,MAMJA,OAoBRpJ,kBAMAA,kBAJA,aACEA,iBACAA,wB,mGC3FJ,W,UAuHe,CACbnT,KADa,KAEb4S,OAvHO,WACP,IAAIO,EAAJ,KACA,GAAIA,EAAD,UAAqBA,EAAxB,OACA,IAAIjB,EAAWiB,EAAf,SAAoCM,EAAON,EAAX,KAC5BoJ,EAAJ,EAAiBC,SAEjBrJ,iBAAwB,SAAUlP,EAAG0Y,GAC/BrU,KAAKoL,OAAT,0BACEzP,mBAEEqE,KAAKoL,OAAT,2BACEzP,oBAEF,IAAIkP,EAAJ,KACKA,EAAOA,OAAZ,kBACEoJ,IACA,GACEvI,gBAEF,IAAIuI,EACFC,EAAUjJ,YAAW,WACnB,IAAI,IAAA7R,UAASyR,EAAT,KAAJ,oBACE,SACK,IAAKA,EAAL,MACL,GAAIA,EAAJ,OAAmB,CACjB,IAAIQ,EAAcR,EAAlB,YACoBQ,IAAhBA,GAAJ,GACEA,SAAkB,SAAAX,YAGpBG,UAGJoJ,MAbFC,KAgBAD,MAINpJ,kCAAuC,SAAUlP,GAAKkP,mBAAyBA,EAAzBA,UAAtDA,GAEAA,oBAA2B,SAAUlP,EAAG0Y,GAClCrU,KAAKoL,OAAT,0BACEzP,mBAEEqE,KAAKoL,OAAT,2BACEzP,oBAGF,IADA,KACYkP,OAAZ,mBAAuC,CACrC,IAAI0J,EAAa3K,EAASA,cAA1B,wBACA,KAAgB,CACd,IAAIqK,SACA9Y,SAAJ,aACE8Y,EAAM9Y,SAASA,YAAf8Y,UACAA,yBAEAA,EAAM,IAAIO,MAAVP,SAEFM,sBAIN1J,qCAA0C,SAAUlP,GAAKkP,sBAA4BA,EAA5BA,UAAzDA,GAMAM,mCASAA,mCAOAvB,iCALA,YACMiB,EAAJ,WACEa,aAAab,EAAba,cAUJ9B,iCALA,YACMiB,EAAOA,OAAX,mBACEA,qBASJjB,4BAJA,YACEjO,mBACAA,uBASFkP,kBAQAA,kBANA,aACEM,sCACAA,sCACAN,iBACAA,sBA9CF,aACEa,aAAab,EAAba,kBACAb,kBAIF,aACMA,EAAOA,OAAX,kBACEA,mBAA0BI,YAAW,WACnCJ,mBACCA,EAAOA,OAAOA,iBAFjBA,IA2BJ,cACMA,EAAOA,OAAX,UACEA,a,mGCzGN,W,UAwDe,CACbnT,KADa,QAEb4S,OAxDU,WACV,IAAIO,EAAJ,KACIM,EAAON,EAAX,KAEA,aACEA,mBACA,IAAIQ,EAAcR,EAAlB,YACoBQ,IAAhBA,GAAJ,GACEA,SAAkB,SAAAX,OAItB,cACM,IAAAtR,UAAA,EAAJ,sBACE,IAAAE,aAAA,EADsC,qBAEtC,IAAAD,UAAA,uBAEA,mBAAU8R,EAAP,SACGN,EAAOA,OAAPA,IAAgBA,EAAOA,MAAMA,WAAmBM,EAAKA,SAASN,EAA/D,QAAkFA,EAAOA,OAAPA,IAAgBA,EAAOA,MAAMA,eAAlH,IAAoIA,EAAOA,MAAMA,aAC/IA,oBACAA,WAEA4J,IAGE5J,EAAOA,OAAPA,IAAgBA,EAAOA,MAAMA,WAAmBM,EAAKA,cAAcnL,KAAKoP,YAAzE,YAAqGvE,EAAOA,OAAPA,IAAgBA,EAAOA,MAAMA,eAArI,IAAuJA,EAAOA,MAAMA,aAClKA,oBACAA,WAEA4J,KAIA5J,EAAJ,UACE,IAAAvR,aAAA,yCACA2R,YAAW,WACT,IAAII,EAAcR,EAAlB,YACoBQ,IAAhBA,GAAJ,GACEA,SAAkB,SAAAX,SAHtBO,KASNJ,wBAOAA,kBALA,aACEA,yBACAA,mBACAA,wB,mGCnDJ,W,IACA,O,IACA,O,mDACA,M,UAuDe,CACbnT,KADa,UAEb4S,OAvDY,WACZ,IAAIO,EAAJ,KACIM,EAAON,EAAX,KACIlN,GAAM,IAAAxE,WAAA,8CAAyDub,EAAzD,0FAC6DC,EAD7D,oBAAV,kBAEA,eACE,IAAAtb,UAASwR,EAAT,8BACIA,EAAJ,SACEA,qBAA2B,IAA3BA,eAA0C,IAA1CA,UAAoD,IAAAxR,UAASwR,EAAT,KAApDA,qBACIA,EAAOA,OAAOA,MAAlB,OAA0BA,EAAOA,OAAOA,MACtC,IAAAxR,UAASwR,EAAT,4BACK,OAAIA,EAAOA,OAAOA,OACvB,IAAAxR,UAASwR,EAAT,4BAEEA,EAAOA,OAAX,mBACEA,wCAA6C,SAAAlP,GAC3CA,mBACAA,wBAMLkP,EAAOA,QAAUA,EAAOA,OAA3B,eACE,IAAAxR,UAAA,yBAGEwR,EAAJ,SACEM,iBACAyJ,MAEA/J,gBAAqB,WACnBM,iBACAyJ,QAIJ/J,iCAAsC,YACpC,IAAAvR,aAAYuR,EAAZ,2BACA,IAAAxR,UAASwR,EAAT,4BAGFA,kBAAuB,YACrB,IAAAvR,aAAYuR,EAAZ,6BAGFlN,UAAc,SAAAhC,GACZA,mBACAA,oBACAkP,2C,kDCtDJ,OAAe,yO,6BCAf,OAAe,qO,gBCCf,IAAI3K,EAAU,EAAQ,IAEA,iBAAZA,IAAsBA,EAAU,CAAC,CAAChJ,EAAOC,EAAI+I,EAAS,MAOhE,IAAIyC,EAAU,CAAC,KAAM,EAErB,eAPIqC,EAQJ,gBAAqB6B,GAER,EAAQ,EAAR,CAAmE3G,EAASyC,GAEtFzC,EAAQiT,SAAQjc,EAAOD,QAAUiJ,EAAQiT,S,iBCjBlCjc,EAAOD,QAAU,EAAQ,EAAR,EAA+D,IAKlFoK,KAAK,CAACnK,EAAOC,EAAI,o9CAAq9C,M,kPCL9+C,I,IAAA,M,IAEA,O,IACA,O,IACA,O,IACA,O,mDAEiB,CAAC0d,EAAD,QAASC,EAAT,QAAaC,EAAb,QAAoBC,EAArC,SACW5I,SAAQ,YACf9C,kBAAe+C,EAAf/C,KAA6B+C,EAA7B/C,W,UAGWA,U","file":"core_player.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 175);\n","import XgplayerTimeRange from './xgplayerTimeRange'\n\nexport function createDom(el = 'div', tpl = '', attrs = {}, cname = '') {\n let dom = document.createElement(el)\n dom.className = cname\n dom.innerHTML = tpl\n Object.keys(attrs).forEach(item => {\n let key = item\n let value = attrs[item]\n if (el === 'video' || el === 'audio') {\n if (value) {\n dom.setAttribute(key, value)\n }\n } else {\n dom.setAttribute(key, value)\n }\n })\n return dom\n}\n\nexport function hasClass(el, className) {\n if (!el) {\n return false;\n }\n\n if (el.classList) {\n return Array.prototype.some.call(el.classList, item => item === className)\n } else if (el.className) {\n return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n } else {\n return false;\n }\n}\n\nexport function addClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.add(item)\n })\n } else if (!hasClass(el, className)) {\n el.className += ' ' + className\n }\n}\n\nexport function removeClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.split(/\\s+/g).forEach(item => {\n el.classList.remove(item)\n })\n } else if (hasClass(el, className)) {\n className.split(/\\s+/g).forEach(item => {\n let reg = new RegExp('(\\\\s|^)' + item + '(\\\\s|$)')\n el.className = el.className.replace(reg, ' ')\n })\n }\n}\n\nexport function toggleClass(el, className) {\n if (!el) {\n return;\n }\n\n className.split(/\\s+/g).forEach(item => {\n if (hasClass(el, item)) {\n removeClass(el, item)\n } else {\n addClass(el, item)\n }\n })\n}\n\nexport function findDom(el = document, sel) {\n let dom\n // fix querySelector IDs that start with a digit\n // https://stackoverflow.com/questions/37270787/uncaught-syntaxerror-failed-to-execute-queryselector-on-document\n try {\n dom = el.querySelector(sel)\n } catch (e) {\n if (sel.indexOf('#') === 0) {\n dom = el.getElementById(sel.slice(1))\n }\n }\n return dom\n}\n\nexport function padStart(str, length, pad) {\n let charstr = String(pad)\n let len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n let chars = []\n let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\nexport function format(time) {\n if (window.isNaN(time)) {\n return ''\n }\n let hour = padStart(Math.floor(time / 3600), 2, 0)\n let minute = padStart(Math.floor((time - hour * 3600) / 60), 2, 0)\n let second = padStart(Math.floor((time - hour * 3600 - minute * 60)), 2, 0)\n return (hour === '00' ? [minute, second] : [hour, minute, second]).join(':')\n}\n\nexport function event(e) {\n if (e.touches) {\n let touch = e.touches[0] || e.changedTouches[0]\n e.clientX = touch.clientX || 0\n e.clientY = touch.clientY || 0\n e.offsetX = touch.pageX - touch.target.offsetLeft\n e.offsetY = touch.pageY - touch.target.offsetTop\n }\n e._target = e.target || e.srcElement\n}\n\nexport function typeOf(obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0]\n}\n\nexport function deepCopy(dst, src) {\n if (typeOf(src) === 'Object' && typeOf(dst) === 'Object') {\n Object.keys(src).forEach(key => {\n if (typeOf(src[key]) === 'Object' && !(src[key] instanceof Node)) {\n if (!dst[key]) {\n dst[key] = src[key]\n } else {\n deepCopy(dst[key], src[key])\n }\n } else if (typeOf(src[key]) === 'Array') {\n dst[key] = typeOf(dst[key]) === 'Array' ? dst[key].concat(src[key]) : src[key]\n } else {\n dst[key] = src[key]\n }\n })\n return dst\n }\n}\nexport function getBgImage(el) {\n // fix: return current page url when url is none\n let url = (el.currentStyle || window.getComputedStyle(el, null)).backgroundImage\n if (!url || url === 'none') {\n return ''\n }\n let a = document.createElement('a')\n a.href = url.replace(/url\\(\"|\"\\)/g, '')\n return a.href\n}\n\nexport function copyDom(dom) {\n if (dom && dom.nodeType === 1) {\n let back = document.createElement(dom.tagName)\n Array.prototype.forEach.call(dom.attributes, (node) => {\n back.setAttribute(node.name, node.value)\n })\n if (dom.innerHTML) {\n back.innerHTML = dom.innerHTML\n }\n return back\n } else {\n return ''\n }\n}\n\nexport function _setInterval(context, eventName, intervalFunc, frequency) {\n if (!context._interval[eventName]) {\n context._interval[eventName] = setInterval(intervalFunc.bind(context), frequency)\n }\n}\n\nexport function _clearInterval(context, eventName) {\n clearInterval(context._interval[eventName])\n context._interval[eventName] = null\n}\n\nexport function createImgBtn(name, imgUrl, width, height) {\n let btn = createDom(`xg-${name}`, '', {}, `xgplayer-${name}-img`)\n btn.style.backgroundImage = `url(\"${imgUrl}\")`\n if (width && height) {\n let w, h, unit\n ['px', 'rem', 'em', 'pt', 'dp', 'vw', 'vh', 'vm', '%'].every((item) => {\n if (width.indexOf(item) > -1 && height.indexOf(item) > -1) {\n w = Number(width.slice(0, width.indexOf(item)).trim())\n h = Number(height.slice(0, height.indexOf(item)).trim())\n unit = item\n return false\n } else {\n return true\n }\n })\n btn.style.width = `${w}${unit}`\n btn.style.height = `${h}${unit}`\n btn.style.backgroundSize = `${w}${unit} ${h}${unit}`\n if (name === 'start') {\n btn.style.margin = `-${h / 2}${unit} auto auto -${w / 2}${unit}`\n } else {\n btn.style.margin = 'auto 5px auto 5px'\n }\n }\n return btn\n}\n\nexport function isWeiXin() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('micromessenger') > -1\n}\n\nexport function isUc() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('ucbrowser') > -1\n}\n\nexport function computeWatchDur(played = []) {\n let arr = []\n for (let i = 0; i < played.length; i++) {\n if(!played[i].end || played[i].begin < 0 || played[i].end < 0 || played[i].end < played[i].begin) {\n continue\n }\n if(arr.length < 1) {\n arr.push({begin: played[i].begin, end: played[i].end})\n } else {\n for (let j = 0; j < arr.length; j++) {\n let begin = played[i].begin\n let end = played[i].end\n if(end < arr[j].begin) {\n arr.splice(j, 0, {begin, end})\n break\n } else if(begin > arr[j].end) {\n if(j > arr.length - 2) {\n arr.push({begin, end})\n break\n }\n } else {\n let b = arr[j].begin\n let e = arr[j].end\n arr[j].begin = Math.min(begin, b)\n arr[j].end = Math.max(end, e)\n break\n }\n }\n }\n }\n let watch_dur = 0\n for (let i = 0; i < arr.length; i++) {\n watch_dur += arr[i].end - arr[i].begin\n }\n return watch_dur\n}\n\nexport function offInDestroy(object, event, fn, offEvent) {\n function onDestroy () {\n object.off(event, fn)\n object.off(offEvent, onDestroy)\n }\n object.once(offEvent, onDestroy)\n}\n\nexport function on(object, event, fn, offEvent) {\n if (offEvent) {\n object.on(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.on(event, _fn)\n }\n}\n\nexport function once(object, event, fn, offEvent) {\n if (offEvent) {\n object.once(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.once(event, _fn)\n }\n}\n\nexport function getBuffered2(vbuffered, maxHoleDuration = 0.5) { //ref: hls.js\n let buffered = []\n for (let i = 0; i < vbuffered.length; i++) {\n buffered.push({ start: vbuffered.start(i) < 0.5 ? 0 : vbuffered.start(i), end: vbuffered.end(i) });\n }\n buffered.sort(function (a, b) {\n let diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n let buffered_2 = []\n if (maxHoleDuration) {\n for (let i = 0; i < buffered.length; i++) {\n let buf2len = buffered_2.length\n if (buf2len) {\n let buf2end = buffered_2[buf2len - 1].end\n if ((buffered[i].start - buf2end) < maxHoleDuration) {\n if (buffered[i].end > buf2end) {\n buffered_2[buf2len - 1].end = buffered[i].end\n }\n } else {\n buffered_2.push(buffered[i])\n }\n } else {\n buffered_2.push(buffered[i])\n }\n }\n } else {\n buffered_2 = buffered\n }\n return new XgplayerTimeRange(buffered_2)\n}\n\nexport function checkIsBrowser() {\n return !(typeof(window) === 'undefined' || typeof(window.document) === 'undefined' || typeof(window.document.createElement) === 'undefined')\n}\n\nexport function setStyle(elem, name, value) {\n let style = elem.style;\n try {\n style[name] = value;\n } catch (error) {\n style.setProperty( name, value );\n }\n}\n\nexport const PresentationMode = {\n PIP: 'picture-in-picture',\n INLINE: 'inline',\n FULLSCREEN: 'fullscreen'\n}\n\nexport function checkWebkitSetPresentationMode (video) {\n return typeof video.webkitSetPresentationMode === 'function'\n}\n\nexport const util = {\n createDom, hasClass, addClass, removeClass, toggleClass, findDom, padStart, format, event, typeOf, \n deepCopy, getBgImage, copyDom, setInterval: _setInterval, clearInterval: _clearInterval, createImgBtn, isWeiXin, isUc, computeWatchDur,\n offInDestroy, on, once, getBuffered2, checkIsBrowser, setStyle\n}\n\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertInto + \" \" + options.insertAt.before);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","import {version} from '../version.json'\nconst ErrorTypes = {\n network: {\n code: 1,\n msg: '视频下载错误',\n remark: '只要视频下载错误就使用此类型,无论是video本身的超时还是xhr的分段请求超时或者资源不存在'\n },\n mse: {\n code: 2,\n msg: '流追加错误',\n remark: '追加流的时候如果类型不对、无法被正确解码则会触发此类错误'\n },\n parse: {\n code: 3,\n msg: '解析错误',\n remark: 'mp4、hls、flv我们都是使用js进行格式解析,如果解析失败则会触发此类错误'\n },\n format: {\n code: 4,\n msg: '格式错误',\n remark: '如果浏览器不支持的格式导致播放错误'\n },\n decoder: {\n code: 5,\n msg: '解码错误',\n remark: '浏览器解码异常会抛出此类型错误'\n },\n runtime: {\n code: 6,\n msg: '语法错误',\n remark: '播放器语法错误'\n },\n timeout: {\n code: 7,\n msg: '播放超时',\n remark: '播放过程中无法正常请求下一个分段导致播放中断'\n },\n other: {\n code: 8,\n msg: '其他错误',\n remark: '不可知的错误或被忽略的错误类型'\n }\n}\n\nclass Errors {\n constructor (type, currentTime, duration, networkState, readyState, src, currentSrc,\n ended, errd = {line: '', handle: '', msg: '', version: ''}, errorCode, mediaError) {\n let r = {}\n if (arguments.length > 1) {\n r.playerVersion = version // 播放器版本\n r.errorType = type\n r.domain = document.domain // domain\n r.duration = duration // 视频时长\n r.currentTime = currentTime\n r.networkState = networkState\n r.readyState = readyState\n r.currentSrc = currentSrc\n r.src = src\n r.ended = ended\n r.errd = errd // 错误详情\n r.ex = (ErrorTypes[type] || {}).msg // 补充信息\n r.errorCode = errorCode\n r.mediaError = mediaError\n } else {\n const arg = arguments[0]\n Object.keys(arg).map(key => {\n r[key] = arg[key]\n })\n r.ex = ((arg.type && ErrorTypes[arg.type]) || {}).msg\n }\n return r\n }\n}\nexport default Errors\n","let sniffer = {}\n\nObject.defineProperty(sniffer, 'device', {\n get: function () {\n let r = sniffer.os\n return r.isPc ? 'pc' : 'mobile'\n // return r.isPc ? 'pc' : r.isTablet ? 'tablet' : 'mobile'\n }\n})\n\nObject.defineProperty(sniffer, 'browser', {\n get: function () {\n let ua = navigator.userAgent.toLowerCase()\n let reg = {\n ie: /rv:([\\d.]+)\\) like gecko/,\n firfox: /firefox\\/([\\d.]+)/,\n chrome: /chrome\\/([\\d.]+)/,\n opera: /opera.([\\d.]+)/,\n safari: /version\\/([\\d.]+).*safari/\n }\n return [].concat(Object.keys(reg).filter(key => reg[key].test(ua)))[0] || ''\n }\n})\n\nObject.defineProperty(sniffer, 'os', {\n get: function () {\n let ua = navigator.userAgent\n let isWindowsPhone = /(?:Windows Phone)/.test(ua)\n let isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone\n let isAndroid = /(?:Android)/.test(ua)\n let isFireFox = /(?:Firefox)/.test(ua)\n let isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))\n let isPhone = /(?:iPhone)/.test(ua) && !isTablet\n let isPc = !isPhone && !isAndroid && !isSymbian && !isTablet\n return {\n isTablet,\n isPhone,\n isAndroid,\n isPc,\n isSymbian,\n isWindowsPhone,\n isFireFox\n }\n }\n})\n\nexport default sniffer\n","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","export default class XgplayerTimeRange {\n constructor(bufferedList) {\n this.bufferedList = bufferedList\n }\n\n start (index) {\n return this.bufferedList[index].start\n }\n\n end (index) {\n return this.bufferedList[index].end\n }\n\n get length () {\n return this.bufferedList.length\n }\n}\n","import Proxy from './proxy'\nimport { util, deepCopy, findDom, createDom, addClass, typeOf, hasClass, removeClass, checkIsBrowser } from './utils/util'\nimport sniffer from './utils/sniffer'\nimport XgplayerTimeRange from './utils/xgplayerTimeRange'\nimport Errors from './error'\nimport allOff from 'event-emitter/all-off'\nimport s_i18n from './skin/controls/i18n.js'\nimport './skin/style/index.scss'\n\nimport {\n version\n} from '../version.json'\nclass Player extends Proxy {\n constructor (options) {\n super(options)\n this.config = deepCopy({\n width: 600,\n height: 337.5,\n ignores: [],\n whitelist: [],\n lang: (document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn').toLocaleLowerCase(),\n inactive: 3000,\n volume: 0.6,\n controls: true,\n controlsList: ['nodownload']\n }, options)\n this.version = version\n this.userTimer = null\n this.waitTimer = null\n this.history = []\n this.isProgressMoving = false\n this.root = findDom(document, `#${this.config.id}`)\n this.controls = createDom('xg-controls', '', {\n unselectable: 'on',\n onselectstart: 'return false'\n }, 'xgplayer-controls')\n if (this.config.isShowControl) {\n this.controls.style.display = 'none'\n }\n if (!this.root) {\n let el = this.config.el\n if (el && el.nodeType === 1) {\n this.root = el\n } else {\n this.emit('error', new Errors({\n type: 'use',\n errd: {\n line: 45,\n handle: 'Constructor',\n msg: 'container id can\\'t be empty'\n },\n vid: this.config.vid\n }))\n console.error('container id can\\'t be empty')\n return false\n }\n }\n // this.rootBackup = copyDom(this.root)\n addClass(this.root, `xgplayer xgplayer-${sniffer.device} xgplayer-nostart xgplayer-pause ${this.config.controls ? '' : 'xgplayer-no-controls'}`)\n this.root.appendChild(this.controls)\n if (this.config.fluid) {\n this.root.style['max-width'] = '100%'\n this.root.style['width'] = '100%'\n this.root.style['height'] = '0'\n this.root.style['padding-top'] = `${this.config.height * 100 / this.config.width}%`\n\n this.video.style['position'] = 'absolute'\n this.video.style['top'] = '0'\n this.video.style['left'] = '0'\n } else {\n // this.root.style.width = `${this.config.width}px`\n // this.root.style.height = `${this.config.height}px`\n if (this.config.width) {\n if (typeof this.config.width !== 'number') {\n this.root.style.width = this.config.width\n } else {\n this.root.style.width = `${this.config.width}px`\n }\n }\n if (this.config.height) {\n if (typeof this.config.height !== 'number') {\n this.root.style.height = this.config.height\n } else {\n this.root.style.height = `${this.config.height}px`\n }\n }\n }\n if (this.config.execBeforePluginsCall) {\n this.config.execBeforePluginsCall.forEach(item => {\n item.call(this, this)\n })\n }\n if(!this.config.closeI18n) {\n Player.install(s_i18n.name, s_i18n.method)\n }\n if (this.config.controlStyle && typeOf(this.config.controlStyle) === 'String') {\n let self = this\n fetch(self.config.controlStyle, {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n }).then(function (res) {\n if (res.ok) {\n res.json().then(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n self.config[prop] = obj[prop]\n }\n }\n self.pluginsCall()\n })\n }\n }).catch(function (err) {\n console.log('Fetch错误:' + err)\n })\n } else {\n this.pluginsCall()\n }\n if(this.config.controlPlugins) {\n Player.controlsRun(this.config.controlPlugins, this)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.on(evName, evFunc)\n }\n });\n\n ['focus', 'blur'].forEach(item => {\n this.on(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n let player = this\n this.mousemoveFunc = function () {\n player.emit('focus')\n if (!player.config.closeFocusVideoFocus) {\n player.video.focus()\n }\n }\n this.root.addEventListener('mousemove', this.mousemoveFunc)\n this.playFunc = function () {\n player.emit('focus')\n if (!player.config.closePlayVideoFocus) {\n player.video.focus()\n }\n }\n player.once('play', this.playFunc)\n\n this.getVideoSize = function () {\n if (this.video.videoWidth && this.video.videoHeight) {\n let containerSize = player.root.getBoundingClientRect()\n if (player.config.fitVideoSize === 'auto') {\n if (containerSize.width / containerSize.height > this.video.videoWidth / this.video.videoHeight) {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n } else if (player.config.fitVideoSize === 'fixWidth') {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else if (player.config.fitVideoSize === 'fixHeight') {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n }\n }\n player.once('loadeddata', this.getVideoSize)\n\n setTimeout(() => {\n this.emit('ready')\n this.isReady = true\n }, 0)\n\n if (this.config.videoInit) {\n if (hasClass(this.root, 'xgplayer-nostart')) {\n this.start()\n }\n }\n if (player.config.rotate) {\n player.on('requestFullscreen', this.updateRotateDeg)\n player.on('exitFullscreen', this.updateRotateDeg)\n }\n\n function onDestroy () {\n player.root.removeEventListener('mousemove', player.mousemoveFunc)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n }\n\n attachVideo () {\n if(this.video && this.video.nodeType === 1) {\n this.root.insertBefore(this.video, this.root.firstChild)\n }\n setTimeout(() => {\n this.emit('complete')\n if(this.danmu && typeof this.danmu.resize === 'function') {\n this.danmu.resize()\n }\n }, 1)\n }\n\n start (url = this.config.url) {\n if(!this.video) return\n let player = this\n if (!url || url === '') {\n this.emit('urlNull')\n return\n }\n this.canPlayFunc = function () {\n player.off('canplay', player.canPlayFunc)\n let playPromise = player.video.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.then(function () {\n player.emit('autoplay started')\n }).catch(function () {\n player.emit('autoplay was prevented')\n addClass(player.root, 'xgplayer-is-autoplay')\n })\n }\n }\n if (typeOf(url) !== 'Array') {\n if (typeOf(url) === 'String' && url.indexOf('blob:') > -1 && url === this.video.src) {\n // 在Chromium环境下用mse url给video二次赋值会导致错误\n } else {\n this.video.src = url\n }\n } else {\n url.forEach(item => {\n this.video.appendChild(createDom('source', '', {\n src: `${item.src}`,\n type: `${item.type || ''}`\n }))\n })\n }\n if (this.config.autoplay) {\n if (sniffer.os.isPhone) {\n this.canPlayFunc()\n } else {\n this.on('canplay', this.canPlayFunc)\n }\n }\n if(!this.config.disableStartLoad) {\n this.video.load()\n }\n this.attachVideo()\n }\n\n reload () {\n this.video.load()\n this.reloadFunc = function () {\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n this.once('loadeddata', this.reloadFunc)\n }\n\n destroy (isDelDom = true) {\n let player = this\n clearInterval(this.bulletResizeTimer)\n for (let k in this._interval) {\n clearInterval(this._interval[k])\n this._interval[k] = null\n }\n if (this.checkTimer) {\n clearInterval(this.checkTimer)\n }\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.off(evName, evFunc)\n }\n });\n if (this.loadeddataFunc) {\n this.off('loadeddata', this.loadeddataFunc)\n }\n if (this.reloadFunc) {\n this.off('loadeddata', this.reloadFunc)\n }\n if (this.replayFunc) {\n this.off('play', this.replayFunc)\n }\n if (this.playFunc) {\n this.off('play', this.playFunc)\n }\n if (this.getVideoSize) {\n this.off('loadeddata', this.getVideoSize)\n };\n ['focus', 'blur'].forEach(item => {\n this.off(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n if (!this.config.keyShortcut || this.config.keyShortcut === 'on') {\n ['video', 'controls'].forEach(item => {\n if (this[item]) {\n this[item].removeEventListener('keydown', function (e) { player.onKeydown(e, player) })\n }\n })\n }\n\n function destroyFunc () {\n this.emit('destroy')\n // this.root.id = this.root.id + '_del'\n // parentNode.insertBefore(this.rootBackup, this.root)\n\n // fix video destroy https://stackoverflow.com/questions/3258587/how-to-properly-unload-destroy-a-video-element\n this.video.removeAttribute('src') // empty source\n this.video.load()\n if (isDelDom) {\n // parentNode.removeChild(this.root)\n this.root.innerHTML = ''\n let classNameList = this.root.className.split(' ')\n if (classNameList.length > 0) {\n this.root.className = classNameList.filter(name => name.indexOf('xgplayer') < 0).join(' ')\n } else {\n this.root.className = ''\n }\n }\n\n for (let k in this) {\n // if (k !== 'config') {\n delete this[k]\n // }\n }\n allOff(this)\n }\n\n // destroy immediately\n // Don't use the paused property detection, it doesn't use MediaElement.paused, \n // so it's not accurate enough. Destroy after waiting for pause event, this \n // changes the synchronous behavior of destroy api\n destroyFunc.call(this)\n\n super.destroy()\n }\n\n replay () {\n let self = this\n let _replay = this._replay\n // ie9 bugfix\n removeClass(this.root, 'xgplayer-ended')\n if(sniffer.browser.indexOf('ie') > -1) {\n this.emit('play')\n this.emit('playing')\n }\n \n if (_replay && _replay instanceof Function) {\n _replay()\n } else {\n this.currentTime = 0\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n }\n\n userGestureTrigEvent (name, param) {\n const defaultUserGestureEventHandler = (name, param) => {\n this.emit(name, param)\n }\n if(this.config.userGestureEventMiddleware && typeof this.config.userGestureEventMiddleware[name] === 'function') {\n this.config.userGestureEventMiddleware[name].call(this, this, name, param, defaultUserGestureEventHandler)\n } else {\n defaultUserGestureEventHandler.call(this, name, param);\n }\n }\n\n pluginsCall () {\n if(Player.plugins['s_i18n']) {\n Player.plugins['s_i18n'].call(this, this)\n }\n let self = this\n if (Player.plugins) {\n let ignores = this.config.ignores\n Object.keys(Player.plugins).forEach(name => {\n let descriptor = Player.plugins[name]\n if(!descriptor || typeof descriptor !== 'function'){\n console.warn('plugin name', name , 'is invalid')\n } else {\n if (!ignores.some(item => name === item || name === 's_' + item) && name !== 's_i18n') {\n if (['pc', 'tablet', 'mobile'].some(type => type === name)) {\n if (name === sniffer.device) {\n setTimeout(() => {\n // if destroyed, skip\n if (!self.video) return;\n descriptor.call(self, self)\n }, 0)\n }\n } else {\n descriptor.call(this, this)\n }\n }\n }\n })\n }\n }\n\n onFocus () {\n let player = this\n if(hasClass(this.root, 'xgplayer-inactive')) {\n player.emit('controlShow')\n }\n removeClass(this.root, 'xgplayer-inactive')\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n player.userTimer = setTimeout(function () {\n player.emit('blur')\n }, player.config.inactive)\n }\n\n onBlur () {\n // this.video.blur()\n if ((this.config.enablePausedInactive || !this.paused) && !this.ended && !this.config.closeInactive) {\n if(!hasClass(this.root, 'xgplayer-inactive')) {\n this.emit('controlHide')\n }\n addClass(this.root, 'xgplayer-inactive')\n }\n }\n\n onPlay () {\n addClass(this.root, 'xgplayer-isloading')\n addClass(this.root, 'xgplayer-playing')\n removeClass(this.root, 'xgplayer-pause')\n }\n\n onPause () {\n addClass(this.root, 'xgplayer-pause')\n if (this.userTimer) {\n clearTimeout(this.userTimer)\n }\n this.emit('focus')\n }\n\n onEnded () {\n addClass(this.root, 'xgplayer-ended')\n removeClass(this.root, 'xgplayer-playing')\n }\n\n onSeeking () {\n this.isSeeking = true\n // 兼容IE下无法触发waiting事件的问题 seeking的时候直接出发waiting\n this.onWaiting()\n // addClass(this.root, 'seeking');\n }\n\n // onTimeupdate () {\n // // for ie,playing fired before waiting\n // if (this.waitTimer) {\n // clearTimeout(this.waitTimer)\n // }\n // removeClass(this.root, 'xgplayer-isloading')\n\n // }\n\n onSeeked () {\n // for ie,playing fired before waiting\n this.once('timeupdate', () => {\n this.isSeeking = false\n })\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading')\n }\n\n onWaiting () {\n let self = this\n if (self.waitTimer) {\n clearTimeout(self.waitTimer)\n }\n if (self.checkTimer) {\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n let time = self.currentTime\n self.waitTimer = setTimeout(function () {\n addClass(self.root, 'xgplayer-isloading')\n self.checkTimer = setInterval(function () {\n if (self.currentTime !== time) {\n removeClass(self.root, 'xgplayer-isloading')\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n }, 1000)\n }, 500)\n }\n\n onPlaying () {\n // 兼容safari下无法自动播放会触发该事件的场景\n if (this.paused) {\n return\n }\n this.isSeeking = false\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading xgplayer-nostart xgplayer-pause xgplayer-ended xgplayer-is-error xgplayer-replay')\n addClass(this.root, 'xgplayer-playing')\n }\n\n static install (name, descriptor) {\n if (!checkIsBrowser()) {\n return\n }\n if (!Player.plugins) {\n Player.plugins = {}\n }\n if (!Player.plugins[name]) {\n Player.plugins[name] = descriptor\n }\n }\n\n static installAll (list) {\n for(let k = 0; k < list.length; k++){\n Player.install(list[k].name, list[k].method)\n }\n }\n\n static use (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n Player.plugins[name] = descriptor\n }\n\n static useAll (list) {\n for (let k in list) {\n Player.use(list[k].name, list[k].method)\n }\n }\n\n static controlsRun (controlLst, context) {\n controlLst.forEach(function(control) {\n control.method.call(context)\n })\n }\n}\n\nPlayer.util = util\nPlayer.sniffer = sniffer\nPlayer.Errors = Errors\nPlayer.XgplayerTimeRange = XgplayerTimeRange\n\nexport default Player\n","import { typeOf } from '../../utils/util'\n\nlet s_i18n = function () {\n let player = this; let lang = {};\n lang.en = {\n HAVE_NOTHING: 'There is no information on whether audio/video is ready',\n HAVE_METADATA: 'Audio/video metadata is ready ',\n HAVE_CURRENT_DATA: 'Data about the current play location is available, but there is not enough data to play the next frame/millisecond',\n HAVE_FUTURE_DATA: 'Current and at least one frame of data is available',\n HAVE_ENOUGH_DATA: 'The available data is sufficient to start playing',\n NETWORK_EMPTY: 'Audio/video has not been initialized',\n NETWORK_IDLE: 'Audio/video is active and has been selected for resources, but no network is used',\n NETWORK_LOADING: 'The browser is downloading the data',\n NETWORK_NO_SOURCE: 'No audio/video source was found',\n MEDIA_ERR_ABORTED: 'The fetch process is aborted by the user',\n MEDIA_ERR_NETWORK: 'An error occurred while downloading',\n MEDIA_ERR_DECODE: 'An error occurred while decoding',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'Audio/video is not supported',\n REPLAY: 'Replay',\n ERROR: 'Network is offline',\n PLAY_TIPS: 'Play',\n PAUSE_TIPS: 'Pause',\n PLAYNEXT_TIPS: 'Play next',\n DOWNLOAD_TIPS: 'Download',\n ROTATE_TIPS: 'Rotate',\n RELOAD_TIPS: 'Reload',\n FULLSCREEN_TIPS: \"Fullscreen\",\n EXITFULLSCREEN_TIPS: 'Exit fullscreen',\n CSSFULLSCREEN_TIPS: 'Cssfullscreen',\n EXITCSSFULLSCREEN_TIPS: 'Exit cssfullscreen',\n TEXTTRACK: 'Caption',\n PIP: 'Pip',\n MINIPLAYER: 'Miniplayer',\n SCREENSHOT: 'Screenshot',\n LIVE: 'LIVE',\n OFF: 'Off',\n MINIPLAYER_DRAG: 'Click and hold to drag',\n AIRPLAY_TIPS: 'Airplay',\n }\n lang['zh-cn'] = {\n HAVE_NOTHING: '没有关于音频/视频是否就绪的信息',\n HAVE_METADATA: '音频/视频的元数据已就绪',\n HAVE_CURRENT_DATA: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒',\n HAVE_FUTURE_DATA: '当前及至少下一帧的数据是可用的',\n HAVE_ENOUGH_DATA: '可用数据足以开始播放',\n NETWORK_EMPTY: '音频/视频尚未初始化',\n NETWORK_IDLE: '音频/视频是活动的且已选取资源,但并未使用网络',\n NETWORK_LOADING: '浏览器正在下载数据',\n NETWORK_NO_SOURCE: '未找到音频/视频来源',\n MEDIA_ERR_ABORTED: '取回过程被用户中止',\n MEDIA_ERR_NETWORK: '当下载时发生错误',\n MEDIA_ERR_DECODE: '当解码时发生错误',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音频/视频格式',\n REPLAY: '重播',\n ERROR: '网络连接似乎出现了问题',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暂停',\n PLAYNEXT_TIPS: '下一集',\n DOWNLOAD_TIPS: '下载',\n ROTATE_TIPS: '旋转',\n RELOAD_TIPS: '重新载入',\n FULLSCREEN_TIPS: \"进入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '进入样式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出样式全屏',\n TEXTTRACK: '字幕',\n PIP: '画中画',\n MINIPLAYER: '迷你播放器',\n SCREENSHOT: '截图',\n LIVE: '正在直播',\n OFF: '关闭',\n MINIPLAYER_DRAG: '点击按住可拖动视频',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['zh-hk'] = {\n HAVE_NOTHING: '沒有關於音頻/視頻是否就緒的信息',\n HAVE_METADATA: '音頻/視頻的元數據已就緒',\n HAVE_CURRENT_DATA: '關於當前播放位置的數據是可用的,但沒有足夠的數據來播放下壹幀/毫秒',\n HAVE_FUTURE_DATA: '當前及至少下壹幀的數據是可用的',\n HAVE_ENOUGH_DATA: '可用數據足以開始播放',\n NETWORK_EMPTY: '音頻/視頻尚未初始化',\n NETWORK_IDLE: '音頻/視頻是活動的且已選取資源,但並未使用網絡',\n NETWORK_LOADING: '瀏覽器正在下載數據',\n NETWORK_NO_SOURCE: '未找到音頻/視頻來源',\n MEDIA_ERR_ABORTED: '取回過程被用戶中止',\n MEDIA_ERR_NETWORK: '當下載時發生錯誤',\n MEDIA_ERR_DECODE: '當解碼時發生錯誤',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音頻/視頻格式',\n REPLAY: '重播',\n ERROR: '網絡連接似乎出現了問題',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暫停',\n PLAYNEXT_TIPS: '下壹集',\n DOWNLOAD_TIPS: '下載',\n ROTATE_TIPS: '旋轉',\n RELOAD_TIPS: '重新載入',\n FULLSCREEN_TIPS: \"進入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '進入樣式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出樣式全屏',\n TEXTTRACK: '字幕',\n PIP: '畫中畫',\n MINIPLAYER: '迷妳播放器',\n SCREENSHOT: '截圖',\n LIVE: '正在直播',\n OFF: '關閉',\n MINIPLAYER_DRAG: '點擊按住可拖動視頻',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['jp'] = {\n HAVE_NOTHING: 'オーディオ/ビデオが準備できているか情報がありません',\n HAVE_METADATA: 'オーディオ/ビデオのメタデータは準備できています',\n HAVE_CURRENT_DATA: '現在の再生位置に関するデータは利用可能ですが、次のフレーム/ミリ秒を再生するのに十分なデータがありません',\n HAVE_FUTURE_DATA: '現在、少なくとも次のフレームのデータが利用可能です',\n HAVE_ENOUGH_DATA: '利用可能なデータは再生を開始するのに十分です',\n NETWORK_EMPTY: 'オーディオ/ビデオが初期化されていません',\n NETWORK_IDLE: 'オーディオ/ビデオはアクティブでリソースが選択されていますが、ネットワークが使用されていません',\n NETWORK_LOADING: 'ブラウザーはデータをダウンロードしています',\n NETWORK_NO_SOURCE: 'オーディオ/ビデオ のソースが見つかりません',\n MEDIA_ERR_ABORTED: 'ユーザーによってフェッチプロセスが中止されました',\n MEDIA_ERR_NETWORK: 'ダウンロード中にエラーが発生しました',\n MEDIA_ERR_DECODE: 'デコード中にエラーが発生しました',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'オーディオ/ビデオ の形式がサポートされていません',\n REPLAY: 'リプレイ',\n ERROR: 'ネットワークの接続に問題が発生しました',\n PLAY_TIPS: 'プレイ',\n PAUSE_TIPS: '一時停止',\n PLAYNEXT_TIPS: '次をプレイ',\n DOWNLOAD_TIPS: 'ダウンロード',\n ROTATE_TIPS: '回転',\n RELOAD_TIPS: '再読み込み',\n FULLSCREEN_TIPS: \"フルスクリーン\",\n EXITFULLSCREEN_TIPS: 'フルスクリーンを終了',\n CSSFULLSCREEN_TIPS: 'シアターモード',\n EXITCSSFULLSCREEN_TIPS: 'シアターモードを終了',\n TEXTTRACK: '字幕',\n PIP: 'ミニプレーヤー',\n MINIPLAYER: 'ミニプレーヤー',\n SCREENSHOT: 'スクリーンショット',\n LIVE: '生放送',\n OFF: 'オフ',\n MINIPLAYER_DRAG: 'ボタンを押して働画をドラッグする',\n AIRPLAY_TIPS: '隔空放送',\n }\n\n Object.defineProperty(player, 'lang', {\n get: function () {\n if (player.config) {\n return lang[player.config.lang] || lang['en']\n } else {\n return lang['en']\n }\n },\n set: function (value) {\n if (typeOf(value) === 'Object') {\n Object.keys(value).forEach(key => {\n lang[key] = value[key]\n })\n }\n }\n })\n\n}\n\nexport default {\n name: 's_i18n',\n method: s_i18n\n}","import EventEmitter from 'event-emitter'\nimport { findDom, createDom, hasClass, removeClass, _clearInterval, _setInterval, on, once, getBuffered2, setStyle } from './utils/util'\nimport Errors from './error'\n\nclass Proxy {\n constructor (options) {\n this._hasStart = false\n this.videoConfig = {\n controls: !!options.isShowControl,\n autoplay: options.autoplay,\n playsinline: options.playsinline,\n 'webkit-playsinline': options.playsinline,\n 'x5-playsinline': options.playsinline,\n 'x5-video-player-type': options['x5-video-player-type'] || options['x5VideoPlayerType'],\n 'x5-video-player-fullscreen': options['x5-video-player-fullscreen'] || options['x5VideoPlayerFullscreen'],\n 'x5-video-orientation': options['x5-video-orientation'] || options['x5VideoOrientation'],\n airplay: options['airplay'],\n 'webkit-airplay': options['airplay'],\n tabindex: 2,\n mediaType: options.mediaType || 'video'\n }\n if (options.muted) {\n this.videoConfig.muted = 'muted'\n }\n if (options.loop) {\n this.videoConfig.loop = 'loop'\n }\n let textTrackDom = ''\n this.textTrackShowDefault = true\n if (options.nativeTextTrack && Array.isArray(options.nativeTextTrack)) {\n if (options.nativeTextTrack.length > 0 && !options.nativeTextTrack.some(track => { return track.default })) {\n options.nativeTextTrack[0].default = true\n this.textTrackShowDefault = false\n }\n options.nativeTextTrack.some(track => {\n if (track.src && track.label && track.default) {\n textTrackDom += `<track src=\"${track.src}\" `\n if (track.kind) {\n textTrackDom += `kind=\"${track.kind}\" `\n }\n textTrackDom += `label=\"${track.label}\" `\n if (track.srclang) {\n textTrackDom += `srclang=\"${track.srclang}\" `\n }\n textTrackDom += `${track.default ? 'default' : ''}>`\n return true\n }\n })\n this.videoConfig.crossorigin = 'anonymous'\n }\n if (options.textTrackStyle) {\n let style = document.createElement('style')\n this.textTrackStyle = style\n document.head.appendChild(style)\n let styleStr = ''\n for (let index in options.textTrackStyle) {\n styleStr += `${index}: ${options.textTrackStyle[index]};`\n }\n let wrap = options.id ? `#${options.id}` : (options.el.id ? `#${options.el.id}` : `.${options.el.className}`)\n if (style.sheet.insertRule) {\n style.sheet.insertRule(`${wrap} video::cue { ${styleStr} }`, 0)\n } else if (style.sheet.addRule) {\n style.sheet.addRule(`${wrap} video::cue`, styleStr)\n }\n }\n let el = options.el ? options.el : findDom(document, `#${options.id}`)\n const XgVideoProxy = this.constructor.XgVideoProxy\n if(XgVideoProxy && this.videoConfig.mediaType === XgVideoProxy.mediaType) {\n this.video = new XgVideoProxy(el, options)\n } else {\n this.video = createDom(this.videoConfig.mediaType, textTrackDom, this.videoConfig, '')\n }\n if (options.videoStyle) {\n Object.keys(options.videoStyle).forEach(key => {\n setStyle(this.video, key, options.videoStyle[key])\n })\n }\n if (!this.textTrackShowDefault && textTrackDom) {\n let trackDoms = this.video.getElementsByTagName('Track')\n trackDoms[0].track.mode = 'hidden'\n }\n if (options.autoplay) {\n this.video.autoplay = true\n if (options.autoplayMuted) {\n this.video.muted = true\n }\n }\n\n this.ev = ['play', 'playing', 'pause', 'ended', 'error', 'seeking', 'seeked', 'progress', \n 'timeupdate', 'waiting', 'canplay', 'canplaythrough', 'durationchange', 'volumechange', 'ratechange', 'loadedmetadata', 'loadeddata', 'loadstart'\n ].map((item) => {\n return {\n [item]: `on${item.charAt(0).toUpperCase()}${item.slice(1)}`\n }\n })\n EventEmitter(this)\n\n this._interval = {}\n let lastBuffer = '0,0'\n let self = this\n\n const defaultVideoEventHandler = name => {\n // fix when video destroy called and video reload\n if (!this) {\n return\n }\n if (name === 'play') {\n this.hasStart = true\n } else if (name === 'canplay') {\n removeClass(this.root, 'xgplayer-is-enter')\n } else if (name === 'waiting') {\n this.inWaitingStart = new Date().getTime()\n } else if (name === 'playing') {\n removeClass(this.root, 'xgplayer-is-enter')\n if (this.inWaitingStart) {\n this.inWaitingStart = undefined\n }\n }\n if (name === 'error') {\n // process the error\n this._onError(name)\n } else {\n this.emit(name, this)\n }\n\n if (this.hasOwnProperty('_interval')) {\n if (['ended', 'error', 'timeupdate'].indexOf(name) < 0) {\n _clearInterval(this, 'bufferedChange')\n _setInterval(this, 'bufferedChange', function () {\n if (this.video && this.video.buffered) {\n let curBuffer = []\n for (let i = 0, len = this.video.buffered.length; i < len; i++) {\n curBuffer.push([this.video.buffered.start(i), this.video.buffered.end(i)])\n }\n if (curBuffer.toString() !== lastBuffer) {\n lastBuffer = curBuffer.toString()\n this.emit('bufferedChange', curBuffer)\n }\n }\n }, 200)\n } else {\n if (name !== 'timeupdate') {\n _clearInterval(this, 'bufferedChange')\n }\n }\n }\n }\n\n const videoEventHandler = name => {\n if(options.videoEventMiddleware && typeof options.videoEventMiddleware[name] === 'function') {\n options.videoEventMiddleware[name].call(this, this, name, defaultVideoEventHandler)\n } else {\n defaultVideoEventHandler.call(this, name);\n }\n }\n\n this.ev.forEach(item => {\n self.evItem = Object.keys(item)[0]\n let name = Object.keys(item)[0]\n self.video.addEventListener(Object.keys(item)[0], videoEventHandler.bind(self, name))\n })\n }\n /**\n * 错误监听处理逻辑抽离\n */\n _onError (name) {\n if (this.video && this.video.error) {\n this.emit(name, new Errors('other', this.currentTime, this.duration, this.networkState, this.readyState, this.currentSrc, this.src,\n this.ended, {\n line: 162,\n msg: this.error,\n handle: 'Constructor'\n }, this.video.error.code, this.video.error))\n }\n }\n\n get hasStart () {\n return this._hasStart\n }\n set hasStart (bool) {\n if (typeof bool === 'boolean' && bool === true && !this._hasStart) {\n this._hasStart = true\n this.emit('hasstart')\n }\n }\n destroy () {\n if (this.textTrackStyle) {\n this.textTrackStyle.parentNode.removeChild(this.textTrackStyle)\n }\n }\n play () {\n return this.video.play()\n }\n pause () {\n this.video.pause()\n }\n canPlayType (type) {\n return this.video.canPlayType(type)\n }\n getBufferedRange (buffered) {\n let range = [0, 0]\n let video = this.video\n if(!buffered) buffered = video.buffered\n let currentTime = video.currentTime\n if (buffered) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i)\n range[1] = buffered.end(i)\n if (range[0] <= currentTime && currentTime <= range[1]) {\n break\n }\n }\n }\n if (range[0] - currentTime <= 0 && currentTime - range[1] <= 0) {\n return range\n } else {\n return [0, 0]\n }\n }\n proxyOn (event, fn) {\n on(this, event, fn, 'destroy')\n }\n proxyOnce (event, fn) {\n once(this, event, fn, 'destroy')\n }\n set autoplay (isTrue) {\n if(this.video) {\n this.video.autoplay = isTrue\n }\n }\n get autoplay () {\n if(this.video) {\n return this.video.autoplay\n } else {\n return false\n }\n }\n get buffered () {\n if(this.video) {\n return this.video.buffered\n } else {\n return undefined\n }\n }\n get buffered2 () {\n return getBuffered2(this.video.buffered)\n }\n get crossOrigin () {\n if(this.video) {\n return this.video.crossOrigin\n } else {\n return false\n }\n }\n set crossOrigin (isTrue) {\n if(this.video) {\n this.video.crossOrigin = isTrue\n }\n }\n get currentSrc () {\n if(this.video) {\n return this.video.currentSrc\n } else {\n return undefined\n }\n }\n get currentTime () {\n if(this.video) {\n return this.video.currentTime || 0\n } else {\n return 0\n }\n }\n set currentTime (time) {\n if (typeof isFinite === 'function' && !isFinite(time)) return\n if (hasClass(this.root, 'xgplayer-ended')) {\n this.once('playing', () => { this.video.currentTime = time })\n this.replay()\n } else {\n this.video.currentTime = time\n }\n this.emit('currentTimeChange', time)\n }\n get defaultMuted () {\n if(this.video) {\n return this.video.defaultMuted\n } else {\n return false\n }\n }\n set defaultMuted (isTrue) {\n if(this.video) {\n this.video.defaultMuted = isTrue\n }\n }\n get duration () {\n if(this.config.duration) {\n if(this.video) return Math.min(this.config.duration, this.video.duration)\n else return this.config.duration\n }\n if (!this.video) return null\n return this.video.duration\n }\n get ended () {\n if(this.video) {\n return this.video.ended || false\n } else {\n return true\n }\n }\n get error () {\n let err = this.video.error\n if (!err) {\n return null\n }\n let status = [{\n en: 'MEDIA_ERR_ABORTED',\n cn: '取回过程被用户中止'\n }, {\n en: 'MEDIA_ERR_NETWORK',\n cn: '当下载时发生错误'\n }, {\n en: 'MEDIA_ERR_DECODE',\n cn: '当解码时发生错误'\n }, {\n en: 'MEDIA_ERR_SRC_NOT_SUPPORTED',\n cn: '不支持音频/视频'\n }]\n return this.lang ? this.lang[status[err.code - 1].en] : status[err.code - 1].en\n }\n get loop () {\n if(this.video) {\n return this.video.loop\n } else {\n return false\n }\n }\n set loop (isTrue) {\n if(this.video) {\n this.video.loop = isTrue\n }\n }\n get muted () {\n if(this.video) {\n return this.video.muted\n } else {\n return false\n }\n }\n set muted (isTrue) {\n if(this.video) {\n this.video.muted = isTrue\n }\n }\n get networkState () {\n let status = [{\n en: 'NETWORK_EMPTY',\n cn: '音频/视频尚未初始化'\n }, {\n en: 'NETWORK_IDLE',\n cn: '音频/视频是活动的且已选取资源,但并未使用网络'\n }, {\n en: 'NETWORK_LOADING',\n cn: '浏览器正在下载数据'\n }, {\n en: 'NETWORK_NO_SOURCE',\n cn: '未找到音频/视频来源'\n }]\n return this.lang ? this.lang[status[this.video.networkState].en] : status[this.video.networkState].en\n }\n get paused () {\n // if(this.video) {\n // return this.video.paused\n // } else {\n // return false\n // }\n return hasClass(this.root, 'xgplayer-pause')\n }\n get playbackRate () {\n if(this.video) {\n return this.video.playbackRate\n } else {\n return 1\n }\n }\n set playbackRate (rate) {\n if(this.video) {\n this.video.playbackRate = rate\n }\n }\n get played () {\n if(this.video) {\n return this.video.played\n } else {\n return undefined\n }\n }\n get preload () {\n if(this.video) {\n return this.video.preload\n } else {\n return false\n }\n }\n set preload (isTrue) {\n if(this.video) {\n this.video.preload = isTrue\n }\n }\n get readyState () {\n let status = [{\n en: 'HAVE_NOTHING',\n cn: '没有关于音频/视频是否就绪的信息'\n }, {\n en: 'HAVE_METADATA',\n cn: '关于音频/视频就绪的元数据'\n }, {\n en: 'HAVE_CURRENT_DATA',\n cn: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒'\n }, {\n en: 'HAVE_FUTURE_DATA',\n cn: '当前及至少下一帧的数据是可用的'\n }, {\n en: 'HAVE_ENOUGH_DATA',\n cn: '可用数据足以开始播放'\n }]\n return this.lang ? this.lang[status[this.video.readyState].en] : status[this.video.readyState]\n }\n get seekable () {\n if(this.video) {\n return this.video.seekable\n } else {\n return false\n }\n }\n get seeking () {\n if(this.video) {\n return this.video.seeking\n } else {\n return false\n }\n }\n get src () {\n if(this.video) {\n return this.video.src\n } else {\n return undefined\n }\n }\n set src (url) {\n if (!hasClass(this.root, 'xgplayer-ended')) {\n this.emit('urlchange', this.video.src)\n }\n removeClass(this.root, 'xgplayer-ended xgplayer-is-replay xgplayer-is-error')\n this.video.pause()\n this.emit('pause')\n this.video.src = url\n this.emit('srcChange')\n }\n set poster (posterUrl) {\n let poster = findDom(this.root, '.xgplayer-poster')\n if (poster) {\n poster.style.backgroundImage = `url(${posterUrl})`\n }\n }\n get volume () {\n if(this.video) {\n return this.video.volume\n } else {\n return 1\n }\n }\n set volume (vol) {\n if(this.video) {\n this.video.volume = vol\n }\n }\n get fullscreen () {\n return hasClass(this.root, 'xgplayer-is-fullscreen') || hasClass(this.root, 'xgplayer-fullscreen-active')\n }\n get bullet () {\n return findDom(this.root, 'xg-danmu') ? hasClass(findDom(this.root, 'xg-danmu'), 'xgplayer-has-danmu') : false\n }\n get textTrack () {\n return hasClass(this.root, 'xgplayer-is-textTrack')\n }\n get pip () {\n return hasClass(this.root, 'xgplayer-pip-active')\n }\n get isMiniPlayer () {\n return hasClass(this.root, 'xgplayer-miniplayer-active')\n }\n}\n\nexport default Proxy\n","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","'use strict';\n\nvar value = require('es5-ext/object/valid-object')\n\n , hasOwnProperty = Object.prototype.hasOwnProperty;\n\nmodule.exports = function (emitter/*, type*/) {\n\tvar type = arguments[1], data;\n\n\tvalue(emitter);\n\n\tif (type !== undefined) {\n\t\tdata = hasOwnProperty.call(emitter, '__ee__') && emitter.__ee__;\n\t\tif (!data) return;\n\t\tif (data[type]) delete data[type];\n\t\treturn;\n\t}\n\tif (hasOwnProperty.call(emitter, '__ee__')) delete emitter.__ee__;\n};\n","\"use strict\";\n\nvar isObject = require(\"./is-object\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) throw new TypeError(value + \" is not an Object\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar map = { function: true, object: true };\n\nmodule.exports = function (value) { return (isValue(value) && map[typeof value]) || false; };\n","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default{background:#000;width:100%;height:100%;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;-ms-user-select:none}.xgplayer-skin-default *{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.xgplayer-skin-default.xgplayer-rotate-fullscreen{position:absolute;top:0;left:100%;bottom:0;right:0;height:100vw!important;width:100vh!important;-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.xgplayer-skin-default.xgplayer-is-fullscreen{width:100%!important;height:100%!important;padding-top:0!important;z-index:9999}.xgplayer-skin-default.xgplayer-is-fullscreen.xgplayer-inactive{cursor:none}.xgplayer-skin-default video{width:100%;height:100%;outline:none}.xgplayer-skin-default .xgplayer-none{display:none}@-webkit-keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}@keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}.xgplayer-skin-default .xgplayer-controls{display:-webkit-flex;display:-moz-box;display:flex;position:absolute;bottom:0;left:0;right:0;height:40px;background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.37),rgba(0,0,0,.75),rgba(0,0,0,.75));z-index:10}.xgplayer-skin-default.xgplayer-inactive .xgplayer-controls,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-progress,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-time,.xgplayer-skin-default.xgplayer-no-controls .xgplayer-controls,.xgplayer-skin-default.xgplayer-nostart .xgplayer-controls{display:none}.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-live{display:block}.xgplayer-skin-default .xgplayer-live{display:block;font-size:12px;color:#fff;line-height:40px;-webkit-order:1;-moz-box-ordinal-group:2;order:1}.xgplayer-skin-default .xgplayer-icon{display:block;width:40px;height:40px;overflow:hidden;fill:#fff}.xgplayer-skin-default .xgplayer-icon svg{position:absolute}.xgplayer-skin-default .xgplayer-tips{background:rgba(0,0,0,.54);border-radius:1px;display:none;position:absolute;font-family:PingFangSC-Regular;font-size:11px;color:#fff;padding:2px 4px;text-align:center;top:-30px;left:50%;margin-left:-16px;width:auto;white-space:nowrap}.xgplayer-skin-default.xgplayer-mobile .xgplayer-tips{display:none!important}.xgplayer-skin-default .xgplayer-screen-container{display:block;width:100%}\", \"\"]);\n\n// exports\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","import { hasClass } from '../utils/util'\n\nlet mobile = function () {\n let player = this\n let root = player.root\n let clk = 0; let _click_\n let clickedTime = {\n first: '',\n second: ''\n }\n\n player.onElementTouchend = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (hasClass(root, 'xgplayer-inactive')) {\n player.emit('focus')\n } else {\n player.emit('blur')\n }\n if (!player.config.closeVideoTouch && !player.isTouchMove) {\n function onTouch() {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n }\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.first = new Date()\n } else {\n onTouch()\n }\n } else if (clk === 2) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.second = new Date()\n if (Math.abs(clickedTime.first - clickedTime.second) < 400) {\n // 双击\n onTouch()\n } else {\n clickedTime.first = new Date()\n clk = 1\n }\n } else {\n clk = 0\n }\n } else {\n clk = 0\n }\n }\n }\n }\n\n function onReady (e) {\n player.video.addEventListener('touchend', function (e) {\n player.onElementTouchend(e, player.video)\n })\n player.video.addEventListener('touchstart', () => {\n player.isTouchMove = false\n })\n player.video.addEventListener('touchmove', () => {\n player.isTouchMove = true\n })\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'mobile',\n method: mobile\n}","import { hasClass } from '../utils/util'\n\nlet pc = function () {\n let player = this\n if(!player.controls || !player.video) return\n let controls = player.controls; let root = player.root\n let clk = 0; let _click_\n\n player.onElementClick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n } else {\n clk = 0\n }\n }\n }\n player.video.addEventListener('click', function (e) { player.onElementClick(e, player.video) }, false)\n\n player.onElementDblclick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoDblclick) {\n let fullscreen = controls.querySelector('.xgplayer-fullscreen')\n if (fullscreen) {\n let clk\n if (document.createEvent) {\n clk = document.createEvent('Event')\n clk.initEvent('click', true, true)\n } else {\n clk = new Event('click')\n }\n fullscreen.dispatchEvent(clk)\n }\n }\n }\n player.video.addEventListener('dblclick', function (e) { player.onElementDblclick(e, player.video) }, false)\n\n function onMouseEnter () {\n clearTimeout(player.leavePlayerTimer)\n player.emit('focus', player)\n }\n root.addEventListener('mouseenter', onMouseEnter)\n\n function onMouseLeave () {\n if(!player.config.closePlayerBlur) {\n player.leavePlayerTimer = setTimeout(function () {\n player.emit('blur', player)\n }, player.config.leavePlayerTime || 0)\n }\n }\n root.addEventListener('mouseleave', onMouseLeave)\n\n function onControlMouseEnter (e) {\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n }\n controls.addEventListener('mouseenter', onControlMouseEnter)\n\n function onControlMouseLeave (e) {\n if(!player.config.closeControlsBlur) {\n player.emit('focus', player)\n }\n }\n controls.addEventListener('mouseleave', onControlMouseLeave)\n\n function onControlClick (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n controls.addEventListener('click', onControlClick)\n\n function onReady (e) {\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n root.removeEventListener('mouseenter', onMouseEnter)\n root.removeEventListener('mouseleave', onMouseLeave)\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'pc',\n method: pc\n}","import { addClass, hasClass, removeClass } from '../utils/util'\n\nlet start = function () {\n let player = this\n let root = player.root\n\n function onCanPlay () {\n player.off('canplay', onCanPlay)\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n\n function onStartBtnClick () {\n if (hasClass(root, 'xgplayer-nostart')) {\n removeClass(root, 'xgplayer-nostart') // for ie quick switch\n addClass(root, 'xgplayer-is-enter')\n\n if(typeof root.contains === 'function') {\n if((player.video && player.video.nodeType === 1 && !root.contains(player.video)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n } else {\n if((player.video && player.video.nodeType === 1 && !root.querySelector(this.videoConfig.mediaType)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n }\n } else {\n if (player.paused) {\n removeClass(root, 'xgplayer-nostart xgplayer-isloading')\n setTimeout(() => {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }, 10)\n }\n }\n }\n player.on('startBtnClick', onStartBtnClick)\n\n function onDestroy () {\n player.off('startBtnClick', onStartBtnClick)\n player.off('canplay', onCanPlay)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'start',\n method: start\n}","import { createDom, addClass, removeClass, isWeiXin, isUc } from '../../utils/util'\nimport StartPlayIcon from '../assets/startPlay.svg'\nimport StartPauseIcon from '../assets/startPause.svg'\nimport '../style/controls/start.scss'\n\nlet s_start = function () {\n let player = this\n let root = player.root\n let btn = createDom('xg-start', `<div class=\"xgplayer-icon-play\">${StartPlayIcon}</div>\n <div class=\"xgplayer-icon-pause\">${StartPauseIcon}</div>`, {}, 'xgplayer-start')\n function onPlayerReady(player) {\n addClass(player.root, 'xgplayer-skin-default')\n if (player.config) {\n player.config.autoplay && !isWeiXin() && !isUc() && addClass(player.root, 'xgplayer-is-enter')\n if (player.config.lang && player.config.lang === 'en') {\n addClass(player.root, 'xgplayer-lang-is-en')\n } else if (player.config.lang === 'jp') {\n addClass(player.root, 'xgplayer-lang-is-jp')\n }\n if(!player.config.enableContextmenu) {\n player.video.addEventListener('contextmenu', e => {\n e.preventDefault()\n e.stopPropagation()\n })\n }\n }\n }\n\n if(player.config && player.config.hideStartBtn) {\n addClass(root, 'xgplayer-start-hide')\n }\n\n if (player.isReady) {\n root.appendChild(btn)\n onPlayerReady(player)\n } else {\n player.once('ready', () => {\n root.appendChild(btn)\n onPlayerReady(player)\n });\n }\n\n player.once('autoplay was prevented', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n addClass(player.root, 'xgplayer-nostart')\n })\n\n player.once('canplay', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n })\n\n btn.onclick = e => {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('startBtnClick')\n }\n}\n\nexport default {\n name: 's_start',\n method: s_start\n}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04,0.04)\\\" d=\\\"M576,363L810,512L576,661zM342,214L576,363L576,661L342,810z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04 0.04)\\\" d=\\\"M598,214h170v596h-170v-596zM256 810v-596h170v596h-170z\\\"></path>\\n</svg>\\n\"","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js!./start.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js!./start.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js!./start.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-start{border-radius:50%;display:inline-block;width:70px;height:70px;background:rgba(0,0,0,.38);overflow:hidden;text-align:center;line-height:70px;vertical-align:middle;position:absolute;left:50%;top:50%;z-index:115;margin:-35px auto auto -35px;cursor:pointer}.xgplayer-skin-default .xgplayer-start div{position:absolute}.xgplayer-skin-default .xgplayer-start div svg{fill:hsla(0,0%,100%,.7)}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default .xgplayer-start:hover{opacity:.85}.xgplayer-skin-default.xgplayer-pause.xgplayer-start-hide .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-start-hide .xgplayer-start{display:none}.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-pause{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start{display:inline-block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start,.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-pause{display:none}\", \"\"]);\n\n// exports\n","import Player from './player'\n\nimport Mobile from './controls/mobile'\nimport Pc from './controls/pc'\nimport Start from './controls/start'\nimport S_start from './skin/controls/start'\n\nlet controlLst = [Mobile, Pc, Start, S_start]\ncontrolLst.forEach(function(control) {\n Player.install(control.name, control.method)\n})\n\nexport default Player\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://Player/webpack/bootstrap","webpack://Player/./src/utils/util.js","webpack://Player/./node_modules/css-loader/lib/css-base.js","webpack://Player/./node_modules/style-loader/lib/addStyles.js","webpack://Player/./node_modules/es5-ext/object/is-value.js","webpack://Player/./src/error.js","webpack://Player/./src/utils/sniffer.js","webpack://Player/./node_modules/type/value/is.js","webpack://Player/./src/utils/xgplayerTimeRange.js","webpack://Player/./src/player.js","webpack://Player/./src/skin/controls/i18n.js","webpack://Player/./src/proxy.js","webpack://Player/./node_modules/event-emitter/index.js","webpack://Player/./node_modules/d/index.js","webpack://Player/./node_modules/type/plain-function/is.js","webpack://Player/./node_modules/type/function/is.js","webpack://Player/./node_modules/type/prototype/is.js","webpack://Player/./node_modules/type/object/is.js","webpack://Player/./node_modules/es5-ext/object/assign/index.js","webpack://Player/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://Player/./node_modules/es5-ext/object/assign/shim.js","webpack://Player/./node_modules/es5-ext/object/keys/index.js","webpack://Player/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://Player/./node_modules/es5-ext/object/keys/shim.js","webpack://Player/./node_modules/es5-ext/function/noop.js","webpack://Player/./node_modules/es5-ext/object/valid-value.js","webpack://Player/./node_modules/es5-ext/object/normalize-options.js","webpack://Player/./node_modules/es5-ext/string/#/contains/index.js","webpack://Player/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Player/./node_modules/es5-ext/string/#/contains/shim.js","webpack://Player/./node_modules/es5-ext/object/valid-callable.js","webpack://Player/./node_modules/event-emitter/all-off.js","webpack://Player/./node_modules/es5-ext/object/valid-object.js","webpack://Player/./node_modules/es5-ext/object/is-object.js","webpack://Player/./src/skin/style/index.scss?43d7","webpack://Player/./src/skin/style/index.scss","webpack://Player/./node_modules/style-loader/lib/urls.js","webpack://Player/./src/controls/mobile.js","webpack://Player/./src/controls/pc.js","webpack://Player/./src/controls/start.js","webpack://Player/./src/skin/controls/start.js","webpack://Player/./src/skin/assets/startPlay.svg","webpack://Player/./src/skin/assets/startPause.svg","webpack://Player/./src/skin/style/controls/start.scss?7b40","webpack://Player/./src/skin/style/controls/start.scss","webpack://Player/./src/core_player.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","createDom","hasClass","addClass","removeClass","toggleClass","findDom","padStart","format","event","typeOf","deepCopy","getBgImage","copyDom","_setInterval","_clearInterval","createImgBtn","isWeiXin","isUc","computeWatchDur","offInDestroy","on","once","getBuffered2","checkIsBrowser","setStyle","checkWebkitSetPresentationMode","video","el","tpl","attrs","cname","dom","document","item","className","Array","some","RegExp","reg","sel","e","str","length","pad","charstr","String","len","maxlen","Math","chars","time","window","hour","minute","second","touch","obj","dst","src","url","a","back","node","context","eventName","intervalFunc","frequency","setInterval","clearInterval","imgUrl","width","height","btn","w","h","unit","Number","ua","played","arr","begin","end","j","b","watch_dur","fn","offEvent","_fn","data","vbuffered","maxHoleDuration","buffered","start","diff","buffered_2","buf2len","buf2end","XgplayerTimeRange","elem","style","error","PresentationMode","PIP","INLINE","FULLSCREEN","util","useSourceMap","list","toString","this","map","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","push","memo","stylesInDom","isOldIE","all","atob","apply","arguments","getTarget","target","querySelector","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","type","addAttrs","keys","forEach","setAttribute","update","remove","result","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","href","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","undefined","convertToAbsoluteUrls","blob","oldSrc","_undefined","require","val","ErrorTypes","network","code","msg","remark","mse","parse","decoder","runtime","timeout","other","errd","line","handle","version","errorCode","mediaError","arg","sniffer","navigator","ie","firfox","chrome","opera","safari","isWindowsPhone","test","isSymbian","isAndroid","isFireFox","isTablet","isPhone","isPc","bufferedList","Player","ignores","whitelist","lang","inactive","volume","controls","controlsList","unselectable","onselectstart","Errors","vid","console","s_i18n","self","fetch","method","headers","Accept","res","err","evName","evFunc","player","videoWidth","containerSize","videoHeight","setTimeout","nodeType","root","config","playPromise","isDelDom","_interval","classNameList","split","clearTimeout","keyShortcut","destroyFunc","_replay","param","defaultUserGestureEventHandler","userGestureEventMiddleware","descriptor","enablePausedInactive","k","controlLst","control","Proxy","HAVE_NOTHING","HAVE_METADATA","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","NETWORK_EMPTY","NETWORK_IDLE","NETWORK_LOADING","NETWORK_NO_SOURCE","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","REPLAY","ERROR","PLAY_TIPS","PAUSE_TIPS","PLAYNEXT_TIPS","DOWNLOAD_TIPS","ROTATE_TIPS","RELOAD_TIPS","FULLSCREEN_TIPS","EXITFULLSCREEN_TIPS","CSSFULLSCREEN_TIPS","EXITCSSFULLSCREEN_TIPS","TEXTTRACK","MINIPLAYER","SCREENSHOT","LIVE","OFF","MINIPLAYER_DRAG","AIRPLAY_TIPS","set","autoplay","playsinline","airplay","tabindex","mediaType","textTrackDom","nativeTextTrack","track","styleStr","wrap","XgVideoProxy","constructor","videoConfig","getElementsByTagName","trackDoms","lastBuffer","defaultVideoEventHandler","Date","curBuffer","videoEventHandler","canPlayType","range","currentTime","bool","isTrue","isFinite","ended","status","en","cn","rate","posterUrl","poster","vol","off","emit","methods","descriptors","callable","Function","defineProperties","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","args","slice","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","desc","gs","isFunction","classRe","functionToString","isPrototype","isObject","possibleTypes","foo","bar","trzy","max","dest","TypeError","process","opts1","searchString","emitter","function","locals","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","clk","_click_","clickedTime","first","element","onTouch","fullscreen","Event","onCanPlay","StartPlayIcon","StartPauseIcon","onPlayerReady","Mobile","Pc","Start","S_start"],"mappings":"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","file":"core_player.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 175);\n","import XgplayerTimeRange from './xgplayerTimeRange'\n\nexport function createDom(el = 'div', tpl = '', attrs = {}, cname = '') {\n let dom = document.createElement(el)\n dom.className = cname\n dom.innerHTML = tpl\n Object.keys(attrs).forEach(item => {\n let key = item\n let value = attrs[item]\n if (el === 'video' || el === 'audio') {\n if (value) {\n dom.setAttribute(key, value)\n }\n } else {\n dom.setAttribute(key, value)\n }\n })\n return dom\n}\n\nexport function hasClass(el, className) {\n if (!el) {\n return false;\n }\n\n if (el.classList) {\n return Array.prototype.some.call(el.classList, item => item === className)\n } else if (el.className) {\n return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n } else {\n return false;\n }\n}\n\nexport function addClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.add(item)\n })\n } else if (!hasClass(el, className)) {\n el.className += ' ' + className\n }\n}\n\nexport function removeClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.split(/\\s+/g).forEach(item => {\n el.classList.remove(item)\n })\n } else if (hasClass(el, className)) {\n className.split(/\\s+/g).forEach(item => {\n let reg = new RegExp('(\\\\s|^)' + item + '(\\\\s|$)')\n el.className = el.className.replace(reg, ' ')\n })\n }\n}\n\nexport function toggleClass(el, className) {\n if (!el) {\n return;\n }\n\n className.split(/\\s+/g).forEach(item => {\n if (hasClass(el, item)) {\n removeClass(el, item)\n } else {\n addClass(el, item)\n }\n })\n}\n\nexport function findDom(el = document, sel) {\n let dom\n // fix querySelector IDs that start with a digit\n // https://stackoverflow.com/questions/37270787/uncaught-syntaxerror-failed-to-execute-queryselector-on-document\n try {\n dom = el.querySelector(sel)\n } catch (e) {\n if (sel.indexOf('#') === 0) {\n dom = el.getElementById(sel.slice(1))\n }\n }\n return dom\n}\n\nexport function padStart(str, length, pad) {\n let charstr = String(pad)\n let len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n let chars = []\n let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\nexport function format(time) {\n if (window.isNaN(time)) {\n return ''\n }\n let hour = padStart(Math.floor(time / 3600), 2, 0)\n let minute = padStart(Math.floor((time - hour * 3600) / 60), 2, 0)\n let second = padStart(Math.floor((time - hour * 3600 - minute * 60)), 2, 0)\n return (hour === '00' ? [minute, second] : [hour, minute, second]).join(':')\n}\n\nexport function event(e) {\n if (e.touches) {\n let touch = e.touches[0] || e.changedTouches[0]\n e.clientX = touch.clientX || 0\n e.clientY = touch.clientY || 0\n e.offsetX = touch.pageX - touch.target.offsetLeft\n e.offsetY = touch.pageY - touch.target.offsetTop\n }\n e._target = e.target || e.srcElement\n}\n\nexport function typeOf(obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0]\n}\n\nexport function deepCopy(dst, src) {\n if (typeOf(src) === 'Object' && typeOf(dst) === 'Object') {\n Object.keys(src).forEach(key => {\n if (typeOf(src[key]) === 'Object' && !(src[key] instanceof Node)) {\n if (!dst[key]) {\n dst[key] = src[key]\n } else {\n deepCopy(dst[key], src[key])\n }\n } else if (typeOf(src[key]) === 'Array') {\n dst[key] = typeOf(dst[key]) === 'Array' ? dst[key].concat(src[key]) : src[key]\n } else {\n dst[key] = src[key]\n }\n })\n return dst\n }\n}\nexport function getBgImage(el) {\n // fix: return current page url when url is none\n let url = (el.currentStyle || window.getComputedStyle(el, null)).backgroundImage\n if (!url || url === 'none') {\n return ''\n }\n let a = document.createElement('a')\n a.href = url.replace(/url\\(\"|\"\\)/g, '')\n return a.href\n}\n\nexport function copyDom(dom) {\n if (dom && dom.nodeType === 1) {\n let back = document.createElement(dom.tagName)\n Array.prototype.forEach.call(dom.attributes, (node) => {\n back.setAttribute(node.name, node.value)\n })\n if (dom.innerHTML) {\n back.innerHTML = dom.innerHTML\n }\n return back\n } else {\n return ''\n }\n}\n\nexport function _setInterval(context, eventName, intervalFunc, frequency) {\n if (!context._interval[eventName]) {\n context._interval[eventName] = setInterval(intervalFunc.bind(context), frequency)\n }\n}\n\nexport function _clearInterval(context, eventName) {\n clearInterval(context._interval[eventName])\n context._interval[eventName] = null\n}\n\nexport function createImgBtn(name, imgUrl, width, height) {\n let btn = createDom(`xg-${name}`, '', {}, `xgplayer-${name}-img`)\n btn.style.backgroundImage = `url(\"${imgUrl}\")`\n if (width && height) {\n let w, h, unit\n ['px', 'rem', 'em', 'pt', 'dp', 'vw', 'vh', 'vm', '%'].every((item) => {\n if (width.indexOf(item) > -1 && height.indexOf(item) > -1) {\n w = Number(width.slice(0, width.indexOf(item)).trim())\n h = Number(height.slice(0, height.indexOf(item)).trim())\n unit = item\n return false\n } else {\n return true\n }\n })\n btn.style.width = `${w}${unit}`\n btn.style.height = `${h}${unit}`\n btn.style.backgroundSize = `${w}${unit} ${h}${unit}`\n if (name === 'start') {\n btn.style.margin = `-${h / 2}${unit} auto auto -${w / 2}${unit}`\n } else {\n btn.style.margin = 'auto 5px auto 5px'\n }\n }\n return btn\n}\n\nexport function isWeiXin() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('micromessenger') > -1\n}\n\nexport function isUc() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('ucbrowser') > -1\n}\n\nexport function computeWatchDur(played = []) {\n let arr = []\n for (let i = 0; i < played.length; i++) {\n if(!played[i].end || played[i].begin < 0 || played[i].end < 0 || played[i].end < played[i].begin) {\n continue\n }\n if(arr.length < 1) {\n arr.push({begin: played[i].begin, end: played[i].end})\n } else {\n for (let j = 0; j < arr.length; j++) {\n let begin = played[i].begin\n let end = played[i].end\n if(end < arr[j].begin) {\n arr.splice(j, 0, {begin, end})\n break\n } else if(begin > arr[j].end) {\n if(j > arr.length - 2) {\n arr.push({begin, end})\n break\n }\n } else {\n let b = arr[j].begin\n let e = arr[j].end\n arr[j].begin = Math.min(begin, b)\n arr[j].end = Math.max(end, e)\n break\n }\n }\n }\n }\n let watch_dur = 0\n for (let i = 0; i < arr.length; i++) {\n watch_dur += arr[i].end - arr[i].begin\n }\n return watch_dur\n}\n\nexport function offInDestroy(object, event, fn, offEvent) {\n function onDestroy () {\n object.off(event, fn)\n object.off(offEvent, onDestroy)\n }\n object.once(offEvent, onDestroy)\n}\n\nexport function on(object, event, fn, offEvent) {\n if (offEvent) {\n object.on(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.on(event, _fn)\n }\n}\n\nexport function once(object, event, fn, offEvent) {\n if (offEvent) {\n object.once(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.once(event, _fn)\n }\n}\n\nexport function getBuffered2(vbuffered, maxHoleDuration = 0.5) { //ref: hls.js\n let buffered = []\n for (let i = 0; i < vbuffered.length; i++) {\n buffered.push({ start: vbuffered.start(i) < 0.5 ? 0 : vbuffered.start(i), end: vbuffered.end(i) });\n }\n buffered.sort(function (a, b) {\n let diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n let buffered_2 = []\n if (maxHoleDuration) {\n for (let i = 0; i < buffered.length; i++) {\n let buf2len = buffered_2.length\n if (buf2len) {\n let buf2end = buffered_2[buf2len - 1].end\n if ((buffered[i].start - buf2end) < maxHoleDuration) {\n if (buffered[i].end > buf2end) {\n buffered_2[buf2len - 1].end = buffered[i].end\n }\n } else {\n buffered_2.push(buffered[i])\n }\n } else {\n buffered_2.push(buffered[i])\n }\n }\n } else {\n buffered_2 = buffered\n }\n return new XgplayerTimeRange(buffered_2)\n}\n\nexport function checkIsBrowser() {\n return !(typeof(window) === 'undefined' || typeof(window.document) === 'undefined' || typeof(window.document.createElement) === 'undefined')\n}\n\nexport function setStyle(elem, name, value) {\n let style = elem.style;\n try {\n style[name] = value;\n } catch (error) {\n style.setProperty( name, value );\n }\n}\n\nexport const PresentationMode = {\n PIP: 'picture-in-picture',\n INLINE: 'inline',\n FULLSCREEN: 'fullscreen'\n}\n\nexport function checkWebkitSetPresentationMode (video) {\n return typeof video.webkitSetPresentationMode === 'function'\n}\n\nexport const util = {\n createDom, hasClass, addClass, removeClass, toggleClass, findDom, padStart, format, event, typeOf, \n deepCopy, getBgImage, copyDom, setInterval: _setInterval, clearInterval: _clearInterval, createImgBtn, isWeiXin, isUc, computeWatchDur,\n offInDestroy, on, once, getBuffered2, checkIsBrowser, setStyle\n}\n\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertInto + \" \" + options.insertAt.before);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","import {version} from '../version.json'\nconst ErrorTypes = {\n network: {\n code: 1,\n msg: '视频下载错误',\n remark: '只要视频下载错误就使用此类型,无论是video本身的超时还是xhr的分段请求超时或者资源不存在'\n },\n mse: {\n code: 2,\n msg: '流追加错误',\n remark: '追加流的时候如果类型不对、无法被正确解码则会触发此类错误'\n },\n parse: {\n code: 3,\n msg: '解析错误',\n remark: 'mp4、hls、flv我们都是使用js进行格式解析,如果解析失败则会触发此类错误'\n },\n format: {\n code: 4,\n msg: '格式错误',\n remark: '如果浏览器不支持的格式导致播放错误'\n },\n decoder: {\n code: 5,\n msg: '解码错误',\n remark: '浏览器解码异常会抛出此类型错误'\n },\n runtime: {\n code: 6,\n msg: '语法错误',\n remark: '播放器语法错误'\n },\n timeout: {\n code: 7,\n msg: '播放超时',\n remark: '播放过程中无法正常请求下一个分段导致播放中断'\n },\n other: {\n code: 8,\n msg: '其他错误',\n remark: '不可知的错误或被忽略的错误类型'\n }\n}\n\nclass Errors {\n constructor (type, currentTime, duration, networkState, readyState, src, currentSrc,\n ended, errd = {line: '', handle: '', msg: '', version: ''}, errorCode, mediaError) {\n let r = {}\n if (arguments.length > 1) {\n r.playerVersion = version // 播放器版本\n r.errorType = type\n r.domain = document.domain // domain\n r.duration = duration // 视频时长\n r.currentTime = currentTime\n r.networkState = networkState\n r.readyState = readyState\n r.currentSrc = currentSrc\n r.src = src\n r.ended = ended\n r.errd = errd // 错误详情\n r.ex = (ErrorTypes[type] || {}).msg // 补充信息\n r.errorCode = errorCode\n r.mediaError = mediaError\n } else {\n const arg = arguments[0]\n Object.keys(arg).map(key => {\n r[key] = arg[key]\n })\n r.ex = ((arg.type && ErrorTypes[arg.type]) || {}).msg\n }\n return r\n }\n}\nexport default Errors\n","let sniffer = {}\n\nObject.defineProperty(sniffer, 'device', {\n get: function () {\n let r = sniffer.os\n return r.isPc ? 'pc' : 'mobile'\n // return r.isPc ? 'pc' : r.isTablet ? 'tablet' : 'mobile'\n }\n})\n\nObject.defineProperty(sniffer, 'browser', {\n get: function () {\n let ua = navigator.userAgent.toLowerCase()\n let reg = {\n ie: /rv:([\\d.]+)\\) like gecko/,\n firfox: /firefox\\/([\\d.]+)/,\n chrome: /chrome\\/([\\d.]+)/,\n opera: /opera.([\\d.]+)/,\n safari: /version\\/([\\d.]+).*safari/\n }\n return [].concat(Object.keys(reg).filter(key => reg[key].test(ua)))[0] || ''\n }\n})\n\nObject.defineProperty(sniffer, 'os', {\n get: function () {\n let ua = navigator.userAgent\n let isWindowsPhone = /(?:Windows Phone)/.test(ua)\n let isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone\n let isAndroid = /(?:Android)/.test(ua)\n let isFireFox = /(?:Firefox)/.test(ua)\n let isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))\n let isPhone = /(?:iPhone)/.test(ua) && !isTablet\n let isPc = !isPhone && !isAndroid && !isSymbian && !isTablet\n return {\n isTablet,\n isPhone,\n isAndroid,\n isPc,\n isSymbian,\n isWindowsPhone,\n isFireFox\n }\n }\n})\n\nexport default sniffer\n","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","export default class XgplayerTimeRange {\n constructor(bufferedList) {\n this.bufferedList = bufferedList\n }\n\n start (index) {\n return this.bufferedList[index].start\n }\n\n end (index) {\n return this.bufferedList[index].end\n }\n\n get length () {\n return this.bufferedList.length\n }\n}\n","import Proxy from './proxy'\nimport { util, deepCopy, findDom, createDom, addClass, typeOf, hasClass, removeClass, checkIsBrowser } from './utils/util'\nimport sniffer from './utils/sniffer'\nimport XgplayerTimeRange from './utils/xgplayerTimeRange'\nimport Errors from './error'\nimport allOff from 'event-emitter/all-off'\nimport s_i18n from './skin/controls/i18n.js'\nimport './skin/style/index.scss'\n\nimport {\n version\n} from '../version.json'\nclass Player extends Proxy {\n constructor (options) {\n super(options)\n this.config = deepCopy({\n width: 600,\n height: 337.5,\n ignores: [],\n whitelist: [],\n lang: (document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn').toLocaleLowerCase(),\n inactive: 3000,\n volume: 0.6,\n controls: true,\n controlsList: ['nodownload']\n }, options)\n this.version = version\n this.userTimer = null\n this.waitTimer = null\n this.history = []\n this.isProgressMoving = false\n this.root = findDom(document, `#${this.config.id}`)\n this.controls = createDom('xg-controls', '', {\n unselectable: 'on',\n onselectstart: 'return false'\n }, 'xgplayer-controls')\n if (this.config.isShowControl) {\n this.controls.style.display = 'none'\n }\n if (!this.root) {\n let el = this.config.el\n if (el && el.nodeType === 1) {\n this.root = el\n } else {\n this.emit('error', new Errors({\n type: 'use',\n errd: {\n line: 45,\n handle: 'Constructor',\n msg: 'container id can\\'t be empty'\n },\n vid: this.config.vid\n }))\n console.error('container id can\\'t be empty')\n return false\n }\n }\n // this.rootBackup = copyDom(this.root)\n addClass(this.root, `xgplayer xgplayer-${sniffer.device} xgplayer-nostart xgplayer-pause ${this.config.controls ? '' : 'xgplayer-no-controls'}`)\n this.root.appendChild(this.controls)\n if (this.config.fluid) {\n this.root.style['max-width'] = '100%'\n this.root.style['width'] = '100%'\n this.root.style['height'] = '0'\n this.root.style['padding-top'] = `${this.config.height * 100 / this.config.width}%`\n\n this.video.style['position'] = 'absolute'\n this.video.style['top'] = '0'\n this.video.style['left'] = '0'\n } else {\n // this.root.style.width = `${this.config.width}px`\n // this.root.style.height = `${this.config.height}px`\n if (this.config.width) {\n if (typeof this.config.width !== 'number') {\n this.root.style.width = this.config.width\n } else {\n this.root.style.width = `${this.config.width}px`\n }\n }\n if (this.config.height) {\n if (typeof this.config.height !== 'number') {\n this.root.style.height = this.config.height\n } else {\n this.root.style.height = `${this.config.height}px`\n }\n }\n }\n if (this.config.execBeforePluginsCall) {\n this.config.execBeforePluginsCall.forEach(item => {\n item.call(this, this)\n })\n }\n if(!this.config.closeI18n) {\n Player.install(s_i18n.name, s_i18n.method)\n }\n if (this.config.controlStyle && typeOf(this.config.controlStyle) === 'String') {\n let self = this\n fetch(self.config.controlStyle, {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n }).then(function (res) {\n if (res.ok) {\n res.json().then(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n self.config[prop] = obj[prop]\n }\n }\n self.pluginsCall()\n })\n }\n }).catch(function (err) {\n console.log('Fetch错误:' + err)\n })\n } else {\n this.pluginsCall()\n }\n if(this.config.controlPlugins) {\n Player.controlsRun(this.config.controlPlugins, this)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.on(evName, evFunc)\n }\n });\n\n ['focus', 'blur'].forEach(item => {\n this.on(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n let player = this\n this.mousemoveFunc = function () {\n player.emit('focus')\n if (!player.config.closeFocusVideoFocus) {\n player.video.focus()\n }\n }\n this.root.addEventListener('mousemove', this.mousemoveFunc)\n this.playFunc = function () {\n player.emit('focus')\n if (!player.config.closePlayVideoFocus) {\n player.video.focus()\n }\n }\n player.once('play', this.playFunc)\n\n this.getVideoSize = function () {\n if (this.video.videoWidth && this.video.videoHeight) {\n let containerSize = player.root.getBoundingClientRect()\n if (player.config.fitVideoSize === 'auto') {\n if (containerSize.width / containerSize.height > this.video.videoWidth / this.video.videoHeight) {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n } else if (player.config.fitVideoSize === 'fixWidth') {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else if (player.config.fitVideoSize === 'fixHeight') {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n }\n }\n player.once('loadeddata', this.getVideoSize)\n\n setTimeout(() => {\n this.emit('ready')\n this.isReady = true\n }, 0)\n\n if (this.config.videoInit) {\n if (hasClass(this.root, 'xgplayer-nostart')) {\n this.start()\n }\n }\n if (player.config.rotate) {\n player.on('requestFullscreen', this.updateRotateDeg)\n player.on('exitFullscreen', this.updateRotateDeg)\n }\n\n function onDestroy () {\n player.root.removeEventListener('mousemove', player.mousemoveFunc)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n }\n\n attachVideo () {\n if(this.video && this.video.nodeType === 1) {\n this.root.insertBefore(this.video, this.root.firstChild)\n }\n setTimeout(() => {\n this.emit('complete')\n if(this.danmu && typeof this.danmu.resize === 'function') {\n this.danmu.resize()\n }\n }, 1)\n }\n\n start (url = this.config.url) {\n if(!this.video) return\n let player = this\n if (!url || url === '') {\n this.emit('urlNull')\n return\n }\n this.canPlayFunc = function () {\n player.off('canplay', player.canPlayFunc)\n let playPromise = player.video.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.then(function () {\n player.emit('autoplay started')\n }).catch(function () {\n player.emit('autoplay was prevented')\n addClass(player.root, 'xgplayer-is-autoplay')\n })\n }\n }\n if (typeOf(url) !== 'Array') {\n if (typeOf(url) === 'String' && url.indexOf('blob:') > -1 && url === this.video.src) {\n // 在Chromium环境下用mse url给video二次赋值会导致错误\n } else {\n this.video.src = url\n }\n } else {\n url.forEach(item => {\n this.video.appendChild(createDom('source', '', {\n src: `${item.src}`,\n type: `${item.type || ''}`\n }))\n })\n }\n if (this.config.autoplay) {\n if (sniffer.os.isPhone) {\n this.canPlayFunc()\n } else {\n this.on('canplay', this.canPlayFunc)\n }\n }\n if(!this.config.disableStartLoad) {\n this.video.load()\n }\n this.attachVideo()\n }\n\n reload () {\n this.video.load()\n this.reloadFunc = function () {\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n this.once('loadeddata', this.reloadFunc)\n }\n\n destroy (isDelDom = true) {\n let player = this\n clearInterval(this.bulletResizeTimer)\n for (let k in this._interval) {\n clearInterval(this._interval[k])\n this._interval[k] = null\n }\n if (this.checkTimer) {\n clearInterval(this.checkTimer)\n }\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.off(evName, evFunc)\n }\n });\n if (this.loadeddataFunc) {\n this.off('loadeddata', this.loadeddataFunc)\n }\n if (this.reloadFunc) {\n this.off('loadeddata', this.reloadFunc)\n }\n if (this.replayFunc) {\n this.off('play', this.replayFunc)\n }\n if (this.playFunc) {\n this.off('play', this.playFunc)\n }\n if (this.getVideoSize) {\n this.off('loadeddata', this.getVideoSize)\n };\n ['focus', 'blur'].forEach(item => {\n this.off(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n if (!this.config.keyShortcut || this.config.keyShortcut === 'on') {\n ['video', 'controls'].forEach(item => {\n if (this[item]) {\n this[item].removeEventListener('keydown', function (e) { player.onKeydown(e, player) })\n }\n })\n }\n\n function destroyFunc () {\n this.emit('destroy')\n // this.root.id = this.root.id + '_del'\n // parentNode.insertBefore(this.rootBackup, this.root)\n\n // fix video destroy https://stackoverflow.com/questions/3258587/how-to-properly-unload-destroy-a-video-element\n this.video.removeAttribute('src') // empty source\n this.video.load()\n if (isDelDom) {\n // parentNode.removeChild(this.root)\n this.root.innerHTML = ''\n let classNameList = this.root.className.split(' ')\n if (classNameList.length > 0) {\n this.root.className = classNameList.filter(name => name.indexOf('xgplayer') < 0).join(' ')\n } else {\n this.root.className = ''\n }\n }\n\n for (let k in this) {\n // if (k !== 'config') {\n delete this[k]\n // }\n }\n allOff(this)\n }\n\n // destroy immediately\n // Don't use the paused property detection, it doesn't use MediaElement.paused, \n // so it's not accurate enough. Destroy after waiting for pause event, this \n // changes the synchronous behavior of destroy api\n destroyFunc.call(this)\n\n super.destroy()\n }\n\n replay () {\n let self = this\n let _replay = this._replay\n // ie9 bugfix\n removeClass(this.root, 'xgplayer-ended')\n if(sniffer.browser.indexOf('ie') > -1) {\n this.emit('play')\n this.emit('playing')\n }\n \n if (_replay && _replay instanceof Function) {\n _replay()\n } else {\n this.currentTime = 0\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n }\n\n userGestureTrigEvent (name, param) {\n const defaultUserGestureEventHandler = (name, param) => {\n this.emit(name, param)\n }\n if(this.config.userGestureEventMiddleware && typeof this.config.userGestureEventMiddleware[name] === 'function') {\n this.config.userGestureEventMiddleware[name].call(this, this, name, param, defaultUserGestureEventHandler)\n } else {\n defaultUserGestureEventHandler.call(this, name, param);\n }\n }\n\n pluginsCall () {\n if(Player.plugins['s_i18n']) {\n Player.plugins['s_i18n'].call(this, this)\n }\n let self = this\n if (Player.plugins) {\n let ignores = this.config.ignores\n Object.keys(Player.plugins).forEach(name => {\n let descriptor = Player.plugins[name]\n if(!descriptor || typeof descriptor !== 'function'){\n console.warn('plugin name', name , 'is invalid')\n } else {\n if (!ignores.some(item => name === item || name === 's_' + item) && name !== 's_i18n') {\n if (['pc', 'tablet', 'mobile'].some(type => type === name)) {\n if (name === sniffer.device) {\n setTimeout(() => {\n // if destroyed, skip\n if (!self.video) return;\n descriptor.call(self, self)\n }, 0)\n }\n } else {\n descriptor.call(this, this)\n }\n }\n }\n })\n }\n }\n\n onFocus () {\n let player = this\n if(hasClass(this.root, 'xgplayer-inactive')) {\n player.emit('controlShow')\n }\n removeClass(this.root, 'xgplayer-inactive')\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n player.userTimer = setTimeout(function () {\n player.emit('blur')\n }, player.config.inactive)\n }\n\n onBlur () {\n // this.video.blur()\n if ((this.config.enablePausedInactive || !this.paused) && !this.ended && !this.config.closeInactive) {\n if(!hasClass(this.root, 'xgplayer-inactive')) {\n this.emit('controlHide')\n }\n addClass(this.root, 'xgplayer-inactive')\n }\n }\n\n onPlay () {\n addClass(this.root, 'xgplayer-isloading')\n addClass(this.root, 'xgplayer-playing')\n removeClass(this.root, 'xgplayer-pause')\n }\n\n onPause () {\n addClass(this.root, 'xgplayer-pause')\n if (this.userTimer) {\n clearTimeout(this.userTimer)\n }\n this.emit('focus')\n }\n\n onEnded () {\n addClass(this.root, 'xgplayer-ended')\n removeClass(this.root, 'xgplayer-playing')\n }\n\n onSeeking () {\n this.isSeeking = true\n // 兼容IE下无法触发waiting事件的问题 seeking的时候直接出发waiting\n this.onWaiting()\n // addClass(this.root, 'seeking');\n }\n\n // onTimeupdate () {\n // // for ie,playing fired before waiting\n // if (this.waitTimer) {\n // clearTimeout(this.waitTimer)\n // }\n // removeClass(this.root, 'xgplayer-isloading')\n\n // }\n\n onSeeked () {\n // for ie,playing fired before waiting\n this.once('timeupdate', () => {\n this.isSeeking = false\n })\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading')\n }\n\n onWaiting () {\n let self = this\n if (self.waitTimer) {\n clearTimeout(self.waitTimer)\n }\n if (self.checkTimer) {\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n let time = self.currentTime\n self.waitTimer = setTimeout(function () {\n addClass(self.root, 'xgplayer-isloading')\n self.checkTimer = setInterval(function () {\n if (self.currentTime !== time) {\n removeClass(self.root, 'xgplayer-isloading')\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n }, 1000)\n }, 500)\n }\n\n onPlaying () {\n // 兼容safari下无法自动播放会触发该事件的场景\n if (this.paused) {\n return\n }\n this.isSeeking = false\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading xgplayer-nostart xgplayer-pause xgplayer-ended xgplayer-is-error xgplayer-replay')\n addClass(this.root, 'xgplayer-playing')\n }\n\n static install (name, descriptor) {\n if (!checkIsBrowser()) {\n return\n }\n if (!Player.plugins) {\n Player.plugins = {}\n }\n if (!Player.plugins[name]) {\n Player.plugins[name] = descriptor\n }\n }\n\n static installAll (list) {\n for(let k = 0; k < list.length; k++){\n Player.install(list[k].name, list[k].method)\n }\n }\n\n static use (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n Player.plugins[name] = descriptor\n }\n\n static useAll (list) {\n for (let k in list) {\n Player.use(list[k].name, list[k].method)\n }\n }\n\n static controlsRun (controlLst, context) {\n controlLst.forEach(function(control) {\n control.method.call(context)\n })\n }\n}\n\nPlayer.util = util\nPlayer.sniffer = sniffer\nPlayer.Errors = Errors\nPlayer.XgplayerTimeRange = XgplayerTimeRange\n\nexport default Player\n","import { typeOf } from '../../utils/util'\n\nlet s_i18n = function () {\n let player = this; let lang = {};\n lang.en = {\n HAVE_NOTHING: 'There is no information on whether audio/video is ready',\n HAVE_METADATA: 'Audio/video metadata is ready ',\n HAVE_CURRENT_DATA: 'Data about the current play location is available, but there is not enough data to play the next frame/millisecond',\n HAVE_FUTURE_DATA: 'Current and at least one frame of data is available',\n HAVE_ENOUGH_DATA: 'The available data is sufficient to start playing',\n NETWORK_EMPTY: 'Audio/video has not been initialized',\n NETWORK_IDLE: 'Audio/video is active and has been selected for resources, but no network is used',\n NETWORK_LOADING: 'The browser is downloading the data',\n NETWORK_NO_SOURCE: 'No audio/video source was found',\n MEDIA_ERR_ABORTED: 'The fetch process is aborted by the user',\n MEDIA_ERR_NETWORK: 'An error occurred while downloading',\n MEDIA_ERR_DECODE: 'An error occurred while decoding',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'Audio/video is not supported',\n REPLAY: 'Replay',\n ERROR: 'Network is offline',\n PLAY_TIPS: 'Play',\n PAUSE_TIPS: 'Pause',\n PLAYNEXT_TIPS: 'Play next',\n DOWNLOAD_TIPS: 'Download',\n ROTATE_TIPS: 'Rotate',\n RELOAD_TIPS: 'Reload',\n FULLSCREEN_TIPS: \"Fullscreen\",\n EXITFULLSCREEN_TIPS: 'Exit fullscreen',\n CSSFULLSCREEN_TIPS: 'Cssfullscreen',\n EXITCSSFULLSCREEN_TIPS: 'Exit cssfullscreen',\n TEXTTRACK: 'Caption',\n PIP: 'Pip',\n MINIPLAYER: 'Miniplayer',\n SCREENSHOT: 'Screenshot',\n LIVE: 'LIVE',\n OFF: 'Off',\n MINIPLAYER_DRAG: 'Click and hold to drag',\n AIRPLAY_TIPS: 'Airplay',\n }\n lang['zh-cn'] = {\n HAVE_NOTHING: '没有关于音频/视频是否就绪的信息',\n HAVE_METADATA: '音频/视频的元数据已就绪',\n HAVE_CURRENT_DATA: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒',\n HAVE_FUTURE_DATA: '当前及至少下一帧的数据是可用的',\n HAVE_ENOUGH_DATA: '可用数据足以开始播放',\n NETWORK_EMPTY: '音频/视频尚未初始化',\n NETWORK_IDLE: '音频/视频是活动的且已选取资源,但并未使用网络',\n NETWORK_LOADING: '浏览器正在下载数据',\n NETWORK_NO_SOURCE: '未找到音频/视频来源',\n MEDIA_ERR_ABORTED: '取回过程被用户中止',\n MEDIA_ERR_NETWORK: '当下载时发生错误',\n MEDIA_ERR_DECODE: '当解码时发生错误',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音频/视频格式',\n REPLAY: '重播',\n ERROR: '网络连接似乎出现了问题',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暂停',\n PLAYNEXT_TIPS: '下一集',\n DOWNLOAD_TIPS: '下载',\n ROTATE_TIPS: '旋转',\n RELOAD_TIPS: '重新载入',\n FULLSCREEN_TIPS: \"进入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '进入样式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出样式全屏',\n TEXTTRACK: '字幕',\n PIP: '画中画',\n MINIPLAYER: '迷你播放器',\n SCREENSHOT: '截图',\n LIVE: '正在直播',\n OFF: '关闭',\n MINIPLAYER_DRAG: '点击按住可拖动视频',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['zh-hk'] = {\n HAVE_NOTHING: '沒有關於音頻/視頻是否就緒的信息',\n HAVE_METADATA: '音頻/視頻的元數據已就緒',\n HAVE_CURRENT_DATA: '關於當前播放位置的數據是可用的,但沒有足夠的數據來播放下壹幀/毫秒',\n HAVE_FUTURE_DATA: '當前及至少下壹幀的數據是可用的',\n HAVE_ENOUGH_DATA: '可用數據足以開始播放',\n NETWORK_EMPTY: '音頻/視頻尚未初始化',\n NETWORK_IDLE: '音頻/視頻是活動的且已選取資源,但並未使用網絡',\n NETWORK_LOADING: '瀏覽器正在下載數據',\n NETWORK_NO_SOURCE: '未找到音頻/視頻來源',\n MEDIA_ERR_ABORTED: '取回過程被用戶中止',\n MEDIA_ERR_NETWORK: '當下載時發生錯誤',\n MEDIA_ERR_DECODE: '當解碼時發生錯誤',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音頻/視頻格式',\n REPLAY: '重播',\n ERROR: '網絡連接似乎出現了問題',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暫停',\n PLAYNEXT_TIPS: '下壹集',\n DOWNLOAD_TIPS: '下載',\n ROTATE_TIPS: '旋轉',\n RELOAD_TIPS: '重新載入',\n FULLSCREEN_TIPS: \"進入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '進入樣式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出樣式全屏',\n TEXTTRACK: '字幕',\n PIP: '畫中畫',\n MINIPLAYER: '迷妳播放器',\n SCREENSHOT: '截圖',\n LIVE: '正在直播',\n OFF: '關閉',\n MINIPLAYER_DRAG: '點擊按住可拖動視頻',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['jp'] = {\n HAVE_NOTHING: 'オーディオ/ビデオが準備できているか情報がありません',\n HAVE_METADATA: 'オーディオ/ビデオのメタデータは準備できています',\n HAVE_CURRENT_DATA: '現在の再生位置に関するデータは利用可能ですが、次のフレーム/ミリ秒を再生するのに十分なデータがありません',\n HAVE_FUTURE_DATA: '現在、少なくとも次のフレームのデータが利用可能です',\n HAVE_ENOUGH_DATA: '利用可能なデータは再生を開始するのに十分です',\n NETWORK_EMPTY: 'オーディオ/ビデオが初期化されていません',\n NETWORK_IDLE: 'オーディオ/ビデオはアクティブでリソースが選択されていますが、ネットワークが使用されていません',\n NETWORK_LOADING: 'ブラウザーはデータをダウンロードしています',\n NETWORK_NO_SOURCE: 'オーディオ/ビデオ のソースが見つかりません',\n MEDIA_ERR_ABORTED: 'ユーザーによってフェッチプロセスが中止されました',\n MEDIA_ERR_NETWORK: 'ダウンロード中にエラーが発生しました',\n MEDIA_ERR_DECODE: 'デコード中にエラーが発生しました',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'オーディオ/ビデオ の形式がサポートされていません',\n REPLAY: 'リプレイ',\n ERROR: 'ネットワークの接続に問題が発生しました',\n PLAY_TIPS: 'プレイ',\n PAUSE_TIPS: '一時停止',\n PLAYNEXT_TIPS: '次をプレイ',\n DOWNLOAD_TIPS: 'ダウンロード',\n ROTATE_TIPS: '回転',\n RELOAD_TIPS: '再読み込み',\n FULLSCREEN_TIPS: \"フルスクリーン\",\n EXITFULLSCREEN_TIPS: 'フルスクリーンを終了',\n CSSFULLSCREEN_TIPS: 'シアターモード',\n EXITCSSFULLSCREEN_TIPS: 'シアターモードを終了',\n TEXTTRACK: '字幕',\n PIP: 'ミニプレーヤー',\n MINIPLAYER: 'ミニプレーヤー',\n SCREENSHOT: 'スクリーンショット',\n LIVE: '生放送',\n OFF: 'オフ',\n MINIPLAYER_DRAG: 'ボタンを押して働画をドラッグする',\n AIRPLAY_TIPS: '隔空放送',\n }\n\n Object.defineProperty(player, 'lang', {\n get: function () {\n if (player.config) {\n return lang[player.config.lang] || lang['en']\n } else {\n return lang['en']\n }\n },\n set: function (value) {\n if (typeOf(value) === 'Object') {\n Object.keys(value).forEach(key => {\n lang[key] = value[key]\n })\n }\n }\n })\n\n}\n\nexport default {\n name: 's_i18n',\n method: s_i18n\n}","import EventEmitter from 'event-emitter'\nimport { findDom, createDom, hasClass, removeClass, _clearInterval, _setInterval, on, once, getBuffered2, setStyle } from './utils/util'\nimport Errors from './error'\n\nclass Proxy {\n constructor (options) {\n this._hasStart = false\n this.videoConfig = {\n controls: !!options.isShowControl,\n autoplay: options.autoplay,\n playsinline: options.playsinline,\n 'webkit-playsinline': options.playsinline,\n 'x5-playsinline': options.playsinline,\n 'x5-video-player-type': options['x5-video-player-type'] || options['x5VideoPlayerType'],\n 'x5-video-player-fullscreen': options['x5-video-player-fullscreen'] || options['x5VideoPlayerFullscreen'],\n 'x5-video-orientation': options['x5-video-orientation'] || options['x5VideoOrientation'],\n airplay: options['airplay'],\n 'webkit-airplay': options['airplay'],\n tabindex: 2,\n mediaType: options.mediaType || 'video'\n }\n if (options.muted) {\n this.videoConfig.muted = 'muted'\n }\n if (options.loop) {\n this.videoConfig.loop = 'loop'\n }\n let textTrackDom = ''\n this.textTrackShowDefault = true\n if (options.nativeTextTrack && Array.isArray(options.nativeTextTrack)) {\n if (options.nativeTextTrack.length > 0 && !options.nativeTextTrack.some(track => { return track.default })) {\n options.nativeTextTrack[0].default = true\n this.textTrackShowDefault = false\n }\n options.nativeTextTrack.some(track => {\n if (track.src && track.label && track.default) {\n textTrackDom += `<track src=\"${track.src}\" `\n if (track.kind) {\n textTrackDom += `kind=\"${track.kind}\" `\n }\n textTrackDom += `label=\"${track.label}\" `\n if (track.srclang) {\n textTrackDom += `srclang=\"${track.srclang}\" `\n }\n textTrackDom += `${track.default ? 'default' : ''}>`\n return true\n }\n })\n this.videoConfig.crossorigin = 'anonymous'\n }\n if (options.textTrackStyle) {\n let style = document.createElement('style')\n this.textTrackStyle = style\n document.head.appendChild(style)\n let styleStr = ''\n for (let index in options.textTrackStyle) {\n styleStr += `${index}: ${options.textTrackStyle[index]};`\n }\n let wrap = options.id ? `#${options.id}` : (options.el.id ? `#${options.el.id}` : `.${options.el.className}`)\n if (style.sheet.insertRule) {\n style.sheet.insertRule(`${wrap} video::cue { ${styleStr} }`, 0)\n } else if (style.sheet.addRule) {\n style.sheet.addRule(`${wrap} video::cue`, styleStr)\n }\n }\n let el = options.el ? options.el : findDom(document, `#${options.id}`)\n const XgVideoProxy = this.constructor.XgVideoProxy\n if(XgVideoProxy && this.videoConfig.mediaType === XgVideoProxy.mediaType) {\n this.video = new XgVideoProxy(el, options)\n } else {\n this.video = createDom(this.videoConfig.mediaType, textTrackDom, this.videoConfig, '')\n }\n if (options.videoStyle) {\n Object.keys(options.videoStyle).forEach(key => {\n setStyle(this.video, key, options.videoStyle[key])\n })\n }\n if (!this.textTrackShowDefault && textTrackDom) {\n let trackDoms = this.video.getElementsByTagName('Track')\n trackDoms[0].track.mode = 'hidden'\n }\n if (options.autoplay) {\n this.video.autoplay = true\n if (options.autoplayMuted) {\n this.video.muted = true\n }\n }\n\n this.ev = ['play', 'playing', 'pause', 'ended', 'error', 'seeking', 'seeked', 'progress', \n 'timeupdate', 'waiting', 'canplay', 'canplaythrough', 'durationchange', 'volumechange', 'ratechange', 'loadedmetadata', 'loadeddata', 'loadstart'\n ].map((item) => {\n return {\n [item]: `on${item.charAt(0).toUpperCase()}${item.slice(1)}`\n }\n })\n EventEmitter(this)\n\n this._interval = {}\n let lastBuffer = '0,0'\n let self = this\n\n const defaultVideoEventHandler = name => {\n // fix when video destroy called and video reload\n if (!this) {\n return\n }\n if (name === 'play') {\n this.hasStart = true\n } else if (name === 'canplay') {\n removeClass(this.root, 'xgplayer-is-enter')\n } else if (name === 'waiting') {\n this.inWaitingStart = new Date().getTime()\n } else if (name === 'playing') {\n removeClass(this.root, 'xgplayer-is-enter')\n if (this.inWaitingStart) {\n this.inWaitingStart = undefined\n }\n }\n if (name === 'error') {\n // process the error\n this._onError(name)\n } else {\n this.emit(name, this)\n }\n\n if (this.hasOwnProperty('_interval')) {\n if (['ended', 'error', 'timeupdate'].indexOf(name) < 0) {\n _clearInterval(this, 'bufferedChange')\n _setInterval(this, 'bufferedChange', function () {\n if (this.video && this.video.buffered) {\n let curBuffer = []\n for (let i = 0, len = this.video.buffered.length; i < len; i++) {\n curBuffer.push([this.video.buffered.start(i), this.video.buffered.end(i)])\n }\n if (curBuffer.toString() !== lastBuffer) {\n lastBuffer = curBuffer.toString()\n this.emit('bufferedChange', curBuffer)\n }\n }\n }, 200)\n } else {\n if (name !== 'timeupdate') {\n _clearInterval(this, 'bufferedChange')\n }\n }\n }\n }\n\n const videoEventHandler = name => {\n if(options.videoEventMiddleware && typeof options.videoEventMiddleware[name] === 'function') {\n options.videoEventMiddleware[name].call(this, this, name, defaultVideoEventHandler)\n } else {\n defaultVideoEventHandler.call(this, name);\n }\n }\n\n this.ev.forEach(item => {\n self.evItem = Object.keys(item)[0]\n let name = Object.keys(item)[0]\n self.video.addEventListener(Object.keys(item)[0], videoEventHandler.bind(self, name))\n })\n }\n /**\n * 错误监听处理逻辑抽离\n */\n _onError (name) {\n if (this.video && this.video.error) {\n this.emit(name, new Errors('other', this.currentTime, this.duration, this.networkState, this.readyState, this.currentSrc, this.src,\n this.ended, {\n line: 162,\n msg: this.error,\n handle: 'Constructor'\n }, this.video.error.code, this.video.error))\n }\n }\n\n get hasStart () {\n return this._hasStart\n }\n set hasStart (bool) {\n if (typeof bool === 'boolean' && bool === true && !this._hasStart) {\n this._hasStart = true\n this.emit('hasstart')\n }\n }\n destroy () {\n if (this.textTrackStyle) {\n this.textTrackStyle.parentNode.removeChild(this.textTrackStyle)\n }\n }\n play () {\n return this.video.play()\n }\n pause () {\n this.video.pause()\n }\n canPlayType (type) {\n return this.video.canPlayType(type)\n }\n getBufferedRange (buffered) {\n let range = [0, 0]\n let video = this.video\n if(!buffered) buffered = video.buffered\n let currentTime = video.currentTime\n if (buffered) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i)\n range[1] = buffered.end(i)\n if (range[0] <= currentTime && currentTime <= range[1]) {\n break\n }\n }\n }\n if (range[0] - currentTime <= 0 && currentTime - range[1] <= 0) {\n return range\n } else {\n return [0, 0]\n }\n }\n proxyOn (event, fn) {\n on(this, event, fn, 'destroy')\n }\n proxyOnce (event, fn) {\n once(this, event, fn, 'destroy')\n }\n set autoplay (isTrue) {\n if(this.video) {\n this.video.autoplay = isTrue\n }\n }\n get autoplay () {\n if(this.video) {\n return this.video.autoplay\n } else {\n return false\n }\n }\n get buffered () {\n if(this.video) {\n return this.video.buffered\n } else {\n return undefined\n }\n }\n get buffered2 () {\n return getBuffered2(this.video.buffered)\n }\n get crossOrigin () {\n if(this.video) {\n return this.video.crossOrigin\n } else {\n return false\n }\n }\n set crossOrigin (isTrue) {\n if(this.video) {\n this.video.crossOrigin = isTrue\n }\n }\n get currentSrc () {\n if(this.video) {\n return this.video.currentSrc\n } else {\n return undefined\n }\n }\n get currentTime () {\n if(this.video) {\n return this.video.currentTime || 0\n } else {\n return 0\n }\n }\n set currentTime (time) {\n if (typeof isFinite === 'function' && !isFinite(time)) return\n if (hasClass(this.root, 'xgplayer-ended')) {\n this.once('playing', () => { this.video.currentTime = time })\n this.replay()\n } else {\n this.video.currentTime = time\n }\n this.emit('currentTimeChange', time)\n }\n get defaultMuted () {\n if(this.video) {\n return this.video.defaultMuted\n } else {\n return false\n }\n }\n set defaultMuted (isTrue) {\n if(this.video) {\n this.video.defaultMuted = isTrue\n }\n }\n get duration () {\n if(this.config.duration) {\n if(this.video) return Math.min(this.config.duration, this.video.duration)\n else return this.config.duration\n }\n if (!this.video) return null\n return this.video.duration\n }\n get ended () {\n if(this.video) {\n return this.video.ended || false\n } else {\n return true\n }\n }\n get error () {\n let err = this.video.error\n if (!err) {\n return null\n }\n let status = [{\n en: 'MEDIA_ERR_ABORTED',\n cn: '取回过程被用户中止'\n }, {\n en: 'MEDIA_ERR_NETWORK',\n cn: '当下载时发生错误'\n }, {\n en: 'MEDIA_ERR_DECODE',\n cn: '当解码时发生错误'\n }, {\n en: 'MEDIA_ERR_SRC_NOT_SUPPORTED',\n cn: '不支持音频/视频'\n }]\n return this.lang ? this.lang[status[err.code - 1].en] : status[err.code - 1].en\n }\n get loop () {\n if(this.video) {\n return this.video.loop\n } else {\n return false\n }\n }\n set loop (isTrue) {\n if(this.video) {\n this.video.loop = isTrue\n }\n }\n get muted () {\n if(this.video) {\n return this.video.muted\n } else {\n return false\n }\n }\n set muted (isTrue) {\n if(this.video) {\n this.video.muted = isTrue\n }\n }\n get networkState () {\n let status = [{\n en: 'NETWORK_EMPTY',\n cn: '音频/视频尚未初始化'\n }, {\n en: 'NETWORK_IDLE',\n cn: '音频/视频是活动的且已选取资源,但并未使用网络'\n }, {\n en: 'NETWORK_LOADING',\n cn: '浏览器正在下载数据'\n }, {\n en: 'NETWORK_NO_SOURCE',\n cn: '未找到音频/视频来源'\n }]\n return this.lang ? this.lang[status[this.video.networkState].en] : status[this.video.networkState].en\n }\n get paused () {\n // if(this.video) {\n // return this.video.paused\n // } else {\n // return false\n // }\n return hasClass(this.root, 'xgplayer-pause')\n }\n get playbackRate () {\n if(this.video) {\n return this.video.playbackRate\n } else {\n return 1\n }\n }\n set playbackRate (rate) {\n if(this.video) {\n this.video.playbackRate = rate\n }\n }\n get played () {\n if(this.video) {\n return this.video.played\n } else {\n return undefined\n }\n }\n get preload () {\n if(this.video) {\n return this.video.preload\n } else {\n return false\n }\n }\n set preload (isTrue) {\n if(this.video) {\n this.video.preload = isTrue\n }\n }\n get readyState () {\n let status = [{\n en: 'HAVE_NOTHING',\n cn: '没有关于音频/视频是否就绪的信息'\n }, {\n en: 'HAVE_METADATA',\n cn: '关于音频/视频就绪的元数据'\n }, {\n en: 'HAVE_CURRENT_DATA',\n cn: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒'\n }, {\n en: 'HAVE_FUTURE_DATA',\n cn: '当前及至少下一帧的数据是可用的'\n }, {\n en: 'HAVE_ENOUGH_DATA',\n cn: '可用数据足以开始播放'\n }]\n return this.lang ? this.lang[status[this.video.readyState].en] : status[this.video.readyState]\n }\n get seekable () {\n if(this.video) {\n return this.video.seekable\n } else {\n return false\n }\n }\n get seeking () {\n if(this.video) {\n return this.video.seeking\n } else {\n return false\n }\n }\n get src () {\n if(this.video) {\n return this.video.src\n } else {\n return undefined\n }\n }\n set src (url) {\n if (!hasClass(this.root, 'xgplayer-ended')) {\n this.emit('urlchange', this.video.src)\n }\n removeClass(this.root, 'xgplayer-ended xgplayer-is-replay xgplayer-is-error')\n this.video.pause()\n this.emit('pause')\n this.video.src = url\n this.emit('srcChange')\n }\n set poster (posterUrl) {\n let poster = findDom(this.root, '.xgplayer-poster')\n if (poster) {\n poster.style.backgroundImage = `url(${posterUrl})`\n }\n }\n get volume () {\n if(this.video) {\n return this.video.volume\n } else {\n return 1\n }\n }\n set volume (vol) {\n if(this.video) {\n this.video.volume = vol\n }\n }\n get fullscreen () {\n return hasClass(this.root, 'xgplayer-is-fullscreen') || hasClass(this.root, 'xgplayer-fullscreen-active')\n }\n get bullet () {\n return findDom(this.root, 'xg-danmu') ? hasClass(findDom(this.root, 'xg-danmu'), 'xgplayer-has-danmu') : false\n }\n get textTrack () {\n return hasClass(this.root, 'xgplayer-is-textTrack')\n }\n get pip () {\n return hasClass(this.root, 'xgplayer-pip-active')\n }\n get isMiniPlayer () {\n return hasClass(this.root, 'xgplayer-miniplayer-active')\n }\n}\n\nexport default Proxy\n","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","'use strict';\n\nvar value = require('es5-ext/object/valid-object')\n\n , hasOwnProperty = Object.prototype.hasOwnProperty;\n\nmodule.exports = function (emitter/*, type*/) {\n\tvar type = arguments[1], data;\n\n\tvalue(emitter);\n\n\tif (type !== undefined) {\n\t\tdata = hasOwnProperty.call(emitter, '__ee__') && emitter.__ee__;\n\t\tif (!data) return;\n\t\tif (data[type]) delete data[type];\n\t\treturn;\n\t}\n\tif (hasOwnProperty.call(emitter, '__ee__')) delete emitter.__ee__;\n};\n","\"use strict\";\n\nvar isObject = require(\"./is-object\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) throw new TypeError(value + \" is not an Object\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar map = { function: true, object: true };\n\nmodule.exports = function (value) { return (isValue(value) && map[typeof value]) || false; };\n","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default{background:#000;width:100%;height:100%;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;-ms-user-select:none}.xgplayer-skin-default *{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.xgplayer-skin-default.xgplayer-rotate-fullscreen{position:absolute;top:0;left:100%;bottom:0;right:0;height:100vw!important;width:100vh!important;-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.xgplayer-skin-default.xgplayer-is-fullscreen{width:100%!important;height:100%!important;padding-top:0!important;z-index:9999}.xgplayer-skin-default.xgplayer-is-fullscreen.xgplayer-inactive{cursor:none}.xgplayer-skin-default video{width:100%;height:100%;outline:none}.xgplayer-skin-default .xgplayer-none{display:none}@-webkit-keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}@keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}.xgplayer-skin-default .xgplayer-controls{display:-webkit-flex;display:-moz-box;display:flex;position:absolute;bottom:0;left:0;right:0;height:40px;background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.37),rgba(0,0,0,.75),rgba(0,0,0,.75));z-index:10}.xgplayer-skin-default.xgplayer-inactive .xgplayer-controls,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-progress,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-time,.xgplayer-skin-default.xgplayer-no-controls .xgplayer-controls,.xgplayer-skin-default.xgplayer-nostart .xgplayer-controls{display:none}.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-live{display:block}.xgplayer-skin-default .xgplayer-live{display:block;font-size:12px;color:#fff;line-height:40px;-webkit-order:1;-moz-box-ordinal-group:2;order:1}.xgplayer-skin-default .xgplayer-icon{display:block;width:40px;height:40px;overflow:hidden;fill:#fff}.xgplayer-skin-default .xgplayer-icon svg{position:absolute}.xgplayer-skin-default .xgplayer-tips{background:rgba(0,0,0,.54);border-radius:1px;display:none;position:absolute;font-family:PingFangSC-Regular;font-size:11px;color:#fff;padding:2px 4px;text-align:center;top:-30px;left:50%;margin-left:-16px;width:auto;white-space:nowrap}.xgplayer-skin-default.xgplayer-mobile .xgplayer-tips{display:none!important}.xgplayer-skin-default .xgplayer-screen-container{display:block;width:100%}\", \"\"]);\n\n// exports\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","import { hasClass } from '../utils/util'\n\nlet mobile = function () {\n let player = this\n let root = player.root\n let clk = 0; let _click_\n let clickedTime = {\n first: '',\n second: ''\n }\n\n player.onElementTouchend = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (hasClass(root, 'xgplayer-inactive')) {\n player.emit('focus')\n } else {\n player.emit('blur')\n }\n if (!player.config.closeVideoTouch && !player.isTouchMove) {\n function onTouch() {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n }\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.first = new Date()\n } else {\n onTouch()\n }\n } else if (clk === 2) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.second = new Date()\n if (Math.abs(clickedTime.first - clickedTime.second) < 400) {\n // 双击\n onTouch()\n } else {\n clickedTime.first = new Date()\n clk = 1\n }\n } else {\n clk = 0\n }\n } else {\n clk = 0\n }\n }\n }\n }\n\n function onReady (e) {\n player.video.addEventListener('touchend', function (e) {\n player.onElementTouchend(e, player.video)\n })\n player.video.addEventListener('touchstart', () => {\n player.isTouchMove = false\n })\n player.video.addEventListener('touchmove', () => {\n player.isTouchMove = true\n })\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'mobile',\n method: mobile\n}","import { hasClass } from '../utils/util'\n\nlet pc = function () {\n let player = this\n if(!player.controls || !player.video) return\n let controls = player.controls; let root = player.root\n let clk = 0; let _click_\n\n player.onElementClick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n } else {\n clk = 0\n }\n }\n }\n player.video.addEventListener('click', function (e) { player.onElementClick(e, player.video) }, false)\n\n player.onElementDblclick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoDblclick) {\n let fullscreen = controls.querySelector('.xgplayer-fullscreen')\n if (fullscreen) {\n let clk\n if (document.createEvent) {\n clk = document.createEvent('Event')\n clk.initEvent('click', true, true)\n } else {\n clk = new Event('click')\n }\n fullscreen.dispatchEvent(clk)\n }\n }\n }\n player.video.addEventListener('dblclick', function (e) { player.onElementDblclick(e, player.video) }, false)\n\n function onMouseEnter () {\n clearTimeout(player.leavePlayerTimer)\n player.emit('focus', player)\n }\n root.addEventListener('mouseenter', onMouseEnter)\n\n function onMouseLeave () {\n if(!player.config.closePlayerBlur) {\n player.leavePlayerTimer = setTimeout(function () {\n player.emit('blur', player)\n }, player.config.leavePlayerTime || 0)\n }\n }\n root.addEventListener('mouseleave', onMouseLeave)\n\n function onControlMouseEnter (e) {\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n }\n controls.addEventListener('mouseenter', onControlMouseEnter)\n\n function onControlMouseLeave (e) {\n if(!player.config.closeControlsBlur) {\n player.emit('focus', player)\n }\n }\n controls.addEventListener('mouseleave', onControlMouseLeave)\n\n function onControlClick (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n controls.addEventListener('click', onControlClick)\n\n function onReady (e) {\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n root.removeEventListener('mouseenter', onMouseEnter)\n root.removeEventListener('mouseleave', onMouseLeave)\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'pc',\n method: pc\n}","import { addClass, hasClass, removeClass } from '../utils/util'\n\nlet start = function () {\n let player = this\n let root = player.root\n\n function onCanPlay () {\n player.off('canplay', onCanPlay)\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n\n function onStartBtnClick () {\n if (hasClass(root, 'xgplayer-nostart')) {\n removeClass(root, 'xgplayer-nostart') // for ie quick switch\n addClass(root, 'xgplayer-is-enter')\n\n if(typeof root.contains === 'function') {\n if((player.video && player.video.nodeType === 1 && !root.contains(player.video)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n } else {\n if((player.video && player.video.nodeType === 1 && !root.querySelector(this.videoConfig.mediaType)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n }\n } else {\n if (player.paused) {\n removeClass(root, 'xgplayer-nostart xgplayer-isloading')\n setTimeout(() => {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }, 10)\n }\n }\n }\n player.on('startBtnClick', onStartBtnClick)\n\n function onDestroy () {\n player.off('startBtnClick', onStartBtnClick)\n player.off('canplay', onCanPlay)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'start',\n method: start\n}","import { createDom, addClass, removeClass, isWeiXin, isUc } from '../../utils/util'\nimport StartPlayIcon from '../assets/startPlay.svg'\nimport StartPauseIcon from '../assets/startPause.svg'\nimport '../style/controls/start.scss'\n\nlet s_start = function () {\n let player = this\n let root = player.root\n let btn = createDom('xg-start', `<div class=\"xgplayer-icon-play\">${StartPlayIcon}</div>\n <div class=\"xgplayer-icon-pause\">${StartPauseIcon}</div>`, {}, 'xgplayer-start')\n function onPlayerReady(player) {\n addClass(player.root, 'xgplayer-skin-default')\n if (player.config) {\n player.config.autoplay && !isWeiXin() && !isUc() && addClass(player.root, 'xgplayer-is-enter')\n if (player.config.lang && player.config.lang === 'en') {\n addClass(player.root, 'xgplayer-lang-is-en')\n } else if (player.config.lang === 'jp') {\n addClass(player.root, 'xgplayer-lang-is-jp')\n }\n if(!player.config.enableContextmenu) {\n player.video.addEventListener('contextmenu', e => {\n e.preventDefault()\n e.stopPropagation()\n })\n }\n }\n }\n\n if(player.config && player.config.hideStartBtn) {\n addClass(root, 'xgplayer-start-hide')\n }\n\n if (player.isReady) {\n root.appendChild(btn)\n onPlayerReady(player)\n } else {\n player.once('ready', () => {\n root.appendChild(btn)\n onPlayerReady(player)\n });\n }\n\n player.once('autoplay was prevented', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n addClass(player.root, 'xgplayer-nostart')\n })\n\n player.once('canplay', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n })\n\n btn.onclick = e => {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('startBtnClick')\n }\n}\n\nexport default {\n name: 's_start',\n method: s_start\n}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04,0.04)\\\" d=\\\"M576,363L810,512L576,661zM342,214L576,363L576,661L342,810z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04 0.04)\\\" d=\\\"M598,214h170v596h-170v-596zM256 810v-596h170v596h-170z\\\"></path>\\n</svg>\\n\"","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-start{border-radius:50%;display:inline-block;width:70px;height:70px;background:rgba(0,0,0,.38);overflow:hidden;text-align:center;line-height:70px;vertical-align:middle;position:absolute;left:50%;top:50%;z-index:115;margin:-35px auto auto -35px;cursor:pointer}.xgplayer-skin-default .xgplayer-start div{position:absolute}.xgplayer-skin-default .xgplayer-start div svg{fill:hsla(0,0%,100%,.7)}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default .xgplayer-start:hover{opacity:.85}.xgplayer-skin-default.xgplayer-pause.xgplayer-start-hide .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-start-hide .xgplayer-start{display:none}.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-pause{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start{display:inline-block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start,.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-pause{display:none}\", \"\"]);\n\n// exports\n","import Player from './player'\n\nimport Mobile from './controls/mobile'\nimport Pc from './controls/pc'\nimport Start from './controls/start'\nimport S_start from './skin/controls/start'\n\nlet controlLst = [Mobile, Pc, Start, S_start]\ncontrolLst.forEach(function(control) {\n Player.install(control.name, control.method)\n})\n\nexport default Player\n"],"sourceRoot":""}
|