diff --git a/dist/kaltura-ovp-player.cjs.js b/dist/kaltura-ovp-player.cjs.js index 5ba6a8168..69e210bc7 100644 --- a/dist/kaltura-ovp-player.cjs.js +++ b/dist/kaltura-ovp-player.cjs.js @@ -51,5 +51,5 @@ var ue=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?] Copyright 2019 Google LLC SPDX-License-Identifier: Apache-2.0 */ -function qd(){}function Xd(){Cd?console.debug("EmeEncryptionSchemePolyfill: Already installed."):navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration?(Cd=navigator.requestMediaKeySystemAccess,console.debug("EmeEncryptionSchemePolyfill: Waiting to detect encryptionScheme support."),navigator.requestMediaKeySystemAccess=$d):console.debug("EmeEncryptionSchemePolyfill: EME not found")}function $d(e,t){var n,r=this;return O((function(i){return 1==i.a?(console.assert(r==navigator,'bad "this" for requestMediaKeySystemAccess'),_(i,Cd.call(r,e,t),2)):of(n=i.b)?(console.debug("EmeEncryptionSchemePolyfill: Native encryptionScheme support found."),navigator.requestMediaKeySystemAccess=Cd,i.return(n)):(console.debug("EmeEncryptionSchemePolyfill: No native encryptionScheme support found. Patching encryptionScheme support."),navigator.requestMediaKeySystemAccess=Jd,i.return(Jd.call(r,e,t)))}))}function Jd(e,t){var n,r,i,a,o,s,l,c,p,d,f=this;return O((function(h){if(1==h.a){for(console.assert(f==navigator,'bad "this" for requestMediaKeySystemAccess'),n=af(e),r=[],i=u(t),a=i.next();!a.done;a=i.next())o=a.value,s=Qd(o.videoCapabilities,n),l=Qd(o.audioCapabilities,n),o.videoCapabilities&&o.videoCapabilities.length&&!s.length||o.audioCapabilities&&o.audioCapabilities.length&&!l.length||((c=Object.assign({},o)).videoCapabilities=s,c.audioCapabilities=l,r.push(c));if(!r.length)throw(p=Error("Unsupported keySystem or supportedConfigurations.")).name="NotSupportedError",p.code=DOMException.NOT_SUPPORTED_ERR,p;return _(h,Cd.call(f,e,r),2)}return d=h.b,h.return(new rf(d,n))}))}function Qd(e,t){return e?e.filter((function(e){return!e.encryptionScheme||e.encryptionScheme==t})):e}function Zd(){}function ef(){Pd?console.debug("McEncryptionSchemePolyfill: Already installed."):navigator.mediaCapabilities?(Pd=navigator.mediaCapabilities.decodingInfo,console.debug("McEncryptionSchemePolyfill: Waiting to detect encryptionScheme support."),navigator.mediaCapabilities.decodingInfo=tf):console.debug("McEncryptionSchemePolyfill: MediaCapabilities not found")}function tf(e){var t,n=this;return O((function(r){return 1==r.a?(console.assert(n==navigator.mediaCapabilities,'bad "this" for decodingInfo'),_(r,Pd.call(n,e),2)):(t=r.b,e.keySystemConfiguration&&t.keySystemAccess?of(t.keySystemAccess)?(console.debug("McEncryptionSchemePolyfill: Native encryptionScheme support found."),navigator.mediaCapabilities.decodingInfo=Pd,r.return(t)):(console.debug("McEncryptionSchemePolyfill: No native encryptionScheme support found. Patching encryptionScheme support."),navigator.mediaCapabilities.decodingInfo=nf,r.return(nf.call(n,e))):r.return(t))}))}function nf(e){var t,n,r,i,a,o,s,l=this;return O((function(u){return 1==u.a?(console.assert(l==navigator.mediaCapabilities,'bad "this" for decodingInfo'),t=null,e.keySystemConfiguration&&(n=e.keySystemConfiguration,r=n.keySystem,i=n.audio&&n.audio.encryptionScheme,a=n.video&&n.video.encryptionScheme,t=af(r),o={powerEfficient:!1,smooth:!1,supported:!1,keySystemAccess:null,configuration:e},i&&i!=t||a&&a!=t)?u.return(o):_(u,Pd.call(l,e),2)):((s=u.b).keySystemAccess&&(s.keySystemAccess=new rf(s.keySystemAccess,t)),u.return(s))}))}function rf(e,t){this.b=e,this.a=t,this.keySystem=e.keySystem}function af(e){return e.startsWith("com.widevine")||e.startsWith("com.microsoft")||e.startsWith("com.adobe")||e.startsWith("org.w3")?"cenc":e.startsWith("com.apple")?"cbcs-1-9":(console.warn("EmeEncryptionSchemePolyfill: Unknown key system:",e,"Please contribute!"),null)}function of(e){var t=(e=e.getConfiguration()).audioCapabilities&&e.audioCapabilities[0];return!(!(e=e.videoCapabilities&&e.videoCapabilities[0]||t)||void 0===e.encryptionScheme)}function sf(){}function lf(){Xd(),ef()}dr["application/ttml+xml"]=function(){return new gd},Hd.prototype.parseInit=function(e){var t=!1;if((new xn).box("moov",Cn).box("trak",Cn).box("mdia",Cn).box("minf",Cn).box("stbl",Cn).V("stsd",Pn).box("stpp",(function(e){t=!0,e.parser.stop()})).parse(e),!t)throw new le(2,2,2007)},Hd.prototype.parseMedia=function(e,t){var n=this,r=!1,i=[];if((new xn).box("mdat",In((function(e){r=!0,i=i.concat(n.m.parseMedia(e,t))}))).parse(e,!1),!r)throw new le(2,2,2007);return i},j("shaka.text.Mp4TtmlParser",Hd),Hd.prototype.parseMedia=Hd.prototype.parseMedia,Hd.prototype.parseInit=Hd.prototype.parseInit,dr['application/mp4; codecs="stpp"']=function(){return new Hd},dr['application/mp4; codecs="stpp.ttml.im1t"']=function(){return new Hd},dr['application/mp4; codecs="stpp.TTML.im1t"']=function(){return new Hd},Gd.prototype.parseInit=function(){},Gd.prototype.parseMedia=function(e,t){var n=Fe(e),r=(n=n.replace(/\r\n|\r(?=[^\n]|$)/gm,"\n")).split(/\n{2,}/m);if(!/^WEBVTT($|[ \t\n])/m.test(r[0]))throw new le(2,2,2e3);if(n=t.periodStart,r[0].includes("X-TIMESTAMP-MAP")){var i=r[0].match(/LOCAL:((?:(\d{1,}):)?(\d{2}):(\d{2})\.(\d{3}))/m),a=r[0].match(/MPEGTS:(\d+)/m);if(i&&a){if(null==(n=zd(new Iu(i[1]))))throw new le(2,2,2e3);for(a=Number(a[1]),i=t.segmentStart;95443.7176888889<=i;)i-=95443.7176888889,a+=8589934592;n=t.periodStart+a/9e4-n}}a=[];for(var o=(i=u(r[0].split("\n"))).next();!o.done;o=i.next())if(o=o.value,/^Region:/.test(o)){o=new Iu(o);var s=new or;Ou(o),Ru(o);for(var l=Ou(o);l;){var c=s,p=l;(l=/^id=(.*)$/.exec(p))?c.id=l[1]:(l=/^width=(\d{1,2}|100)%$/.exec(p))?c.width=Number(l[1]):(l=/^lines=(\d+)$/.exec(p))?(c.height=Number(l[1]),c.heightUnits=2):(l=/^regionanchor=(\d{1,2}|100)%,(\d{1,2}|100)%$/.exec(p))?(c.regionAnchorX=Number(l[1]),c.regionAnchorY=Number(l[2])):(l=/^viewportanchor=(\d{1,2}|100)%,(\d{1,2}|100)%$/.exec(p))?(c.viewportAnchorX=Number(l[1]),c.viewportAnchorY=Number(l[2])):/^scroll=up$/.exec(p)&&(c.scroll="up"),Ru(o),l=Ou(o)}a.push(s)}for(i=[],o=(r=u(r.slice(1))).next();!o.done;o=r.next()){if(l=n,1==(c=o.value.split("\n")).length&&!c[0]||/^NOTE($|[ \t])/.test(c[0])||"STYLE"==c[0])o=null;else{o=null,c[0].includes("--\x3e")||(o=c[0],c.splice(0,1)),p=zd(s=new Iu(c[0]));var d=Du(s,/[ \t]+--\x3e[ \t]+/g),f=zd(s);if(null==p||null==d||null==f)throw new le(2,2,2001);for(c=new zn(p+l,f+l,c.slice(1).join("\n").trim()),Ru(s),l=Ou(s);l;)Kd(c,l,a),Ru(s),l=Ou(s);null!=o&&(c.id=o),o=c}o&&i.push(o)}return i},j("shaka.text.VttTextParser",Gd),Gd.prototype.parseMedia=Gd.prototype.parseMedia,Gd.prototype.parseInit=Gd.prototype.parseInit,dr["text/vtt"]=function(){return new Gd},dr['text/vtt; codecs="vtt"']=function(){return new Gd},dr['text/vtt; codecs="wvtt"']=function(){return new Gd},Wd.prototype.parseInit=function(e){var t=this,n=!1;if((new xn).box("moov",Cn).box("trak",Cn).box("mdia",Cn).V("mdhd",(function(e){0==e.version?(e.reader.skip(4),e.reader.skip(4),t.a=e.reader.K(),e.reader.skip(4)):(e.reader.skip(8),e.reader.skip(8),t.a=e.reader.K(),e.reader.skip(8)),e.reader.skip(4)})).box("minf",Cn).box("stbl",Cn).V("stsd",Pn).box("wvtt",(function(){n=!0})).parse(e),!this.a)throw new le(2,2,2008);if(!n)throw new le(2,2,2008)},Wd.prototype.parseMedia=function(e,t){if(!this.a)throw new le(2,2,2008);var n,r=0,i=[],a=[],o=!1,s=!1,l=!1,c=null;if((new xn).box("moof",Cn).box("traf",Cn).V("tfdt",(function(e){o=!0,r=0==e.version?e.reader.K():e.reader.rb()})).V("tfhd",(function(e){var t=e.flags;(e=e.reader).skip(4),1&t&&e.skip(8),2&t&&e.skip(4),c=8&t?e.K():null})).V("trun",(function(e){s=!0;var t=e.version,n=e.flags,r=(e=e.reader).K();1&n&&e.skip(4),4&n&&e.skip(4);for(var a=[],o=(r=u(Z(r))).next();!o.done;o=r.next())o={duration:null,sampleSize:null,qd:null},256&n&&(o.duration=e.K()),512&n&&(o.sampleSize=e.K()),1024&n&&e.skip(4),2048&n&&(o.qd=0==t?e.K():e.Od()),a.push(o);i=a})).box("mdat",In((function(e){l=!0,n=e}))).parse(e,!1),!l&&!o&&!s)throw new le(2,2,2008);for(var p=r,d=new An(n,0),f=u(i),h=f.next();!h.done;h=f.next()){var y=(h=h.value).duration||c,g=h.qd?r+h.qd:p;p=g+(y||0);var v=0;do{var m=d.K();v+=m;var b=null;"vttc"==Dn(d.K())?80}});else{var e=function(e){for(var t=window.document,n=i(t);n;)n=i(t=n.ownerDocument);return t}(),t=[],n=null,r=null;o.prototype.THROTTLE_TIMEOUT=100,o.prototype.POLL_INTERVAL=null,o.prototype.USE_MUTATION_OBSERVER=!0,o._setupCrossOriginUpdater=function(){return n||(n=function(e,n){r=e&&n?p(e,n):{top:0,bottom:0,left:0,right:0,width:0,height:0},t.forEach((function(e){e._checkForIntersections()}))}),n},o._resetCrossOriginUpdater=function(){n=null,r=null},o.prototype.observe=function(e){if(!this._observationTargets.some((function(t){return t.element==e}))){if(!e||1!=e.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:e,entry:null}),this._monitorIntersections(e.ownerDocument),this._checkForIntersections()}},o.prototype.unobserve=function(e){this._observationTargets=this._observationTargets.filter((function(t){return t.element!=e})),this._unmonitorIntersections(e.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},o.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},o.prototype.takeRecords=function(){var e=this._queuedEntries.slice();return this._queuedEntries=[],e},o.prototype._initThresholds=function(e){var t=e||[0];return Array.isArray(t)||(t=[t]),t.sort().filter((function(e,t,n){if("number"!=typeof e||isNaN(e)||e<0||e>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return e!==n[t-1]}))},o.prototype._parseRootMargin=function(e){var t=(e||"0px").split(/\s+/).map((function(e){var t=/^(-?\d*\.?\d+)(px|%)$/.exec(e);if(!t)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(t[1]),unit:t[2]}}));return t[1]=t[1]||t[0],t[2]=t[2]||t[0],t[3]=t[3]||t[1],t},o.prototype._monitorIntersections=function(t){var n=t.defaultView;if(n&&-1==this._monitoringDocuments.indexOf(t)){var r=this._checkForIntersections,a=null,o=null;this.POLL_INTERVAL?a=n.setInterval(r,this.POLL_INTERVAL):(s(n,"resize",r,!0),s(t,"scroll",r,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in n&&(o=new n.MutationObserver(r)).observe(t,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(t),this._monitoringUnsubscribes.push((function(){var e=t.defaultView;e&&(a&&e.clearInterval(a),l(e,"resize",r,!0)),l(t,"scroll",r,!0),o&&o.disconnect()}));var u=this.root&&(this.root.ownerDocument||this.root)||e;if(t!=u){var c=i(t);c&&this._monitorIntersections(c.ownerDocument)}}},o.prototype._unmonitorIntersections=function(t){var n=this._monitoringDocuments.indexOf(t);if(-1!=n){var r=this.root&&(this.root.ownerDocument||this.root)||e;if(!this._observationTargets.some((function(e){var n=e.element.ownerDocument;if(n==t)return!0;for(;n&&n!=r;){var a=i(n);if((n=a&&a.ownerDocument)==t)return!0}return!1}))){var a=this._monitoringUnsubscribes[n];if(this._monitoringDocuments.splice(n,1),this._monitoringUnsubscribes.splice(n,1),a(),t!=r){var o=i(t);o&&this._unmonitorIntersections(o.ownerDocument)}}}},o.prototype._unmonitorAllIntersections=function(){var e=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var t=0;t=0&&g>=0&&{top:l,bottom:c,left:d,right:h,width:y,height:g}||null),!v)break;m=m&&f(m)}return v}},o.prototype._getRootRect=function(){var t;if(this.root&&!h(this.root))t=u(this.root);else{var n=h(this.root)?this.root:e,r=n.documentElement,i=n.body;t={top:0,left:0,right:r.clientWidth||i.clientWidth,width:r.clientWidth||i.clientWidth,bottom:r.clientHeight||i.clientHeight,height:r.clientHeight||i.clientHeight}}return this._expandRectByRootMargin(t)},o.prototype._expandRectByRootMargin=function(e){var t=this._rootMarginValues.map((function(t,n){return"px"==t.unit?t.value:t.value*(n%2?e.width:e.height)/100})),n={top:e.top-t[0],right:e.right+t[1],bottom:e.bottom+t[2],left:e.left-t[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},o.prototype._hasCrossedThreshold=function(e,t){var n=e&&e.isIntersecting?e.intersectionRatio||0:-1,r=t.isIntersecting?t.intersectionRatio||0:-1;if(n!==r)for(var i=0;i0?m.setItem(e.StorageKeys.MUTED,!1):m.setItem(e.StorageKeys.MUTED,!0),m.setItem(e.StorageKeys.VOLUME,t.volume))})),n.listen(t,t.Event.UI.USER_SELECTED_AUDIO_TRACK,(function(t){var n=t.payload.audioTrack;m.setItem(e.StorageKeys.AUDIO_LANG,n.language)})),n.listen(t,t.Event.UI.USER_SELECTED_CAPTION_TRACK,(function(t){var n=t.payload.captionTrack;m.setItem(e.StorageKeys.TEXT_LANG,n.language)})),n.listen(t,t.Event.UI.USER_SELECTED_CAPTIONS_STYLE,(function(t){try{var n=JSON.stringify(t.payload.captionsStyle);m.setItem(e.StorageKeys.TEXT_STYLE,n)}catch(t){e._logger.error(t.message)}})),n.listen(t,t.Event.PLAYER_DESTROY,(function(){return n.destroy()}))},e.getPlayerTextStyle=function(){return m.getItem(e.StorageKeys.TEXT_STYLE)},e.hasStorage=function(){var t=m.size,n=0!==t;return n?e._logger.debug("Storage found with size of ",t):e._logger.debug("No storage found"),n},e.getStorageConfig=function(){var t=e._getExistingValues(),n=e._buildStorageConfig(t);return e._logger.debug("Gets storage config",n),n},e._getExistingValues=function(){var t={};return Object.keys(e.StorageKeys).forEach((function(n){var r=e.StorageKeys[n],i=m.getItem(r);null!=i&&(t[r]=i)})),t},e._buildStorageConfig=function(e){var t=l.Utils.Object.mergeDeep({},e);return delete t.textStyle,{playback:t}},e}();b(_,"StorageKeys",{MUTED:"muted",VOLUME:"volume",AUDIO_LANG:"audioLanguage",TEXT_LANG:"textLanguage",TEXT_STYLE:"textStyle"}),b(_,"_logger",Object(l.getLogger)("StorageManager"));var E=function(e){this.textStyle=e.textStyle,this.mediaInfo=e.getMediaInfo(),this.mediaConfig=e.getMediaConfig(),this.advertising=e.config.plugins&&e.config.plugins.ima,this.config=l.Utils.Object.mergeDeep({},e.config,{sources:{startTime:k(e)},playback:{autoplay:0===e.currentTime||!e.paused,audioLanguage:T(l.TrackType.AUDIO,e),textLanguage:T(l.TrackType.TEXT,e)}})};function k(e){return e.isLive()?e.isDvr()?e.duration-e.currentTime-1?e.config.sources.startTime:e.currentTime}function T(e,t){var n=t.getActiveTracks();if(n[e])return n[e].language;try{return t.config.playback[e+"Language"]}catch(e){return null}}var A="kaltura-player",w={CAST_SESSION_START_FAILED:A+"-castsessionstartfailed",CAST_SESSION_STARTING:A+"-castsessionstarting",CAST_SESSION_STARTED:A+"-castsessionstarted",CAST_SESSION_ENDING:A+"-castsessionending",CAST_SESSION_ENDED:A+"-castsessionended",CAST_AVAILABLE:A+"-castavailable"};function S(e,t){for(var n=0;n0){var i=n.plugins.ima.adTagUrl;r={adTagUrl:""},this._eventManager.listen(this,l.EventType.FIRST_PLAYING,(function(){return t.configure({plugins:{ima:{adTagUrl:i}}})}))}}else r={delayInitUntilSourceSelected:!0};l.Utils.Object.mergeDeep(n,{plugins:{ima:r}}),this._localPlayer.destroy(),this._remotePlayer=null,this._localPlayer=Object(l.loadPlayer)(n)}else this._remotePlayer=null;Object.values(l.EventType).forEach((function(e){return t._eventManager.listen(t._localPlayer,e,(function(e){return t.dispatchEvent(e)}))})),this._uiWrapper=new V(this,this.config),this._uiWrapper.setConfig({isCastAvailable:this.isCastAvailable()},"engine")}function Q(e){var t=e.sources.startTime,n=e.playback.autoplay;this.configure({sources:{startTime:t},playback:{autoplay:n}})}function Z(e){if(e.captions.length){var t=e.captions;this.configure({sources:{captions:t}})}}function ee(e){if(e.audioLanguage){var t=this.getTracks(l.TrackType.AUDIO).find((function(t){return t.language===e.audioLanguage}));this.selectTrack(t)}if(e.textLanguage){var n=this.getTracks(l.TrackType.TEXT).find((function(t){return t.language===e.textLanguage}));this.selectTrack(n)}}function te(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(H,"_logger",Object(l.getLogger)("RemoteControl"));var ne=function(){function e(){}return e.register=function(t,n){"function"==typeof n?e._registry.has(t)?e._logger.debug("Remote player of type "+t+" is already registered"):(e._logger.debug("Register remote player of type "+t),e._registry.set(t,n)):e._logger.debug("remote player must be instance of BaseRemotePlayer")},e.load=function(t,n){e._registry.forEach((function(r,i){e._logger.debug("Load remote player of type "+i),e._remotePlayers.set(i,new r(t,n))}))},e.startCasting=function(t){e._logger.debug("Start casting");var n=e._getRemotePlayer(t);return n?n.startCasting():Promise.reject()},e.isCastAvailable=function(t){var n=e._getRemotePlayer(t);return!!n&&(e._logger.debug("isCastAvailable: "+n.isCastAvailable()),n.isCastAvailable())},e._getRemotePlayer=function(t){var n=e._remotePlayers;return t&&n.get(t)?n.get(t):n.size>0?Array.from(n.values())[0]:void 0},e}();te(ne,"_logger",Object(l.getLogger)("RemotePlayerManager")),te(ne,"_registry",new Map),te(ne,"_remotePlayers",new Map);var re="kaltura.com",ie="custom_data=",ae="signature=";function oe(e,t){e.config.session&&e.config.session.id?function(e,t){var n=/:((?:[a-z0-9]|-)*)/i.exec(e.config.session.id);n&&n[1]&&se(t,e.config.session.id.replace(n[1],l.Utils.Generator.guid()))}(e,t):function(e){var t=l.Utils.Generator.guid(),n=l.Utils.Generator.guid();se(e,t+":"+n)}(t)}function se(e,t){e.session=e.session||{},e.session.id=t}function le(e,t,n){if(void 0===n&&(n="playSessionId="),t){var r=new RegExp(n+"((?:[a-z0-9]|-)*:(?:[a-z0-9]|-)*)","i").exec(e);r&&r[1]?e=e.replace(r[1],t):e+=pe(e)+n+t}return e}function ue(){var e;try{e=window.parent.document.URL}catch(t){e=document.referrer}return e}function ce(e){if(-1===e.indexOf("referrer=")){var t=btoa(ue().substr(0,1e3));e+=pe(e)+"referrer="+t}return e}function pe(e){return-1===e.indexOf("?")?"?":"&"}function de(e){return-1===e.indexOf("clientTag=html5:v")&&(e+=pe(e)+"clientTag=html5:v1.6.0-canary-11-73074f2.0"),e}function fe(e,t){oe(e,t);var n=t.sources,r=t.session&&t.session.id;Object.values(l.StreamType).forEach((function(e){n[e]&&n[e].forEach((function(e){"string"==typeof e.url&&e.url.toLowerCase().indexOf("playmanifest/")>-1&&!e.localSource&&(e.url=le(e.url,r),e.url=ce(e.url),e.url=de(e.url)),e.drmData&&e.drmData.length&&e.drmData.forEach((function(e){"string"==typeof e.licenseUrl&&[re,ie,ae].every((function(t){return e.licenseUrl.includes(t)}))&&(e.licenseUrl=le(e.licenseUrl,r,"sessionId="),e.licenseUrl=de(e.licenseUrl),e.licenseUrl=ce(e.licenseUrl),e.licenseUrl=function(e,t){var n=l.Utils.Object.getPropertyPath(t,"provider.uiConfId");return-1===e.indexOf("uiConfId=")&&"number"==typeof n&&(e+=pe(e)+"uiConfId="+n),e}(e.licenseUrl,t))}))}))}))}n(319);var he=function(){function e(e){void 0===e&&(e={}),e.observedThresholds=e.observedThresholds||ve,e.playerThreshold="number"==typeof e.playerThreshold?e.playerThreshold:me,this._config=e,this._eventManager=new l.EventManager,this._targetsObserved=new l.Utils.MultiMap;var t={threshold:e.observedThresholds.map((function(e){return e/100}))};this._observer=new window.IntersectionObserver(this._intersectionChangedHandler.bind(this),t),this._initTabVisibility()}var t=e.prototype;return t._intersectionChangedHandler=function(e){var t=this;e.forEach((function(e){t._targetsObserved.get(e.target).forEach((function(t){var n=e.intersectionRatio>=t.threshold;t.lastIntersectionRatio=e.intersectionRatio,n!==t.lastVisible&&(t.lastVisible=n,t.listener(n,ye.VIEWPORT))}))}))},t._handleTabVisibilityChange=function(){var e=this;this._isTabVisible=!document[this._visibilityTabHiddenAttr],this._targetsObserved.getAll().forEach((function(t){t.lastVisible&&t.listener(e._isTabVisible,ye.TAB)}))},t._initTabVisibility=function(){void 0!==document.hidden?(this._visibilityTabHiddenAttr="hidden",this._visibilityTabChangeEventName="visibilitychange"):void 0!==document.msHidden?(this._visibilityTabHiddenAttr="msHidden",this._visibilityTabChangeEventName="msvisibilitychange"):void 0!==document.webkitHidden&&(this._visibilityTabHiddenAttr="webkitHidden",this._visibilityTabChangeEventName="webkitvisibilitychange"),this._visibilityTabHiddenAttr&&this._visibilityTabChangeEventName&&(this._eventManager.listen(document,this._visibilityTabChangeEventName,this._handleTabVisibilityChange.bind(this)),this._isTabVisible=!document[this._visibilityTabHiddenAttr])},t.observe=function(e,t,n){if(this._observer){var r="number"==typeof n?n:this._config.playerThreshold,i=new ge(r/100,t);if(this._targetsObserved.has(e)){var a=this._targetsObserved.get(e)[0].lastIntersectionRatio;void 0!==a&&(i.lastIntersectionRatio=a,i.listener(this._isTabVisible&&a>=i.threshold,ye.VIEWPORT))}else this._observer.observe(e);this._targetsObserved.push(e,i)}},t.unObserve=function(e,t){this._observer&&(this._targetsObserved.remove(e,t),this._targetsObserved.has(e)||this._observer.unobserve(e))},t.destroy=function(){this._observer&&(this._eventManager.destroy(),this._observer.disconnect(),this._targetsObserved.clear())},e}(),ye={VIEWPORT:"viewport",TAB:"tab"},ge=function(e,t){this.threshold=e,this.listener=t},ve=[0,10,20,30,40,50,60,70,80,90,100],me=50,be=[];function _e(e){if(!e)throw new Error(f);!function(e){if(!e)throw new Error(h);var t=document.getElementById(e);if(!t)throw new Error(y+e);if(t.getElementsByClassName("kaltura-player-container").length>0)throw new Error(g+e)}(e.targetId),function(e){if(!e.partnerId){var t={url:"https://analytics.kaltura.com/api_v3/index.php?service=analytics&action=trackEvent&apiVersion=3.3.0&format=1&eventType=1&partnerId=2504201&entryId=1_3bwzbc9o&&eventIndex=1&position=0",mimetype:""};t.url=ce(t.url),t.url=de(t.url),t.url=le(t.url,l.Utils.Generator.guid()+":"+l.Utils.Generator.guid()),navigator.sendBeacon&&navigator.sendBeacon(t.url)}}(e.provider)}function Ee(){var e=!1;if(!0===window.DEBUG_KALTURA_PLAYER)e=!0;else if(window.URLSearchParams){e=new URLSearchParams(window.location.search).has("debugKalturaPlayer")}else e=!!function(e){e=e.replace(/[[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))}("debugKalturaPlayer");return e}function ke(e){var t={};return function(e){var t=l.Utils.Object.getPropertyPath(window,"__kalturaplayerdata.UIConf");return null!=e&&(void 0!==t&&void 0!==t[e]||!1)}(e)&&(t=window.__kalturaplayerdata.UIConf[e]),t}function Te(e){var t=function(e){var t=document.createElement("div");t.id=l.Utils.Generator.uniqueId(5),t.className="kaltura-player-container",t.setAttribute("tabindex","-1");var n=document.getElementById(e);return n&&t&&n.appendChild(t),t.id}(e.targetId),n={targetId:e.targetId,provider:{partnerId:e.provider.partnerId},ui:{targetId:t},plugins:{},advertising:{adBreaks:[]},viewability:{observedThresholds:ve,playerThreshold:me}};if(l.Utils.Object.mergeDeep(n,e),n.provider.uiConfId){var r=Ae(ke(n.provider.uiConfId));n=l.Utils.Object.mergeDeep({},r,n)}return function(e){if(l.Env.isMacOS&&l.Env.isSafari||l.Env.isIOS){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.preferNative.hls")&&l.Utils.Object.mergeDeep(e,{playback:{preferNative:{hls:!0}}})}}(n),function(e){if(l.Env.isMacOS&&l.Env.isSafari||l.Env.isIOS){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"text.useNativeTextTrack")&&l.Utils.Object.mergeDeep(e,{text:{useNativeTextTrack:!0}})}}(n),function(e){var t=l.Utils.Object.getPropertyPath(e,"plugins.kava");t||(t=l.Utils.Object.mergeDeep(e,{plugins:{kava:{}}}))}(n),function(e){if(l.Env.isSmartTV&&(Object(l.setCapabilities)(l.EngineType.HTML5,{autoplay:!0}),function(e){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.playAdsWithMSE")&&(e=l.Utils.Object.createPropertyPath(e,"playback.playAdsWithMSE",!0));var t=l.Utils.Object.getPropertyPath(e,"plugins.ima.disableMediaPreload"),n=l.Utils.Object.getPropertyPath(e,"plugins.bumper.disableMediaPreload");e.plugins&&e.plugins.ima&&"boolean"!=typeof t&&(e=l.Utils.Object.createPropertyPath(e,"plugins.ima.disableMediaPreload",!0));e.plugins&&e.plugins.bumper&&"boolean"!=typeof n&&(e=l.Utils.Object.createPropertyPath(e,"plugins.bumper.disableMediaPreload",!0))}(e),function(e){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.options.html5.hls.liveSyncDurationCount")&&l.Env.isSafari&&(e=l.Utils.Object.createPropertyPath(e,"playback.options.html5.hls.liveSyncDurationCount",2))}(e),e.plugins&&e.plugins.ima)){var t=l.Utils.Object.getPropertyPath(e,"plugins.ima.forceReloadMediaAfterAds"),n=l.Utils.Object.getPropertyPath(e,"plugins.ima.delayInitUntilSourceSelected");"boolean"!=typeof t&&(e=l.Utils.Object.createPropertyPath(e,"plugins.ima.forceReloadMediaAfterAds",!0)),"boolean"!=typeof n&&(e=l.Utils.Object.createPropertyPath(e,"plugins.ima.delayInitUntilSourceSelected",!0))}}(n),function(e){if("Edge"===l.Env.browser.name){l.Utils.Object.getPropertyPath(e,"drm.keySystem")||(e="Windows"===l.Env.os.name?l.Utils.Object.createPropertyPath(e,"drm.keySystem",l.DrmScheme.PLAYREADY):l.Utils.Object.createPropertyPath(e,"drm.keySystem",l.DrmScheme.WIDEVINE))}}(n),function(e){if(l.Env.isIOS&&e.plugins&&e.plugins.ima&&!e.plugins.ima.disable){var t=l.Utils.Object.getPropertyPath(e,"playback.playsinline"),n=l.Utils.Object.getPropertyPath(e,"plugins.ima.disableMediaPreload");!1===t&&"boolean"!=typeof n&&l.Utils.Object.createPropertyPath(e,"plugins.ima.disableMediaPreload",!0)}}(n),function(e){if(e.plugins&&e.plugins.imadai&&!e.plugins.imadai.disable){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.options.html5.hls.autoStartLoad")&&l.Utils.Object.mergeDeep(e,{playback:{options:{html5:{hls:{autoStartLoad:!1}}}}})}}(n),function(e){var t=l.Utils.Object.getPropertyPath(e,"plugins.bumper"),n=l.Utils.Object.getPropertyPath(e,"plugins.imadai");if(t){var r={};"boolean"!=typeof t.playOnMainVideoTag&&(l.Env.isSmartTV||l.Env.isIOS&&e.playback&&!1===e.playback.playsinline)&&(r.playOnMainVideoTag=!0),n&&!n.disable&&(Array.isArray(t.position)||(r.position=[0]),"boolean"!=typeof t.disableMediaPreload&&(r.disableMediaPreload=!0)),l.Utils.Object.mergeDeep(e,{plugins:{bumper:r}})}}(n),function(e){var t=l.Utils.Object.getPropertyPath(e,"plugins.vr");if(t&&!t.disable){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.inBrowserFullscreen")&&l.Utils.Object.mergeDeep(e,{playback:{inBrowserFullscreen:!0}})}}(n),function(e){if(l.Env.isIOS){var t=l.Utils.Object.getPropertyPath(e,"playback.playsinline"),n=l.Utils.Object.hasPropertyPath(e,"plugins.airplay"),r=!1!==t;n?Object(l.setCapabilities)(l.EngineType.HTML5,{autoplay:!1,mutedAutoPlay:r}):"iPhone"!==l.Env.device.model||r||Object(l.setCapabilities)(l.EngineType.HTML5,{autoplay:!1,mutedAutoPlay:!1})}}(n),n}function Ae(e){return function(){if(e.player){be.push({level:"warn",msg:"Path config.player will be deprecated soon. Please update your config structure as describe here: https://github.com/kaltura/kaltura-player-js/blob/master/docs/configuration.md"});var t=l.Utils.Object.copyDeep(e.player);delete e.player,l.Utils.Object.mergeDeep(e,t)}}(),[["duration","sources.duration"],["type","sources.type"],["dvr","sources.dvr"],["id","sources.id"],["name","metadata.name"],["metadata.poster","sources.poster"],["metadata","sources.metadata"],["logLevel","log.level"],["ui.components.fullscreen.inBrowserFullscreenForIOS","playback.inBrowserFullscreen"],["playback.enableCEA708Captions","text.enableCEA708Captions"],["playback.useNativeTextTrack","text.useNativeTextTrack"],["playback.captionsTextTrack1Label","text.captionsTextTrack1Label"],["playback.captionsTextTrack1LanguageCode","text.captionsTextTrack1LanguageCode"],["playback.captionsTextTrack2Label","text.captionsTextTrack2Label"],["playback.captionsTextTrack2LanguageCode","text.captionsTextTrack2LanguageCode"],["plugins.visibility.threshold","viewability.playerThreshold"],["plugins.visibility.floating","plugins.floating"],["playback.startTime","sources.startTime"]].forEach((function(t){return function(t,n){if(l.Utils.Object.hasPropertyPath(e,t))if(be.push({level:"warn",msg:"Path config.player."+t+" will be deprecated soon. Please update your config structure as describe here: https://github.com/kaltura/kaltura-player-js/blob/master/docs/configuration.md"}),l.Utils.Object.hasPropertyPath(e,n))l.Utils.Object.deletePropertyPath(e,t);else{var r=l.Utils.Object.getPropertyPath(e,t),i=l.Utils.Object.createPropertyPath({},n,r);l.Utils.Object.mergeDeep(e,i),l.Utils.Object.deletePropertyPath(e,t)}}(t[0],t[1])})),e}function we(e){var t=e&&e.progressive;return!(!t||!t[0]||"video/youtube"!==t[0].mimetype)}function Se(e,t){var n={},r={};return l.Utils.Object.isObject(e)&&Object.entries(e).forEach((function(e){var i=e[0],a=e[1];n[i]={},r[i]={},Object.entries(a).forEach((function(e){var a=e[0],o=e[1],s=l.Utils.Object.getPropertyPath(t[i],a);n[i][a]=s||o,r[i][a]=s}))})),[n,r]}function xe(e,t){for(var n=0;n registration failed, either plugin is not an instance of BasePlugin or plugin handler is not a function"),!1):e._registry.has(t)?(e._logger.debug("Plugin <"+t+"> is already registered, do not register again"),!1):(e._registry.set(t,n),e._logger.debug("Plugin <"+t+"> has been registered successfully"),!0)},e.unRegister=function(t){e._registry.has(t)&&(e._registry.delete(t),e._logger.debug("Unregistered <"+t+"> plugin."))};var t=e.prototype;return t.load=function(t,n,r){if(void 0===r&&(r={}),!e._registry.has(t))throw e._logger.warn("Plugin <"+t+"> loading failed, plugin is not registered"),new l.Error(l.Error.Severity.RECOVERABLE,l.Error.Category.PLAYER,l.Error.Code.RUNTIME_ERROR_NOT_REGISTERED_PLUGIN,t);var i=e._registry.get(t);"boolean"==typeof r.disable&&this._isDisabledPluginMap.set(t,r.disable);var a=!!this._isDisabledPluginMap.get(t),o=!!i&&i.isValid();if(i&&o&&!a){try{this._plugins[t]=i.createPlugin(t,n,r)}catch(e){throw new l.Error(l.Error.Severity.RECOVERABLE,l.Error.Category.PLAYER,l.Error.Code.PLUGIN_LOAD_FAILED,e)}return this._isDisabledPluginMap.set(t,!1),e._logger.debug("Plugin <"+t+"> has been loaded"),!0}return e._logger.debug("Plugin <"+t+"> isn't loaded, isValid()="+o.toString()+", disabled="+a.toString()),!1},t.loadMedia=function(){var e=this;Object.keys(this._plugins).forEach((function(t){return e._plugins[t].loadMedia()}))},t.destroy=function(){var e=this;Object.keys(this._plugins).forEach((function(t){e._plugins[t].destroy(),delete e._plugins[t]}))},t.reset=function(){var e=this;Object.keys(this._plugins).forEach((function(t){return e._plugins[t].reset()}))},t.get=function(e){return this._plugins[e]},t.getAll=function(){return this._plugins},e}();Pe(Ie,"_logger",Object(l.getLogger)("PluginManager")),Pe(Ie,"_registry",new Map);var Re=Ie.register,De={youbora:{playerVersion:"{{pVersion}}",playerName:"{{pName}}",entryId:"{{entryId}}",entryName:"{{entryName}}",entryType:"{{entryType}}",sessionId:"{{sessionId}}",uiConfId:"{{uiConfId}}"},googleAnalytics:{entryId:"{{entryId}}",entryName:"{{entryName}}",uiConfId:"{{uiConfId}}",partnerId:"{{partnerId}}"},ottAnalytics:{entryId:"{{entryId}}",ks:"{{ks}}",isAnonymous:"{{isAnonymous}}",partnerId:"{{partnerId}}",serviceUrl:"{{serviceUrl}}"},ima:{playerVersion:"{{pVersion}}",playerName:"{{pName}}"},kava:{playerVersion:"{{pVersion}}",playerName:"{{pName}}",partnerId:"{{partnerId}}",playlistId:"{{playlistId}}",entryId:"{{entryId}}",entryType:"{{entryType}}",sessionId:"{{sessionId}}",ks:"{{ks}}",uiConfId:"{{uiConfId}}",referrer:"{{referrer}}",encodedReferrer:"{{encodedReferrer}}",serviceUrl:"{{analyticsServiceUrl}}"},comscore:{playerVersion:"{{pVersion}}"},vr:{rootElement:"{{domRootElementId}}"}},Oe=new RegExp("{{.*}}"),Le=function(){function e(){this._config=l.Utils.Object.copyDeep(De)}var t=e.prototype;return t.get=function(){return this._config},t.set=function(e){if(e){var t=function e(t){return void 0===t&&(t={}),Object.entries(t).reduce((function(t,n){var r=n[0],i=n[1];return l.Utils.Object.isObject(i)?t[r]=e(i):"string"==typeof i&&Oe.test(i)?t[r]=i:t[r]=void 0,t}),{})}(e);this._config=function e(t){return void 0===t&&(t={}),Object.entries(t).reduce((function(t,n){var r=n[0],i=n[1];return l.Utils.Object.isObject(i)?t[r]=e(i):i&&(t[r]=i),t}),{})}(l.Utils.Object.mergeDeep(this._config,t))}},t.reset=function(){this._config=l.Utils.Object.copyDeep(De)},e}();var Me=function(e,t){void 0===t&&(t={});try{var n,r=e;for(var i in t){var a=void 0!==t[i]&&null!==t[i]?t[i]:"";"string"==typeof a&&a.indexOf('"')>-1&&(a=a.replace(/"/g,'\\"')),n=new RegExp("{{"+i+"}}","g"),r=r.replace(n,a)}return r}catch(e){return""}},Ne=function(e){return("number"==typeof e||"function"==typeof e||"string"==typeof e||"boolean"==typeof e||l.Utils.Object.isClassInstance(e))&&!Oe.test(e.toString())},Ue=function e(t){return void 0===t&&(t={}),Object.entries(t).reduce((function(t,n){var r=n[0],i=n[1];return l.Utils.Object.isObject(i)&&"function"!=typeof i&&!l.Utils.Object.isClassInstance(i)?t[r]=e(i):Array.isArray(i)?t[r]=i.filter((function(e){return Ne(e)})):Ne(i)&&(t[r]=i),t}),{})},Fe=function(e){var t={pVersion:e.productVersion?e.productVersion:"1.6.0-canary-11-73074f2.0",pName:"kaltura-player-js"};if(e.targetId&&(t.domRootElementId=e.targetId),e.provider&&e.provider.env){t.serviceUrl=e.provider.env.serviceUrl;var n=l.Utils.Object.getPropertyPath(e,"provider.env.analyticsServiceUrl");n&&(t.analyticsServiceUrl=n+"/api_v3/index.php"),t.serviceUrl&&(t.embedBaseUrl=t.serviceUrl.replace("api_v3",""))}var r,i={referrer:ue(),encodedReferrer:(r=ue(),encodeURIComponent(r))};return e.provider&&l.Utils.Object.mergeDeep(i,{ks:e.provider.ks,uiConfId:e.provider.uiConfId,partnerId:e.provider.partnerId}),e.session&&l.Utils.Object.mergeDeep(i,{sessionId:e.session.id,ks:e.session.ks,isAnonymous:e.session.isAnonymous,uiConfId:e.session.uiConfId,partnerId:e.session.partnerId}),e.sources&&l.Utils.Object.mergeDeep(i,{entryId:e.sources.id,entryName:e.sources.metadata&&e.sources.metadata.name,entryType:e.sources.type}),e.playlist&&l.Utils.Object.mergeDeep(i,{playlistId:e.playlist.id}),Object.keys(i).forEach((function(e){void 0===i[e]&&delete i[e]})),l.Utils.Object.mergeDeep(t,i),t};function Be(e){var t;try{t=JSON.parse(e,(function(e){try{return JSON.parse(this[e])}catch(t){return this[e]}}))}catch(e){t={}}return t}function je(e,t){var n=Ue(t),r=Ue(e);r&&n&&Object.keys(e).forEach((function(t){e&&e[t]&&(e[t]=l.Utils.Object.mergeDeep({},n[t],r[t]))}))}var Ve=function(){function e(){this._pluginConfigStore=new Le}var t=e.prototype;return t.evaluatePluginsConfig=function(e,t){if(e){this._pluginConfigStore.set(e);var n=Fe(t),r=l.Utils.Object.mergeDeep({},this._pluginConfigStore.get(),e);je(e,Be(Me(JSON.stringify(r),n)))}},t.evaluateUIConfig=function(e,t){if(e){var n=Fe(t),r=l.Utils.Object.mergeDeep({},{components:{share:{shareUrl:"{{embedBaseUrl}}/index.php/extwidget/preview/partner_id/{{partnerId}}/uiconf_id/{{uiConfId}}/entry_id/{{entryId}}/embed/dynamic",embedUrl:"{{embedBaseUrl}}/p/{{partnerId}}/embedPlaykitJs/uiconf_id/{{uiConfId}}?iframeembed=true&entry_id={{entryId}}"}}},e);je(e,Be(Me(JSON.stringify(r),n)))}},e}();function He(){return(He=Object.assign||function(e){for(var t=1;t0)}},{key:"vpaid",get:function(){return this._vpaid}}])&&it(t.prototype,n),r&&it(t,r),e}();function ot(){return(ot=Object.assign||function(e){for(var t=1;t0}))&&e._handleConfiguredMidrolls()})))},s._validateOneTimeConfig=function(e){"number"==typeof e.position&&("number"==typeof e.percentage&&(r._logger.warn("Validate ad break - ignore percentage "+e.percentage+" as position "+e.position+" configured"),delete e.percentage),"number"==typeof e.every&&(r._logger.warn("Validate ad break - ignore every "+e.every+" as position "+e.position+" configured"),delete e.every)),"number"==typeof e.percentage&&"number"==typeof e.every&&(r._logger.warn("Validate ad break - ignore every "+e.every+" as percentage "+e.percentage+" configured"),delete e.every)},s._dispatchAdManifestLoaded=function(){var e=this,t=Array.from(new Set(this._configAdBreaks.map((function(e){return e.every&&e.every+"s"||"number"==typeof e.percentage&&e.percentage+"%"||e.position}))));r._logger.debug(l.AdEventType.AD_MANIFEST_LOADED,t),this._player.dispatchEvent(new l.FakeEvent(l.AdEventType.AD_MANIFEST_LOADED,{adBreaksPosition:t})),this._player.ui.hasManager("timeline")&&this._player.config.advertising.showAdBreakCuePoint&&t.forEach((function(t){e._player.ui.getManager("timeline").addCuePoint(ot({time:-1!==t?t:1/0},e._player.config.advertising.adBreakCuePointStyle))}))},s._handleConfiguredPreroll=function(){var e=this._configAdBreaks.filter((function(e){return 0===e.position&&!e.played})),t=this._mergeAdBreaks(e);t&&this._playAdBreak(t)},s._handleEveryAndPercentage=function(){var e=this;this._configAdBreaks.forEach((function(t){if(e._player.duration&&t.every)for(var n=2*t.every;n<=e._player.duration;)e._configAdBreaks.push({position:n,ads:t.ads,played:!1}),n+=t.every;else e._player.duration&&t.percentage&&!t.position&&(t.position=Math.floor(e._player.duration*t.percentage/100))}))},s._handleConfiguredMidrolls=function(){var e=this;this._eventManager.listen(this._player,l.Html5EventType.TIME_UPDATE,(function(){if(!e._player.paused){var t=e._configAdBreaks.filter((function(t){return!t.played&&e._player.currentTime&&t.position<=e._player.currentTime&&t.position>e._snapback}));if(t.length){var n=t[t.length-1].position,i=t.filter((function(e){return e.position===n}));e._snapback=n,r._logger.debug("Set snapback value "+e._snapback);var a=e._mergeAdBreaks(i);a&&e._playAdBreak(a)}}})),this._eventManager.listen(this._player,l.Html5EventType.SEEKED,(function(){var t=e._configAdBreaks.findIndex((function(t){return t.played&&"number"==typeof e._player.currentTime&&e._player.currentTime0&&!e._configAdBreaks[t-1].played&&(e._snapback=0,r._logger.debug("Reset snapback value"))}))},s._playAdBreak=function(e){var t=this._adsPluginControllers.find((function(e){return"function"==typeof e.playAdNow}));t?(e.played=!0,this._adIsLoading=!0,r._logger.debug("Playing ad break positioned in "+e.position),t.playAdNow(e.ads)):r._logger.warn("No ads plugin registered")},s._onAdManifestLoaded=function(e){this._adBreaksLayout=Array.from(new Set(this._adBreaksLayout.concat(e.payload.adBreaksPosition))).sort(),this._allAdsCompleted=!1},s._onAdBreakStart=function(e){this._adBreak=e.payload.adBreak},s._onAdLoaded=function(){this._adIsLoading=!1},s._onAdStarted=function(e){this._ad=e.payload.ad,this._adPlayed=!0,this._isAdPlaying=!0},s._onAdBreakEnd=function(){this._adBreak=null,this._ad=null},s._onAdsCompleted=function(){this._adsPluginControllers.every((function(e){return e.done}))&&this._configAdBreaks.every((function(e){return e.played}))&&(this._allAdsCompleted=!0,r._logger.debug(l.AdEventType.ALL_ADS_COMPLETED),this.dispatchEvent(new l.FakeEvent(l.AdEventType.ALL_ADS_COMPLETED)))},s._onAdError=function(e){this._adIsLoading=!1,e.payload.severity===l.Error.Severity.CRITICAL&&(this._isAdPlaying=!1,this._adsPluginControllers.every((function(e){return e.done}))&&this._configAdBreaks.every((function(e){return e.played}))&&(this._allAdsCompleted=!0,this._adPlayed&&(r._logger.debug(l.AdEventType.ALL_ADS_COMPLETED),this.dispatchEvent(new l.FakeEvent(l.AdEventType.ALL_ADS_COMPLETED)))))},s._isBumper=function(e){return"bumper"===e.name},s._onEnded=function(){var e=this;if(!this._adIsLoading){var t=this._adsPluginControllers.find((function(t){return e._isBumper(t)})),n=this._adsPluginControllers.find((function(t){return!e._isBumper(t)&&!t.done})),r=t&&"function"==typeof t.onPlaybackEnded?function(){return t.onPlaybackEnded()}:function(){return Promise.resolve()},i=n&&"function"==typeof n.onPlaybackEnded?function(){return n.onPlaybackEnded()}:function(){return Promise.resolve()};this._adBreaksLayout.includes(-1)||this._adBreaksLayout.includes("100%")||(this._allAdsCompleted=!0),r().finally((function(){i().finally((function(){return e._handleConfiguredPostroll()}))}))}},s._onPlaybackEnded=function(){this._configAdBreaks.forEach((function(e){return e.played=!0}))},s._handleConfiguredPostroll=function(){var e=this._configAdBreaks.filter((function(e){return!e.played&&-1===e.position}));if(e.length){var t=this._mergeAdBreaks(e);t&&this._playAdBreak(t)}this._configAdBreaks.forEach((function(e){return e.played=!0}))},s._reset=function(){this._eventManager.removeAll(),this._init()},s._destroy=function(){this._adsPluginControllers=[],this._eventManager.destroy()},s._mergeAdBreaks=function(e){if(e.length)return e.forEach((function(e){return e.played=!0})),{position:e[0].position,ads:e.reduce((function(e,t){return e.concat(t.ads)}),[]),played:!1}},i=r,(a=[{key:"allAdsCompleted",get:function(){return this._allAdsCompleted}}])&&st(i.prototype,a),o&&st(i,o),r}(l.FakeEventTarget);!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(lt,"_logger",Object(l.getLogger)("AdsController"));var ut=function(){function e(e){this._pluginManager=e}return e.prototype.getAdsControllers=function(){return Object.values(this._pluginManager.getAll()).filter((function(e){return"function"==typeof e.getAdsController})).map((function(e){return e.getAdsController()}))},e}();function ct(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pt=function(e){var t,n;function r(t){var n;return ct(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(n=e.call(this)||this),"id","PluginReadinessMiddleware"),n._plugins=t,r._logger.debug("plugins readiness",n._plugins),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.load=function(e){this._checkNextSettle(0,e)},i._checkNextSettle=function(e,t){e0}});else{var e=function(e){for(var t=window.document,n=i(t);n;)n=i(t=n.ownerDocument);return t}(),t=[],n=null,r=null;o.prototype.THROTTLE_TIMEOUT=100,o.prototype.POLL_INTERVAL=null,o.prototype.USE_MUTATION_OBSERVER=!0,o._setupCrossOriginUpdater=function(){return n||(n=function(e,n){r=e&&n?p(e,n):{top:0,bottom:0,left:0,right:0,width:0,height:0},t.forEach((function(e){e._checkForIntersections()}))}),n},o._resetCrossOriginUpdater=function(){n=null,r=null},o.prototype.observe=function(e){if(!this._observationTargets.some((function(t){return t.element==e}))){if(!e||1!=e.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:e,entry:null}),this._monitorIntersections(e.ownerDocument),this._checkForIntersections()}},o.prototype.unobserve=function(e){this._observationTargets=this._observationTargets.filter((function(t){return t.element!=e})),this._unmonitorIntersections(e.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},o.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},o.prototype.takeRecords=function(){var e=this._queuedEntries.slice();return this._queuedEntries=[],e},o.prototype._initThresholds=function(e){var t=e||[0];return Array.isArray(t)||(t=[t]),t.sort().filter((function(e,t,n){if("number"!=typeof e||isNaN(e)||e<0||e>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return e!==n[t-1]}))},o.prototype._parseRootMargin=function(e){var t=(e||"0px").split(/\s+/).map((function(e){var t=/^(-?\d*\.?\d+)(px|%)$/.exec(e);if(!t)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(t[1]),unit:t[2]}}));return t[1]=t[1]||t[0],t[2]=t[2]||t[0],t[3]=t[3]||t[1],t},o.prototype._monitorIntersections=function(t){var n=t.defaultView;if(n&&-1==this._monitoringDocuments.indexOf(t)){var r=this._checkForIntersections,a=null,o=null;this.POLL_INTERVAL?a=n.setInterval(r,this.POLL_INTERVAL):(s(n,"resize",r,!0),s(t,"scroll",r,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in n&&(o=new n.MutationObserver(r)).observe(t,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(t),this._monitoringUnsubscribes.push((function(){var e=t.defaultView;e&&(a&&e.clearInterval(a),l(e,"resize",r,!0)),l(t,"scroll",r,!0),o&&o.disconnect()}));var u=this.root&&(this.root.ownerDocument||this.root)||e;if(t!=u){var c=i(t);c&&this._monitorIntersections(c.ownerDocument)}}},o.prototype._unmonitorIntersections=function(t){var n=this._monitoringDocuments.indexOf(t);if(-1!=n){var r=this.root&&(this.root.ownerDocument||this.root)||e;if(!this._observationTargets.some((function(e){var n=e.element.ownerDocument;if(n==t)return!0;for(;n&&n!=r;){var a=i(n);if((n=a&&a.ownerDocument)==t)return!0}return!1}))){var a=this._monitoringUnsubscribes[n];if(this._monitoringDocuments.splice(n,1),this._monitoringUnsubscribes.splice(n,1),a(),t!=r){var o=i(t);o&&this._unmonitorIntersections(o.ownerDocument)}}}},o.prototype._unmonitorAllIntersections=function(){var e=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var t=0;t=0&&g>=0&&{top:l,bottom:c,left:d,right:h,width:y,height:g}||null),!v)break;m=m&&f(m)}return v}},o.prototype._getRootRect=function(){var t;if(this.root&&!h(this.root))t=u(this.root);else{var n=h(this.root)?this.root:e,r=n.documentElement,i=n.body;t={top:0,left:0,right:r.clientWidth||i.clientWidth,width:r.clientWidth||i.clientWidth,bottom:r.clientHeight||i.clientHeight,height:r.clientHeight||i.clientHeight}}return this._expandRectByRootMargin(t)},o.prototype._expandRectByRootMargin=function(e){var t=this._rootMarginValues.map((function(t,n){return"px"==t.unit?t.value:t.value*(n%2?e.width:e.height)/100})),n={top:e.top-t[0],right:e.right+t[1],bottom:e.bottom+t[2],left:e.left-t[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},o.prototype._hasCrossedThreshold=function(e,t){var n=e&&e.isIntersecting?e.intersectionRatio||0:-1,r=t.isIntersecting?t.intersectionRatio||0:-1;if(n!==r)for(var i=0;i0?m.setItem(e.StorageKeys.MUTED,!1):m.setItem(e.StorageKeys.MUTED,!0),m.setItem(e.StorageKeys.VOLUME,t.volume))})),n.listen(t,t.Event.UI.USER_SELECTED_AUDIO_TRACK,(function(t){var n=t.payload.audioTrack;m.setItem(e.StorageKeys.AUDIO_LANG,n.language)})),n.listen(t,t.Event.UI.USER_SELECTED_CAPTION_TRACK,(function(t){var n=t.payload.captionTrack;m.setItem(e.StorageKeys.TEXT_LANG,n.language)})),n.listen(t,t.Event.UI.USER_SELECTED_CAPTIONS_STYLE,(function(t){try{var n=JSON.stringify(t.payload.captionsStyle);m.setItem(e.StorageKeys.TEXT_STYLE,n)}catch(t){e._logger.error(t.message)}})),n.listen(t,t.Event.PLAYER_DESTROY,(function(){return n.destroy()}))},e.getPlayerTextStyle=function(){return m.getItem(e.StorageKeys.TEXT_STYLE)},e.hasStorage=function(){var t=m.size,n=0!==t;return n?e._logger.debug("Storage found with size of ",t):e._logger.debug("No storage found"),n},e.getStorageConfig=function(){var t=e._getExistingValues(),n=e._buildStorageConfig(t);return e._logger.debug("Gets storage config",n),n},e._getExistingValues=function(){var t={};return Object.keys(e.StorageKeys).forEach((function(n){var r=e.StorageKeys[n],i=m.getItem(r);null!=i&&(t[r]=i)})),t},e._buildStorageConfig=function(e){var t=l.Utils.Object.mergeDeep({},e);return delete t.textStyle,{playback:t}},e}();b(_,"StorageKeys",{MUTED:"muted",VOLUME:"volume",AUDIO_LANG:"audioLanguage",TEXT_LANG:"textLanguage",TEXT_STYLE:"textStyle"}),b(_,"_logger",Object(l.getLogger)("StorageManager"));var E=function(e){this.textStyle=e.textStyle,this.mediaInfo=e.getMediaInfo(),this.mediaConfig=e.getMediaConfig(),this.advertising=e.config.plugins&&e.config.plugins.ima,this.config=l.Utils.Object.mergeDeep({},e.config,{sources:{startTime:k(e)},playback:{autoplay:0===e.currentTime||!e.paused,audioLanguage:T(l.TrackType.AUDIO,e),textLanguage:T(l.TrackType.TEXT,e)}})};function k(e){return e.isLive()?e.isDvr()?e.duration-e.currentTime-1?e.config.sources.startTime:e.currentTime}function T(e,t){var n=t.getActiveTracks();if(n[e])return n[e].language;try{return t.config.playback[e+"Language"]}catch(e){return null}}var A="kaltura-player",w={CAST_SESSION_START_FAILED:A+"-castsessionstartfailed",CAST_SESSION_STARTING:A+"-castsessionstarting",CAST_SESSION_STARTED:A+"-castsessionstarted",CAST_SESSION_ENDING:A+"-castsessionending",CAST_SESSION_ENDED:A+"-castsessionended",CAST_AVAILABLE:A+"-castavailable"};function S(e,t){for(var n=0;n0){var i=n.plugins.ima.adTagUrl;r={adTagUrl:""},this._eventManager.listen(this,l.EventType.FIRST_PLAYING,(function(){return t.configure({plugins:{ima:{adTagUrl:i}}})}))}}else r={delayInitUntilSourceSelected:!0};l.Utils.Object.mergeDeep(n,{plugins:{ima:r}}),this._localPlayer.destroy(),this._remotePlayer=null,this._localPlayer=Object(l.loadPlayer)(n)}else this._remotePlayer=null;Object.values(l.EventType).forEach((function(e){return t._eventManager.listen(t._localPlayer,e,(function(e){return t.dispatchEvent(e)}))})),this._uiWrapper=new V(this,this.config),this._uiWrapper.setConfig({isCastAvailable:this.isCastAvailable()},"engine")}function Q(e){var t=e.sources.startTime,n=e.playback.autoplay;this.configure({sources:{startTime:t},playback:{autoplay:n}})}function Z(e){if(e.captions.length){var t=e.captions;this.configure({sources:{captions:t}})}}function ee(e){if(e.audioLanguage){var t=this.getTracks(l.TrackType.AUDIO).find((function(t){return t.language===e.audioLanguage}));this.selectTrack(t)}if(e.textLanguage){var n=this.getTracks(l.TrackType.TEXT).find((function(t){return t.language===e.textLanguage}));this.selectTrack(n)}}function te(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(H,"_logger",Object(l.getLogger)("RemoteControl"));var ne=function(){function e(){}return e.register=function(t,n){"function"==typeof n?e._registry.has(t)?e._logger.debug("Remote player of type "+t+" is already registered"):(e._logger.debug("Register remote player of type "+t),e._registry.set(t,n)):e._logger.debug("remote player must be instance of BaseRemotePlayer")},e.load=function(t,n){e._registry.forEach((function(r,i){e._logger.debug("Load remote player of type "+i),e._remotePlayers.set(i,new r(t,n))}))},e.startCasting=function(t){e._logger.debug("Start casting");var n=e._getRemotePlayer(t);return n?n.startCasting():Promise.reject()},e.isCastAvailable=function(t){var n=e._getRemotePlayer(t);return!!n&&(e._logger.debug("isCastAvailable: "+n.isCastAvailable()),n.isCastAvailable())},e._getRemotePlayer=function(t){var n=e._remotePlayers;return t&&n.get(t)?n.get(t):n.size>0?Array.from(n.values())[0]:void 0},e}();te(ne,"_logger",Object(l.getLogger)("RemotePlayerManager")),te(ne,"_registry",new Map),te(ne,"_remotePlayers",new Map);var re="kaltura.com",ie="custom_data=",ae="signature=";function oe(e,t){e.config.session&&e.config.session.id?function(e,t){var n=/:((?:[a-z0-9]|-)*)/i.exec(e.config.session.id);n&&n[1]&&se(t,e.config.session.id.replace(n[1],l.Utils.Generator.guid()))}(e,t):function(e){var t=l.Utils.Generator.guid(),n=l.Utils.Generator.guid();se(e,t+":"+n)}(t)}function se(e,t){e.session=e.session||{},e.session.id=t}function le(e,t,n){if(void 0===n&&(n="playSessionId="),t){var r=new RegExp(n+"((?:[a-z0-9]|-)*:(?:[a-z0-9]|-)*)","i").exec(e);r&&r[1]?e=e.replace(r[1],t):e+=pe(e)+n+t}return e}function ue(){var e;try{e=window.parent.document.URL}catch(t){e=document.referrer}return e}function ce(e){if(-1===e.indexOf("referrer=")){var t=btoa(ue().substr(0,1e3));e+=pe(e)+"referrer="+t}return e}function pe(e){return-1===e.indexOf("?")?"?":"&"}function de(e){return-1===e.indexOf("clientTag=html5:v")&&(e+=pe(e)+"clientTag=html5:v1.6.0-canary-13-33bc80c.0"),e}function fe(e,t){oe(e,t);var n=t.sources,r=t.session&&t.session.id;Object.values(l.StreamType).forEach((function(e){n[e]&&n[e].forEach((function(e){"string"==typeof e.url&&e.url.toLowerCase().indexOf("playmanifest/")>-1&&!e.localSource&&(e.url=le(e.url,r),e.url=ce(e.url),e.url=de(e.url)),e.drmData&&e.drmData.length&&e.drmData.forEach((function(e){"string"==typeof e.licenseUrl&&[re,ie,ae].every((function(t){return e.licenseUrl.includes(t)}))&&(e.licenseUrl=le(e.licenseUrl,r,"sessionId="),e.licenseUrl=de(e.licenseUrl),e.licenseUrl=ce(e.licenseUrl),e.licenseUrl=function(e,t){var n=l.Utils.Object.getPropertyPath(t,"provider.uiConfId");return-1===e.indexOf("uiConfId=")&&"number"==typeof n&&(e+=pe(e)+"uiConfId="+n),e}(e.licenseUrl,t))}))}))}))}n(319);var he=function(){function e(e){void 0===e&&(e={}),e.observedThresholds=e.observedThresholds||ve,e.playerThreshold="number"==typeof e.playerThreshold?e.playerThreshold:me,this._config=e,this._eventManager=new l.EventManager,this._targetsObserved=new l.Utils.MultiMap;var t={threshold:e.observedThresholds.map((function(e){return e/100}))};this._observer=new window.IntersectionObserver(this._intersectionChangedHandler.bind(this),t),this._initTabVisibility()}var t=e.prototype;return t._intersectionChangedHandler=function(e){var t=this;e.forEach((function(e){t._targetsObserved.get(e.target).forEach((function(t){var n=e.intersectionRatio>=t.threshold;t.lastIntersectionRatio=e.intersectionRatio,n!==t.lastVisible&&(t.lastVisible=n,t.listener(n,ye.VIEWPORT))}))}))},t._handleTabVisibilityChange=function(){var e=this;this._isTabVisible=!document[this._visibilityTabHiddenAttr],this._targetsObserved.getAll().forEach((function(t){t.lastVisible&&t.listener(e._isTabVisible,ye.TAB)}))},t._initTabVisibility=function(){void 0!==document.hidden?(this._visibilityTabHiddenAttr="hidden",this._visibilityTabChangeEventName="visibilitychange"):void 0!==document.msHidden?(this._visibilityTabHiddenAttr="msHidden",this._visibilityTabChangeEventName="msvisibilitychange"):void 0!==document.webkitHidden&&(this._visibilityTabHiddenAttr="webkitHidden",this._visibilityTabChangeEventName="webkitvisibilitychange"),this._visibilityTabHiddenAttr&&this._visibilityTabChangeEventName&&(this._eventManager.listen(document,this._visibilityTabChangeEventName,this._handleTabVisibilityChange.bind(this)),this._isTabVisible=!document[this._visibilityTabHiddenAttr])},t.observe=function(e,t,n){if(this._observer){var r="number"==typeof n?n:this._config.playerThreshold,i=new ge(r/100,t);if(this._targetsObserved.has(e)){var a=this._targetsObserved.get(e)[0].lastIntersectionRatio;void 0!==a&&(i.lastIntersectionRatio=a,i.listener(this._isTabVisible&&a>=i.threshold,ye.VIEWPORT))}else this._observer.observe(e);this._targetsObserved.push(e,i)}},t.unObserve=function(e,t){this._observer&&(this._targetsObserved.remove(e,t),this._targetsObserved.has(e)||this._observer.unobserve(e))},t.destroy=function(){this._observer&&(this._eventManager.destroy(),this._observer.disconnect(),this._targetsObserved.clear())},e}(),ye={VIEWPORT:"viewport",TAB:"tab"},ge=function(e,t){this.threshold=e,this.listener=t},ve=[0,10,20,30,40,50,60,70,80,90,100],me=50,be=[];function _e(e){if(!e)throw new Error(f);!function(e){if(!e)throw new Error(h);var t=document.getElementById(e);if(!t)throw new Error(y+e);if(t.getElementsByClassName("kaltura-player-container").length>0)throw new Error(g+e)}(e.targetId),function(e){if(!e.partnerId){var t={url:"https://analytics.kaltura.com/api_v3/index.php?service=analytics&action=trackEvent&apiVersion=3.3.0&format=1&eventType=1&partnerId=2504201&entryId=1_3bwzbc9o&&eventIndex=1&position=0",mimetype:""};t.url=ce(t.url),t.url=de(t.url),t.url=le(t.url,l.Utils.Generator.guid()+":"+l.Utils.Generator.guid()),navigator.sendBeacon&&navigator.sendBeacon(t.url)}}(e.provider)}function Ee(){var e=!1;if(!0===window.DEBUG_KALTURA_PLAYER)e=!0;else if(window.URLSearchParams){e=new URLSearchParams(window.location.search).has("debugKalturaPlayer")}else e=!!function(e){e=e.replace(/[[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))}("debugKalturaPlayer");return e}function ke(e){var t={};return function(e){var t=l.Utils.Object.getPropertyPath(window,"__kalturaplayerdata.UIConf");return null!=e&&(void 0!==t&&void 0!==t[e]||!1)}(e)&&(t=window.__kalturaplayerdata.UIConf[e]),t}function Te(e){var t=function(e){var t=document.createElement("div");t.id=l.Utils.Generator.uniqueId(5),t.className="kaltura-player-container",t.setAttribute("tabindex","-1");var n=document.getElementById(e);return n&&t&&n.appendChild(t),t.id}(e.targetId),n={targetId:e.targetId,provider:{partnerId:e.provider.partnerId},ui:{targetId:t},plugins:{},advertising:{adBreaks:[]},viewability:{observedThresholds:ve,playerThreshold:me}};if(l.Utils.Object.mergeDeep(n,e),n.provider.uiConfId){var r=Ae(ke(n.provider.uiConfId));n=l.Utils.Object.mergeDeep({},r,n)}return function(e){if(l.Env.isMacOS&&l.Env.isSafari||l.Env.isIOS){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.preferNative.hls")&&l.Utils.Object.mergeDeep(e,{playback:{preferNative:{hls:!0}}})}}(n),function(e){if(l.Env.isMacOS&&l.Env.isSafari||l.Env.isIOS){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"text.useNativeTextTrack")&&l.Utils.Object.mergeDeep(e,{text:{useNativeTextTrack:!0}})}}(n),function(e){var t=l.Utils.Object.getPropertyPath(e,"plugins.kava");t||(t=l.Utils.Object.mergeDeep(e,{plugins:{kava:{}}}))}(n),function(e){if(l.Env.isSmartTV&&(Object(l.setCapabilities)(l.EngineType.HTML5,{autoplay:!0}),function(e){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.playAdsWithMSE")&&(e=l.Utils.Object.createPropertyPath(e,"playback.playAdsWithMSE",!0));var t=l.Utils.Object.getPropertyPath(e,"plugins.ima.disableMediaPreload"),n=l.Utils.Object.getPropertyPath(e,"plugins.bumper.disableMediaPreload");e.plugins&&e.plugins.ima&&"boolean"!=typeof t&&(e=l.Utils.Object.createPropertyPath(e,"plugins.ima.disableMediaPreload",!0));e.plugins&&e.plugins.bumper&&"boolean"!=typeof n&&(e=l.Utils.Object.createPropertyPath(e,"plugins.bumper.disableMediaPreload",!0))}(e),function(e){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.options.html5.hls.liveSyncDurationCount")&&l.Env.isSafari&&(e=l.Utils.Object.createPropertyPath(e,"playback.options.html5.hls.liveSyncDurationCount",2))}(e),e.plugins&&e.plugins.ima)){var t=l.Utils.Object.getPropertyPath(e,"plugins.ima.forceReloadMediaAfterAds"),n=l.Utils.Object.getPropertyPath(e,"plugins.ima.delayInitUntilSourceSelected");"boolean"!=typeof t&&(e=l.Utils.Object.createPropertyPath(e,"plugins.ima.forceReloadMediaAfterAds",!0)),"boolean"!=typeof n&&(e=l.Utils.Object.createPropertyPath(e,"plugins.ima.delayInitUntilSourceSelected",!0))}}(n),function(e){if("Edge"===l.Env.browser.name){l.Utils.Object.getPropertyPath(e,"drm.keySystem")||(e="Windows"===l.Env.os.name?l.Utils.Object.createPropertyPath(e,"drm.keySystem",l.DrmScheme.PLAYREADY):l.Utils.Object.createPropertyPath(e,"drm.keySystem",l.DrmScheme.WIDEVINE))}}(n),function(e){if(l.Env.isIOS&&e.plugins&&e.plugins.ima&&!e.plugins.ima.disable){var t=l.Utils.Object.getPropertyPath(e,"playback.playsinline"),n=l.Utils.Object.getPropertyPath(e,"plugins.ima.disableMediaPreload");!1===t&&"boolean"!=typeof n&&l.Utils.Object.createPropertyPath(e,"plugins.ima.disableMediaPreload",!0)}}(n),function(e){if(e.plugins&&e.plugins.imadai&&!e.plugins.imadai.disable){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.options.html5.hls.autoStartLoad")&&l.Utils.Object.mergeDeep(e,{playback:{options:{html5:{hls:{autoStartLoad:!1}}}}})}}(n),function(e){var t=l.Utils.Object.getPropertyPath(e,"plugins.bumper"),n=l.Utils.Object.getPropertyPath(e,"plugins.imadai");if(t){var r={};"boolean"!=typeof t.playOnMainVideoTag&&(l.Env.isSmartTV||l.Env.isIOS&&e.playback&&!1===e.playback.playsinline)&&(r.playOnMainVideoTag=!0),n&&!n.disable&&(Array.isArray(t.position)||(r.position=[0]),"boolean"!=typeof t.disableMediaPreload&&(r.disableMediaPreload=!0)),l.Utils.Object.mergeDeep(e,{plugins:{bumper:r}})}}(n),function(e){var t=l.Utils.Object.getPropertyPath(e,"plugins.vr");if(t&&!t.disable){"boolean"!=typeof l.Utils.Object.getPropertyPath(e,"playback.inBrowserFullscreen")&&l.Utils.Object.mergeDeep(e,{playback:{inBrowserFullscreen:!0}})}}(n),function(e){if(l.Env.isIOS){var t=l.Utils.Object.getPropertyPath(e,"playback.playsinline"),n=l.Utils.Object.hasPropertyPath(e,"plugins.airplay"),r=!1!==t;n?Object(l.setCapabilities)(l.EngineType.HTML5,{autoplay:!1,mutedAutoPlay:r}):"iPhone"!==l.Env.device.model||r||Object(l.setCapabilities)(l.EngineType.HTML5,{autoplay:!1,mutedAutoPlay:!1})}}(n),n}function Ae(e){return function(){if(e.player){be.push({level:"warn",msg:"Path config.player will be deprecated soon. Please update your config structure as describe here: https://github.com/kaltura/kaltura-player-js/blob/master/docs/configuration.md"});var t=l.Utils.Object.copyDeep(e.player);delete e.player,l.Utils.Object.mergeDeep(e,t)}}(),[["duration","sources.duration"],["type","sources.type"],["dvr","sources.dvr"],["id","sources.id"],["name","metadata.name"],["metadata.poster","sources.poster"],["metadata","sources.metadata"],["logLevel","log.level"],["ui.components.fullscreen.inBrowserFullscreenForIOS","playback.inBrowserFullscreen"],["playback.enableCEA708Captions","text.enableCEA708Captions"],["playback.useNativeTextTrack","text.useNativeTextTrack"],["playback.captionsTextTrack1Label","text.captionsTextTrack1Label"],["playback.captionsTextTrack1LanguageCode","text.captionsTextTrack1LanguageCode"],["playback.captionsTextTrack2Label","text.captionsTextTrack2Label"],["playback.captionsTextTrack2LanguageCode","text.captionsTextTrack2LanguageCode"],["plugins.visibility.threshold","viewability.playerThreshold"],["plugins.visibility.floating","plugins.floating"],["playback.startTime","sources.startTime"]].forEach((function(t){return function(t,n){if(l.Utils.Object.hasPropertyPath(e,t))if(be.push({level:"warn",msg:"Path config.player."+t+" will be deprecated soon. Please update your config structure as describe here: https://github.com/kaltura/kaltura-player-js/blob/master/docs/configuration.md"}),l.Utils.Object.hasPropertyPath(e,n))l.Utils.Object.deletePropertyPath(e,t);else{var r=l.Utils.Object.getPropertyPath(e,t),i=l.Utils.Object.createPropertyPath({},n,r);l.Utils.Object.mergeDeep(e,i),l.Utils.Object.deletePropertyPath(e,t)}}(t[0],t[1])})),e}function we(e){var t=e&&e.progressive;return!(!t||!t[0]||"video/youtube"!==t[0].mimetype)}function Se(e,t){var n={},r={};return l.Utils.Object.isObject(e)&&Object.entries(e).forEach((function(e){var i=e[0],a=e[1];n[i]={},r[i]={},Object.entries(a).forEach((function(e){var a=e[0],o=e[1],s=l.Utils.Object.getPropertyPath(t[i],a);n[i][a]=s||o,r[i][a]=s}))})),[n,r]}function xe(e,t){for(var n=0;n registration failed, either plugin is not an instance of BasePlugin or plugin handler is not a function"),!1):e._registry.has(t)?(e._logger.debug("Plugin <"+t+"> is already registered, do not register again"),!1):(e._registry.set(t,n),e._logger.debug("Plugin <"+t+"> has been registered successfully"),!0)},e.unRegister=function(t){e._registry.has(t)&&(e._registry.delete(t),e._logger.debug("Unregistered <"+t+"> plugin."))};var t=e.prototype;return t.load=function(t,n,r){if(void 0===r&&(r={}),!e._registry.has(t))throw e._logger.warn("Plugin <"+t+"> loading failed, plugin is not registered"),new l.Error(l.Error.Severity.RECOVERABLE,l.Error.Category.PLAYER,l.Error.Code.RUNTIME_ERROR_NOT_REGISTERED_PLUGIN,t);var i=e._registry.get(t);"boolean"==typeof r.disable&&this._isDisabledPluginMap.set(t,r.disable);var a=!!this._isDisabledPluginMap.get(t),o=!!i&&i.isValid();if(i&&o&&!a){try{this._plugins[t]=i.createPlugin(t,n,r)}catch(e){throw new l.Error(l.Error.Severity.RECOVERABLE,l.Error.Category.PLAYER,l.Error.Code.PLUGIN_LOAD_FAILED,e)}return this._isDisabledPluginMap.set(t,!1),e._logger.debug("Plugin <"+t+"> has been loaded"),!0}return e._logger.debug("Plugin <"+t+"> isn't loaded, isValid()="+o.toString()+", disabled="+a.toString()),!1},t.loadMedia=function(){var e=this;Object.keys(this._plugins).forEach((function(t){return e._plugins[t].loadMedia()}))},t.destroy=function(){var e=this;Object.keys(this._plugins).forEach((function(t){e._plugins[t].destroy(),delete e._plugins[t]}))},t.reset=function(){var e=this;Object.keys(this._plugins).forEach((function(t){return e._plugins[t].reset()}))},t.get=function(e){return this._plugins[e]},t.getAll=function(){return this._plugins},e}();Pe(Ie,"_logger",Object(l.getLogger)("PluginManager")),Pe(Ie,"_registry",new Map);var Re=Ie.register,De={youbora:{playerVersion:"{{pVersion}}",playerName:"{{pName}}",entryId:"{{entryId}}",entryName:"{{entryName}}",entryType:"{{entryType}}",sessionId:"{{sessionId}}",uiConfId:"{{uiConfId}}"},googleAnalytics:{entryId:"{{entryId}}",entryName:"{{entryName}}",uiConfId:"{{uiConfId}}",partnerId:"{{partnerId}}"},ottAnalytics:{entryId:"{{entryId}}",ks:"{{ks}}",isAnonymous:"{{isAnonymous}}",partnerId:"{{partnerId}}",serviceUrl:"{{serviceUrl}}"},ima:{playerVersion:"{{pVersion}}",playerName:"{{pName}}"},kava:{playerVersion:"{{pVersion}}",playerName:"{{pName}}",partnerId:"{{partnerId}}",playlistId:"{{playlistId}}",entryId:"{{entryId}}",entryType:"{{entryType}}",sessionId:"{{sessionId}}",ks:"{{ks}}",uiConfId:"{{uiConfId}}",referrer:"{{referrer}}",encodedReferrer:"{{encodedReferrer}}",serviceUrl:"{{analyticsServiceUrl}}"},comscore:{playerVersion:"{{pVersion}}"},vr:{rootElement:"{{domRootElementId}}"}},Oe=new RegExp("{{.*}}"),Le=function(){function e(){this._config=l.Utils.Object.copyDeep(De)}var t=e.prototype;return t.get=function(){return this._config},t.set=function(e){if(e){var t=function e(t){return void 0===t&&(t={}),Object.entries(t).reduce((function(t,n){var r=n[0],i=n[1];return l.Utils.Object.isObject(i)?t[r]=e(i):"string"==typeof i&&Oe.test(i)?t[r]=i:t[r]=void 0,t}),{})}(e);this._config=function e(t){return void 0===t&&(t={}),Object.entries(t).reduce((function(t,n){var r=n[0],i=n[1];return l.Utils.Object.isObject(i)?t[r]=e(i):i&&(t[r]=i),t}),{})}(l.Utils.Object.mergeDeep(this._config,t))}},t.reset=function(){this._config=l.Utils.Object.copyDeep(De)},e}();var Me=function(e,t){void 0===t&&(t={});try{var n,r=e;for(var i in t){var a=void 0!==t[i]&&null!==t[i]?t[i]:"";"string"==typeof a&&a.indexOf('"')>-1&&(a=a.replace(/"/g,'\\"')),n=new RegExp("{{"+i+"}}","g"),r=r.replace(n,a)}return r}catch(e){return""}},Ne=function(e){return("number"==typeof e||"function"==typeof e||"string"==typeof e||"boolean"==typeof e||l.Utils.Object.isClassInstance(e))&&!Oe.test(e.toString())},Ue=function e(t){return void 0===t&&(t={}),Object.entries(t).reduce((function(t,n){var r=n[0],i=n[1];return l.Utils.Object.isObject(i)&&"function"!=typeof i&&!l.Utils.Object.isClassInstance(i)?t[r]=e(i):Array.isArray(i)?t[r]=i.filter((function(e){return Ne(e)})):Ne(i)&&(t[r]=i),t}),{})},Fe=function(e){var t={pVersion:e.productVersion?e.productVersion:"1.6.0-canary-13-33bc80c.0",pName:"kaltura-player-js"};if(e.targetId&&(t.domRootElementId=e.targetId),e.provider&&e.provider.env){t.serviceUrl=e.provider.env.serviceUrl;var n=l.Utils.Object.getPropertyPath(e,"provider.env.analyticsServiceUrl");n&&(t.analyticsServiceUrl=n+"/api_v3/index.php"),t.serviceUrl&&(t.embedBaseUrl=t.serviceUrl.replace("api_v3",""))}var r,i={referrer:ue(),encodedReferrer:(r=ue(),encodeURIComponent(r))};return e.provider&&l.Utils.Object.mergeDeep(i,{ks:e.provider.ks,uiConfId:e.provider.uiConfId,partnerId:e.provider.partnerId}),e.session&&l.Utils.Object.mergeDeep(i,{sessionId:e.session.id,ks:e.session.ks,isAnonymous:e.session.isAnonymous,uiConfId:e.session.uiConfId,partnerId:e.session.partnerId}),e.sources&&l.Utils.Object.mergeDeep(i,{entryId:e.sources.id,entryName:e.sources.metadata&&e.sources.metadata.name,entryType:e.sources.type}),e.playlist&&l.Utils.Object.mergeDeep(i,{playlistId:e.playlist.id}),Object.keys(i).forEach((function(e){void 0===i[e]&&delete i[e]})),l.Utils.Object.mergeDeep(t,i),t};function Be(e){var t;try{t=JSON.parse(e,(function(e){try{return JSON.parse(this[e])}catch(t){return this[e]}}))}catch(e){t={}}return t}function je(e,t){var n=Ue(t),r=Ue(e);r&&n&&Object.keys(e).forEach((function(t){e&&e[t]&&(e[t]=l.Utils.Object.mergeDeep({},n[t],r[t]))}))}var Ve=function(){function e(){this._pluginConfigStore=new Le}var t=e.prototype;return t.evaluatePluginsConfig=function(e,t){if(e){this._pluginConfigStore.set(e);var n=Fe(t),r=l.Utils.Object.mergeDeep({},this._pluginConfigStore.get(),e);je(e,Be(Me(JSON.stringify(r),n)))}},t.evaluateUIConfig=function(e,t){if(e){var n=Fe(t),r=l.Utils.Object.mergeDeep({},{components:{share:{shareUrl:"{{embedBaseUrl}}/index.php/extwidget/preview/partner_id/{{partnerId}}/uiconf_id/{{uiConfId}}/entry_id/{{entryId}}/embed/dynamic",embedUrl:"{{embedBaseUrl}}/p/{{partnerId}}/embedPlaykitJs/uiconf_id/{{uiConfId}}?iframeembed=true&entry_id={{entryId}}"}}},e);je(e,Be(Me(JSON.stringify(r),n)))}},e}();function He(){return(He=Object.assign||function(e){for(var t=1;t0)}},{key:"vpaid",get:function(){return this._vpaid}}])&&it(t.prototype,n),r&&it(t,r),e}();function ot(){return(ot=Object.assign||function(e){for(var t=1;t0}))&&e._handleConfiguredMidrolls()})))},s._validateOneTimeConfig=function(e){"number"==typeof e.position&&("number"==typeof e.percentage&&(r._logger.warn("Validate ad break - ignore percentage "+e.percentage+" as position "+e.position+" configured"),delete e.percentage),"number"==typeof e.every&&(r._logger.warn("Validate ad break - ignore every "+e.every+" as position "+e.position+" configured"),delete e.every)),"number"==typeof e.percentage&&"number"==typeof e.every&&(r._logger.warn("Validate ad break - ignore every "+e.every+" as percentage "+e.percentage+" configured"),delete e.every)},s._dispatchAdManifestLoaded=function(){var e=this,t=Array.from(new Set(this._configAdBreaks.map((function(e){return e.every&&e.every+"s"||"number"==typeof e.percentage&&e.percentage+"%"||e.position}))));r._logger.debug(l.AdEventType.AD_MANIFEST_LOADED,t),this._player.dispatchEvent(new l.FakeEvent(l.AdEventType.AD_MANIFEST_LOADED,{adBreaksPosition:t})),this._player.ui.hasManager("timeline")&&this._player.config.advertising.showAdBreakCuePoint&&t.forEach((function(t){e._player.ui.getManager("timeline").addCuePoint(ot({time:-1!==t?t:1/0},e._player.config.advertising.adBreakCuePointStyle))}))},s._handleConfiguredPreroll=function(){var e=this._configAdBreaks.filter((function(e){return 0===e.position&&!e.played})),t=this._mergeAdBreaks(e);t&&this._playAdBreak(t)},s._handleEveryAndPercentage=function(){var e=this;this._configAdBreaks.forEach((function(t){if(e._player.duration&&t.every)for(var n=2*t.every;n<=e._player.duration;)e._configAdBreaks.push({position:n,ads:t.ads,played:!1}),n+=t.every;else e._player.duration&&t.percentage&&!t.position&&(t.position=Math.floor(e._player.duration*t.percentage/100))}))},s._handleConfiguredMidrolls=function(){var e=this;this._eventManager.listen(this._player,l.Html5EventType.TIME_UPDATE,(function(){if(!e._player.paused){var t=e._configAdBreaks.filter((function(t){return!t.played&&e._player.currentTime&&t.position<=e._player.currentTime&&t.position>e._snapback}));if(t.length){var n=t[t.length-1].position,i=t.filter((function(e){return e.position===n}));e._snapback=n,r._logger.debug("Set snapback value "+e._snapback);var a=e._mergeAdBreaks(i);a&&e._playAdBreak(a)}}})),this._eventManager.listen(this._player,l.Html5EventType.SEEKED,(function(){var t=e._configAdBreaks.findIndex((function(t){return t.played&&"number"==typeof e._player.currentTime&&e._player.currentTime0&&!e._configAdBreaks[t-1].played&&(e._snapback=0,r._logger.debug("Reset snapback value"))}))},s._playAdBreak=function(e){var t=this._adsPluginControllers.find((function(e){return"function"==typeof e.playAdNow}));t?(e.played=!0,this._adIsLoading=!0,r._logger.debug("Playing ad break positioned in "+e.position),t.playAdNow(e.ads)):r._logger.warn("No ads plugin registered")},s._onAdManifestLoaded=function(e){this._adBreaksLayout=Array.from(new Set(this._adBreaksLayout.concat(e.payload.adBreaksPosition))).sort(),this._allAdsCompleted=!1},s._onAdBreakStart=function(e){this._adBreak=e.payload.adBreak},s._onAdLoaded=function(){this._adIsLoading=!1},s._onAdStarted=function(e){this._ad=e.payload.ad,this._adPlayed=!0,this._isAdPlaying=!0},s._onAdBreakEnd=function(){this._adBreak=null,this._ad=null},s._onAdsCompleted=function(){this._adsPluginControllers.every((function(e){return e.done}))&&this._configAdBreaks.every((function(e){return e.played}))&&(this._allAdsCompleted=!0,r._logger.debug(l.AdEventType.ALL_ADS_COMPLETED),this.dispatchEvent(new l.FakeEvent(l.AdEventType.ALL_ADS_COMPLETED)))},s._onAdError=function(e){this._adIsLoading=!1,e.payload.severity===l.Error.Severity.CRITICAL&&(this._isAdPlaying=!1,this._adsPluginControllers.every((function(e){return e.done}))&&this._configAdBreaks.every((function(e){return e.played}))&&(this._allAdsCompleted=!0,this._adPlayed&&(r._logger.debug(l.AdEventType.ALL_ADS_COMPLETED),this.dispatchEvent(new l.FakeEvent(l.AdEventType.ALL_ADS_COMPLETED)))))},s._isBumper=function(e){return"bumper"===e.name},s._onEnded=function(){var e=this;if(!this._adIsLoading){var t=this._adsPluginControllers.find((function(t){return e._isBumper(t)})),n=this._adsPluginControllers.find((function(t){return!e._isBumper(t)&&!t.done})),r=t&&"function"==typeof t.onPlaybackEnded?function(){return t.onPlaybackEnded()}:function(){return Promise.resolve()},i=n&&"function"==typeof n.onPlaybackEnded?function(){return n.onPlaybackEnded()}:function(){return Promise.resolve()};this._adBreaksLayout.includes(-1)||this._adBreaksLayout.includes("100%")||(this._allAdsCompleted=!0),r().finally((function(){i().finally((function(){return e._handleConfiguredPostroll()}))}))}},s._onPlaybackEnded=function(){this._configAdBreaks.forEach((function(e){return e.played=!0}))},s._handleConfiguredPostroll=function(){var e=this._configAdBreaks.filter((function(e){return!e.played&&-1===e.position}));if(e.length){var t=this._mergeAdBreaks(e);t&&this._playAdBreak(t)}this._configAdBreaks.forEach((function(e){return e.played=!0}))},s._reset=function(){this._eventManager.removeAll(),this._init()},s._destroy=function(){this._adsPluginControllers=[],this._eventManager.destroy()},s._mergeAdBreaks=function(e){if(e.length)return e.forEach((function(e){return e.played=!0})),{position:e[0].position,ads:e.reduce((function(e,t){return e.concat(t.ads)}),[]),played:!1}},i=r,(a=[{key:"allAdsCompleted",get:function(){return this._allAdsCompleted}}])&&st(i.prototype,a),o&&st(i,o),r}(l.FakeEventTarget);!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(lt,"_logger",Object(l.getLogger)("AdsController"));var ut=function(){function e(e){this._pluginManager=e}return e.prototype.getAdsControllers=function(){return Object.values(this._pluginManager.getAll()).filter((function(e){return"function"==typeof e.getAdsController})).map((function(e){return e.getAdsController()}))},e}();function ct(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pt=function(e){var t,n;function r(t){var n;return ct(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(n=e.call(this)||this),"id","PluginReadinessMiddleware"),n._plugins=t,r._logger.debug("plugins readiness",n._plugins),n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.load=function(e){this._checkNextSettle(0,e)},i._checkNextSettle=function(e,t){e\n * Licensed under MIT License\n */\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.21',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser\n /(bidubrowser|baidubrowser)[\\/\\s]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]*)/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n ], [NAME, VERSION], [\n\n /(konqueror)\\/([\\w\\.]+)/i // Konqueror\n ], [[NAME, 'Konqueror'], VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge|edgios|edga|edg)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [[NAME, 'Edge'], VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(Avast)\\/([\\w\\.]+)/i // Avast Secure Browser\n ], [[NAME, 'Avast Secure Browser'], VERSION], [\n\n /(AVG)\\/([\\w\\.]+)/i // AVG Secure Browser\n ], [[NAME, 'AVG Secure Browser'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /(focus)\\/([\\w\\.]+)/i // Firefox Focus\n ], [[NAME, 'Firefox Focus'], VERSION], [\n\n /(opt)\\/([\\w\\.]+)/i // Opera Touch\n ], [[NAME, 'Opera Touch'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(windowswechat qbcore)\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [[NAME, 'WeChat(Win) Desktop'], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(brave)\\/([\\w\\.]+)/i // Brave browser\n ], [[NAME, 'Brave'], VERSION], [\n\n /(qqbrowserlite)\\/([\\w\\.]+)/i // QQBrowserLite\n ], [NAME, VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /(baiduboxapp)[\\/\\s]?([\\w\\.]+)/i // Baidu App\n ], [NAME, VERSION], [\n\n /(2345Explorer)[\\/\\s]?([\\w\\.]+)/i // 2345 Browser\n ], [NAME, VERSION], [\n\n /(MetaSr)[\\/\\s]?([\\w\\.]+)/i // SouGouBrowser\n ], [NAME], [\n\n /(LBBROWSER)/i // LieBao Browser\n ], [NAME], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /safari\\s(line)\\/([\\w\\.]+)/i, // Line App for iOS\n /android.+(line)\\/([\\w\\.]+)\\/iab/i // Line App for Android\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(sailfishbrowser)\\/([\\w\\.]+)/i // Sailfish Browser\n ], [[NAME, 'Sailfish Browser'], VERSION], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /(qihu|qhbrowser|qihoobrowser|360browser)/i // 360\n ], [[NAME, '360 Browser']], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i,\n\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]*)/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+[;l]))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\),;-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/.+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/.+silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n /android.+aft([bms])\\sbuild/i // Fire TV\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone|p00c)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, // HTC\n /(zte)-(\\w*)/i, // ZTE\n /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i\n // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /android.+(bah2?-a?[lw]\\d{2})/i // Huawei MediaPad\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w*)/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]*)/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w*)/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n /(lenovo)[_\\s-]?([\\w-]+)/i\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)[\\s)]/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel( [23])?( xl)?)[\\s)]/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+;\\s(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d?\\w?)[\\s_]*(?:plus)?)\\s+build/i, \n // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+))\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)(?:[\\s_]*[\\w\\s]+))\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n /(mz)-([\\w-]{2,})/i\n ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [\n\n /android.+a000(1)\\s+build/i, // OnePlus\n /android.+oneplus\\s(a\\d{4})[\\s)]/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/\\s]+(Venue[\\d\\s]{2,7})\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+;\\s(k88)\\sbuild/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2})\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(\\w{5})\\sbuild/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?\\w{0,9})\\sbuild/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?\\w{0,9})\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+;\\s(PH-1)\\s/i\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(\\w{1,9})\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q\\w{1,9})\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /[\\s\\/\\(](smart-?tv)[;\\)]/i // SmartTV\n ], [[TYPE, SMARTTV]], [\n\n /(android[\\w\\.\\s\\-]{0,9});.+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, \n // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9}).+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, // Tizen/KaiOS\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]*)/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]*)/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]*)/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]{2,4}(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n /(unix)\\s?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === 'function' && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!./style.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of