aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Potts <sam@potts.es>2018-03-03 23:06:12 +1100
committerSam Potts <sam@potts.es>2018-03-03 23:06:12 +1100
commit317b08c703c94c5ce0e1d53603f4e1c9842df249 (patch)
tree95cff2aacd5068bc029cde2c89355e1fd9847bdb
parentbfb550b8d0be3b4eeb0fc900f26e8c1cb05419fd (diff)
downloadplyr-317b08c703c94c5ce0e1d53603f4e1c9842df249.tar.lz
plyr-317b08c703c94c5ce0e1d53603f4e1c9842df249.tar.xz
plyr-317b08c703c94c5ce0e1d53603f4e1c9842df249.zip
Ready event fix, YouTube play event fix, docs update
-rw-r--r--.stylelintrc.json2
-rw-r--r--demo/dist/demo.css2
-rw-r--r--demo/dist/demo.js4
-rw-r--r--demo/dist/demo.js.map2
-rw-r--r--demo/dist/demo.min.js2
-rw-r--r--demo/dist/demo.min.js.map2
-rw-r--r--demo/src/js/demo.js4
-rw-r--r--dist/plyr.css2
-rw-r--r--dist/plyr.js54
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js2705
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
-rw-r--r--package.json22
-rw-r--r--readme.md129
-rw-r--r--src/js/listeners.js2
-rw-r--r--src/js/plugins/ads.js2
-rw-r--r--src/js/plugins/vimeo.js2
-rw-r--r--src/js/plugins/youtube.js5
-rw-r--r--src/js/plyr.js12
-rw-r--r--src/js/ui.js4
-rw-r--r--src/js/utils.js2
-rw-r--r--yarn.lock367
26 files changed, 2103 insertions, 1235 deletions
diff --git a/.stylelintrc.json b/.stylelintrc.json
index 728265e3..cd831c8a 100644
--- a/.stylelintrc.json
+++ b/.stylelintrc.json
@@ -1,6 +1,6 @@
{
"plugins": ["stylelint-selector-bem-pattern", "stylelint-scss"],
- "extends": ["stylelint-config-sass-guidelines", "stylelint-config-prettier"],
+ "extends": ["stylelint-config-sass-guidelines", "stylelint-config-recommended", "stylelint-config-prettier"],
"rules": {
"selector-class-pattern": null,
"selector-no-qualifying-type": [
diff --git a/demo/dist/demo.css b/demo/dist/demo.css
index 855c569d..5b2e78ee 100644
--- a/demo/dist/demo.css
+++ b/demo/dist/demo.css
@@ -1 +1 @@
-@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:-webkit-box;display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-height:100%}.grid{-webkit-box-flex:1;flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{-webkit-box-align:center;align-items:center;background:#fff;color:#55646b;display:-webkit-box;display:flex;flex-shrink:0;-webkit-box-pack:center;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;max-width:1280px;width:100%}.grid>*{-webkit-box-flex:1;flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;margin:0 0 10px}.button,.button__count{-webkit-box-align:center;align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:-webkit-inline-box;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{-webkit-transform:translateY(1px);transform:translateY(1px)}.button--with-count{display:-webkit-inline-box;display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{-webkit-animation:fadein .2s ease;animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{0%{opacity:.5;-webkit-transform:translateY(10px);transform:translateY(10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes plyr-popup{0%{opacity:.5;-webkit-transform:translateY(10px);transform:translateY(10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{-webkit-animation:plyr-fade-in .3s ease;animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,-webkit-transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out,-webkit-transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;-webkit-transform:translateY(100%);transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__video-embed>div{padding-bottom:200%;position:relative;-webkit-transform:translateY(-35.9375%);transform:translateY(-35.9375%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:-webkit-box;display:flex;position:relative}.plyr__menu .plyr__control svg{transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:1}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{-webkit-box-align:center;align-items:center;color:#4f5b5f;display:-webkit-box;display:flex;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;-webkit-transform:scale(0);transform:scale(0);transition:opacity .3s ease,-webkit-transform .3s ease;transition:transform .3s ease,opacity .3s ease;transition:transform .3s ease,opacity .3s ease,-webkit-transform .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value),transparent var(--value))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{-webkit-box-flex:1;flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{-webkit-box-align:center;align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:-webkit-box;display:flex;font-size:13px;height:100%;-webkit-box-pack:center;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;z-index:3}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file
+@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1280px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;margin:0 0 10px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__video-embed>div{padding-bottom:200%;position:relative;transform:translateY(-35.9375%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:1}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%);transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value),transparent var(--value))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:flex;font-size:13px;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;z-index:3}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file
diff --git a/demo/dist/demo.js b/demo/dist/demo.js
index e61105f4..6044fdb0 100644
--- a/demo/dist/demo.js
+++ b/demo/dist/demo.js
@@ -32,7 +32,7 @@ document.addEventListener('DOMContentLoaded', function () {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
- window.setTimeout(function () {
+ setTimeout(function () {
document.activeElement.classList.add(tabClassName);
}, 0);
});
@@ -59,7 +59,7 @@ document.addEventListener('DOMContentLoaded', function () {
}
});
- // Expose for testing
+ // Expose for tinkering in the console
window.player = player;
// Setup type toggle
diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map
index d860bd88..91ce14ef 100644
--- a/demo/dist/demo.js.map
+++ b/demo/dist/demo.js.map
@@ -1 +1 @@
-{"version":3,"sources":["demo/src/js/demo.js"],"names":["document","addEventListener","window","shr","setup","tabClassName","target","classList","remove","event","keyCode","setTimeout","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n // iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for testing\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
+{"version":3,"sources":["demo/src/js/demo.js"],"names":["document","addEventListener","window","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n // iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js
index 1de8d62e..5e342750 100644
--- a/demo/dist/demo.min.js
+++ b/demo/dist/demo.min.js
@@ -1,2 +1,2 @@
-!function(){"use strict";var e,t,o,i,r,a;document.addEventListener("DOMContentLoaded",function(){window.shr&&window.shr.setup({count:{classname:"button__count"}});document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&window.setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0}});window.player=e;var t=document.querySelectorAll("[data-source]"),o={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},i=window.location.hash.replace("#",""),r=window.history&&window.history.pushState;function a(e,t,o){e&&e.classList[o?"add":"remove"](t)}function n(r,n){if(r in o&&(n||r!==i)&&(i.length||r!==o.video)){switch(r){case o.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case o.audio:e.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case o.youtube:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case o.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}i=r,Array.from(t).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+r+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+r).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");n(t),r&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&n(e.state.type)}),r){var s=!i.length;s&&(i=o.video),i in o&&window.history.replaceState({type:i},"",s?"":"#"+i),i!==o.video&&n(i,!0)}}),"plyr.io"===window.location.host&&(e=window,t=document,o="script",i="ga",e.GoogleAnalyticsObject=i,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,r=t.createElement(o),a=t.getElementsByTagName(o)[0],r.async=1,r.src="//www.google-analytics.com/analytics.js",a.parentNode.insertBefore(r,a),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
+!function(){"use strict";var e,t,o,i,r,a;document.addEventListener("DOMContentLoaded",function(){window.shr&&window.shr.setup({count:{classname:"button__count"}});document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0}});window.player=e;var t=document.querySelectorAll("[data-source]"),o={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},i=window.location.hash.replace("#",""),r=window.history&&window.history.pushState;function a(e,t,o){e&&e.classList[o?"add":"remove"](t)}function n(r,n){if(r in o&&(n||r!==i)&&(i.length||r!==o.video)){switch(r){case o.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case o.audio:e.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case o.youtube:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case o.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}i=r,Array.from(t).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+r+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+r).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");n(t),r&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&n(e.state.type)}),r){var s=!i.length;s&&(i=o.video),i in o&&window.history.replaceState({type:i},"",s?"":"#"+i),i!==o.video&&n(i,!0)}}),"plyr.io"===window.location.host&&(e=window,t=document,o="script",i="ga",e.GoogleAnalyticsObject=i,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,r=t.createElement(o),a=t.getElementsByTagName(o)[0],r.async=1,r.src="//www.google-analytics.com/analytics.js",a.parentNode.insertBefore(r,a),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
//# sourceMappingURL=demo.min.js.map
diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map
index 387a1288..0dd5a179 100644
--- a/demo/dist/demo.min.js.map
+++ b/demo/dist/demo.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["demo/src/js/demo.js"],"names":["i","s","o","r","a","m","document","addEventListener","window","shr","setup","event","target","classList","remove","keyCode","setTimeout","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","cite","setAttribute","removeAttribute","getAttribute","replaceState","host","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"6BAmOcA,EAAGC,EAAGC,EAAMC,EAAGC,EAAGC,EA7NhCC,SAASC,iBAAiB,mBAAoB,WACtCC,OAAOC,YACAA,IAAIC,wBAEQ,4BASdH,iBAAiB,WAAY,SAAAI,KAC5BC,OAAOC,UAAUC,OAJN,wBAQZP,iBAAiB,UAAW,SAAAI,GACX,IAAlBA,EAAMI,gBAMHC,WAAW,oBACLC,cAAcJ,UAAUK,IAhBpB,cAiBd,SAIDC,EAAS,IAAIC,KAAK,kBACb,QACA,0CAGK,uBAGE,qBAGF,gBAGA,yDAGC,YAKVD,OAASA,MAGVE,EAAUf,SAASgB,iBAAiB,iBACpCC,SACK,cACA,gBACE,gBACF,SAEPC,EAAchB,OAAOiB,SAASC,KAAKC,QAAQ,IAAK,IAC9CC,EAAiBpB,OAAOqB,SAAWrB,OAAOqB,QAAQC,mBAG/CC,EAAYC,EAASC,EAAWC,GACjCF,KACQnB,UAAUqB,EAAQ,MAAQ,UAAUD,YAK3CE,EAAUC,EAAMC,MAEfD,KAAQb,IAAYc,GAAQD,IAASZ,KAAkBA,EAAYc,QAAUF,IAASb,EAAMgB,eAI1FH,QACCb,EAAMgB,QACAC,aACG,cACC,sCAEE,4EACC,qBAEF,qFAGM,iBACC,kBACE,SACJ,mFACI,SAGH,iBACC,iBACE,SACJ,wFAOhBjB,EAAMkB,QACAD,aACG,cACC,4EAGM,mFACC,kBAGD,mFACC,0BAOjBjB,EAAMmB,UACAF,aACG,cACC,sCAEE,mDACK,wBAMjBjB,EAAMoB,QACAH,aACG,sBAEG,sCACK,aAWZJ,QAGRQ,KAAKvB,GAASwB,QAAQ,SAAAC,UAAUf,EAAYe,EAAOC,cAAe,UAAU,OAGtEzC,SAAS0C,cAAT,iBAAwCZ,EAAxC,MAAmD,UAAU,SAGnEQ,KAAKtC,SAASgB,iBAAiB,gBAAgBuB,QAAQ,SAAAI,KACpDC,aAAa,SAAU,eAEvBF,cAAT,gBAAuCZ,GAAQe,gBAAgB,oBAI7DP,KAAKvB,GAASwB,QAAQ,SAAAC,KACjBvC,iBAAiB,QAAS,eACvB6B,EAAOU,EAAOM,aAAa,iBAEvBhB,GAENR,UACOC,QAAQC,WAAYM,KAAAA,GAAQ,GAAnC,IAA2CA,cAMhD7B,iBAAiB,WAAY,SAAAI,GAC5BA,EAAMuB,OAAS,SAAUvB,EAAMuB,SACrBvB,EAAMuB,MAAME,QAK1BR,EAAgB,KACVW,GAASf,EAAYc,OAGvBC,MACchB,EAAMgB,OAIpBf,KAAeD,UACRM,QAAQwB,mBAED7B,GAEV,GACAe,EAAQ,GAAR,IAAiBf,GAKrBA,IAAgBD,EAAMgB,SACZf,GAAa,MAQN,YAAzBhB,OAAOiB,SAAS6B,OACNtD,EAaPQ,OAbUP,EAaFK,SAbKJ,EAaK,SAbCC,EAaoD,OAZpEoD,sBAAwBpD,IAC1B,GACIH,EAAA,IACA,YACKA,EAAA,GAAKwD,EAAIxD,EAAA,GAAKwD,OAASC,KAAKC,cAErC,GAAKC,EAAI,EAAI,IAAIC,OACb3D,EAAE4D,cAAc3D,KAChBD,EAAE6D,qBAAqB5D,GAAG,KAC5B6D,MAAQ,IACRC,IAEyB,4CADzBC,WAAWC,aAAa9D,EAAGC,UAE1B8D,GAAG,SAAU,iBAAkB,eAC/BA,GAAG,OAAQ","file":"demo.min.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n // iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for testing\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
+{"version":3,"sources":["demo/src/js/demo.js"],"names":["i","s","o","r","a","m","document","addEventListener","window","shr","setup","event","target","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","cite","setAttribute","removeAttribute","getAttribute","replaceState","host","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"6BAmOcA,EAAGC,EAAGC,EAAMC,EAAGC,EAAGC,EA7NhCC,SAASC,iBAAiB,mBAAoB,WACtCC,OAAOC,YACAA,IAAIC,wBAEQ,4BASdH,iBAAiB,WAAY,SAAAI,KAC5BC,OAAOC,UAAUC,OAJN,wBAQZP,iBAAiB,UAAW,SAAAI,GACX,IAAlBA,EAAMI,oBAMC,oBACEC,cAAcH,UAAUI,IAhBpB,cAiBd,SAIDC,EAAS,IAAIC,KAAK,kBACb,QACA,0CAGK,uBAGE,qBAGF,gBAGA,yDAGC,YAKVD,OAASA,MAGVE,EAAUd,SAASe,iBAAiB,iBACpCC,SACK,cACA,gBACE,gBACF,SAEPC,EAAcf,OAAOgB,SAASC,KAAKC,QAAQ,IAAK,IAC9CC,EAAiBnB,OAAOoB,SAAWpB,OAAOoB,QAAQC,mBAG/CC,EAAYC,EAASC,EAAWC,GACjCF,KACQlB,UAAUoB,EAAQ,MAAQ,UAAUD,YAK3CE,EAAUC,EAAMC,MAEfD,KAAQb,IAAYc,GAAQD,IAASZ,KAAkBA,EAAYc,QAAUF,IAASb,EAAMgB,eAI1FH,QACCb,EAAMgB,QACAC,aACG,cACC,sCAEE,4EACC,qBAEF,qFAGM,iBACC,kBACE,SACJ,mFACI,SAGH,iBACC,iBACE,SACJ,wFAOhBjB,EAAMkB,QACAD,aACG,cACC,4EAGM,mFACC,kBAGD,mFACC,0BAOjBjB,EAAMmB,UACAF,aACG,cACC,sCAEE,mDACK,wBAMjBjB,EAAMoB,QACAH,aACG,sBAEG,sCACK,aAWZJ,QAGRQ,KAAKvB,GAASwB,QAAQ,SAAAC,UAAUf,EAAYe,EAAOC,cAAe,UAAU,OAGtExC,SAASyC,cAAT,iBAAwCZ,EAAxC,MAAmD,UAAU,SAGnEQ,KAAKrC,SAASe,iBAAiB,gBAAgBuB,QAAQ,SAAAI,KACpDC,aAAa,SAAU,eAEvBF,cAAT,gBAAuCZ,GAAQe,gBAAgB,oBAI7DP,KAAKvB,GAASwB,QAAQ,SAAAC,KACjBtC,iBAAiB,QAAS,eACvB4B,EAAOU,EAAOM,aAAa,iBAEvBhB,GAENR,UACOC,QAAQC,WAAYM,KAAAA,GAAQ,GAAnC,IAA2CA,cAMhD5B,iBAAiB,WAAY,SAAAI,GAC5BA,EAAMsB,OAAS,SAAUtB,EAAMsB,SACrBtB,EAAMsB,MAAME,QAK1BR,EAAgB,KACVW,GAASf,EAAYc,OAGvBC,MACchB,EAAMgB,OAIpBf,KAAeD,UACRM,QAAQwB,mBAED7B,GAEV,GACAe,EAAQ,GAAR,IAAiBf,GAKrBA,IAAgBD,EAAMgB,SACZf,GAAa,MAQN,YAAzBf,OAAOgB,SAAS6B,OACNrD,EAaPQ,OAbUP,EAaFK,SAbKJ,EAaK,SAbCC,EAaoD,OAZpEmD,sBAAwBnD,IAC1B,GACIH,EAAA,IACA,YACKA,EAAA,GAAKuD,EAAIvD,EAAA,GAAKuD,OAASC,KAAKC,cAErC,GAAKC,EAAI,EAAI,IAAIC,OACb1D,EAAE2D,cAAc1D,KAChBD,EAAE4D,qBAAqB3D,GAAG,KAC5B4D,MAAQ,IACRC,IAEyB,4CADzBC,WAAWC,aAAa7D,EAAGC,UAE1B6D,GAAG,SAAU,iBAAkB,eAC/BA,GAAG,OAAQ","file":"demo.min.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n // iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
diff --git a/demo/src/js/demo.js b/demo/src/js/demo.js
index a8603c0d..65b94bff 100644
--- a/demo/src/js/demo.js
+++ b/demo/src/js/demo.js
@@ -29,7 +29,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
- window.setTimeout(() => {
+ setTimeout(() => {
document.activeElement.classList.add(tabClassName);
}, 0);
});
@@ -56,7 +56,7 @@ document.addEventListener('DOMContentLoaded', () => {
},
});
- // Expose for testing
+ // Expose for tinkering in the console
window.player = player;
// Setup type toggle
diff --git a/dist/plyr.css b/dist/plyr.css
index 574ba686..0acea39f 100644
--- a/dist/plyr.css
+++ b/dist/plyr.css
@@ -1 +1 @@
-@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{0%{opacity:.5;-webkit-transform:translateY(10px);transform:translateY(10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes plyr-popup{0%{opacity:.5;-webkit-transform:translateY(10px);transform:translateY(10px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{-webkit-animation:plyr-fade-in .3s ease;animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,-webkit-transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out;transition:opacity .4s ease-in-out,transform .4s ease-in-out,-webkit-transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;-webkit-transform:translateY(100%);transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__video-embed>div{padding-bottom:200%;position:relative;-webkit-transform:translateY(-35.9375%);transform:translateY(-35.9375%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:-webkit-box;display:flex;position:relative}.plyr__menu .plyr__control svg{transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:1}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{-webkit-box-align:center;align-items:center;color:#4f5b5f;display:-webkit-box;display:flex;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;-webkit-transform:scale(0);transform:scale(0);transition:opacity .3s ease,-webkit-transform .3s ease;transition:transform .3s ease,opacity .3s ease;transition:transform .3s ease,opacity .3s ease,-webkit-transform .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value),transparent var(--value))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{-webkit-box-flex:1;flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{-webkit-box-align:center;align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:-webkit-box;display:flex;font-size:16px;height:100%;-webkit-box-pack:center;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;z-index:3}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file
+@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__video-embed>div{padding-bottom:200%;position:relative;transform:translateY(-35.9375%)}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:1}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%);transition:border-color .2s ease}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value),transparent var(--value))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:flex;font-size:16px;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;z-index:3}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr--full-ui [hidden]{display:none}.plyr--full-ui [aria-hidden=true]{display:none}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file
diff --git a/dist/plyr.js b/dist/plyr.js
index 8fec8673..73a48301 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -1472,7 +1472,7 @@ var utils = {
// Force repaint of element
repaint: function repaint(element) {
- window.setTimeout(function () {
+ setTimeout(function () {
utils.toggleHidden(element, true);
element.offsetHeight; // eslint-disable-line
utils.toggleHidden(element, false);
@@ -1484,7 +1484,6 @@ var utils = {
// Plyr support checks
// ==========================================================================
-// Check for feature support
var support = {
// Basic support
audio: 'canPlayType' in document.createElement('audio'),
@@ -2002,7 +2001,6 @@ var Storage = function () {
/* global google */
-// Build the default tag URL
var getTagUrl = function getTagUrl() {
var params = {
AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',
@@ -2634,7 +2632,7 @@ var Ads = function () {
this.player.debug.log('Safety timer invoked from: ' + from);
- this.safetyTimer = window.setTimeout(function () {
+ this.safetyTimer = setTimeout(function () {
_this10.cancel();
_this10.clearSafetyTimer('startSafetyTimer()');
}, time);
@@ -2663,7 +2661,6 @@ var Ads = function () {
// Plyr Event Listeners
// ==========================================================================
-// Sniff out the browser
var browser$2 = utils.getBrowser();
var listeners = {
@@ -2838,7 +2835,7 @@ var listeners = {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
- window.setTimeout(function () {
+ setTimeout(function () {
utils.toggleClass(utils.getFocusElement(), _this.config.classNames.tabFocus, true);
}, 0);
});
@@ -3241,6 +3238,8 @@ var ui = {
// Setup the UI
build: function build() {
+ var _this = this;
+
// Re-attach media element listeners
// TODO: Use event bubbling
listeners.media.call(this);
@@ -3301,7 +3300,9 @@ var ui = {
this.ready = true;
// Ready event at end of execution stack
- utils.dispatchEvent.call(this, this.media, 'ready');
+ setTimeout(function () {
+ utils.dispatchEvent.call(_this, _this.media, 'ready');
+ }, 0);
// Set the title
ui.setTitle.call(this);
@@ -3361,7 +3362,7 @@ var ui = {
// Check if media is loading
checkLoading: function checkLoading(event) {
- var _this = this;
+ var _this2 = this;
this.loading = ['stalled', 'waiting'].includes(event.type);
@@ -3371,17 +3372,17 @@ var ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(function () {
// Toggle container class hook
- utils.toggleClass(_this.elements.container, _this.config.classNames.loading, _this.loading);
+ utils.toggleClass(_this2.elements.container, _this2.config.classNames.loading, _this2.loading);
// Show controls if loading, hide if done
- _this.toggleControls(_this.loading);
+ _this2.toggleControls(_this2.loading);
}, this.loading ? 250 : 0);
},
// Check if media failed to load
checkFailed: function checkFailed() {
- var _this2 = this;
+ var _this3 = this;
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState
this.failed = this.media.networkState === 3;
@@ -3397,10 +3398,10 @@ var ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(function () {
// Toggle container class hook
- utils.toggleClass(_this2.elements.container, _this2.config.classNames.loading, _this2.loading);
+ utils.toggleClass(_this3.elements.container, _this3.config.classNames.loading, _this3.loading);
// Show controls if loading, hide if done
- _this2.toggleControls(_this2.loading);
+ _this3.toggleControls(_this3.loading);
}, this.loading ? 250 : 0);
},
@@ -3459,7 +3460,7 @@ var ui = {
// Update <progress> elements
updateProgress: function updateProgress(event) {
- var _this3 = this;
+ var _this4 = this;
if (!this.supported.ui || !utils.is.event(event)) {
return;
@@ -3485,12 +3486,12 @@ var ui = {
case 'playing':
case 'progress':
value = function () {
- var buffered = _this3.media.buffered;
+ var buffered = _this4.media.buffered;
if (buffered && buffered.length) {
// HTML5
- return utils.getPercentage(buffered.end(0), _this3.duration);
+ return utils.getPercentage(buffered.end(0), _this4.duration);
} else if (utils.is.number(buffered)) {
// YouTube returns between 0 and 1
return buffered * 100;
@@ -3575,7 +3576,6 @@ var ui = {
// Plyr controls
// ==========================================================================
-// Sniff out the browser
var browser$1 = utils.getBrowser();
var controls = {
@@ -5177,17 +5177,14 @@ var youtube = {
// Create a faux HTML5 API using the YouTube API
player.media.play = function () {
instance.playVideo();
- player.media.paused = false;
};
player.media.pause = function () {
instance.pauseVideo();
- player.media.paused = true;
};
player.media.stop = function () {
instance.stopVideo();
- player.media.paused = true;
};
player.media.duration = instance.getDuration();
@@ -5316,7 +5313,7 @@ var youtube = {
}, 200);
// Rebuild UI
- window.setTimeout(function () {
+ setTimeout(function () {
return ui.build.call(player);
}, 50);
},
@@ -5719,7 +5716,7 @@ var vimeo = {
});
// Rebuild UI
- window.setTimeout(function () {
+ setTimeout(function () {
return ui.build.call(player);
}, 0);
}
@@ -5729,7 +5726,6 @@ var vimeo = {
// Plyr Media
// ==========================================================================
-// Sniff out the browser
var browser$3 = utils.getBrowser();
var media = {
@@ -6500,15 +6496,7 @@ var Plyr = function () {
// If toggle is false or if we're playing (regardless of toggle),
// then set the timer to hide the controls
if (!show || this.playing) {
- this.timers.controls = window.setTimeout(function () {
- /* this.debug.warn({
- pressed: this.elements.controls.pressed,
- hover: this.elements.controls.pressed,
- playing: this.playing,
- paused: this.paused,
- loading: this.loading,
- }); */
-
+ this.timers.controls = setTimeout(function () {
// If the mouse is over the controls (and not entering fullscreen), bail
if ((_this2.elements.controls.pressed || _this2.elements.controls.hover) && !isEnterFullscreen) {
return;
@@ -6652,7 +6640,7 @@ var Plyr = function () {
}
// Vimeo does not always return
- window.setTimeout(done, 200);
+ setTimeout(done, 200);
break;
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 15a25829..15316ea7 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","id","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","setTimeout","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisment","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","getKeyCode","which","handleKey","code","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n window.setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = window.setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n utils.dispatchEvent.call(this, this.media, 'ready');\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n player.media.paused = false;\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n player.media.paused = true;\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n player.media.paused = true;\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = window.setTimeout(() => {\n /* this.debug.warn({\n pressed: this.elements.controls.pressed,\n hover: this.elements.controls.pressed,\n playing: this.playing,\n paused: this.paused,\n loading: this.loading,\n }); */\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n window.setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","id","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisment","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","setTimeout","getKeyCode","which","handleKey","code","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index 0add375e..7d04f13e 100644
--- a/dist/plyr.min.js
+++ b/dist/plyr.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e,t={html5:"html5",youtube:"youtube",vimeo:"vimeo"},i={audio:"audio",video:"video"},n={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.15/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisment:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},s=(function(){function e(e){this.value=e}function t(t){var i,n;function s(i,n){try{var o=t[i](n),l=o.value;l instanceof e?Promise.resolve(l.value).then(function(e){s("next",e)},function(e){s("throw",e)}):a(o.done?"return":"normal",o.value)}catch(e){a("throw",e)}}function a(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?s(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(a,o){var l={key:e,arg:t,resolve:a,reject:o,next:null};n?n=n.next=l:(i=n=l,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),a=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},l=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var o,l=e[Symbol.iterator]();!(n=(o=l.next()).done)&&(i.push(o.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e,t,i){var n=document.querySelector('script[src="'+e+'"]');if(null!==n)return n.callbacks=n.callbacks||[],void n.callbacks.push(t);var s=document.createElement("script");s.callbacks=s.callbacks||[],s.callbacks.push(t),s.errors=s.errors||[],s.errors.push(i),r.is.function(t)&&s.addEventListener("load",function(e){s.callbacks.forEach(function(t){return t.call(null,e)}),s.callbacks=null},!1),s.addEventListener("error",function(e){s.errors.forEach(function(t){return t.call(null,e)}),s.errors=null},!1),s.src=e;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(s,a)},loadSprite:function(e,t){if(r.is.string(e)){var i=r.is.string(t);if(!i||!document.querySelectorAll("#"+t).length){var n=document.createElement("div");if(r.toggleHidden(n,!0),i&&n.setAttribute("id",t),c.storage){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var a=JSON.parse(s);return void o.call(n,a.content)}}r.fetch(e).then(function(e){r.is.empty(e)||(c.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),o.call(n,e))}).catch(function(){})}}function o(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return r.is.object(t)&&r.setAttributes(n,t),r.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(r.createElement(e,i,n))},removeElement:function(e){r.is.element(e)&&r.is.element(e.parentNode)&&(r.is.nodeList(e)||r.is.array(e)?Array.from(e).forEach(r.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return r.is.element(t)&&r.is.element(t.parentNode)&&r.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){r.is.element(e)&&!r.is.empty(t)&&Object.keys(t).forEach(function(i){e.setAttribute(i,t[i])})},getAttributesFromSelector:function(e,t){if(!r.is.string(e)||r.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),o=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":r.is.object(n)&&r.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[o]=l}}),i},toggleClass:function(e,t,i){if(r.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return r.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){r.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=r.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:r.getElements.call(this,this.config.selectors.buttons.play),pause:r.getElement.call(this,this.config.selectors.buttons.pause),restart:r.getElement.call(this,this.config.selectors.buttons.restart),rewind:r.getElement.call(this,this.config.selectors.buttons.rewind),forward:r.getElement.call(this,this.config.selectors.buttons.forward),mute:r.getElement.call(this,this.config.selectors.buttons.mute),pip:r.getElement.call(this,this.config.selectors.buttons.pip),airplay:r.getElement.call(this,this.config.selectors.buttons.airplay),settings:r.getElement.call(this,this.config.selectors.buttons.settings),captions:r.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:r.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=r.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:r.getElement.call(this,this.config.selectors.inputs.seek),volume:r.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:r.getElement.call(this,this.config.selectors.display.buffer),duration:r.getElement.call(this,this.config.selectors.display.duration),currentTime:r.getElement.call(this,this.config.selectors.display.currentTime)},r.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(r.is.element(e)){var i=r.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=r.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?r.on(this.elements.container,"keydown",a,!1):r.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i,n,s,a){if(!r.is.empty(e)&&!r.is.empty(t)&&r.is.function(i))if(r.is.nodeList(e)||r.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&r.toggleListener.call(null,e,t,i,n,s,a)});else{var o=t.split(" "),l=!!r.is.boolean(a)&&a;c.passiveListeners&&(l={passive:!r.is.boolean(s)||s,capture:!!r.is.boolean(a)&&a}),o.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e,t,i,n,s){r.toggleListener(e,t,i,!0,n,s)},off:function(e,t,i,n,s){r.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e,t,i,n){if(r.is.element(e)&&r.is.string(t)){var s=new CustomEvent(t,{bubbles:!!r.is.boolean(i)&&i,detail:Object.assign({},n,{plyr:r.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(r.is.array(e)||r.is.nodeList(e))Array.from(e).forEach(function(e){return r.toggleState(e,t)});else if(r.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=r.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!r.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),o=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(o)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return r.is.object(s)?(Object.keys(s).forEach(function(t){r.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),r.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),r.extend.apply(r,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?t.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?t.vimeo:null},parseYouTubeId:function(e){if(r.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(r.is.empty(e))return null;if(r.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=l(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return r.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!r.is.string(i)&&t[i]},repaint:function(e){window.setTimeout(function(){r.toggleHidden(e,!0),e.offsetHeight,r.toggleHidden(e,!1)},0)}},c={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=r.getBrowser(),o=a.isIPhone&&i&&c.inline;switch(t+":"+e){case"html5:video":s=(n=c.video)&&c.rangeInput&&(!a.isIPhone||o);break;case"html5:audio":s=(n=c.audio)&&c.rangeInput;break;case"youtube:video":n=!0,s=c.rangeInput&&(!a.isIPhone||o);break;case"vimeo:video":n=!0,s=c.rangeInput&&!a.isIPhone;break;default:s=(n=c.audio&&c.video)&&c.rangeInput}return{api:n,ui:s}},pip:!r.getBrowser().isIPhone&&r.is.function(r.createElement("video").webkitSetPresentationMode),airplay:r.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!r.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(e=document.createElement("input"),e.type="range","range"===e.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==r.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},u=function(){},d=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];s(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return a(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):u}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):u}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):u}}]),e}(),h=r.getBrowser();function p(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;r.is.element(e)&&r.toggleState(e,this.active),r.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),h.isIos||r.trapFocus.call(this.player,this.target,this.active)}}function m(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",r.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),p.call(this)}var g=function(){function e(t){var i=this;s(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},r.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){p.call(i)}),r.on(this.player.elements.container,"dblclick",function(){i.toggle()}),r.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return a(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),r.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?r.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():m.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?r.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():m.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!r.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:r.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return h.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(r.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return r.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!r.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),f=function(){function e(t){s(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return a(e,[{key:"get",value:function(t){var i=window.localStorage.getItem(this.key);if(!e.supported||r.is.empty(i))return null;var n=JSON.parse(i);return r.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&r.is.object(t)){var i=this.get();r.is.empty(i)&&(i={}),r.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),y=function(){function e(t){var i=this;s(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=r.is.url(t.config.ads.tag),this.enabled&&(r.is.object(window.google)?this.ready():r.loadScript(t.config.urls.googleIMA.api,function(){i.ready()},function(){i.blocked=!0,i.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return a(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=r.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+r.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=r.formatTime(e.manager.getRemainingTime()),i=e.player.config.i18n.advertisment+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var i=t.player.elements.progress;if(i){var n=100/t.player.duration*e,s=r.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){r.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),s("loaded"),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),s("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),s("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),s("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:s("started");break;case google.ima.AdEvent.Type.MIDPOINT:s("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:s("complete");break;case google.ima.AdEvent.Type.IMPRESSION:s("impression");break;case google.ima.AdEvent.Type.CLICK:s("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){r.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){r.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){r.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=window.setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){r.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),v=r.getBrowser(),b={global:function(){var e=this,t=null,i=function(i){var n=function(e){return e.keyCode?e.keyCode:e.which}(i),s="keydown"===i.type,a=s&&n===t;if(!(i.altKey||i.ctrlKey||i.metaKey||i.shiftKey)&&r.is.number(n)){if(s){var o=r.getFocusElement();if(r.is.element(o)&&r.matches(o,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(i.preventDefault(),i.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(e.currentTime=e.duration/10*(n-48));break;case 32:case 75:a||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:a||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:a||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===n&&e.fullscreen.toggle(),t=n}else t=null}};this.config.keyboard.global?r.on(window,"keydown keyup",i,!1):this.config.keyboard.focused&&r.on(this.elements.container,"keydown keyup",i,!1),r.on(this.elements.container,"focusout",function(t){r.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),r.on(this.elements.container,"keydown",function(t){9===t.keyCode&&window.setTimeout(function(){r.toggleClass(r.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&r.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(r.on(this.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e,t)}),r.on(this.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e,t)}),r.on(this.media,"loadeddata",function(){r.toggleHidden(e.elements.volume,!e.hasAudio),r.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),r.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),r.on(this.media,"progress playing",function(t){return k.updateProgress.call(e,t)}),r.on(this.media,"volumechange",function(t){return k.updateVolume.call(e,t)}),r.on(this.media,"playing play pause ended",function(t){return k.checkPlaying.call(e,t)}),r.on(this.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=r.getElement.call(this,"."+this.config.classNames.video);if(!r.is.element(t))return;r.on(t,"click",function(){e.config.hideControls&&c.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&r.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),r.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),r.on(this.media,"ratechange",function(){E.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),r.on(this.media,"qualitychange",function(){E.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),r.on(this.media,"languagechange",function(){E.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),r.on(this.media,"captionsenabled captionsdisabled",function(){E.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),r.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.media.error),r.dispatchEvent.call(e,e.elements.container,t.type,!0,i)})},controls:function(){var e=this,t=v.isIE?"change":"input",i=function(t,i,n){var s=e.config.listeners[i];r.is.function(s)&&s.call(e,t),!t.defaultPrevented&&r.is.function(n)&&n.call(e,t)};r.on(this.elements.buttons.play,"click",function(t){return i(t,"play",function(){e.togglePlay()})}),r.on(this.elements.buttons.restart,"click",function(t){return i(t,"restart",function(){e.restart()})}),r.on(this.elements.buttons.rewind,"click",function(t){return i(t,"rewind",function(){e.rewind()})}),r.on(this.elements.buttons.forward,"click",function(t){return i(t,"forward",function(){e.forward()})}),r.on(this.elements.buttons.mute,"click",function(t){return i(t,"mute",function(){e.muted=!e.muted})}),r.on(this.elements.buttons.captions,"click",function(t){return i(t,"captions",function(){e.toggleCaptions()})}),r.on(this.elements.buttons.fullscreen,"click",function(t){return i(t,"fullscreen",function(){e.fullscreen.toggle()})}),r.on(this.elements.buttons.pip,"click",function(t){return i(t,"pip",function(){e.pip="toggle"})}),r.on(this.elements.buttons.airplay,"click",function(t){return i(t,"airplay",function(){e.airplay()})}),r.on(this.elements.buttons.settings,"click",function(t){E.toggleMenu.call(e,t)}),r.on(document.documentElement,"click",function(t){E.toggleMenu.call(e,t)}),r.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),r.matches(t.target,e.config.selectors.inputs.language)?i(t,"language",function(){e.language=t.target.value}):r.matches(t.target,e.config.selectors.inputs.quality)?i(t,"quality",function(){e.quality=t.target.value}):r.matches(t.target,e.config.selectors.inputs.speed)?i(t,"speed",function(){e.speed=parseFloat(t.target.value)}):E.showTab.call(e,t)}),r.on(this.elements.inputs.seek,t,function(t){return i(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!r.is.element(this.elements.display.duration)&&r.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,k.timeUpdate.call(e))}),r.on(this.elements.inputs.volume,t,function(t){return i(t,"volume",function(){e.volume=t.target.value})}),v.isWebkit&&r.on(r.getElements.call(this,'input[type="range"]'),"input",function(t){E.updateRangeFill.call(e,t.target)}),r.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return E.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(r.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),r.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),r.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),r.on(this.elements.inputs.volume,"wheel",function(t){return i(t,"volume",function(){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.decreaseVolume(.02),n=-1):(e.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.increaseVolume(.02),n=1):(e.decreaseVolume(.02),n=-1)),(1===n&&e.media.volume<1||-1===n&&e.media.volume>0)&&t.preventDefault()})},!1)}},k={addStyleHook:function(){r.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),r.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){if(b.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);r.is.element(this.elements.controls)||(E.inject.call(this),b.controls.call(this)),r.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),T.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,r.dispatchEvent.call(this,this.media,"ready"),k.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(r.is.string(this.config.title)&&!r.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),r.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=r.getElement.call(this,"iframe");if(!r.is.element(t))return;var i=r.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",i))}},checkPlaying:function(){r.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),r.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){r.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(r.toggleClass(this.elements.container,this.config.classNames.loading,!1),r.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){r.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(r.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),r.is.element(this.elements.buttons.mute)&&r.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;r.is.element(e)&&(e.value=t,E.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=r.is.number(t)?t:0,n=r.is.element(e)?e:this.elements.display.buffer;if(r.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];r.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){var t=this;if(this.supported.ui&&r.is.event(e)){var i,n=0;if(e)switch(e.type){case"timeupdate":case"seeking":n=r.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":n=(i=t.media.buffered)&&i.length?r.getPercentage(i.end(0),t.duration):r.is.number(i)?100*i:0,k.setProgress.call(this,this.elements.display.buffer,n)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(r.is.element(e)&&r.is.number(t)){var n=r.getHours(this.duration)>0;e.textContent=r.formatTime(t,n,i)}},timeUpdate:function(e){var t=!r.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=r.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),E.updateSeekTooltip.call(this)}}},w=r.getBrowser(),E={updateRangeFill:function(e){if(w.isWebkit){var t=r.is.event(e)?e.target:e;r.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||w.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=E.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttributes(s,r.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),o=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",o):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),s.appendChild(a),s},createLabel:function(e,t){var i=this.config.i18n[e],n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,r.createElement("span",n,i)},createBadge:function(e){if(r.is.empty(e))return null;var t=r.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(r.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=r.createElement("button"),n=Object.assign({},t),s=e,a=!1,o=void 0,l=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,s){case"play":a=!0,o="play",c="pause",l="play",u="pause";break;case"mute":a=!0,o="mute",c="unmute",l="volume",u="muted";break;case"captions":a=!0,o="enableCaptions",c="disableCaptions",l="captions-off",u="captions-on";break;case"fullscreen":a=!0,o="enterFullscreen",c="exitFullscreen",l="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",o="play",l="play";break;default:o=s,l=s}return a?(i.appendChild(E.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(E.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(E.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(E.createLabel.call(this,o,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=this.config.i18n[o]):(i.appendChild(E.createIcon.call(this,l)),i.appendChild(E.createLabel.call(this,o))),r.extend(n,r.getAttributesFromSelector(this.config.selectors.buttons[s],n)),r.setAttributes(i,n),"play"===s?(r.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=r.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),n=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=n,E.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=r.createElement("progress",r.extend(r.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(r.createElement("span",null,"0"));var n="";switch(e){case"played":n=this.config.i18n.played;break;case"buffer":n=this.config.i18n.buffered}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=r.createElement("div",{class:"plyr__time"});return t.appendChild(r.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(r.createElement("span",r.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],o=r.createElement("li"),l=r.createElement("label",{class:this.config.classNames.control}),c=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),u=r.createElement("span",{"aria-hidden":!0});l.appendChild(c),l.appendChild(u),l.insertAdjacentHTML("beforeend",n),r.is.element(s)&&l.appendChild(s),o.appendChild(l),t.appendChild(o)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&r.is.element(this.elements.inputs.seek)&&r.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,i=this.elements.inputs.seek.getBoundingClientRect(),n=this.config.classNames.tooltip+"--visible";if(r.is.event(e))t=100/i.width*(e.pageX-i.left);else{if(!r.hasClass(this.elements.display.seekTooltip,n))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",r.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&r.toggleClass(this.elements.display.seekTooltip,n,"mouseenter"===e.type)}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];r.toggleHidden(i,!t),r.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this,i=this.elements.settings.panes.quality.querySelector("ul");r.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var n=!r.is.empty(this.options.quality)&&this.isYouTube;if(E.toggleTab.call(this,"quality",n),n){r.emptyElement(i);this.options.quality.forEach(function(e){return E.createMenuItem.call(t,e,i,"quality",E.getLabel.call(t,"quality",e),function(e){var i="";switch(e){case"hd2160":i="4K";break;case"hd1440":i="WQHD";break;case"hd1080":case"hd720":i="HD"}return i.length?E.createBadge.call(t,i):null}(e))}),E.updateSetting.call(this,"quality",i)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return E.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var i=this.elements.settings.panes[e],n=null,s=t;switch(e){case"captions":n=this.captions.active?this.captions.language:"";break;default:if(n=this[e],r.is.empty(n)&&(n=this.config[e].default),!this.options[e].includes(n))return void this.debug.warn("Unsupported value of '"+n+"' for "+e);if(!this.config[e].options.includes(n))return void this.debug.warn("Disabled value of '"+n+"' for "+e)}(r.is.element(s)||(s=i&&i.querySelector("ul")),r.is.empty(n))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=E.getLabel.call(this,e,n));var a=s&&s.querySelector('input[value="'+n+'"]');r.is.element(a)&&(a.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!c.textTracks||!T.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=T.getCurrentTrack.call(this);if(r.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=T.getTracks.call(this).length;if(E.toggleTab.call(this,"captions",i),r.emptyElement(t),i){var n=T.getTracks.call(this).map(function(e){return{language:e.language,label:r.is.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"",label:this.config.i18n.none}),n.forEach(function(i){E.createMenuItem.call(e,i.language,t,"language",i.label||i.language,E.createBadge.call(e,i.language.toUpperCase()),i.language.toLowerCase()===e.captions.language.toLowerCase())}),E.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;r.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!r.is.empty(this.options.speed);if(E.toggleTab.call(this,"speed",t),t){var i=this.elements.settings.panes.speed.querySelector("ul");r.toggleHidden(this.elements.settings.tabs.speed,!1),r.toggleHidden(this.elements.settings.panes.speed,!1),r.emptyElement(i),this.options.speed.forEach(function(t){return E.createMenuItem.call(e,t,i,"speed",E.getLabel.call(e,"speed",t))}),E.updateSetting.call(this,"speed",i)}},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings,n=r.is.boolean(e)?e:r.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(r.is.event(e)){var s=r.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}r.is.element(i)&&i.setAttribute("aria-expanded",n),r.is.element(t)&&(t.setAttribute("aria-hidden",!n),r.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return r.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(r.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),o=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),c.transitions&&!c.reducedMotion){o.style.width=a.scrollWidth+"px",o.style.height=a.scrollHeight+"px";var l=E.getTabSize.call(this,s);r.on(o,r.transitionEndEvent,function e(t){t.target===o&&["width","height"].includes(t.propertyName)&&(o.style.width="",o.style.height="",r.off(o,r.transitionEndEvent,e))}),o.style.width=l.width+"px",o.style.height=l.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(r.is.empty(this.config.controls))return null;var i=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(E.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(E.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(E.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(E.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.progress)),s=E.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(E.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=r.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(E.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(E.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(E.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=r.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},u=E.createRange.call(this,"volume",r.extend(l,{id:"plyr-volume-"+e.id}));o.appendChild(u.label),o.appendChild(u.input),this.elements.volume=o,i.appendChild(o)}if(this.config.controls.includes("captions")&&i.appendChild(E.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!r.is.empty(this.config.settings)){var d=r.createElement("div",{class:"plyr__menu"});d.appendChild(E.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var h=r.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),p=r.createElement("div"),m=r.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=r.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=r.createElement("li",{role:"tab",hidden:""}),s=r.createElement("button",r.extend(r.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),t.config.i18n[i]),a=r.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),p.appendChild(m),this.config.settings.forEach(function(i){var n=r.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=r.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[i]);n.appendChild(s);var a=r.createElement("ul");n.appendChild(a),p.appendChild(n),t.elements.settings.panes[i]=n}),h.appendChild(p),d.appendChild(h),i.appendChild(d),this.elements.settings.form=h,this.elements.settings.menu=d}return this.config.controls.includes("pip")&&c.pip&&i.appendChild(E.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&c.airplay&&i.appendChild(E.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(E.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(E.createButton.call(this,"play-large")),this.elements.controls=i,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&E.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=E.getIconUrl.call(this);t.absolute&&r.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=r.is.string(this.config.controls)||r.is.element(this.config.controls)?this.config.controls:r.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):E.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:E.getLanguage.call(this)});var n=void 0;if(r.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),r.is.element(n)||(n=this.elements.container),r.is.element(i)?n.appendChild(i):n.insertAdjacentHTML("beforeend",i),r.is.element(this.elements.controls)||r.findElements.call(this),window.navigator.userAgent.includes("Edge")&&r.repaint(n),this.config.tooltips.controls){var s=r.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){r.toggleClass(t,e.config.classNames.hidden,!1),r.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},T={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(r.is.empty(e)||(this.captions.language=e),r.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!r.is.boolean(this.captions.active)){var t=this.storage.get("captions");r.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!c.textTracks)r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&E.setCaptionsMenu.call(this);else{r.is.element(this.elements.captions)||(this.elements.captions=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.captions)),r.insertAfter(this.elements.captions,this.elements.wrapper)),r.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!r.is.empty(T.getTracks.call(this)));var i=T.getTracks.call(this);if(!r.is.empty(i)){if(r.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=r.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&r.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){r.removeElement(e)})})}T.setLanguage.call(this),T.show.call(this),r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&E.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){T.getTracks.call(this).forEach(function(t){r.on(t,"cuechange",function(t){return T.setCue.call(e,t)}),t.mode="hidden"});var t=T.getCurrentTrack.call(this);r.is.track(t)&&Array.from(t.activeCues||[]).length&&T.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return r.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return T.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=r.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===T.getCurrentTrack.call(this)&&(r.is.cue(n)?T.setText.call(this,n.getCueAsHTML()):T.setText.call(this,null),r.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(r.is.element(this.elements.captions)){var t=r.createElement("span");r.emptyElement(this.elements.captions);var i=r.is.nullOrUndefined(e)?"":e;r.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(r.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");r.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(r.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),r.toggleState(this.elements.buttons.captions,!0))}}},A={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),A.setAspectRatio.call(this),r.is.object(window.YT)&&r.is.function(window.YT.Player)?A.ready.call(this):(r.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){A.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(r.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(r.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(r.is.string(n)&&!r.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";r.fetch(s).then(function(e){r.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(r.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");r.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=r.parseYouTubeId(i),s=r.generateId(e.provider),a=r.createElement("div",{id:s});e.media=r.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!r.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,r.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var i=t.target;e.media.quality=i.getPlaybackQuality(),r.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),r.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;A.getTitle.call(e,n),e.media.play=function(){i.playVideo(),e.media.paused=!1},e.media.pause=function(){i.pauseVideo(),e.media.paused=!0},e.media.stop=function(){i.stopVideo(),e.media.paused=!0},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.media.seeking=!0,r.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return i.getPlaybackQuality()},set:function(t){r.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),i.setPlaybackQuality(t)}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),r.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=r.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),r.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),r.dispatchEvent.call(e,e.media,"timeupdate"),r.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&r.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),r.dispatchEvent.call(e,e.media,"canplaythrough"))},200),window.setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):r.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&r.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&r.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,r.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){r.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),r.dispatchEvent.call(e,e.media,"durationchange")),E.setQualityMenu.call(e,i.getAvailableQualityLevels());break;case 2:e.media.paused=!0,r.dispatchEvent.call(e,e.media,"pause")}r.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},C={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),C.setAspectRatio.call(this),r.is.object(window.Vimeo)?C.ready.call(this):r.loadScript(this.config.urls.vimeo.api,function(){C.ready.call(e)})},setAspectRatio:function(e){var t=r.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1],n=(200-i)/4;this.elements.wrapper.style.paddingBottom=i+"%",this.media.style.transform="translateY(-"+n+"%)"},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},n=r.buildUrlParams(i),s=t.media.getAttribute("src");r.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=r.parseVimeoId(s),o=r.createElement("iframe"),l="https://player.vimeo.com/video/"+a+"?"+n;o.setAttribute("src",l),o.setAttribute("allowfullscreen",""),o.setAttribute("allowtransparency",""),o.setAttribute("allow","autoplay");var c=r.createElement("div");c.appendChild(o),t.media=r.replaceElement(c,t.media),t.embed=new window.Vimeo.Player(o),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.media.paused;t.media.seeking=!0,r.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,r.dispatchEvent.call(t,t.media,"ratechange")})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,r.dispatchEvent.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var i=!!r.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){p=i,r.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=r.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=r.getAspectRatio(t[0],t[1]);C.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,r.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,T.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=r.stripHTML(e.cues[0].text)),T.setText.call(t,i)}),t.embed.on("loaded",function(){r.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&r.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,r.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,r.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&r.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,r.dispatchEvent.call(t,t.media,"seeked"),r.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,r.dispatchEvent.call(t,t.media,"error")}),window.setTimeout(function(){return k.build.call(t)},0)}},S=r.getBrowser(),N={setup:function(){if(this.media)if(r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),r.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(r.toggleClass(this.elements.container,this.config.classNames.pip.supported,c.pip&&this.isHTML5&&this.isVideo),r.toggleClass(this.elements.container,this.config.classNames.airplay.supported,c.airplay&&this.isHTML5),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),r.toggleClass(this.elements.container,this.config.classNames.isIos,S.isIos),r.toggleClass(this.elements.container,this.config.classNames.isTouch,c.touch)),this.isVideo&&(this.elements.wrapper=r.createElement("div",{class:this.config.classNames.video}),r.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":A.setup.call(this);break;case"vimeo":C.setup.call(this)}else this.isHTML5&&k.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(r.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},P={insertElements:function(e,t){var i=this;r.is.string(t)?r.insertElement(e,this.media,{src:t}):r.is.array(t)&&t.forEach(function(t){r.insertElement(e,i.media,t)})},change:function(e){var i=this;r.is.object(e)&&"sources"in e&&e.sources.length?(N.cancelRequests.call(this),this.destroy.call(this,function(){switch(r.removeElement(i.media),i.media=null,r.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=e.type,i.provider=r.is.empty(e.sources[0].provider)?t.html5:e.sources[0].provider,i.supported=c.check(i.type,i.provider,i.config.inline),i.provider+":"+i.type){case"html5:video":i.media=r.createElement("video");break;case"html5:audio":i.media=r.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=r.createElement("div",{src:e.sources[0].src})}i.elements.container.appendChild(i.media),r.is.boolean(e.autoplay)&&(i.config.autoplay=e.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in e&&i.media.setAttribute("poster",e.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.inline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&P.insertElements.call(i,"source",e.sources),i.config.title=e.title,N.setup.call(i),i.isHTML5&&("tracks"in e&&P.insertElements.call(i,"track",e.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(a,o){var l=this;if(s(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=a,r.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||r.is.nodeList(this.media)||r.is.array(this.media))&&(this.media=this.media[0]),this.config=r.extend({},n,o,function(){try{return JSON.parse(l.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new d(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",c),!r.is.nullOrUndefined(this.media)&&r.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(c.check().api){this.elements.original=this.media.cloneNode(!0);var u=this.media.tagName.toLowerCase(),h=null,p=null,m=null;switch(u){case"div":if(h=this.media.querySelector("iframe"),r.is.element(h)){if(p=h.getAttribute("src"),this.provider=r.getProviderByUrl(p),this.elements.container=this.media,this.media=h,this.elements.container.className="",m=r.getUrlParams(p),!r.is.empty(m)){var v=["1","true"];v.includes(m.autoplay)&&(this.config.autoplay=!0),v.includes(m.playsinline)&&(this.config.inline=!0),v.includes(m.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(r.is.empty(this.provider)||!Object.keys(t).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=i.video;break;case"video":case"audio":this.type=u,this.provider=t.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=c.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new f(this),this.media.plyr=this,r.is.element(this.elements.container)||(this.elements.container=r.createElement("div"),r.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),b.global.call(this),k.addStyleHook.call(this),N.setup.call(this),this.config.debug&&r.on(this.elements.container,this.config.events.join(" "),function(e){l.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.fullscreen=new g(this),this.ads=new y(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return a(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(r.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(r.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(r.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(r.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(r.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&r.is.element(this.elements.buttons.captions)){var t=r.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,r.toggleState(this.elements.buttons.captions,this.captions.active),r.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),r.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){c.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(r.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(r.is.boolean(e)||(r.is.event(e)?(s="enterfullscreen"===e.type,n=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(i=2e3),"focusin"===e.type&&(i=3e3,r.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):n=r.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),n||this.paused||this.loading){if(r.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&r.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;c.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=window.setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(r.hasClass(t.elements.container,t.config.classNames.hideControls)||r.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),r.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(r.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!r.is.empty(t.config.settings)&&E.toggleMenu.call(t,!1)))},i))}}},{key:"on",value:function(e,t){r.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){r.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(r.removeElement(t.elements.buttons.play),r.removeElement(t.elements.captions),r.removeElement(t.elements.controls),r.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),r.is.function(e)&&e()):(r.replaceElement(t.elements.original,t.elements.container),r.dispatchEvent.call(t,t.elements.original,"destroyed",!0),r.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),window.setTimeout(n,200)}}},{key:"supports",value:function(e){return c.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===t.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===t.youtube}},{key:"isVimeo",get:function(){return this.provider===t.vimeo}},{key:"isVideo",get:function(){return this.type===i.video}},{key:"isAudio",get:function(){return this.type===i.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;r.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;r.is.string(t)&&(t=Number(t)),r.is.number(t)||(t=this.storage.get("volume")),r.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;r.is.boolean(t)||(t=this.storage.get("muted")),r.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;r.is.number(e)&&(t=e),r.is.number(t)||(t=this.storage.get("speed")),r.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;r.is.string(e)&&(t=e),r.is.string(t)||(t=this.storage.get("quality")),r.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=r.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){P.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?r.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=r.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(r.is.string(e)&&(this.toggleCaptions(!r.is.empty(e)),!r.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,T.setText.call(this,null),T.setLanguage.call(this),r.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(c.pip){var n=r.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return c.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return c.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return r.loadSprite(e,t)}}]),e}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e,t={html5:"html5",youtube:"youtube",vimeo:"vimeo"},i={audio:"audio",video:"video"},n={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.15/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisment:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},s=(function(){function e(e){this.value=e}function t(t){var i,n;function s(i,n){try{var o=t[i](n),l=o.value;l instanceof e?Promise.resolve(l.value).then(function(e){s("next",e)},function(e){s("throw",e)}):a(o.done?"return":"normal",o.value)}catch(e){a("throw",e)}}function a(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?s(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(a,o){var l={key:e,arg:t,resolve:a,reject:o,next:null};n?n=n.next=l:(i=n=l,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),a=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},l=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var o,l=e[Symbol.iterator]();!(n=(o=l.next()).done)&&(i.push(o.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e,t,i){var n=document.querySelector('script[src="'+e+'"]');if(null!==n)return n.callbacks=n.callbacks||[],void n.callbacks.push(t);var s=document.createElement("script");s.callbacks=s.callbacks||[],s.callbacks.push(t),s.errors=s.errors||[],s.errors.push(i),r.is.function(t)&&s.addEventListener("load",function(e){s.callbacks.forEach(function(t){return t.call(null,e)}),s.callbacks=null},!1),s.addEventListener("error",function(e){s.errors.forEach(function(t){return t.call(null,e)}),s.errors=null},!1),s.src=e;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(s,a)},loadSprite:function(e,t){if(r.is.string(e)){var i=r.is.string(t);if(!i||!document.querySelectorAll("#"+t).length){var n=document.createElement("div");if(r.toggleHidden(n,!0),i&&n.setAttribute("id",t),c.storage){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var a=JSON.parse(s);return void o.call(n,a.content)}}r.fetch(e).then(function(e){r.is.empty(e)||(c.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),o.call(n,e))}).catch(function(){})}}function o(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return r.is.object(t)&&r.setAttributes(n,t),r.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(r.createElement(e,i,n))},removeElement:function(e){r.is.element(e)&&r.is.element(e.parentNode)&&(r.is.nodeList(e)||r.is.array(e)?Array.from(e).forEach(r.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return r.is.element(t)&&r.is.element(t.parentNode)&&r.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){r.is.element(e)&&!r.is.empty(t)&&Object.keys(t).forEach(function(i){e.setAttribute(i,t[i])})},getAttributesFromSelector:function(e,t){if(!r.is.string(e)||r.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),o=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":r.is.object(n)&&r.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[o]=l}}),i},toggleClass:function(e,t,i){if(r.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return r.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){r.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=r.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:r.getElements.call(this,this.config.selectors.buttons.play),pause:r.getElement.call(this,this.config.selectors.buttons.pause),restart:r.getElement.call(this,this.config.selectors.buttons.restart),rewind:r.getElement.call(this,this.config.selectors.buttons.rewind),forward:r.getElement.call(this,this.config.selectors.buttons.forward),mute:r.getElement.call(this,this.config.selectors.buttons.mute),pip:r.getElement.call(this,this.config.selectors.buttons.pip),airplay:r.getElement.call(this,this.config.selectors.buttons.airplay),settings:r.getElement.call(this,this.config.selectors.buttons.settings),captions:r.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:r.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=r.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:r.getElement.call(this,this.config.selectors.inputs.seek),volume:r.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:r.getElement.call(this,this.config.selectors.display.buffer),duration:r.getElement.call(this,this.config.selectors.display.duration),currentTime:r.getElement.call(this,this.config.selectors.display.currentTime)},r.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(r.is.element(e)){var i=r.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=r.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?r.on(this.elements.container,"keydown",a,!1):r.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i,n,s,a){if(!r.is.empty(e)&&!r.is.empty(t)&&r.is.function(i))if(r.is.nodeList(e)||r.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&r.toggleListener.call(null,e,t,i,n,s,a)});else{var o=t.split(" "),l=!!r.is.boolean(a)&&a;c.passiveListeners&&(l={passive:!r.is.boolean(s)||s,capture:!!r.is.boolean(a)&&a}),o.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e,t,i,n,s){r.toggleListener(e,t,i,!0,n,s)},off:function(e,t,i,n,s){r.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e,t,i,n){if(r.is.element(e)&&r.is.string(t)){var s=new CustomEvent(t,{bubbles:!!r.is.boolean(i)&&i,detail:Object.assign({},n,{plyr:r.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(r.is.array(e)||r.is.nodeList(e))Array.from(e).forEach(function(e){return r.toggleState(e,t)});else if(r.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=r.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!r.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),o=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(o)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return r.is.object(s)?(Object.keys(s).forEach(function(t){r.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),r.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),r.extend.apply(r,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?t.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?t.vimeo:null},parseYouTubeId:function(e){if(r.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(r.is.empty(e))return null;if(r.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=l(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return r.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!r.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){r.toggleHidden(e,!0),e.offsetHeight,r.toggleHidden(e,!1)},0)}},c={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=r.getBrowser(),o=a.isIPhone&&i&&c.inline;switch(t+":"+e){case"html5:video":s=(n=c.video)&&c.rangeInput&&(!a.isIPhone||o);break;case"html5:audio":s=(n=c.audio)&&c.rangeInput;break;case"youtube:video":n=!0,s=c.rangeInput&&(!a.isIPhone||o);break;case"vimeo:video":n=!0,s=c.rangeInput&&!a.isIPhone;break;default:s=(n=c.audio&&c.video)&&c.rangeInput}return{api:n,ui:s}},pip:!r.getBrowser().isIPhone&&r.is.function(r.createElement("video").webkitSetPresentationMode),airplay:r.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!r.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(e=document.createElement("input"),e.type="range","range"===e.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==r.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},u=function(){},d=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];s(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return a(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):u}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):u}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):u}}]),e}(),h=r.getBrowser();function p(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;r.is.element(e)&&r.toggleState(e,this.active),r.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),h.isIos||r.trapFocus.call(this.player,this.target,this.active)}}function m(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",r.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),p.call(this)}var g=function(){function e(t){var i=this;s(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},r.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){p.call(i)}),r.on(this.player.elements.container,"dblclick",function(){i.toggle()}),r.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return a(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),r.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?r.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():m.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?r.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():m.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!r.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:r.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return h.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(r.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return r.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!r.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),f=function(){function e(t){s(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return a(e,[{key:"get",value:function(t){var i=window.localStorage.getItem(this.key);if(!e.supported||r.is.empty(i))return null;var n=JSON.parse(i);return r.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&r.is.object(t)){var i=this.get();r.is.empty(i)&&(i={}),r.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),y=function(){function e(t){var i=this;s(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=r.is.url(t.config.ads.tag),this.enabled&&(r.is.object(window.google)?this.ready():r.loadScript(t.config.urls.googleIMA.api,function(){i.ready()},function(){i.blocked=!0,i.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return a(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=r.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+r.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=r.formatTime(e.manager.getRemainingTime()),i=e.player.config.i18n.advertisment+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var i=t.player.elements.progress;if(i){var n=100/t.player.duration*e,s=r.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){r.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),s("loaded"),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),s("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),s("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),s("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:s("started");break;case google.ima.AdEvent.Type.MIDPOINT:s("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:s("complete");break;case google.ima.AdEvent.Type.IMPRESSION:s("impression");break;case google.ima.AdEvent.Type.CLICK:s("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){r.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){r.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){r.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){r.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),v=r.getBrowser(),b={global:function(){var e=this,t=null,i=function(i){var n=function(e){return e.keyCode?e.keyCode:e.which}(i),s="keydown"===i.type,a=s&&n===t;if(!(i.altKey||i.ctrlKey||i.metaKey||i.shiftKey)&&r.is.number(n)){if(s){var o=r.getFocusElement();if(r.is.element(o)&&r.matches(o,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(i.preventDefault(),i.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(e.currentTime=e.duration/10*(n-48));break;case 32:case 75:a||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:a||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:a||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===n&&e.fullscreen.toggle(),t=n}else t=null}};this.config.keyboard.global?r.on(window,"keydown keyup",i,!1):this.config.keyboard.focused&&r.on(this.elements.container,"keydown keyup",i,!1),r.on(this.elements.container,"focusout",function(t){r.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),r.on(this.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){r.toggleClass(r.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&r.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(r.on(this.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e,t)}),r.on(this.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e,t)}),r.on(this.media,"loadeddata",function(){r.toggleHidden(e.elements.volume,!e.hasAudio),r.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),r.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),r.on(this.media,"progress playing",function(t){return k.updateProgress.call(e,t)}),r.on(this.media,"volumechange",function(t){return k.updateVolume.call(e,t)}),r.on(this.media,"playing play pause ended",function(t){return k.checkPlaying.call(e,t)}),r.on(this.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=r.getElement.call(this,"."+this.config.classNames.video);if(!r.is.element(t))return;r.on(t,"click",function(){e.config.hideControls&&c.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&r.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),r.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),r.on(this.media,"ratechange",function(){w.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),r.on(this.media,"qualitychange",function(){w.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),r.on(this.media,"languagechange",function(){w.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),r.on(this.media,"captionsenabled captionsdisabled",function(){w.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),r.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.media.error),r.dispatchEvent.call(e,e.elements.container,t.type,!0,i)})},controls:function(){var e=this,t=v.isIE?"change":"input",i=function(t,i,n){var s=e.config.listeners[i];r.is.function(s)&&s.call(e,t),!t.defaultPrevented&&r.is.function(n)&&n.call(e,t)};r.on(this.elements.buttons.play,"click",function(t){return i(t,"play",function(){e.togglePlay()})}),r.on(this.elements.buttons.restart,"click",function(t){return i(t,"restart",function(){e.restart()})}),r.on(this.elements.buttons.rewind,"click",function(t){return i(t,"rewind",function(){e.rewind()})}),r.on(this.elements.buttons.forward,"click",function(t){return i(t,"forward",function(){e.forward()})}),r.on(this.elements.buttons.mute,"click",function(t){return i(t,"mute",function(){e.muted=!e.muted})}),r.on(this.elements.buttons.captions,"click",function(t){return i(t,"captions",function(){e.toggleCaptions()})}),r.on(this.elements.buttons.fullscreen,"click",function(t){return i(t,"fullscreen",function(){e.fullscreen.toggle()})}),r.on(this.elements.buttons.pip,"click",function(t){return i(t,"pip",function(){e.pip="toggle"})}),r.on(this.elements.buttons.airplay,"click",function(t){return i(t,"airplay",function(){e.airplay()})}),r.on(this.elements.buttons.settings,"click",function(t){w.toggleMenu.call(e,t)}),r.on(document.documentElement,"click",function(t){w.toggleMenu.call(e,t)}),r.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),r.matches(t.target,e.config.selectors.inputs.language)?i(t,"language",function(){e.language=t.target.value}):r.matches(t.target,e.config.selectors.inputs.quality)?i(t,"quality",function(){e.quality=t.target.value}):r.matches(t.target,e.config.selectors.inputs.speed)?i(t,"speed",function(){e.speed=parseFloat(t.target.value)}):w.showTab.call(e,t)}),r.on(this.elements.inputs.seek,t,function(t){return i(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!r.is.element(this.elements.display.duration)&&r.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,k.timeUpdate.call(e))}),r.on(this.elements.inputs.volume,t,function(t){return i(t,"volume",function(){e.volume=t.target.value})}),v.isWebkit&&r.on(r.getElements.call(this,'input[type="range"]'),"input",function(t){w.updateRangeFill.call(e,t.target)}),r.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return w.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(r.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),r.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),r.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),r.on(this.elements.inputs.volume,"wheel",function(t){return i(t,"volume",function(){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.decreaseVolume(.02),n=-1):(e.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.increaseVolume(.02),n=1):(e.decreaseVolume(.02),n=-1)),(1===n&&e.media.volume<1||-1===n&&e.media.volume>0)&&t.preventDefault()})},!1)}},k={addStyleHook:function(){r.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),r.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(b.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);r.is.element(this.elements.controls)||(w.inject.call(this),b.controls.call(this)),r.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),T.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){r.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(r.is.string(this.config.title)&&!r.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),r.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=r.getElement.call(this,"iframe");if(!r.is.element(t))return;var i=r.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",i))}},checkPlaying:function(){r.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),r.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){r.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(r.toggleClass(this.elements.container,this.config.classNames.loading,!1),r.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){r.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(r.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),r.is.element(this.elements.buttons.mute)&&r.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;r.is.element(e)&&(e.value=t,w.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=r.is.number(t)?t:0,n=r.is.element(e)?e:this.elements.display.buffer;if(r.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];r.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){var t=this;if(this.supported.ui&&r.is.event(e)){var i,n=0;if(e)switch(e.type){case"timeupdate":case"seeking":n=r.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":n=(i=t.media.buffered)&&i.length?r.getPercentage(i.end(0),t.duration):r.is.number(i)?100*i:0,k.setProgress.call(this,this.elements.display.buffer,n)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(r.is.element(e)&&r.is.number(t)){var n=r.getHours(this.duration)>0;e.textContent=r.formatTime(t,n,i)}},timeUpdate:function(e){var t=!r.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=r.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),w.updateSeekTooltip.call(this)}}},E=r.getBrowser(),w={updateRangeFill:function(e){if(E.isWebkit){var t=r.is.event(e)?e.target:e;r.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||E.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=w.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttributes(s,r.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),o=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",o):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),s.appendChild(a),s},createLabel:function(e,t){var i=this.config.i18n[e],n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,r.createElement("span",n,i)},createBadge:function(e){if(r.is.empty(e))return null;var t=r.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(r.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=r.createElement("button"),n=Object.assign({},t),s=e,a=!1,o=void 0,l=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,s){case"play":a=!0,o="play",c="pause",l="play",u="pause";break;case"mute":a=!0,o="mute",c="unmute",l="volume",u="muted";break;case"captions":a=!0,o="enableCaptions",c="disableCaptions",l="captions-off",u="captions-on";break;case"fullscreen":a=!0,o="enterFullscreen",c="exitFullscreen",l="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",o="play",l="play";break;default:o=s,l=s}return a?(i.appendChild(w.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(w.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(w.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(w.createLabel.call(this,o,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=this.config.i18n[o]):(i.appendChild(w.createIcon.call(this,l)),i.appendChild(w.createLabel.call(this,o))),r.extend(n,r.getAttributesFromSelector(this.config.selectors.buttons[s],n)),r.setAttributes(i,n),"play"===s?(r.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=r.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),n=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=n,w.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=r.createElement("progress",r.extend(r.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(r.createElement("span",null,"0"));var n="";switch(e){case"played":n=this.config.i18n.played;break;case"buffer":n=this.config.i18n.buffered}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=r.createElement("div",{class:"plyr__time"});return t.appendChild(r.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(r.createElement("span",r.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],o=r.createElement("li"),l=r.createElement("label",{class:this.config.classNames.control}),c=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),u=r.createElement("span",{"aria-hidden":!0});l.appendChild(c),l.appendChild(u),l.insertAdjacentHTML("beforeend",n),r.is.element(s)&&l.appendChild(s),o.appendChild(l),t.appendChild(o)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&r.is.element(this.elements.inputs.seek)&&r.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,i=this.elements.inputs.seek.getBoundingClientRect(),n=this.config.classNames.tooltip+"--visible";if(r.is.event(e))t=100/i.width*(e.pageX-i.left);else{if(!r.hasClass(this.elements.display.seekTooltip,n))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",r.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&r.toggleClass(this.elements.display.seekTooltip,n,"mouseenter"===e.type)}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];r.toggleHidden(i,!t),r.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this,i=this.elements.settings.panes.quality.querySelector("ul");r.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var n=!r.is.empty(this.options.quality)&&this.isYouTube;if(w.toggleTab.call(this,"quality",n),n){r.emptyElement(i);this.options.quality.forEach(function(e){return w.createMenuItem.call(t,e,i,"quality",w.getLabel.call(t,"quality",e),function(e){var i="";switch(e){case"hd2160":i="4K";break;case"hd1440":i="WQHD";break;case"hd1080":case"hd720":i="HD"}return i.length?w.createBadge.call(t,i):null}(e))}),w.updateSetting.call(this,"quality",i)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return w.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var i=this.elements.settings.panes[e],n=null,s=t;switch(e){case"captions":n=this.captions.active?this.captions.language:"";break;default:if(n=this[e],r.is.empty(n)&&(n=this.config[e].default),!this.options[e].includes(n))return void this.debug.warn("Unsupported value of '"+n+"' for "+e);if(!this.config[e].options.includes(n))return void this.debug.warn("Disabled value of '"+n+"' for "+e)}(r.is.element(s)||(s=i&&i.querySelector("ul")),r.is.empty(n))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=w.getLabel.call(this,e,n));var a=s&&s.querySelector('input[value="'+n+'"]');r.is.element(a)&&(a.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!c.textTracks||!T.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=T.getCurrentTrack.call(this);if(r.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=T.getTracks.call(this).length;if(w.toggleTab.call(this,"captions",i),r.emptyElement(t),i){var n=T.getTracks.call(this).map(function(e){return{language:e.language,label:r.is.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"",label:this.config.i18n.none}),n.forEach(function(i){w.createMenuItem.call(e,i.language,t,"language",i.label||i.language,w.createBadge.call(e,i.language.toUpperCase()),i.language.toLowerCase()===e.captions.language.toLowerCase())}),w.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;r.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!r.is.empty(this.options.speed);if(w.toggleTab.call(this,"speed",t),t){var i=this.elements.settings.panes.speed.querySelector("ul");r.toggleHidden(this.elements.settings.tabs.speed,!1),r.toggleHidden(this.elements.settings.panes.speed,!1),r.emptyElement(i),this.options.speed.forEach(function(t){return w.createMenuItem.call(e,t,i,"speed",w.getLabel.call(e,"speed",t))}),w.updateSetting.call(this,"speed",i)}},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings,n=r.is.boolean(e)?e:r.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(r.is.event(e)){var s=r.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}r.is.element(i)&&i.setAttribute("aria-expanded",n),r.is.element(t)&&(t.setAttribute("aria-hidden",!n),r.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return r.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(r.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),o=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),c.transitions&&!c.reducedMotion){o.style.width=a.scrollWidth+"px",o.style.height=a.scrollHeight+"px";var l=w.getTabSize.call(this,s);r.on(o,r.transitionEndEvent,function e(t){t.target===o&&["width","height"].includes(t.propertyName)&&(o.style.width="",o.style.height="",r.off(o,r.transitionEndEvent,e))}),o.style.width=l.width+"px",o.style.height=l.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(r.is.empty(this.config.controls))return null;var i=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(w.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(w.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(w.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(w.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.progress)),s=w.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(w.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=r.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(w.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(w.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(w.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=r.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},u=w.createRange.call(this,"volume",r.extend(l,{id:"plyr-volume-"+e.id}));o.appendChild(u.label),o.appendChild(u.input),this.elements.volume=o,i.appendChild(o)}if(this.config.controls.includes("captions")&&i.appendChild(w.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!r.is.empty(this.config.settings)){var d=r.createElement("div",{class:"plyr__menu"});d.appendChild(w.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var h=r.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),p=r.createElement("div"),m=r.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=r.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=r.createElement("li",{role:"tab",hidden:""}),s=r.createElement("button",r.extend(r.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),t.config.i18n[i]),a=r.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),p.appendChild(m),this.config.settings.forEach(function(i){var n=r.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=r.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[i]);n.appendChild(s);var a=r.createElement("ul");n.appendChild(a),p.appendChild(n),t.elements.settings.panes[i]=n}),h.appendChild(p),d.appendChild(h),i.appendChild(d),this.elements.settings.form=h,this.elements.settings.menu=d}return this.config.controls.includes("pip")&&c.pip&&i.appendChild(w.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&c.airplay&&i.appendChild(w.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(w.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(w.createButton.call(this,"play-large")),this.elements.controls=i,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&w.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=w.getIconUrl.call(this);t.absolute&&r.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=r.is.string(this.config.controls)||r.is.element(this.config.controls)?this.config.controls:r.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):w.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:w.getLanguage.call(this)});var n=void 0;if(r.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),r.is.element(n)||(n=this.elements.container),r.is.element(i)?n.appendChild(i):n.insertAdjacentHTML("beforeend",i),r.is.element(this.elements.controls)||r.findElements.call(this),window.navigator.userAgent.includes("Edge")&&r.repaint(n),this.config.tooltips.controls){var s=r.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){r.toggleClass(t,e.config.classNames.hidden,!1),r.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},T={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(r.is.empty(e)||(this.captions.language=e),r.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!r.is.boolean(this.captions.active)){var t=this.storage.get("captions");r.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!c.textTracks)r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&w.setCaptionsMenu.call(this);else{r.is.element(this.elements.captions)||(this.elements.captions=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.captions)),r.insertAfter(this.elements.captions,this.elements.wrapper)),r.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!r.is.empty(T.getTracks.call(this)));var i=T.getTracks.call(this);if(!r.is.empty(i)){if(r.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=r.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&r.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){r.removeElement(e)})})}T.setLanguage.call(this),T.show.call(this),r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&w.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){T.getTracks.call(this).forEach(function(t){r.on(t,"cuechange",function(t){return T.setCue.call(e,t)}),t.mode="hidden"});var t=T.getCurrentTrack.call(this);r.is.track(t)&&Array.from(t.activeCues||[]).length&&T.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return r.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return T.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=r.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===T.getCurrentTrack.call(this)&&(r.is.cue(n)?T.setText.call(this,n.getCueAsHTML()):T.setText.call(this,null),r.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(r.is.element(this.elements.captions)){var t=r.createElement("span");r.emptyElement(this.elements.captions);var i=r.is.nullOrUndefined(e)?"":e;r.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(r.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");r.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(r.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),r.toggleState(this.elements.buttons.captions,!0))}}},A={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),A.setAspectRatio.call(this),r.is.object(window.YT)&&r.is.function(window.YT.Player)?A.ready.call(this):(r.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){A.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(r.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(r.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(r.is.string(n)&&!r.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";r.fetch(s).then(function(e){r.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(r.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");r.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=r.parseYouTubeId(i),s=r.generateId(e.provider),a=r.createElement("div",{id:s});e.media=r.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!r.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,r.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var i=t.target;e.media.quality=i.getPlaybackQuality(),r.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),r.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;A.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.media.seeking=!0,r.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return i.getPlaybackQuality()},set:function(t){r.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),i.setPlaybackQuality(t)}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),r.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=r.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),r.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),r.dispatchEvent.call(e,e.media,"timeupdate"),r.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&r.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),r.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):r.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&r.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&r.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,r.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){r.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),r.dispatchEvent.call(e,e.media,"durationchange")),w.setQualityMenu.call(e,i.getAvailableQualityLevels());break;case 2:e.media.paused=!0,r.dispatchEvent.call(e,e.media,"pause")}r.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},C={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),C.setAspectRatio.call(this),r.is.object(window.Vimeo)?C.ready.call(this):r.loadScript(this.config.urls.vimeo.api,function(){C.ready.call(e)})},setAspectRatio:function(e){var t=r.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1],n=(200-i)/4;this.elements.wrapper.style.paddingBottom=i+"%",this.media.style.transform="translateY(-"+n+"%)"},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},n=r.buildUrlParams(i),s=t.media.getAttribute("src");r.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=r.parseVimeoId(s),o=r.createElement("iframe"),l="https://player.vimeo.com/video/"+a+"?"+n;o.setAttribute("src",l),o.setAttribute("allowfullscreen",""),o.setAttribute("allowtransparency",""),o.setAttribute("allow","autoplay");var c=r.createElement("div");c.appendChild(o),t.media=r.replaceElement(c,t.media),t.embed=new window.Vimeo.Player(o),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.media.paused;t.media.seeking=!0,r.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,r.dispatchEvent.call(t,t.media,"ratechange")})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,r.dispatchEvent.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var i=!!r.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){p=i,r.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=r.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=r.getAspectRatio(t[0],t[1]);C.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,r.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,T.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=r.stripHTML(e.cues[0].text)),T.setText.call(t,i)}),t.embed.on("loaded",function(){r.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&r.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,r.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,r.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&r.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,r.dispatchEvent.call(t,t.media,"seeked"),r.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,r.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},S=r.getBrowser(),N={setup:function(){if(this.media)if(r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),r.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(r.toggleClass(this.elements.container,this.config.classNames.pip.supported,c.pip&&this.isHTML5&&this.isVideo),r.toggleClass(this.elements.container,this.config.classNames.airplay.supported,c.airplay&&this.isHTML5),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),r.toggleClass(this.elements.container,this.config.classNames.isIos,S.isIos),r.toggleClass(this.elements.container,this.config.classNames.isTouch,c.touch)),this.isVideo&&(this.elements.wrapper=r.createElement("div",{class:this.config.classNames.video}),r.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":A.setup.call(this);break;case"vimeo":C.setup.call(this)}else this.isHTML5&&k.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(r.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},P={insertElements:function(e,t){var i=this;r.is.string(t)?r.insertElement(e,this.media,{src:t}):r.is.array(t)&&t.forEach(function(t){r.insertElement(e,i.media,t)})},change:function(e){var i=this;r.is.object(e)&&"sources"in e&&e.sources.length?(N.cancelRequests.call(this),this.destroy.call(this,function(){switch(r.removeElement(i.media),i.media=null,r.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=e.type,i.provider=r.is.empty(e.sources[0].provider)?t.html5:e.sources[0].provider,i.supported=c.check(i.type,i.provider,i.config.inline),i.provider+":"+i.type){case"html5:video":i.media=r.createElement("video");break;case"html5:audio":i.media=r.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=r.createElement("div",{src:e.sources[0].src})}i.elements.container.appendChild(i.media),r.is.boolean(e.autoplay)&&(i.config.autoplay=e.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in e&&i.media.setAttribute("poster",e.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.inline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&P.insertElements.call(i,"source",e.sources),i.config.title=e.title,N.setup.call(i),i.isHTML5&&("tracks"in e&&P.insertElements.call(i,"track",e.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(a,o){var l=this;if(s(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=a,r.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||r.is.nodeList(this.media)||r.is.array(this.media))&&(this.media=this.media[0]),this.config=r.extend({},n,o,function(){try{return JSON.parse(l.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new d(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",c),!r.is.nullOrUndefined(this.media)&&r.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(c.check().api){this.elements.original=this.media.cloneNode(!0);var u=this.media.tagName.toLowerCase(),h=null,p=null,m=null;switch(u){case"div":if(h=this.media.querySelector("iframe"),r.is.element(h)){if(p=h.getAttribute("src"),this.provider=r.getProviderByUrl(p),this.elements.container=this.media,this.media=h,this.elements.container.className="",m=r.getUrlParams(p),!r.is.empty(m)){var v=["1","true"];v.includes(m.autoplay)&&(this.config.autoplay=!0),v.includes(m.playsinline)&&(this.config.inline=!0),v.includes(m.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(r.is.empty(this.provider)||!Object.keys(t).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=i.video;break;case"video":case"audio":this.type=u,this.provider=t.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=c.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new f(this),this.media.plyr=this,r.is.element(this.elements.container)||(this.elements.container=r.createElement("div"),r.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),b.global.call(this),k.addStyleHook.call(this),N.setup.call(this),this.config.debug&&r.on(this.elements.container,this.config.events.join(" "),function(e){l.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.fullscreen=new g(this),this.ads=new y(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return a(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(r.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(r.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(r.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(r.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(r.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&r.is.element(this.elements.buttons.captions)){var t=r.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,r.toggleState(this.elements.buttons.captions,this.captions.active),r.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),r.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){c.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(r.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(r.is.boolean(e)||(r.is.event(e)?(s="enterfullscreen"===e.type,n=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(i=2e3),"focusin"===e.type&&(i=3e3,r.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):n=r.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),n||this.paused||this.loading){if(r.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&r.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;c.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(r.hasClass(t.elements.container,t.config.classNames.hideControls)||r.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),r.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(r.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!r.is.empty(t.config.settings)&&w.toggleMenu.call(t,!1)))},i))}}},{key:"on",value:function(e,t){r.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){r.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(r.removeElement(t.elements.buttons.play),r.removeElement(t.elements.captions),r.removeElement(t.elements.controls),r.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),r.is.function(e)&&e()):(r.replaceElement(t.elements.original,t.elements.container),r.dispatchEvent.call(t,t.elements.original,"destroyed",!0),r.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}},{key:"supports",value:function(e){return c.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===t.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===t.youtube}},{key:"isVimeo",get:function(){return this.provider===t.vimeo}},{key:"isVideo",get:function(){return this.type===i.video}},{key:"isAudio",get:function(){return this.type===i.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;r.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;r.is.string(t)&&(t=Number(t)),r.is.number(t)||(t=this.storage.get("volume")),r.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;r.is.boolean(t)||(t=this.storage.get("muted")),r.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;r.is.number(e)&&(t=e),r.is.number(t)||(t=this.storage.get("speed")),r.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;r.is.string(e)&&(t=e),r.is.string(t)||(t=this.storage.get("quality")),r.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=r.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){P.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?r.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=r.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(r.is.string(e)&&(this.toggleCaptions(!r.is.empty(e)),!r.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,T.setText.call(this,null),T.setLanguage.call(this),r.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(c.pip){var n=r.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return c.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return c.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return r.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index 6664a98f..e8a261f1 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["range","providers","types","defaults","window","navigator","language","split","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","undefined","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","event","forEach","cb","call","err","src","first","getElementsByTagName","parentNode","insertBefore","id","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","result","empty","setItem","stringify","catch","updateSprite","innerHTML","body","childNodes","prefix","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","value","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","youtube","vimeo","match","RegExp","$2","parser","href","search","startsWith","parseUrl","indexOf","reduce","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","find","setTimeout","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","exit","enter","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","Ads","ads","initialized","blocked","tag","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","setInterval","_this4","getRemainingTime","label","i18n","advertisment","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","_this8","init","start","adError","_this9","destroy","handleKey","code","which","getKeyCode","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IC2IcA,ED3IDC,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SERLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,wBACI,uBAML,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kC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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n window.setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = window.setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n utils.dispatchEvent.call(this, this.media, 'ready');\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n player.media.paused = false;\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n player.media.paused = true;\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n player.media.paused = true;\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = window.setTimeout(() => {\n /* this.debug.warn({\n pressed: this.elements.controls.pressed,\n hover: this.elements.controls.pressed,\n playing: this.playing,\n paused: this.paused,\n loading: this.loading,\n }); */\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n window.setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["range","providers","types","defaults","window","navigator","language","split","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","undefined","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","event","forEach","cb","call","err","src","first","getElementsByTagName","parentNode","insertBefore","id","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","result","empty","setItem","stringify","catch","updateSprite","innerHTML","body","childNodes","prefix","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","value","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","youtube","vimeo","match","RegExp","$2","parser","href","search","startsWith","parseUrl","indexOf","reduce","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","find","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","exit","enter","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","Ads","ads","initialized","blocked","tag","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","setInterval","_this4","getRemainingTime","label","i18n","advertisment","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","_this8","init","start","adError","_this9","destroy","setTimeout","handleKey","code","which","getKeyCode","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IC2IcA,ED3IDC,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SERLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,wBACI,uBAML,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kC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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index bba17a31..5d60527f 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -23,20 +23,52 @@ var global = module.exports = typeof window != 'undefined' && window.Math == Mat
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
});
+
+
+var _global$2 = Object.freeze({
+ default: _global,
+ __moduleExports: _global
+});
+
var _core = createCommonjsModule(function (module) {
var core = module.exports = { version: '2.5.3' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
});
+var _core_1 = _core.version;
+
+
+var _core$2 = Object.freeze({
+ default: _core,
+ __moduleExports: _core,
+ version: _core_1
+});
+
var _isObject = function (it) {
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
+
+
+var _isObject$2 = Object.freeze({
+ default: _isObject,
+ __moduleExports: _isObject
+});
+
+var isObject = ( _isObject$2 && _isObject ) || _isObject$2;
+
var _anObject = function (it) {
- if (!_isObject(it)) throw TypeError(it + ' is not an object!');
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
return it;
};
+
+
+var _anObject$2 = Object.freeze({
+ default: _anObject,
+ __moduleExports: _anObject
+});
+
var _fails = function (exec) {
try {
return !!exec();
@@ -45,42 +77,86 @@ var _fails = function (exec) {
}
};
-// Thank's IE8 for his funny defineProperty
-var _descriptors = !_fails(function () {
+
+
+var _fails$2 = Object.freeze({
+ default: _fails,
+ __moduleExports: _fails
+});
+
+var require$$0 = ( _fails$2 && _fails ) || _fails$2;
+
+var _descriptors = !require$$0(function () {
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});
-var document$1 = _global.document;
+
+
+var _descriptors$2 = Object.freeze({
+ default: _descriptors,
+ __moduleExports: _descriptors
+});
+
+var global$1 = ( _global$2 && _global ) || _global$2;
+
+var document$1 = global$1.document;
// typeof document.createElement is 'object' in old IE
-var is = _isObject(document$1) && _isObject(document$1.createElement);
+var is = isObject(document$1) && isObject(document$1.createElement);
var _domCreate = function (it) {
return is ? document$1.createElement(it) : {};
};
-var _ie8DomDefine = !_descriptors && !_fails(function () {
- return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;
+
+
+var _domCreate$2 = Object.freeze({
+ default: _domCreate,
+ __moduleExports: _domCreate
});
-// 7.1.1 ToPrimitive(input [, PreferredType])
+var require$$0$1 = ( _descriptors$2 && _descriptors ) || _descriptors$2;
+
+var cel = ( _domCreate$2 && _domCreate ) || _domCreate$2;
+
+var _ie8DomDefine = !require$$0$1 && !require$$0(function () {
+ return Object.defineProperty(cel('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+
+var _ie8DomDefine$2 = Object.freeze({
+ default: _ie8DomDefine,
+ __moduleExports: _ie8DomDefine
+});
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
var _toPrimitive = function (it, S) {
- if (!_isObject(it)) return it;
+ if (!isObject(it)) return it;
var fn, val;
- if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
- if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;
- if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
throw TypeError("Can't convert object to primitive value");
};
+
+
+var _toPrimitive$2 = Object.freeze({
+ default: _toPrimitive,
+ __moduleExports: _toPrimitive
+});
+
+var anObject = ( _anObject$2 && _anObject ) || _anObject$2;
+
+var IE8_DOM_DEFINE = ( _ie8DomDefine$2 && _ie8DomDefine ) || _ie8DomDefine$2;
+
+var toPrimitive = ( _toPrimitive$2 && _toPrimitive ) || _toPrimitive$2;
+
var dP = Object.defineProperty;
-var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
- _anObject(O);
- P = _toPrimitive(P, true);
- _anObject(Attributes);
- if (_ie8DomDefine) try {
+var f = require$$0$1 ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
return dP(O, P, Attributes);
} catch (e) { /* empty */ }
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
@@ -92,6 +168,14 @@ var _objectDp = {
f: f
};
+
+
+var _objectDp$2 = Object.freeze({
+ default: _objectDp,
+ __moduleExports: _objectDp,
+ f: f
+});
+
var _propertyDesc = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
@@ -101,48 +185,88 @@ var _propertyDesc = function (bitmap, value) {
};
};
-var _hide = _descriptors ? function (object, key, value) {
- return _objectDp.f(object, key, _propertyDesc(1, value));
+
+
+var _propertyDesc$2 = Object.freeze({
+ default: _propertyDesc,
+ __moduleExports: _propertyDesc
+});
+
+var $defineProperty = ( _objectDp$2 && _objectDp ) || _objectDp$2;
+
+var createDesc = ( _propertyDesc$2 && _propertyDesc ) || _propertyDesc$2;
+
+var _hide = require$$0$1 ? function (object, key, value) {
+ return $defineProperty.f(object, key, createDesc(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
+
+
+var _hide$2 = Object.freeze({
+ default: _hide,
+ __moduleExports: _hide
+});
+
var hasOwnProperty = {}.hasOwnProperty;
var _has = function (it, key) {
return hasOwnProperty.call(it, key);
};
+
+
+var _has$2 = Object.freeze({
+ default: _has,
+ __moduleExports: _has
+});
+
var id = 0;
var px = Math.random();
var _uid = function (key) {
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
+
+
+var _uid$2 = Object.freeze({
+ default: _uid,
+ __moduleExports: _uid
+});
+
+var hide = ( _hide$2 && _hide ) || _hide$2;
+
+var has = ( _has$2 && _has ) || _has$2;
+
+var uid = ( _uid$2 && _uid ) || _uid$2;
+
+var core = ( _core$2 && _core ) || _core$2;
+
var _redefine = createCommonjsModule(function (module) {
-var SRC = _uid('src');
+var SRC = uid('src');
var TO_STRING = 'toString';
var $toString = Function[TO_STRING];
var TPL = ('' + $toString).split(TO_STRING);
-_core.inspectSource = function (it) {
+core.inspectSource = function (it) {
return $toString.call(it);
};
(module.exports = function (O, key, val, safe) {
var isFunction = typeof val == 'function';
- if (isFunction) _has(val, 'name') || _hide(val, 'name', key);
+ if (isFunction) has(val, 'name') || hide(val, 'name', key);
if (O[key] === val) return;
- if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
- if (O === _global) {
+ if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+ if (O === global$1) {
O[key] = val;
} else if (!safe) {
delete O[key];
- _hide(O, key, val);
+ hide(O, key, val);
} else if (O[key]) {
O[key] = val;
} else {
- _hide(O, key, val);
+ hide(O, key, val);
}
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
@@ -150,15 +274,29 @@ _core.inspectSource = function (it) {
});
});
+
+
+var _redefine$2 = Object.freeze({
+ default: _redefine,
+ __moduleExports: _redefine
+});
+
var _aFunction = function (it) {
if (typeof it != 'function') throw TypeError(it + ' is not a function!');
return it;
};
-// optional / simple context binding
+
+
+var _aFunction$2 = Object.freeze({
+ default: _aFunction,
+ __moduleExports: _aFunction
+});
+
+var aFunction = ( _aFunction$2 && _aFunction ) || _aFunction$2;
var _ctx = function (fn, that, length) {
- _aFunction(fn);
+ aFunction(fn);
if (that === undefined) return fn;
switch (length) {
case 1: return function (a) {
@@ -176,6 +314,17 @@ var _ctx = function (fn, that, length) {
};
};
+
+
+var _ctx$2 = Object.freeze({
+ default: _ctx,
+ __moduleExports: _ctx
+});
+
+var redefine = ( _redefine$2 && _redefine ) || _redefine$2;
+
+var ctx = ( _ctx$2 && _ctx ) || _ctx$2;
+
var PROTOTYPE = 'prototype';
var $export = function (type, name, source) {
@@ -184,8 +333,8 @@ var $export = function (type, name, source) {
var IS_STATIC = type & $export.S;
var IS_PROTO = type & $export.P;
var IS_BIND = type & $export.B;
- var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
- var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
+ var target = IS_GLOBAL ? global$1 : IS_STATIC ? global$1[name] || (global$1[name] = {}) : (global$1[name] || {})[PROTOTYPE];
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
var key, own, out, exp;
if (IS_GLOBAL) source = name;
@@ -195,15 +344,15 @@ var $export = function (type, name, source) {
// export native or passed
out = (own ? target : source)[key];
// bind timers to global for call from export context
- exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;
+ exp = IS_BIND && own ? ctx(out, global$1) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
// extend global
- if (target) _redefine(target, key, out, type & $export.U);
+ if (target) redefine(target, key, out, type & $export.U);
// export
- if (exports[key] != out) _hide(exports, key, exp);
+ if (exports[key] != out) hide(exports, key, exp);
if (IS_PROTO && expProto[key] != out) expProto[key] = out;
}
};
-_global.core = _core;
+global$1.core = core;
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
@@ -215,9 +364,16 @@ $export.U = 64; // safe
$export.R = 128; // real proto method for `library`
var _export = $export;
-var TYPED = _uid('typed_array');
-var VIEW$1 = _uid('view');
-var ABV = !!(_global.ArrayBuffer && _global.DataView);
+
+
+var _export$2 = Object.freeze({
+ default: _export,
+ __moduleExports: _export
+});
+
+var TYPED = uid('typed_array');
+var VIEW$1 = uid('view');
+var ABV = !!(global$1.ArrayBuffer && global$1.DataView);
var CONSTR = ABV;
var i = 0;
var l = 9;
@@ -228,9 +384,9 @@ var TypedArrayConstructors = (
).split(',');
while (i < l) {
- if (Typed = _global[TypedArrayConstructors[i++]]) {
- _hide(Typed.prototype, TYPED, true);
- _hide(Typed.prototype, VIEW$1, true);
+ if (Typed = global$1[TypedArrayConstructors[i++]]) {
+ hide(Typed.prototype, TYPED, true);
+ hide(Typed.prototype, VIEW$1, true);
} else CONSTR = false;
}
@@ -241,19 +397,55 @@ var _typed = {
VIEW: VIEW$1
};
+var _typed_1 = _typed.ABV;
+var _typed_2 = _typed.CONSTR;
+var _typed_3 = _typed.TYPED;
+var _typed_4 = _typed.VIEW;
+
+
+var _typed$2 = Object.freeze({
+ default: _typed,
+ __moduleExports: _typed,
+ ABV: _typed_1,
+ CONSTR: _typed_2,
+ TYPED: _typed_3,
+ VIEW: _typed_4
+});
+
var _library = false;
+
+
+var _library$2 = Object.freeze({
+ default: _library,
+ __moduleExports: _library
+});
+
var _redefineAll = function (target, src, safe) {
- for (var key in src) _redefine(target, key, src[key], safe);
+ for (var key in src) redefine(target, key, src[key], safe);
return target;
};
+
+
+var _redefineAll$2 = Object.freeze({
+ default: _redefineAll,
+ __moduleExports: _redefineAll
+});
+
var _anInstance = function (it, Constructor, name, forbiddenField) {
if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
throw TypeError(name + ': incorrect invocation!');
} return it;
};
+
+
+var _anInstance$2 = Object.freeze({
+ default: _anInstance,
+ __moduleExports: _anInstance
+});
+
// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
@@ -261,67 +453,121 @@ var _toInteger = function (it) {
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
-// 7.1.15 ToLength
+
+
+var _toInteger$2 = Object.freeze({
+ default: _toInteger,
+ __moduleExports: _toInteger
+});
+
+var toInteger = ( _toInteger$2 && _toInteger ) || _toInteger$2;
var min = Math.min;
var _toLength = function (it) {
- return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};
-// https://tc39.github.io/ecma262/#sec-toindex
+var _toLength$2 = Object.freeze({
+ default: _toLength,
+ __moduleExports: _toLength
+});
+
+var toLength = ( _toLength$2 && _toLength ) || _toLength$2;
+
var _toIndex = function (it) {
if (it === undefined) return 0;
- var number = _toInteger(it);
- var length = _toLength(number);
+ var number = toInteger(it);
+ var length = toLength(number);
if (number !== length) throw RangeError('Wrong length!');
return length;
};
+
+
+var _toIndex$2 = Object.freeze({
+ default: _toIndex,
+ __moduleExports: _toIndex
+});
+
var toString = {}.toString;
var _cof = function (it) {
return toString.call(it).slice(8, -1);
};
-// fallback for non-array-like ES3 and non-enumerable old V8 strings
-// eslint-disable-next-line no-prototype-builtins
+
+var _cof$2 = Object.freeze({
+ default: _cof,
+ __moduleExports: _cof
+});
+
+var cof = ( _cof$2 && _cof ) || _cof$2;
+
var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
- return _cof(it) == 'String' ? it.split('') : Object(it);
+ return cof(it) == 'String' ? it.split('') : Object(it);
};
+
+
+var _iobject$2 = Object.freeze({
+ default: _iobject,
+ __moduleExports: _iobject
+});
+
// 7.2.1 RequireObjectCoercible(argument)
var _defined = function (it) {
if (it == undefined) throw TypeError("Can't call method on " + it);
return it;
};
-// to indexed object, toObject with fallback for non-array-like ES3 strings
+var _defined$2 = Object.freeze({
+ default: _defined,
+ __moduleExports: _defined
+});
+
+var IObject = ( _iobject$2 && _iobject ) || _iobject$2;
+
+var defined = ( _defined$2 && _defined ) || _defined$2;
+
var _toIobject = function (it) {
- return _iobject(_defined(it));
+ return IObject(defined(it));
};
+
+
+var _toIobject$2 = Object.freeze({
+ default: _toIobject,
+ __moduleExports: _toIobject
+});
+
var max = Math.max;
var min$1 = Math.min;
var _toAbsoluteIndex = function (index, length) {
- index = _toInteger(index);
+ index = toInteger(index);
return index < 0 ? max(index + length, 0) : min$1(index, length);
};
-// false -> Array#indexOf
-// true -> Array#includes
+var _toAbsoluteIndex$2 = Object.freeze({
+ default: _toAbsoluteIndex,
+ __moduleExports: _toAbsoluteIndex
+});
+
+var toIObject = ( _toIobject$2 && _toIobject ) || _toIobject$2;
+
+var toAbsoluteIndex = ( _toAbsoluteIndex$2 && _toAbsoluteIndex ) || _toAbsoluteIndex$2;
var _arrayIncludes = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
- var O = _toIobject($this);
- var length = _toLength(O.length);
- var index = _toAbsoluteIndex(fromIndex, length);
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
// eslint-disable-next-line no-self-compare
@@ -336,95 +582,191 @@ var _arrayIncludes = function (IS_INCLUDES) {
};
};
+
+
+var _arrayIncludes$2 = Object.freeze({
+ default: _arrayIncludes,
+ __moduleExports: _arrayIncludes
+});
+
var SHARED = '__core-js_shared__';
-var store = _global[SHARED] || (_global[SHARED] = {});
+var store = global$1[SHARED] || (global$1[SHARED] = {});
var _shared = function (key) {
return store[key] || (store[key] = {});
};
-var shared = _shared('keys');
+
+
+var _shared$2 = Object.freeze({
+ default: _shared,
+ __moduleExports: _shared
+});
+
+var shared$1 = ( _shared$2 && _shared ) || _shared$2;
+
+var shared = shared$1('keys');
var _sharedKey = function (key) {
- return shared[key] || (shared[key] = _uid(key));
+ return shared[key] || (shared[key] = uid(key));
};
-var arrayIndexOf = _arrayIncludes(false);
-var IE_PROTO = _sharedKey('IE_PROTO');
+
+
+var _sharedKey$2 = Object.freeze({
+ default: _sharedKey,
+ __moduleExports: _sharedKey
+});
+
+var require$$0$2 = ( _arrayIncludes$2 && _arrayIncludes ) || _arrayIncludes$2;
+
+var require$$0$3 = ( _sharedKey$2 && _sharedKey ) || _sharedKey$2;
+
+var arrayIndexOf = require$$0$2(false);
+var IE_PROTO = require$$0$3('IE_PROTO');
var _objectKeysInternal = function (object, names) {
- var O = _toIobject(object);
+ var O = toIObject(object);
var i = 0;
var result = [];
var key;
- for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key);
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
// Don't enum bug & hidden keys
- while (names.length > i) if (_has(O, key = names[i++])) {
+ while (names.length > i) if (has(O, key = names[i++])) {
~arrayIndexOf(result, key) || result.push(key);
}
return result;
};
+
+
+var _objectKeysInternal$2 = Object.freeze({
+ default: _objectKeysInternal,
+ __moduleExports: _objectKeysInternal
+});
+
// IE 8- don't enum bug keys
var _enumBugKeys = (
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
-// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
-var hiddenKeys = _enumBugKeys.concat('length', 'prototype');
+
+var _enumBugKeys$2 = Object.freeze({
+ default: _enumBugKeys,
+ __moduleExports: _enumBugKeys
+});
+
+var $keys = ( _objectKeysInternal$2 && _objectKeysInternal ) || _objectKeysInternal$2;
+
+var enumBugKeys = ( _enumBugKeys$2 && _enumBugKeys ) || _enumBugKeys$2;
+
+var hiddenKeys = enumBugKeys.concat('length', 'prototype');
var f$1 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
- return _objectKeysInternal(O, hiddenKeys);
+ return $keys(O, hiddenKeys);
};
var _objectGopn = {
f: f$1
};
-// 7.1.13 ToObject(argument)
+
+
+var _objectGopn$2 = Object.freeze({
+ default: _objectGopn,
+ __moduleExports: _objectGopn,
+ f: f$1
+});
var _toObject = function (it) {
- return Object(_defined(it));
+ return Object(defined(it));
};
-// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+
+
+var _toObject$2 = Object.freeze({
+ default: _toObject,
+ __moduleExports: _toObject
+});
+
+var toObject = ( _toObject$2 && _toObject ) || _toObject$2;
+
'use strict';
var _arrayFill = function fill(value /* , start = 0, end = @length */) {
- var O = _toObject(this);
- var length = _toLength(O.length);
+ var O = toObject(this);
+ var length = toLength(O.length);
var aLen = arguments.length;
- var index = _toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
+ var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
var end = aLen > 2 ? arguments[2] : undefined;
- var endPos = end === undefined ? length : _toAbsoluteIndex(end, length);
+ var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
while (endPos > index) O[index++] = value;
return O;
};
+
+
+var _arrayFill$2 = Object.freeze({
+ default: _arrayFill,
+ __moduleExports: _arrayFill
+});
+
var _wks = createCommonjsModule(function (module) {
-var store = _shared('wks');
+var store = shared$1('wks');
-var Symbol = _global.Symbol;
+var Symbol = global$1.Symbol;
var USE_SYMBOL = typeof Symbol == 'function';
var $exports = module.exports = function (name) {
return store[name] || (store[name] =
- USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};
$exports.store = store;
});
-var def = _objectDp.f;
-var TAG = _wks('toStringTag');
+
+var _wks$2 = Object.freeze({
+ default: _wks,
+ __moduleExports: _wks
+});
+
+var wks = ( _wks$2 && _wks ) || _wks$2;
+
+var def = $defineProperty.f;
+
+var TAG = wks('toStringTag');
var _setToStringTag = function (it, tag, stat) {
- if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};
+
+
+var _setToStringTag$2 = Object.freeze({
+ default: _setToStringTag,
+ __moduleExports: _setToStringTag
+});
+
+var LIBRARY = ( _library$2 && _library ) || _library$2;
+
+var require$$5 = ( _typed$2 && _typed ) || _typed$2;
+
+var require$$3 = ( _redefineAll$2 && _redefineAll ) || _redefineAll$2;
+
+var anInstance = ( _anInstance$2 && _anInstance ) || _anInstance$2;
+
+var require$$14 = ( _toIndex$2 && _toIndex ) || _toIndex$2;
+
+var require$$0$4 = ( _objectGopn$2 && _objectGopn ) || _objectGopn$2;
+
+var require$$0$5 = ( _arrayFill$2 && _arrayFill ) || _arrayFill$2;
+
+var setToStringTag = ( _setToStringTag$2 && _setToStringTag ) || _setToStringTag$2;
+
var _typedBuffer = createCommonjsModule(function (module, exports) {
'use strict';
@@ -438,8 +780,8 @@ var _typedBuffer = createCommonjsModule(function (module, exports) {
-var gOPN = _objectGopn.f;
-var dP = _objectDp.f;
+var gOPN = require$$0$4.f;
+var dP = $defineProperty.f;
var ARRAY_BUFFER = 'ArrayBuffer';
@@ -447,12 +789,12 @@ var DATA_VIEW = 'DataView';
var PROTOTYPE = 'prototype';
var WRONG_LENGTH = 'Wrong length!';
var WRONG_INDEX = 'Wrong index!';
-var $ArrayBuffer = _global[ARRAY_BUFFER];
-var $DataView = _global[DATA_VIEW];
-var Math = _global.Math;
-var RangeError = _global.RangeError;
+var $ArrayBuffer = global$1[ARRAY_BUFFER];
+var $DataView = global$1[DATA_VIEW];
+var Math = global$1.Math;
+var RangeError = global$1.RangeError;
// eslint-disable-next-line no-shadow-restricted-names
-var Infinity = _global.Infinity;
+var Infinity = global$1.Infinity;
var BaseBuffer = $ArrayBuffer;
var abs = Math.abs;
var pow = Math.pow;
@@ -462,9 +804,9 @@ var LN2 = Math.LN2;
var BUFFER = 'buffer';
var BYTE_LENGTH = 'byteLength';
var BYTE_OFFSET = 'byteOffset';
-var $BUFFER = _descriptors ? '_b' : BUFFER;
-var $LENGTH = _descriptors ? '_l' : BYTE_LENGTH;
-var $OFFSET = _descriptors ? '_o' : BYTE_OFFSET;
+var $BUFFER = require$$0$1 ? '_b' : BUFFER;
+var $LENGTH = require$$0$1 ? '_l' : BYTE_LENGTH;
+var $OFFSET = require$$0$1 ? '_o' : BYTE_OFFSET;
// IEEE754 conversions based on https://github.com/feross/ieee754
function packIEEE754(value, mLen, nBytes) {
@@ -565,7 +907,7 @@ function addGetter(C, key, internal) {
function get(view, bytes, index, isLittleEndian) {
var numIndex = +index;
- var intIndex = _toIndex(numIndex);
+ var intIndex = require$$14(numIndex);
if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
var store = view[$BUFFER]._b;
var start = intIndex + view[$OFFSET];
@@ -574,7 +916,7 @@ function get(view, bytes, index, isLittleEndian) {
}
function set(view, bytes, index, conversion, value, isLittleEndian) {
var numIndex = +index;
- var intIndex = _toIndex(numIndex);
+ var intIndex = require$$14(numIndex);
if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
var store = view[$BUFFER]._b;
var start = intIndex + view[$OFFSET];
@@ -582,35 +924,35 @@ function set(view, bytes, index, conversion, value, isLittleEndian) {
for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
}
-if (!_typed.ABV) {
+if (!require$$5.ABV) {
$ArrayBuffer = function ArrayBuffer(length) {
- _anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
- var byteLength = _toIndex(length);
- this._b = _arrayFill.call(new Array(byteLength), 0);
+ anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
+ var byteLength = require$$14(length);
+ this._b = require$$0$5.call(new Array(byteLength), 0);
this[$LENGTH] = byteLength;
};
$DataView = function DataView(buffer, byteOffset, byteLength) {
- _anInstance(this, $DataView, DATA_VIEW);
- _anInstance(buffer, $ArrayBuffer, DATA_VIEW);
+ anInstance(this, $DataView, DATA_VIEW);
+ anInstance(buffer, $ArrayBuffer, DATA_VIEW);
var bufferLength = buffer[$LENGTH];
- var offset = _toInteger(byteOffset);
+ var offset = toInteger(byteOffset);
if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
- byteLength = byteLength === undefined ? bufferLength - offset : _toLength(byteLength);
+ byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
this[$BUFFER] = buffer;
this[$OFFSET] = offset;
this[$LENGTH] = byteLength;
};
- if (_descriptors) {
+ if (require$$0$1) {
addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
addGetter($DataView, BUFFER, '_b');
addGetter($DataView, BYTE_LENGTH, '_l');
addGetter($DataView, BYTE_OFFSET, '_o');
}
- _redefineAll($DataView[PROTOTYPE], {
+ require$$3($DataView[PROTOTYPE], {
getInt8: function getInt8(byteOffset) {
return get(this, 1, byteOffset)[0] << 24 >> 24;
},
@@ -663,32 +1005,32 @@ if (!_typed.ABV) {
}
});
} else {
- if (!_fails(function () {
+ if (!require$$0(function () {
$ArrayBuffer(1);
- }) || !_fails(function () {
+ }) || !require$$0(function () {
new $ArrayBuffer(-1); // eslint-disable-line no-new
- }) || _fails(function () {
+ }) || require$$0(function () {
new $ArrayBuffer(); // eslint-disable-line no-new
new $ArrayBuffer(1.5); // eslint-disable-line no-new
new $ArrayBuffer(NaN); // eslint-disable-line no-new
return $ArrayBuffer.name != ARRAY_BUFFER;
})) {
$ArrayBuffer = function ArrayBuffer(length) {
- _anInstance(this, $ArrayBuffer);
- return new BaseBuffer(_toIndex(length));
+ anInstance(this, $ArrayBuffer);
+ return new BaseBuffer(require$$14(length));
};
var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
- if (!((key = keys[j++]) in $ArrayBuffer)) _hide($ArrayBuffer, key, BaseBuffer[key]);
+ if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
}
- if (!_library) ArrayBufferProto.constructor = $ArrayBuffer;
+ if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
}
// iOS Safari 7.x bug
var view = new $DataView(new $ArrayBuffer(2));
var $setInt8 = $DataView[PROTOTYPE].setInt8;
view.setInt8(0, 2147483648);
view.setInt8(1, 2147483649);
- if (view.getInt8(0) || !view.getInt8(1)) _redefineAll($DataView[PROTOTYPE], {
+ if (view.getInt8(0) || !view.getInt8(1)) require$$3($DataView[PROTOTYPE], {
setInt8: function setInt8(byteOffset, value) {
$setInt8.call(this, byteOffset, value << 24 >> 24);
},
@@ -697,37 +1039,63 @@ if (!_typed.ABV) {
}
}, true);
}
-_setToStringTag($ArrayBuffer, ARRAY_BUFFER);
-_setToStringTag($DataView, DATA_VIEW);
-_hide($DataView[PROTOTYPE], _typed.VIEW, true);
+setToStringTag($ArrayBuffer, ARRAY_BUFFER);
+setToStringTag($DataView, DATA_VIEW);
+hide($DataView[PROTOTYPE], require$$5.VIEW, true);
exports[ARRAY_BUFFER] = $ArrayBuffer;
exports[DATA_VIEW] = $DataView;
});
-// 7.3.20 SpeciesConstructor(O, defaultConstructor)
-var SPECIES = _wks('species');
+var _typedBuffer$2 = Object.freeze({
+ default: _typedBuffer,
+ __moduleExports: _typedBuffer
+});
+
+var SPECIES = wks('species');
var _speciesConstructor = function (O, D) {
- var C = _anObject(O).constructor;
+ var C = anObject(O).constructor;
var S;
- return C === undefined || (S = _anObject(C)[SPECIES]) == undefined ? D : _aFunction(S);
+ return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
};
+
+
+var _speciesConstructor$2 = Object.freeze({
+ default: _speciesConstructor,
+ __moduleExports: _speciesConstructor
+});
+
'use strict';
-var SPECIES$1 = _wks('species');
+var SPECIES$1 = wks('species');
var _setSpecies = function (KEY) {
- var C = _global[KEY];
- if (_descriptors && C && !C[SPECIES$1]) _objectDp.f(C, SPECIES$1, {
+ var C = global$1[KEY];
+ if (require$$0$1 && C && !C[SPECIES$1]) $defineProperty.f(C, SPECIES$1, {
configurable: true,
get: function () { return this; }
});
};
+
+
+var _setSpecies$2 = Object.freeze({
+ default: _setSpecies,
+ __moduleExports: _setSpecies
+});
+
+var $export$1 = ( _export$2 && _export ) || _export$2;
+
+var require$$6 = ( _typedBuffer$2 && _typedBuffer ) || _typedBuffer$2;
+
+var speciesConstructor = ( _speciesConstructor$2 && _speciesConstructor ) || _speciesConstructor$2;
+
+var require$$5$1 = ( _setSpecies$2 && _setSpecies ) || _setSpecies$2;
+
'use strict';
@@ -736,34 +1104,34 @@ var _setSpecies = function (KEY) {
-var ArrayBuffer = _global.ArrayBuffer;
+var ArrayBuffer = global$1.ArrayBuffer;
-var $ArrayBuffer = _typedBuffer.ArrayBuffer;
-var $DataView = _typedBuffer.DataView;
-var $isView = _typed.ABV && ArrayBuffer.isView;
+var $ArrayBuffer = require$$6.ArrayBuffer;
+var $DataView = require$$6.DataView;
+var $isView = require$$5.ABV && ArrayBuffer.isView;
var $slice = $ArrayBuffer.prototype.slice;
-var VIEW = _typed.VIEW;
+var VIEW = require$$5.VIEW;
var ARRAY_BUFFER = 'ArrayBuffer';
-_export(_export.G + _export.W + _export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
+$export$1($export$1.G + $export$1.W + $export$1.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
-_export(_export.S + _export.F * !_typed.CONSTR, ARRAY_BUFFER, {
+$export$1($export$1.S + $export$1.F * !require$$5.CONSTR, ARRAY_BUFFER, {
// 24.1.3.1 ArrayBuffer.isView(arg)
isView: function isView(it) {
- return $isView && $isView(it) || _isObject(it) && VIEW in it;
+ return $isView && $isView(it) || isObject(it) && VIEW in it;
}
});
-_export(_export.P + _export.U + _export.F * _fails(function () {
+$export$1($export$1.P + $export$1.U + $export$1.F * require$$0(function () {
return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
}), ARRAY_BUFFER, {
// 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
slice: function slice(start, end) {
- if ($slice !== undefined && end === undefined) return $slice.call(_anObject(this), start); // FF fix
- var len = _anObject(this).byteLength;
- var first = _toAbsoluteIndex(start, len);
- var final = _toAbsoluteIndex(end === undefined ? len : end, len);
- var result = new (_speciesConstructor(this, $ArrayBuffer))(_toLength(final - first));
+ if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix
+ var len = anObject(this).byteLength;
+ var first = toAbsoluteIndex(start, len);
+ var final = toAbsoluteIndex(end === undefined ? len : end, len);
+ var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));
var viewS = new $DataView(this);
var viewT = new $DataView(result);
var index = 0;
@@ -773,13 +1141,11 @@ _export(_export.P + _export.U + _export.F * _fails(function () {
}
});
-_setSpecies(ARRAY_BUFFER);
-
-// getting tag from 19.1.3.6 Object.prototype.toString()
+require$$5$1(ARRAY_BUFFER);
-var TAG$1 = _wks('toStringTag');
+var TAG$1 = wks('toStringTag');
// ES3 wrong here
-var ARG = _cof(function () { return arguments; }()) == 'Arguments';
+var ARG = cof(function () { return arguments; }()) == 'Arguments';
// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
@@ -794,61 +1160,101 @@ var _classof = function (it) {
// @@toStringTag case
: typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T
// builtinTag case
- : ARG ? _cof(O)
+ : ARG ? cof(O)
// ES3 arguments fallback
- : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+ : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};
+
+
+var _classof$2 = Object.freeze({
+ default: _classof,
+ __moduleExports: _classof
+});
+
var _iterators = {};
-// check on default Array iterator
-var ITERATOR = _wks('iterator');
+
+var _iterators$2 = Object.freeze({
+ default: _iterators,
+ __moduleExports: _iterators
+});
+
+var Iterators = ( _iterators$2 && _iterators ) || _iterators$2;
+
+var ITERATOR = wks('iterator');
var ArrayProto = Array.prototype;
var _isArrayIter = function (it) {
- return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR] === it);
+ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
};
-// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var _isArrayIter$2 = Object.freeze({
+ default: _isArrayIter,
+ __moduleExports: _isArrayIter
+});
var _objectKeys = Object.keys || function keys(O) {
- return _objectKeysInternal(O, _enumBugKeys);
+ return $keys(O, enumBugKeys);
};
-var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
- _anObject(O);
- var keys = _objectKeys(Properties);
+
+
+var _objectKeys$2 = Object.freeze({
+ default: _objectKeys,
+ __moduleExports: _objectKeys
+});
+
+var getKeys = ( _objectKeys$2 && _objectKeys ) || _objectKeys$2;
+
+var _objectDps = require$$0$1 ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
var length = keys.length;
var i = 0;
var P;
- while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);
+ while (length > i) $defineProperty.f(O, P = keys[i++], Properties[P]);
return O;
};
-var document$2 = _global.document;
+
+
+var _objectDps$2 = Object.freeze({
+ default: _objectDps,
+ __moduleExports: _objectDps
+});
+
+var document$2 = global$1.document;
var _html = document$2 && document$2.documentElement;
-// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var _html$2 = Object.freeze({
+ default: _html,
+ __moduleExports: _html
+});
+
+var dPs = ( _objectDps$2 && _objectDps ) || _objectDps$2;
-var IE_PROTO$1 = _sharedKey('IE_PROTO');
+var html = ( _html$2 && _html ) || _html$2;
+
+var IE_PROTO$1 = require$$0$3('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE$1 = 'prototype';
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
// Thrash, waste and sodomy: IE GC bug
- var iframe = _domCreate('iframe');
- var i = _enumBugKeys.length;
+ var iframe = cel('iframe');
+ var i = enumBugKeys.length;
var lt = '<';
var gt = '>';
var iframeDocument;
iframe.style.display = 'none';
- _html.appendChild(iframe);
+ html.appendChild(iframe);
iframe.src = 'javascript:'; // eslint-disable-line no-script-url
// createDict = iframe.contentWindow.Object;
// html.removeChild(iframe);
@@ -857,83 +1263,113 @@ var createDict = function () {
iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
iframeDocument.close();
createDict = iframeDocument.F;
- while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]];
+ while (i--) delete createDict[PROTOTYPE$1][enumBugKeys[i]];
return createDict();
};
var _objectCreate = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
- Empty[PROTOTYPE$1] = _anObject(O);
+ Empty[PROTOTYPE$1] = anObject(O);
result = new Empty();
Empty[PROTOTYPE$1] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
result[IE_PROTO$1] = O;
} else result = createDict();
- return Properties === undefined ? result : _objectDps(result, Properties);
+ return Properties === undefined ? result : dPs(result, Properties);
};
-// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
-var IE_PROTO$2 = _sharedKey('IE_PROTO');
+var _objectCreate$2 = Object.freeze({
+ default: _objectCreate,
+ __moduleExports: _objectCreate
+});
+
+var IE_PROTO$2 = require$$0$3('IE_PROTO');
var ObjectProto = Object.prototype;
var _objectGpo = Object.getPrototypeOf || function (O) {
- O = _toObject(O);
- if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];
+ O = toObject(O);
+ if (has(O, IE_PROTO$2)) return O[IE_PROTO$2];
if (typeof O.constructor == 'function' && O instanceof O.constructor) {
return O.constructor.prototype;
} return O instanceof Object ? ObjectProto : null;
};
-var ITERATOR$1 = _wks('iterator');
-var core_getIteratorMethod = _core.getIteratorMethod = function (it) {
+
+var _objectGpo$2 = Object.freeze({
+ default: _objectGpo,
+ __moduleExports: _objectGpo
+});
+
+var classof = ( _classof$2 && _classof ) || _classof$2;
+
+var ITERATOR$1 = wks('iterator');
+
+var core_getIteratorMethod = core.getIteratorMethod = function (it) {
if (it != undefined) return it[ITERATOR$1]
|| it['@@iterator']
- || _iterators[_classof(it)];
+ || Iterators[classof(it)];
};
-// 7.2.2 IsArray(argument)
+
+
+var core_getIteratorMethod$2 = Object.freeze({
+ default: core_getIteratorMethod,
+ __moduleExports: core_getIteratorMethod
+});
var _isArray = Array.isArray || function isArray(arg) {
- return _cof(arg) == 'Array';
+ return cof(arg) == 'Array';
};
-var SPECIES$2 = _wks('species');
+
+
+var _isArray$2 = Object.freeze({
+ default: _isArray,
+ __moduleExports: _isArray
+});
+
+var isArray = ( _isArray$2 && _isArray ) || _isArray$2;
+
+var SPECIES$2 = wks('species');
var _arraySpeciesConstructor = function (original) {
var C;
- if (_isArray(original)) {
+ if (isArray(original)) {
C = original.constructor;
// cross-realm fallback
- if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;
- if (_isObject(C)) {
+ if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
+ if (isObject(C)) {
C = C[SPECIES$2];
if (C === null) C = undefined;
}
} return C === undefined ? Array : C;
};
-// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var _arraySpeciesConstructor$2 = Object.freeze({
+ default: _arraySpeciesConstructor,
+ __moduleExports: _arraySpeciesConstructor
+});
+
+var speciesConstructor$1 = ( _arraySpeciesConstructor$2 && _arraySpeciesConstructor ) || _arraySpeciesConstructor$2;
+
var _arraySpeciesCreate = function (original, length) {
- return new (_arraySpeciesConstructor(original))(length);
+ return new (speciesConstructor$1(original))(length);
};
-// 0 -> Array#forEach
-// 1 -> Array#map
-// 2 -> Array#filter
-// 3 -> Array#some
-// 4 -> Array#every
-// 5 -> Array#find
-// 6 -> Array#findIndex
-
+var _arraySpeciesCreate$2 = Object.freeze({
+ default: _arraySpeciesCreate,
+ __moduleExports: _arraySpeciesCreate
+});
+var asc = ( _arraySpeciesCreate$2 && _arraySpeciesCreate ) || _arraySpeciesCreate$2;
var _arrayMethods = function (TYPE, $create) {
var IS_MAP = TYPE == 1;
@@ -942,12 +1378,12 @@ var _arrayMethods = function (TYPE, $create) {
var IS_EVERY = TYPE == 4;
var IS_FIND_INDEX = TYPE == 6;
var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
- var create = $create || _arraySpeciesCreate;
+ var create = $create || asc;
return function ($this, callbackfn, that) {
- var O = _toObject($this);
- var self = _iobject(O);
- var f = _ctx(callbackfn, that, 3);
- var length = _toLength(self.length);
+ var O = toObject($this);
+ var self = IObject(O);
+ var f = ctx(callbackfn, that, 3);
+ var length = toLength(self.length);
var index = 0;
var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
var val, res;
@@ -968,18 +1404,40 @@ var _arrayMethods = function (TYPE, $create) {
};
};
-// 22.1.3.31 Array.prototype[@@unscopables]
-var UNSCOPABLES = _wks('unscopables');
+
+
+var _arrayMethods$2 = Object.freeze({
+ default: _arrayMethods,
+ __moduleExports: _arrayMethods
+});
+
+var UNSCOPABLES = wks('unscopables');
var ArrayProto$1 = Array.prototype;
-if (ArrayProto$1[UNSCOPABLES] == undefined) _hide(ArrayProto$1, UNSCOPABLES, {});
+if (ArrayProto$1[UNSCOPABLES] == undefined) hide(ArrayProto$1, UNSCOPABLES, {});
var _addToUnscopables = function (key) {
ArrayProto$1[UNSCOPABLES][key] = true;
};
+
+
+var _addToUnscopables$2 = Object.freeze({
+ default: _addToUnscopables,
+ __moduleExports: _addToUnscopables
+});
+
var _iterStep = function (done, value) {
return { value: value, done: !!done };
};
+
+
+var _iterStep$2 = Object.freeze({
+ default: _iterStep,
+ __moduleExports: _iterStep
+});
+
+var _create = ( _objectCreate$2 && _objectCreate ) || _objectCreate$2;
+
'use strict';
@@ -987,13 +1445,24 @@ var _iterStep = function (done, value) {
var IteratorPrototype = {};
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-_hide(IteratorPrototype, _wks('iterator'), function () { return this; });
+hide(IteratorPrototype, wks('iterator'), function () { return this; });
var _iterCreate = function (Constructor, NAME, next) {
- Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });
- _setToStringTag(Constructor, NAME + ' Iterator');
+ Constructor.prototype = _create(IteratorPrototype, { next: createDesc(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
};
+
+
+var _iterCreate$2 = Object.freeze({
+ default: _iterCreate,
+ __moduleExports: _iterCreate
+});
+
+var $iterCreate = ( _iterCreate$2 && _iterCreate ) || _iterCreate$2;
+
+var $getPrototypeOf = ( _objectGpo$2 && _objectGpo ) || _objectGpo$2;
+
'use strict';
@@ -1004,7 +1473,7 @@ var _iterCreate = function (Constructor, NAME, next) {
-var ITERATOR$2 = _wks('iterator');
+var ITERATOR$2 = wks('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
@@ -1013,7 +1482,7 @@ var VALUES = 'values';
var returnThis = function () { return this; };
var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
- _iterCreate(Constructor, NAME, next);
+ $iterCreate(Constructor, NAME, next);
var getMethod = function (kind) {
if (!BUGGY && kind in proto) return proto[kind];
switch (kind) {
@@ -1032,12 +1501,12 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
var methods, key, IteratorPrototype;
// Fix native
if ($anyNative) {
- IteratorPrototype = _objectGpo($anyNative.call(new Base()));
+ IteratorPrototype = $getPrototypeOf($anyNative.call(new Base()));
if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
// Set @@toStringTag to native iterators
- _setToStringTag(IteratorPrototype, TAG, true);
+ setToStringTag(IteratorPrototype, TAG, true);
// fix for some old engines
- if (!_library && !_has(IteratorPrototype, ITERATOR$2)) _hide(IteratorPrototype, ITERATOR$2, returnThis);
+ if (!LIBRARY && !has(IteratorPrototype, ITERATOR$2)) hide(IteratorPrototype, ITERATOR$2, returnThis);
}
}
// fix Array#{values, @@iterator}.name in V8 / FF
@@ -1046,12 +1515,12 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
$default = function values() { return $native.call(this); };
}
// Define iterator
- if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$2])) {
- _hide(proto, ITERATOR$2, $default);
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$2])) {
+ hide(proto, ITERATOR$2, $default);
}
// Plug for library
- _iterators[NAME] = $default;
- _iterators[TAG] = returnThis;
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
if (DEFAULT) {
methods = {
values: DEF_VALUES ? $default : getMethod(VALUES),
@@ -1059,12 +1528,25 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
entries: $entries
};
if (FORCED) for (key in methods) {
- if (!(key in proto)) _redefine(proto, key, methods[key]);
- } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export$1($export$1.P + $export$1.F * (BUGGY || VALUES_BUG), NAME, methods);
}
return methods;
};
+
+
+var _iterDefine$2 = Object.freeze({
+ default: _iterDefine,
+ __moduleExports: _iterDefine
+});
+
+var require$$1 = ( _addToUnscopables$2 && _addToUnscopables ) || _addToUnscopables$2;
+
+var step = ( _iterStep$2 && _iterStep ) || _iterStep$2;
+
+var $iterDefine = ( _iterDefine$2 && _iterDefine ) || _iterDefine$2;
+
'use strict';
@@ -1075,8 +1557,8 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
-var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {
- this._t = _toIobject(iterated); // target
+var es6_array_iterator = $iterDefine(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
this._i = 0; // next index
this._k = kind; // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
@@ -1086,21 +1568,28 @@ var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {
var index = this._i++;
if (!O || index >= O.length) {
this._t = undefined;
- return _iterStep(1);
+ return step(1);
}
- if (kind == 'keys') return _iterStep(0, index);
- if (kind == 'values') return _iterStep(0, O[index]);
- return _iterStep(0, [index, O[index]]);
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
}, 'values');
// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
-_iterators.Arguments = _iterators.Array;
+Iterators.Arguments = Iterators.Array;
+
+require$$1('keys');
+require$$1('values');
+require$$1('entries');
+
-_addToUnscopables('keys');
-_addToUnscopables('values');
-_addToUnscopables('entries');
-var ITERATOR$3 = _wks('iterator');
+var es6_array_iterator$2 = Object.freeze({
+ default: es6_array_iterator,
+ __moduleExports: es6_array_iterator
+});
+
+var ITERATOR$3 = wks('iterator');
var SAFE_CLOSING = false;
try {
@@ -1123,19 +1612,25 @@ var _iterDetect = function (exec, skipClosing) {
return safe;
};
-// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+
+
+var _iterDetect$2 = Object.freeze({
+ default: _iterDetect,
+ __moduleExports: _iterDetect
+});
+
'use strict';
var _arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
- var O = _toObject(this);
- var len = _toLength(O.length);
- var to = _toAbsoluteIndex(target, len);
- var from = _toAbsoluteIndex(start, len);
+ var O = toObject(this);
+ var len = toLength(O.length);
+ var to = toAbsoluteIndex(target, len);
+ var from = toAbsoluteIndex(start, len);
var end = arguments.length > 2 ? arguments[2] : undefined;
- var count = Math.min((end === undefined ? len : _toAbsoluteIndex(end, len)) - from, len - to);
+ var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
var inc = 1;
if (from < to && to < from + count) {
inc = -1;
@@ -1150,68 +1645,107 @@ var _arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, st
} return O;
};
+
+
+var _arrayCopyWithin$2 = Object.freeze({
+ default: _arrayCopyWithin,
+ __moduleExports: _arrayCopyWithin
+});
+
var f$3 = {}.propertyIsEnumerable;
var _objectPie = {
f: f$3
};
+
+
+var _objectPie$2 = Object.freeze({
+ default: _objectPie,
+ __moduleExports: _objectPie,
+ f: f$3
+});
+
+var require$$0$6 = ( _objectPie$2 && _objectPie ) || _objectPie$2;
+
var gOPD = Object.getOwnPropertyDescriptor;
-var f$2 = _descriptors ? gOPD : function getOwnPropertyDescriptor(O, P) {
- O = _toIobject(O);
- P = _toPrimitive(P, true);
- if (_ie8DomDefine) try {
+var f$2 = require$$0$1 ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
return gOPD(O, P);
} catch (e) { /* empty */ }
- if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);
+ if (has(O, P)) return createDesc(!require$$0$6.f.call(O, P), O[P]);
};
var _objectGopd = {
f: f$2
};
+
+
+var _objectGopd$2 = Object.freeze({
+ default: _objectGopd,
+ __moduleExports: _objectGopd,
+ f: f$2
+});
+
+var isArrayIter = ( _isArrayIter$2 && _isArrayIter ) || _isArrayIter$2;
+
+var getIterFn = ( core_getIteratorMethod$2 && core_getIteratorMethod ) || core_getIteratorMethod$2;
+
+var require$$0$7 = ( _arrayMethods$2 && _arrayMethods ) || _arrayMethods$2;
+
+var $iterators = ( es6_array_iterator$2 && es6_array_iterator ) || es6_array_iterator$2;
+
+var require$$0$8 = ( _iterDetect$2 && _iterDetect ) || _iterDetect$2;
+
+var require$$0$9 = ( _arrayCopyWithin$2 && _arrayCopyWithin ) || _arrayCopyWithin$2;
+
+var gOPD$1 = ( _objectGopd$2 && _objectGopd ) || _objectGopd$2;
+
var _typedArray = createCommonjsModule(function (module) {
'use strict';
-if (_descriptors) {
- var LIBRARY = _library;
- var global = _global;
- var fails = _fails;
- var $export = _export;
- var $typed = _typed;
- var $buffer = _typedBuffer;
- var ctx = _ctx;
- var anInstance = _anInstance;
- var propertyDesc = _propertyDesc;
- var hide = _hide;
- var redefineAll = _redefineAll;
- var toInteger = _toInteger;
- var toLength = _toLength;
- var toIndex = _toIndex;
- var toAbsoluteIndex = _toAbsoluteIndex;
- var toPrimitive = _toPrimitive;
- var has = _has;
- var classof$$1 = _classof;
- var isObject = _isObject;
- var toObject = _toObject;
- var isArrayIter$$1 = _isArrayIter;
- var create = _objectCreate;
- var getPrototypeOf = _objectGpo;
- var gOPN = _objectGopn.f;
- var getIterFn$$1 = core_getIteratorMethod;
- var uid = _uid;
- var wks = _wks;
- var createArrayMethod = _arrayMethods;
- var createArrayIncludes = _arrayIncludes;
- var speciesConstructor = _speciesConstructor;
- var ArrayIterators = es6_array_iterator;
- var Iterators$$1 = _iterators;
- var $iterDetect = _iterDetect;
- var setSpecies = _setSpecies;
- var arrayFill = _arrayFill;
- var arrayCopyWithin = _arrayCopyWithin;
- var $DP = _objectDp;
- var $GOPD = _objectGopd;
+if (require$$0$1) {
+ var LIBRARY$$1 = LIBRARY;
+ var global = global$1;
+ var fails = require$$0;
+ var $export = $export$1;
+ var $typed = require$$5;
+ var $buffer = require$$6;
+ var ctx$$1 = ctx;
+ var anInstance$$1 = anInstance;
+ var propertyDesc = createDesc;
+ var hide$$1 = hide;
+ var redefineAll = require$$3;
+ var toInteger$$1 = toInteger;
+ var toLength$$1 = toLength;
+ var toIndex = require$$14;
+ var toAbsoluteIndex$$1 = toAbsoluteIndex;
+ var toPrimitive$$1 = toPrimitive;
+ var has$$1 = has;
+ var classof$$1 = classof;
+ var isObject$$1 = isObject;
+ var toObject$$1 = toObject;
+ var isArrayIter$$1 = isArrayIter;
+ var create = _create;
+ var getPrototypeOf = $getPrototypeOf;
+ var gOPN = require$$0$4.f;
+ var getIterFn$$1 = getIterFn;
+ var uid$$1 = uid;
+ var wks$$1 = wks;
+ var createArrayMethod = require$$0$7;
+ var createArrayIncludes = require$$0$2;
+ var speciesConstructor$$1 = speciesConstructor;
+ var ArrayIterators = $iterators;
+ var Iterators$$1 = Iterators;
+ var $iterDetect = require$$0$8;
+ var setSpecies = require$$5$1;
+ var arrayFill = require$$0$5;
+ var arrayCopyWithin = require$$0$9;
+ var $DP = $defineProperty;
+ var $GOPD = gOPD$1;
var dP = $DP.f;
var gOPD = $GOPD.f;
var RangeError = global.RangeError;
@@ -1243,17 +1777,17 @@ if (_descriptors) {
var arraySlice = ArrayProto.slice;
var arrayToString = ArrayProto.toString;
var arrayToLocaleString = ArrayProto.toLocaleString;
- var ITERATOR = wks('iterator');
- var TAG = wks('toStringTag');
- var TYPED_CONSTRUCTOR = uid('typed_constructor');
- var DEF_CONSTRUCTOR = uid('def_constructor');
+ var ITERATOR = wks$$1('iterator');
+ var TAG = wks$$1('toStringTag');
+ var TYPED_CONSTRUCTOR = uid$$1('typed_constructor');
+ var DEF_CONSTRUCTOR = uid$$1('def_constructor');
var ALL_CONSTRUCTORS = $typed.CONSTR;
var TYPED_ARRAY = $typed.TYPED;
var VIEW = $typed.VIEW;
var WRONG_LENGTH = 'Wrong length!';
var $map = createArrayMethod(1, function (O, length) {
- return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
+ return allocate(speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]), length);
});
var LITTLE_ENDIAN = fails(function () {
@@ -1266,24 +1800,24 @@ if (_descriptors) {
});
var toOffset = function (it, BYTES) {
- var offset = toInteger(it);
+ var offset = toInteger$$1(it);
if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
return offset;
};
var validate = function (it) {
- if (isObject(it) && TYPED_ARRAY in it) return it;
+ if (isObject$$1(it) && TYPED_ARRAY in it) return it;
throw TypeError(it + ' is not a typed array!');
};
var allocate = function (C, length) {
- if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
+ if (!(isObject$$1(C) && TYPED_CONSTRUCTOR in C)) {
throw TypeError('It is not a typed array constructor!');
} return new C(length);
};
var speciesFromList = function (O, list) {
- return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
+ return fromList(speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]), list);
};
var fromList = function (C, list) {
@@ -1299,7 +1833,7 @@ if (_descriptors) {
};
var $from = function from(source /* , mapfn, thisArg */) {
- var O = toObject(source);
+ var O = toObject$$1(source);
var aLen = arguments.length;
var mapfn = aLen > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
@@ -1310,7 +1844,7 @@ if (_descriptors) {
values.push(step.value);
} O = values;
}
- if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
+ if (mapping && aLen > 2) mapfn = ctx$$1(mapfn, arguments[2], 2);
for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
result[i] = mapping ? mapfn(O[i], i) : O[i];
}
@@ -1397,11 +1931,11 @@ if (_descriptors) {
subarray: function subarray(begin, end) {
var O = validate(this);
var length = O.length;
- var $begin = toAbsoluteIndex(begin, length);
- return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
+ var $begin = toAbsoluteIndex$$1(begin, length);
+ return new (speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]))(
O.buffer,
O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
- toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
+ toLength$$1((end === undefined ? length : toAbsoluteIndex$$1(end, length)) - $begin)
);
}
};
@@ -1414,8 +1948,8 @@ if (_descriptors) {
validate(this);
var offset = toOffset(arguments[1], 1);
var length = this.length;
- var src = toObject(arrayLike);
- var len = toLength(src.length);
+ var src = toObject$$1(arrayLike);
+ var len = toLength$$1(src.length);
var index = 0;
if (len + offset > length) throw RangeError(WRONG_LENGTH);
while (index < len) this[offset + index] = src[index++];
@@ -1434,27 +1968,27 @@ if (_descriptors) {
};
var isTAIndex = function (target, key) {
- return isObject(target)
+ return isObject$$1(target)
&& target[TYPED_ARRAY]
&& typeof key != 'symbol'
&& key in target
&& String(+key) == String(key);
};
var $getDesc = function getOwnPropertyDescriptor(target, key) {
- return isTAIndex(target, key = toPrimitive(key, true))
+ return isTAIndex(target, key = toPrimitive$$1(key, true))
? propertyDesc(2, target[key])
: gOPD(target, key);
};
var $setDesc = function defineProperty(target, key, desc) {
- if (isTAIndex(target, key = toPrimitive(key, true))
- && isObject(desc)
- && has(desc, 'value')
- && !has(desc, 'get')
- && !has(desc, 'set')
+ if (isTAIndex(target, key = toPrimitive$$1(key, true))
+ && isObject$$1(desc)
+ && has$$1(desc, 'value')
+ && !has$$1(desc, 'get')
+ && !has$$1(desc, 'set')
// TODO: add validation descriptor w/o calling accessors
&& !desc.configurable
- && (!has(desc, 'writable') || desc.writable)
- && (!has(desc, 'enumerable') || desc.enumerable)
+ && (!has$$1(desc, 'writable') || desc.writable)
+ && (!has$$1(desc, 'enumerable') || desc.enumerable)
) {
target[key] = desc.value;
return target;
@@ -1479,7 +2013,7 @@ if (_descriptors) {
var $TypedArrayPrototype$ = redefineAll({}, proto);
redefineAll($TypedArrayPrototype$, $iterators$$1);
- hide($TypedArrayPrototype$, ITERATOR, $iterators$$1.values);
+ hide$$1($TypedArrayPrototype$, ITERATOR, $iterators$$1.values);
redefineAll($TypedArrayPrototype$, {
slice: $slice,
set: $set,
@@ -1529,11 +2063,11 @@ if (_descriptors) {
};
if (FORCED) {
TypedArray = wrapper(function (that, data, $offset, $length) {
- anInstance(that, TypedArray, NAME, '_d');
+ anInstance$$1(that, TypedArray, NAME, '_d');
var index = 0;
var offset = 0;
var buffer, byteLength, length, klass;
- if (!isObject(data)) {
+ if (!isObject$$1(data)) {
length = toIndex(data);
byteLength = length * BYTES;
buffer = new $ArrayBuffer(byteLength);
@@ -1546,7 +2080,7 @@ if (_descriptors) {
byteLength = $len - offset;
if (byteLength < 0) throw RangeError(WRONG_LENGTH);
} else {
- byteLength = toLength($length) * BYTES;
+ byteLength = toLength$$1($length) * BYTES;
if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
}
length = byteLength / BYTES;
@@ -1555,7 +2089,7 @@ if (_descriptors) {
} else {
return $from.call(TypedArray, data);
}
- hide(that, '_d', {
+ hide$$1(that, '_d', {
b: buffer,
o: offset,
l: byteLength,
@@ -1565,7 +2099,7 @@ if (_descriptors) {
while (index < length) addElement(that, index++);
});
TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
- hide(TypedArrayPrototype, 'constructor', TypedArray);
+ hide$$1(TypedArrayPrototype, 'constructor', TypedArray);
} else if (!fails(function () {
TypedArray(1);
}) || !fails(function () {
@@ -1577,11 +2111,11 @@ if (_descriptors) {
new TypedArray(iter); // eslint-disable-line no-new
}, true)) {
TypedArray = wrapper(function (that, data, $offset, $length) {
- anInstance(that, TypedArray, NAME);
+ anInstance$$1(that, TypedArray, NAME);
var klass;
// `ws` module bug, temporarily remove validation length for Uint8Array
// https://github.com/websockets/ws/pull/645
- if (!isObject(data)) return new Base(toIndex(data));
+ if (!isObject$$1(data)) return new Base(toIndex(data));
if (data instanceof $ArrayBuffer || (klass = classof$$1(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
return $length !== undefined
? new Base(data, toOffset($offset, BYTES), $length)
@@ -1593,19 +2127,19 @@ if (_descriptors) {
return $from.call(TypedArray, data);
});
arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
- if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
+ if (!(key in TypedArray)) hide$$1(TypedArray, key, Base[key]);
});
TypedArray[PROTOTYPE] = TypedArrayPrototype;
- if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
+ if (!LIBRARY$$1) TypedArrayPrototype.constructor = TypedArray;
}
var $nativeIterator = TypedArrayPrototype[ITERATOR];
var CORRECT_ITER_NAME = !!$nativeIterator
&& ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
var $iterator = $iterators$$1.values;
- hide(TypedArray, TYPED_CONSTRUCTOR, true);
- hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
- hide(TypedArrayPrototype, VIEW, true);
- hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
+ hide$$1(TypedArray, TYPED_CONSTRUCTOR, true);
+ hide$$1(TypedArrayPrototype, TYPED_ARRAY, NAME);
+ hide$$1(TypedArrayPrototype, VIEW, true);
+ hide$$1(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
dP(TypedArrayPrototype, TAG, {
@@ -1626,7 +2160,7 @@ if (_descriptors) {
of: $of
});
- if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
+ if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide$$1(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
$export($export.P, NAME, proto);
@@ -1636,7 +2170,7 @@ if (_descriptors) {
$export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators$$1);
- if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
+ if (!LIBRARY$$1 && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
$export($export.P + $export.F * fails(function () {
new TypedArray(1).slice();
@@ -1649,93 +2183,109 @@ if (_descriptors) {
})), NAME, { toLocaleString: $toLocaleString });
Iterators$$1[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
- if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
+ if (!LIBRARY$$1 && !CORRECT_ITER_NAME) hide$$1(TypedArrayPrototype, ITERATOR, $iterator);
};
} else module.exports = function () { /* empty */ };
});
-_typedArray('Int8', 1, function (init) {
+
+
+var _typedArray$2 = Object.freeze({
+ default: _typedArray,
+ __moduleExports: _typedArray
+});
+
+var require$$0$10 = ( _typedArray$2 && _typedArray ) || _typedArray$2;
+
+require$$0$10('Int8', 1, function (init) {
return function Int8Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint8', 1, function (init) {
+require$$0$10('Uint8', 1, function (init) {
return function Uint8Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint8', 1, function (init) {
+require$$0$10('Uint8', 1, function (init) {
return function Uint8ClampedArray(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
}, true);
-_typedArray('Int16', 2, function (init) {
+require$$0$10('Int16', 2, function (init) {
return function Int16Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint16', 2, function (init) {
+require$$0$10('Uint16', 2, function (init) {
return function Uint16Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Int32', 4, function (init) {
+require$$0$10('Int32', 4, function (init) {
return function Int32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint32', 4, function (init) {
+require$$0$10('Uint32', 4, function (init) {
return function Uint32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Float32', 4, function (init) {
+require$$0$10('Float32', 4, function (init) {
return function Float32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Float64', 8, function (init) {
+require$$0$10('Float64', 8, function (init) {
return function Float64Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-// call something on iterator step with safe closing on error
-
var _iterCall = function (iterator, fn, value, entries) {
try {
- return entries ? fn(_anObject(value)[0], value[1]) : fn(value);
+ return entries ? fn(anObject(value)[0], value[1]) : fn(value);
// 7.4.6 IteratorClose(iterator, completion)
} catch (e) {
var ret = iterator['return'];
- if (ret !== undefined) _anObject(ret.call(iterator));
+ if (ret !== undefined) anObject(ret.call(iterator));
throw e;
}
};
+
+
+var _iterCall$2 = Object.freeze({
+ default: _iterCall,
+ __moduleExports: _iterCall
+});
+
+var call = ( _iterCall$2 && _iterCall ) || _iterCall$2;
+
var _forOf = createCommonjsModule(function (module) {
var BREAK = {};
var RETURN = {};
var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
- var iterFn = ITERATOR ? function () { return iterable; } : core_getIteratorMethod(iterable);
- var f = _ctx(fn, that, entries ? 2 : 1);
+ var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
+ var f = ctx(fn, that, entries ? 2 : 1);
var index = 0;
var length, step, iterator, result;
if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
// fast case for arrays with default iterator
- if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {
- result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+ if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
+ result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
if (result === BREAK || result === RETURN) return result;
} else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
- result = _iterCall(iterator, f, step.value, entries);
+ result = call(iterator, f, step.value, entries);
if (result === BREAK || result === RETURN) return result;
}
};
@@ -1743,16 +2293,23 @@ exports.BREAK = BREAK;
exports.RETURN = RETURN;
});
+
+
+var _forOf$2 = Object.freeze({
+ default: _forOf,
+ __moduleExports: _forOf
+});
+
var _meta = createCommonjsModule(function (module) {
-var META = _uid('meta');
+var META = uid('meta');
-var setDesc = _objectDp.f;
+var setDesc = $defineProperty.f;
var id = 0;
var isExtensible = Object.isExtensible || function () {
return true;
};
-var FREEZE = !_fails(function () {
+var FREEZE = !require$$0(function () {
return isExtensible(Object.preventExtensions({}));
});
var setMeta = function (it) {
@@ -1763,8 +2320,8 @@ var setMeta = function (it) {
};
var fastKey = function (it, create) {
// return primitive with prefix
- if (!_isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
- if (!_has(it, META)) {
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return 'F';
// not necessary to add metadata
@@ -1775,7 +2332,7 @@ var fastKey = function (it, create) {
} return it[META].i;
};
var getWeak = function (it, create) {
- if (!_has(it, META)) {
+ if (!has(it, META)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return true;
// not necessary to add metadata
@@ -1787,7 +2344,7 @@ var getWeak = function (it, create) {
};
// add metadata on freeze-family methods calling
var onFreeze = function (it) {
- if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
return it;
};
var meta = module.exports = {
@@ -1799,13 +2356,43 @@ var meta = module.exports = {
};
});
+var _meta_1 = _meta.KEY;
+var _meta_2 = _meta.NEED;
+var _meta_3 = _meta.fastKey;
+var _meta_4 = _meta.getWeak;
+var _meta_5 = _meta.onFreeze;
+
+
+var _meta$2 = Object.freeze({
+ default: _meta,
+ __moduleExports: _meta,
+ KEY: _meta_1,
+ NEED: _meta_2,
+ fastKey: _meta_3,
+ getWeak: _meta_4,
+ onFreeze: _meta_5
+});
+
var _validateCollection = function (it, TYPE) {
- if (!_isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+ if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
return it;
};
+
+
+var _validateCollection$2 = Object.freeze({
+ default: _validateCollection,
+ __moduleExports: _validateCollection
+});
+
+var forOf = ( _forOf$2 && _forOf ) || _forOf$2;
+
+var require$$0$11 = ( _meta$2 && _meta ) || _meta$2;
+
+var validate = ( _validateCollection$2 && _validateCollection ) || _validateCollection$2;
+
'use strict';
-var dP$1 = _objectDp.f;
+var dP$1 = $defineProperty.f;
@@ -1815,9 +2402,9 @@ var dP$1 = _objectDp.f;
-var fastKey = _meta.fastKey;
+var fastKey = require$$0$11.fastKey;
-var SIZE = _descriptors ? '_s' : 'size';
+var SIZE = require$$0$1 ? '_s' : 'size';
var getEntry = function (that, key) {
// fast case
@@ -1833,19 +2420,19 @@ var getEntry = function (that, key) {
var _collectionStrong = {
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
var C = wrapper(function (that, iterable) {
- _anInstance(that, C, NAME, '_i');
+ anInstance(that, C, NAME, '_i');
that._t = NAME; // collection type
- that._i = _objectCreate(null); // index
+ that._i = _create(null); // index
that._f = undefined; // first entry
that._l = undefined; // last entry
that[SIZE] = 0; // size
- if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
+ if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
});
- _redefineAll(C.prototype, {
+ require$$3(C.prototype, {
// 23.1.3.1 Map.prototype.clear()
// 23.2.3.2 Set.prototype.clear()
clear: function clear() {
- for (var that = _validateCollection(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
+ for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
entry.r = true;
if (entry.p) entry.p = entry.p.n = undefined;
delete data[entry.i];
@@ -1856,7 +2443,7 @@ var _collectionStrong = {
// 23.1.3.3 Map.prototype.delete(key)
// 23.2.3.4 Set.prototype.delete(value)
'delete': function (key) {
- var that = _validateCollection(this, NAME);
+ var that = validate(this, NAME);
var entry = getEntry(that, key);
if (entry) {
var next = entry.n;
@@ -1873,8 +2460,8 @@ var _collectionStrong = {
// 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
// 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
forEach: function forEach(callbackfn /* , that = undefined */) {
- _validateCollection(this, NAME);
- var f = _ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
+ validate(this, NAME);
+ var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
var entry;
while (entry = entry ? entry.n : this._f) {
f(entry.v, entry.k, this);
@@ -1885,12 +2472,12 @@ var _collectionStrong = {
// 23.1.3.7 Map.prototype.has(key)
// 23.2.3.7 Set.prototype.has(value)
has: function has(key) {
- return !!getEntry(_validateCollection(this, NAME), key);
+ return !!getEntry(validate(this, NAME), key);
}
});
- if (_descriptors) dP$1(C.prototype, 'size', {
+ if (require$$0$1) dP$1(C.prototype, 'size', {
get: function () {
- return _validateCollection(this, NAME)[SIZE];
+ return validate(this, NAME)[SIZE];
}
});
return C;
@@ -1922,8 +2509,8 @@ var _collectionStrong = {
setStrong: function (C, NAME, IS_MAP) {
// add .keys, .values, .entries, [@@iterator]
// 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
- _iterDefine(C, NAME, function (iterated, kind) {
- this._t = _validateCollection(iterated, NAME); // target
+ $iterDefine(C, NAME, function (iterated, kind) {
+ this._t = validate(iterated, NAME); // target
this._k = kind; // kind
this._l = undefined; // previous
}, function () {
@@ -1936,32 +2523,43 @@ var _collectionStrong = {
if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
// or finish the iteration
that._t = undefined;
- return _iterStep(1);
+ return step(1);
}
// return step by kind
- if (kind == 'keys') return _iterStep(0, entry.k);
- if (kind == 'values') return _iterStep(0, entry.v);
- return _iterStep(0, [entry.k, entry.v]);
+ if (kind == 'keys') return step(0, entry.k);
+ if (kind == 'values') return step(0, entry.v);
+ return step(0, [entry.k, entry.v]);
}, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
// add [@@species], 23.1.2.2, 23.2.2.2
- _setSpecies(NAME);
+ require$$5$1(NAME);
}
};
-// Works with __proto__ only. Old v8 can't work with null proto objects.
-/* eslint-disable no-proto */
+var _collectionStrong_1 = _collectionStrong.getConstructor;
+var _collectionStrong_2 = _collectionStrong.def;
+var _collectionStrong_3 = _collectionStrong.getEntry;
+var _collectionStrong_4 = _collectionStrong.setStrong;
+var _collectionStrong$2 = Object.freeze({
+ default: _collectionStrong,
+ __moduleExports: _collectionStrong,
+ getConstructor: _collectionStrong_1,
+ def: _collectionStrong_2,
+ getEntry: _collectionStrong_3,
+ setStrong: _collectionStrong_4
+});
+
var check = function (O, proto) {
- _anObject(O);
- if (!_isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
+ anObject(O);
+ if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
};
var _setProto = {
set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
function (test, buggy, set) {
try {
- set = _ctx(Function.call, _objectGopd.f(Object.prototype, '__proto__').set, 2);
+ set = ctx(Function.call, gOPD$1.f(Object.prototype, '__proto__').set, 2);
set(test, []);
buggy = !(test instanceof Array);
} catch (e) { buggy = true; }
@@ -1975,15 +2573,37 @@ var _setProto = {
check: check
};
-var setPrototypeOf = _setProto.set;
+var _setProto_1 = _setProto.set;
+var _setProto_2 = _setProto.check;
+
+
+var _setProto$2 = Object.freeze({
+ default: _setProto,
+ __moduleExports: _setProto,
+ set: _setProto_1,
+ check: _setProto_2
+});
+
+var setProto = ( _setProto$2 && _setProto ) || _setProto$2;
+
+var setPrototypeOf = setProto.set;
var _inheritIfRequired = function (that, target, C) {
var S = target.constructor;
var P;
- if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && _isObject(P) && setPrototypeOf) {
+ if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
setPrototypeOf(that, P);
} return that;
};
+
+
+var _inheritIfRequired$2 = Object.freeze({
+ default: _inheritIfRequired,
+ __moduleExports: _inheritIfRequired
+});
+
+var inheritIfRequired = ( _inheritIfRequired$2 && _inheritIfRequired ) || _inheritIfRequired$2;
+
'use strict';
@@ -1999,41 +2619,41 @@ var _inheritIfRequired = function (that, target, C) {
var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
- var Base = _global[NAME];
+ var Base = global$1[NAME];
var C = Base;
var ADDER = IS_MAP ? 'set' : 'add';
var proto = C && C.prototype;
var O = {};
var fixMethod = function (KEY) {
var fn = proto[KEY];
- _redefine(proto, KEY,
+ redefine(proto, KEY,
KEY == 'delete' ? function (a) {
- return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'has' ? function has(a) {
- return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'get' ? function get(a) {
- return IS_WEAK && !_isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }
: function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }
);
};
- if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !_fails(function () {
+ if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !require$$0(function () {
new C().entries().next();
}))) {
// create collection constructor
C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
- _redefineAll(C.prototype, methods);
- _meta.NEED = true;
+ require$$3(C.prototype, methods);
+ require$$0$11.NEED = true;
} else {
var instance = new C();
// early implementations not supports chaining
var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
// V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
- var THROWS_ON_PRIMITIVES = _fails(function () { instance.has(1); });
+ var THROWS_ON_PRIMITIVES = require$$0(function () { instance.has(1); });
// most early implementations doesn't supports iterables, most modern - not close it correctly
- var ACCEPT_ITERABLES = _iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new
+ var ACCEPT_ITERABLES = require$$0$8(function (iter) { new C(iter); }); // eslint-disable-line no-new
// for early implementations -0 and +0 not the same
- var BUGGY_ZERO = !IS_WEAK && _fails(function () {
+ var BUGGY_ZERO = !IS_WEAK && require$$0(function () {
// V8 ~ Chromium 42- fails only with 5+ elements
var $instance = new C();
var index = 5;
@@ -2042,9 +2662,9 @@ var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
});
if (!ACCEPT_ITERABLES) {
C = wrapper(function (target, iterable) {
- _anInstance(target, C, NAME);
- var that = _inheritIfRequired(new Base(), target, C);
- if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
+ anInstance(target, C, NAME);
+ var that = inheritIfRequired(new Base(), target, C);
+ if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
return that;
});
C.prototype = proto;
@@ -2060,35 +2680,46 @@ var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
if (IS_WEAK && proto.clear) delete proto.clear;
}
- _setToStringTag(C, NAME);
+ setToStringTag(C, NAME);
O[NAME] = C;
- _export(_export.G + _export.W + _export.F * (C != Base), O);
+ $export$1($export$1.G + $export$1.W + $export$1.F * (C != Base), O);
if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
return C;
};
+
+
+var _collection$2 = Object.freeze({
+ default: _collection,
+ __moduleExports: _collection
+});
+
+var strong = ( _collectionStrong$2 && _collectionStrong ) || _collectionStrong$2;
+
+var require$$0$12 = ( _collection$2 && _collection ) || _collection$2;
+
'use strict';
var MAP = 'Map';
// 23.1 Map Objects
-var es6_map = _collection(MAP, function (get) {
+var es6_map = require$$0$12(MAP, function (get) {
return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.1.3.6 Map.prototype.get(key)
get: function get(key) {
- var entry = _collectionStrong.getEntry(_validateCollection(this, MAP), key);
+ var entry = strong.getEntry(validate(this, MAP), key);
return entry && entry.v;
},
// 23.1.3.9 Map.prototype.set(key, value)
set: function set(key, value) {
- return _collectionStrong.def(_validateCollection(this, MAP), key === 0 ? 0 : key, value);
+ return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
}
-}, _collectionStrong, true);
+}, strong, true);
'use strict';
@@ -2096,14 +2727,14 @@ var es6_map = _collection(MAP, function (get) {
var SET = 'Set';
// 23.2 Set Objects
-var es6_set = _collection(SET, function (get) {
+var es6_set = require$$0$12(SET, function (get) {
return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.2.3.1 Set.prototype.add(value)
add: function add(value) {
- return _collectionStrong.def(_validateCollection(this, SET), value = value === 0 ? 0 : value, value);
+ return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
}
-}, _collectionStrong);
+}, strong);
var f$4 = Object.getOwnPropertySymbols;
@@ -2111,6 +2742,16 @@ var _objectGops = {
f: f$4
};
+
+
+var _objectGops$2 = Object.freeze({
+ default: _objectGops,
+ __moduleExports: _objectGops,
+ f: f$4
+});
+
+var gOPS = ( _objectGops$2 && _objectGops ) || _objectGops$2;
+
'use strict';
// 19.1.2.1 Object.assign(target, source, ...)
@@ -2121,7 +2762,7 @@ var _objectGops = {
var $assign = Object.assign;
// should work with symbols and should have deterministic property order (V8 bug)
-var _objectAssign = !$assign || _fails(function () {
+var _objectAssign = !$assign || require$$0(function () {
var A = {};
var B = {};
// eslint-disable-next-line no-undef
@@ -2131,14 +2772,14 @@ var _objectAssign = !$assign || _fails(function () {
K.split('').forEach(function (k) { B[k] = k; });
return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
- var T = _toObject(target);
+ var T = toObject(target);
var aLen = arguments.length;
var index = 1;
- var getSymbols = _objectGops.f;
- var isEnum = _objectPie.f;
+ var getSymbols = gOPS.f;
+ var isEnum = require$$0$6.f;
while (aLen > index) {
- var S = _iobject(arguments[index++]);
- var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);
+ var S = IObject(arguments[index++]);
+ var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
var length = keys.length;
var j = 0;
var key;
@@ -2146,9 +2787,16 @@ var _objectAssign = !$assign || _fails(function () {
} return T;
} : $assign;
+
+
+var _objectAssign$2 = Object.freeze({
+ default: _objectAssign,
+ __moduleExports: _objectAssign
+});
+
'use strict';
-var getWeak = _meta.getWeak;
+var getWeak = require$$0$11.getWeak;
@@ -2156,8 +2804,8 @@ var getWeak = _meta.getWeak;
-var arrayFind = _arrayMethods(5);
-var arrayFindIndex = _arrayMethods(6);
+var arrayFind = require$$0$7(5);
+var arrayFindIndex = require$$0$7(6);
var id$1 = 0;
// fallback for uncaught frozen keys
@@ -2197,34 +2845,34 @@ UncaughtFrozenStore.prototype = {
var _collectionWeak = {
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
var C = wrapper(function (that, iterable) {
- _anInstance(that, C, NAME, '_i');
+ anInstance(that, C, NAME, '_i');
that._t = NAME; // collection type
that._i = id$1++; // collection id
that._l = undefined; // leak store for uncaught frozen objects
- if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
+ if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
});
- _redefineAll(C.prototype, {
+ require$$3(C.prototype, {
// 23.3.3.2 WeakMap.prototype.delete(key)
// 23.4.3.3 WeakSet.prototype.delete(value)
'delete': function (key) {
- if (!_isObject(key)) return false;
+ if (!isObject(key)) return false;
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME))['delete'](key);
- return data && _has(data, this._i) && delete data[this._i];
+ if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
+ return data && has(data, this._i) && delete data[this._i];
},
// 23.3.3.4 WeakMap.prototype.has(key)
// 23.4.3.4 WeakSet.prototype.has(value)
- has: function has(key) {
- if (!_isObject(key)) return false;
+ has: function has$$1(key) {
+ if (!isObject(key)) return false;
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME)).has(key);
- return data && _has(data, this._i);
+ if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
+ return data && has(data, this._i);
}
});
return C;
},
def: function (that, key, value) {
- var data = getWeak(_anObject(key), true);
+ var data = getWeak(anObject(key), true);
if (data === true) uncaughtFrozenStore(that).set(key, value);
else data[that._i] = value;
return that;
@@ -2232,9 +2880,26 @@ var _collectionWeak = {
ufstore: uncaughtFrozenStore
};
+var _collectionWeak_1 = _collectionWeak.getConstructor;
+var _collectionWeak_2 = _collectionWeak.def;
+var _collectionWeak_3 = _collectionWeak.ufstore;
+
+
+var _collectionWeak$2 = Object.freeze({
+ default: _collectionWeak,
+ __moduleExports: _collectionWeak,
+ getConstructor: _collectionWeak_1,
+ def: _collectionWeak_2,
+ ufstore: _collectionWeak_3
+});
+
+var require$$0$13 = ( _objectAssign$2 && _objectAssign ) || _objectAssign$2;
+
+var weak = ( _collectionWeak$2 && _collectionWeak ) || _collectionWeak$2;
+
var es6_weakMap = createCommonjsModule(function (module) {
'use strict';
-var each = _arrayMethods(0);
+var each = require$$0$7(0);
@@ -2243,9 +2908,9 @@ var each = _arrayMethods(0);
var WEAK_MAP = 'WeakMap';
-var getWeak = _meta.getWeak;
+var getWeak = require$$0$11.getWeak;
var isExtensible = Object.isExtensible;
-var uncaughtFrozenStore = _collectionWeak.ufstore;
+var uncaughtFrozenStore = weak.ufstore;
var tmp = {};
var InternalMap;
@@ -2258,32 +2923,32 @@ var wrapper = function (get) {
var methods = {
// 23.3.3.3 WeakMap.prototype.get(key)
get: function get(key) {
- if (_isObject(key)) {
+ if (isObject(key)) {
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(_validateCollection(this, WEAK_MAP)).get(key);
+ if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
return data ? data[this._i] : undefined;
}
},
// 23.3.3.5 WeakMap.prototype.set(key, value)
set: function set(key, value) {
- return _collectionWeak.def(_validateCollection(this, WEAK_MAP), key, value);
+ return weak.def(validate(this, WEAK_MAP), key, value);
}
};
// 23.3 WeakMap Objects
-var $WeakMap = module.exports = _collection(WEAK_MAP, wrapper, methods, _collectionWeak, true, true);
+var $WeakMap = module.exports = require$$0$12(WEAK_MAP, wrapper, methods, weak, true, true);
// IE11 WeakMap frozen keys fix
-if (_fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
- InternalMap = _collectionWeak.getConstructor(wrapper, WEAK_MAP);
- _objectAssign(InternalMap.prototype, methods);
- _meta.NEED = true;
+if (require$$0(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
+ InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
+ require$$0$13(InternalMap.prototype, methods);
+ require$$0$11.NEED = true;
each(['delete', 'has', 'get', 'set'], function (key) {
var proto = $WeakMap.prototype;
var method = proto[key];
- _redefine(proto, key, function (a, b) {
+ redefine(proto, key, function (a, b) {
// store frozen objects on internal weakmap shim
- if (_isObject(a) && !isExtensible(a)) {
+ if (isObject(a) && !isExtensible(a)) {
if (!this._f) this._f = new InternalMap();
var result = this._f[key](a, b);
return key == 'set' ? this : result;
@@ -2300,28 +2965,24 @@ if (_fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp
var WEAK_SET = 'WeakSet';
// 23.4 WeakSet Objects
-_collection(WEAK_SET, function (get) {
+require$$0$12(WEAK_SET, function (get) {
return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.4.3.1 WeakSet.prototype.add(value)
add: function add(value) {
- return _collectionWeak.def(_validateCollection(this, WEAK_SET), value, true);
+ return weak.def(validate(this, WEAK_SET), value, true);
}
-}, _collectionWeak, false, true);
+}, weak, false, true);
-// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
-
-
-
-var rApply = (_global.Reflect || {}).apply;
+var rApply = (global$1.Reflect || {}).apply;
var fApply = Function.apply;
// MS Edge argumentsList argument is optional
-_export(_export.S + _export.F * !_fails(function () {
+$export$1($export$1.S + $export$1.F * !require$$0(function () {
rApply(function () { /* empty */ });
}), 'Reflect', {
apply: function apply(target, thisArgument, argumentsList) {
- var T = _aFunction(target);
- var L = _anObject(argumentsList);
+ var T = aFunction(target);
+ var L = anObject(argumentsList);
return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
}
});
@@ -2343,6 +3004,15 @@ var _invoke = function (fn, args, that) {
} return fn.apply(that, args);
};
+
+
+var _invoke$2 = Object.freeze({
+ default: _invoke,
+ __moduleExports: _invoke
+});
+
+var invoke = ( _invoke$2 && _invoke ) || _invoke$2;
+
'use strict';
@@ -2359,41 +3029,42 @@ var construct = function (F, len, args) {
};
var _bind = Function.bind || function bind(that /* , ...args */) {
- var fn = _aFunction(this);
+ var fn = aFunction(this);
var partArgs = arraySlice.call(arguments, 1);
var bound = function (/* args... */) {
var args = partArgs.concat(arraySlice.call(arguments));
- return this instanceof bound ? construct(fn, args.length, args) : _invoke(fn, args, that);
+ return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
};
- if (_isObject(fn.prototype)) bound.prototype = fn.prototype;
+ if (isObject(fn.prototype)) bound.prototype = fn.prototype;
return bound;
};
-// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
-
-
-
+var _bind$2 = Object.freeze({
+ default: _bind,
+ __moduleExports: _bind
+});
+var bind = ( _bind$2 && _bind ) || _bind$2;
-var rConstruct = (_global.Reflect || {}).construct;
+var rConstruct = (global$1.Reflect || {}).construct;
// MS Edge supports only 2 arguments and argumentsList argument is optional
// FF Nightly sets third argument as `new.target`, but does not create `this` from it
-var NEW_TARGET_BUG = _fails(function () {
+var NEW_TARGET_BUG = require$$0(function () {
function F() { /* empty */ }
return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);
});
-var ARGS_BUG = !_fails(function () {
+var ARGS_BUG = !require$$0(function () {
rConstruct(function () { /* empty */ });
});
-_export(_export.S + _export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
+$export$1($export$1.S + $export$1.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
construct: function construct(Target, args /* , newTarget */) {
- _aFunction(Target);
- _anObject(args);
- var newTarget = arguments.length < 3 ? Target : _aFunction(arguments[2]);
+ aFunction(Target);
+ anObject(args);
+ var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
if (Target == newTarget) {
// w/o altered newTarget, optimization for 0-4 arguments
@@ -2407,33 +3078,26 @@ _export(_export.S + _export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
// w/o altered newTarget, lot of arguments case
var $args = [null];
$args.push.apply($args, args);
- return new (_bind.apply(Target, $args))();
+ return new (bind.apply(Target, $args))();
}
// with altered newTarget, not support built-in constructors
var proto = newTarget.prototype;
- var instance = _objectCreate(_isObject(proto) ? proto : Object.prototype);
+ var instance = _create(isObject(proto) ? proto : Object.prototype);
var result = Function.apply.call(Target, instance, args);
- return _isObject(result) ? result : instance;
+ return isObject(result) ? result : instance;
}
});
-// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
-
-
-
-
-
-// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
// eslint-disable-next-line no-undef
- Reflect.defineProperty(_objectDp.f({}, 1, { value: 1 }), 1, { value: 2 });
+ Reflect.defineProperty($defineProperty.f({}, 1, { value: 1 }), 1, { value: 2 });
}), 'Reflect', {
defineProperty: function defineProperty(target, propertyKey, attributes) {
- _anObject(target);
- propertyKey = _toPrimitive(propertyKey, true);
- _anObject(attributes);
+ anObject(target);
+ propertyKey = toPrimitive(propertyKey, true);
+ anObject(attributes);
try {
- _objectDp.f(target, propertyKey, attributes);
+ $defineProperty.f(target, propertyKey, attributes);
return true;
} catch (e) {
return false;
@@ -2441,107 +3105,80 @@ _export(_export.S + _export.F * _fails(function () {
}
});
-// 26.1.4 Reflect.deleteProperty(target, propertyKey)
+var gOPD$2 = gOPD$1.f;
-var gOPD$2 = _objectGopd.f;
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
deleteProperty: function deleteProperty(target, propertyKey) {
- var desc = gOPD$2(_anObject(target), propertyKey);
+ var desc = gOPD$2(anObject(target), propertyKey);
return desc && !desc.configurable ? false : delete target[propertyKey];
}
});
-// 26.1.6 Reflect.get(target, propertyKey [, receiver])
-
-
-
-
-
-
-
function get(target, propertyKey /* , receiver */) {
var receiver = arguments.length < 3 ? target : arguments[2];
var desc, proto;
- if (_anObject(target) === receiver) return target[propertyKey];
- if (desc = _objectGopd.f(target, propertyKey)) return _has(desc, 'value')
+ if (anObject(target) === receiver) return target[propertyKey];
+ if (desc = gOPD$1.f(target, propertyKey)) return has(desc, 'value')
? desc.value
: desc.get !== undefined
? desc.get.call(receiver)
: undefined;
- if (_isObject(proto = _objectGpo(target))) return get(proto, propertyKey, receiver);
+ if (isObject(proto = $getPrototypeOf(target))) return get(proto, propertyKey, receiver);
}
-_export(_export.S, 'Reflect', { get: get });
-
-// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
-
-
+$export$1($export$1.S, 'Reflect', { get: get });
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
- return _objectGopd.f(_anObject(target), propertyKey);
+ return gOPD$1.f(anObject(target), propertyKey);
}
});
-// 26.1.8 Reflect.getPrototypeOf(target)
-
-
-
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
getPrototypeOf: function getPrototypeOf(target) {
- return _objectGpo(_anObject(target));
+ return $getPrototypeOf(anObject(target));
}
});
-// 26.1.9 Reflect.has(target, propertyKey)
-
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
has: function has(target, propertyKey) {
return propertyKey in target;
}
});
-// 26.1.10 Reflect.isExtensible(target)
-
-
var $isExtensible = Object.isExtensible;
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
isExtensible: function isExtensible(target) {
- _anObject(target);
+ anObject(target);
return $isExtensible ? $isExtensible(target) : true;
}
});
-// all object keys, includes non-enumerable and symbols
-
-
-
-var Reflect$1 = _global.Reflect;
+var Reflect$1 = global$1.Reflect;
var _ownKeys = Reflect$1 && Reflect$1.ownKeys || function ownKeys(it) {
- var keys = _objectGopn.f(_anObject(it));
- var getSymbols = _objectGops.f;
+ var keys = require$$0$4.f(anObject(it));
+ var getSymbols = gOPS.f;
return getSymbols ? keys.concat(getSymbols(it)) : keys;
};
-// 26.1.11 Reflect.ownKeys(target)
-_export(_export.S, 'Reflect', { ownKeys: _ownKeys });
+var _ownKeys$2 = Object.freeze({
+ default: _ownKeys,
+ __moduleExports: _ownKeys
+});
-// 26.1.12 Reflect.preventExtensions(target)
+var ownKeys = ( _ownKeys$2 && _ownKeys ) || _ownKeys$2;
+$export$1($export$1.S, 'Reflect', { ownKeys: ownKeys });
var $preventExtensions = Object.preventExtensions;
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
preventExtensions: function preventExtensions(target) {
- _anObject(target);
+ anObject(target);
try {
if ($preventExtensions) $preventExtensions(target);
return true;
@@ -2551,47 +3188,33 @@ _export(_export.S, 'Reflect', {
}
});
-// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
-
-
-
-
-
-
-
-
-
function set(target, propertyKey, V /* , receiver */) {
var receiver = arguments.length < 4 ? target : arguments[3];
- var ownDesc = _objectGopd.f(_anObject(target), propertyKey);
+ var ownDesc = gOPD$1.f(anObject(target), propertyKey);
var existingDescriptor, proto;
if (!ownDesc) {
- if (_isObject(proto = _objectGpo(target))) {
+ if (isObject(proto = $getPrototypeOf(target))) {
return set(proto, propertyKey, V, receiver);
}
- ownDesc = _propertyDesc(0);
+ ownDesc = createDesc(0);
}
- if (_has(ownDesc, 'value')) {
- if (ownDesc.writable === false || !_isObject(receiver)) return false;
- existingDescriptor = _objectGopd.f(receiver, propertyKey) || _propertyDesc(0);
+ if (has(ownDesc, 'value')) {
+ if (ownDesc.writable === false || !isObject(receiver)) return false;
+ existingDescriptor = gOPD$1.f(receiver, propertyKey) || createDesc(0);
existingDescriptor.value = V;
- _objectDp.f(receiver, propertyKey, existingDescriptor);
+ $defineProperty.f(receiver, propertyKey, existingDescriptor);
return true;
}
return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
}
-_export(_export.S, 'Reflect', { set: set });
-
-// 26.1.14 Reflect.setPrototypeOf(target, proto)
-
+$export$1($export$1.S, 'Reflect', { set: set });
-
-if (_setProto) _export(_export.S, 'Reflect', {
+if (setProto) $export$1($export$1.S, 'Reflect', {
setPrototypeOf: function setPrototypeOf(target, proto) {
- _setProto.check(target, proto);
+ setProto.check(target, proto);
try {
- _setProto.set(target, proto);
+ setProto.set(target, proto);
return true;
} catch (e) {
return false;
@@ -2599,11 +3222,11 @@ if (_setProto) _export(_export.S, 'Reflect', {
}
});
-var process$1 = _global.process;
-var setTask = _global.setImmediate;
-var clearTask = _global.clearImmediate;
-var MessageChannel = _global.MessageChannel;
-var Dispatch = _global.Dispatch;
+var process$1 = global$1.process;
+var setTask = global$1.setImmediate;
+var clearTask = global$1.clearImmediate;
+var MessageChannel = global$1.MessageChannel;
+var Dispatch = global$1.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
@@ -2630,7 +3253,7 @@ if (!setTask || !clearTask) {
while (arguments.length > i) args.push(arguments[i++]);
queue[++counter] = function () {
// eslint-disable-next-line no-new-func
- _invoke(typeof fn == 'function' ? fn : Function(fn), args);
+ invoke(typeof fn == 'function' ? fn : Function(fn), args);
};
defer(counter);
return counter;
@@ -2639,40 +3262,40 @@ if (!setTask || !clearTask) {
delete queue[id];
};
// Node.js 0.8-
- if (_cof(process$1) == 'process') {
+ if (cof(process$1) == 'process') {
defer = function (id) {
- process$1.nextTick(_ctx(run, id, 1));
+ process$1.nextTick(ctx(run, id, 1));
};
// Sphere (JS game engine) Dispatch API
} else if (Dispatch && Dispatch.now) {
defer = function (id) {
- Dispatch.now(_ctx(run, id, 1));
+ Dispatch.now(ctx(run, id, 1));
};
// Browsers with MessageChannel, includes WebWorkers
} else if (MessageChannel) {
channel = new MessageChannel();
port = channel.port2;
channel.port1.onmessage = listener;
- defer = _ctx(port.postMessage, port, 1);
+ defer = ctx(port.postMessage, port, 1);
// Browsers with postMessage, skip WebWorkers
// IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
- } else if (_global.addEventListener && typeof postMessage == 'function' && !_global.importScripts) {
+ } else if (global$1.addEventListener && typeof postMessage == 'function' && !global$1.importScripts) {
defer = function (id) {
- _global.postMessage(id + '', '*');
+ global$1.postMessage(id + '', '*');
};
- _global.addEventListener('message', listener, false);
+ global$1.addEventListener('message', listener, false);
// IE8-
- } else if (ONREADYSTATECHANGE in _domCreate('script')) {
+ } else if (ONREADYSTATECHANGE in cel('script')) {
defer = function (id) {
- _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function () {
- _html.removeChild(this);
+ html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
+ html.removeChild(this);
run.call(id);
};
};
// Rest old browsers
} else {
defer = function (id) {
- setTimeout(_ctx(run, id, 1), 0);
+ setTimeout(ctx(run, id, 1), 0);
};
}
}
@@ -2681,11 +3304,24 @@ var _task = {
clear: clearTask
};
-var macrotask = _task.set;
-var Observer = _global.MutationObserver || _global.WebKitMutationObserver;
-var process$2 = _global.process;
-var Promise$1 = _global.Promise;
-var isNode$1 = _cof(process$2) == 'process';
+var _task_1 = _task.set;
+var _task_2 = _task.clear;
+
+
+var _task$2 = Object.freeze({
+ default: _task,
+ __moduleExports: _task,
+ set: _task_1,
+ clear: _task_2
+});
+
+var $task = ( _task$2 && _task ) || _task$2;
+
+var macrotask = $task.set;
+var Observer = global$1.MutationObserver || global$1.WebKitMutationObserver;
+var process$2 = global$1.process;
+var Promise$1 = global$1.Promise;
+var isNode$1 = cof(process$2) == 'process';
var _microtask = function () {
var head, last, notify;
@@ -2713,7 +3349,7 @@ var _microtask = function () {
process$2.nextTick(flush);
};
// browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
- } else if (Observer && !(_global.navigator && _global.navigator.standalone)) {
+ } else if (Observer && !(global$1.navigator && global$1.navigator.standalone)) {
var toggle = true;
var node = document.createTextNode('');
new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
@@ -2735,7 +3371,7 @@ var _microtask = function () {
} else {
notify = function () {
// strange IE + webpack dev server bug - use .call(global)
- macrotask.call(_global, flush);
+ macrotask.call(global$1, flush);
};
}
@@ -2749,6 +3385,13 @@ var _microtask = function () {
};
};
+
+
+var _microtask$2 = Object.freeze({
+ default: _microtask,
+ __moduleExports: _microtask
+});
+
'use strict';
// 25.4.1.5 NewPromiseCapability(C)
@@ -2760,8 +3403,8 @@ function PromiseCapability(C) {
resolve = $$resolve;
reject = $$reject;
});
- this.resolve = _aFunction(resolve);
- this.reject = _aFunction(reject);
+ this.resolve = aFunction(resolve);
+ this.reject = aFunction(reject);
}
var f$5 = function (C) {
@@ -2772,6 +3415,14 @@ var _newPromiseCapability = {
f: f$5
};
+
+
+var _newPromiseCapability$2 = Object.freeze({
+ default: _newPromiseCapability,
+ __moduleExports: _newPromiseCapability,
+ f: f$5
+});
+
var _perform = function (exec) {
try {
return { e: false, v: exec() };
@@ -2780,15 +3431,37 @@ var _perform = function (exec) {
}
};
+
+
+var _perform$2 = Object.freeze({
+ default: _perform,
+ __moduleExports: _perform
+});
+
+var newPromiseCapability$1 = ( _newPromiseCapability$2 && _newPromiseCapability ) || _newPromiseCapability$2;
+
var _promiseResolve = function (C, x) {
- _anObject(C);
- if (_isObject(x) && x.constructor === C) return x;
- var promiseCapability = _newPromiseCapability.f(C);
+ anObject(C);
+ if (isObject(x) && x.constructor === C) return x;
+ var promiseCapability = newPromiseCapability$1.f(C);
var resolve = promiseCapability.resolve;
resolve(x);
return promiseCapability.promise;
};
+
+
+var _promiseResolve$2 = Object.freeze({
+ default: _promiseResolve,
+ __moduleExports: _promiseResolve
+});
+
+var require$$1$1 = ( _microtask$2 && _microtask ) || _microtask$2;
+
+var perform = ( _perform$2 && _perform ) || _perform$2;
+
+var promiseResolve = ( _promiseResolve$2 && _promiseResolve ) || _promiseResolve$2;
+
'use strict';
@@ -2800,28 +3473,28 @@ var _promiseResolve = function (C, x) {
-var task = _task.set;
-var microtask = _microtask();
+var task = $task.set;
+var microtask = require$$1$1();
var PROMISE = 'Promise';
-var TypeError$1 = _global.TypeError;
-var process = _global.process;
-var $Promise = _global[PROMISE];
-var isNode = _classof(process) == 'process';
+var TypeError$1 = global$1.TypeError;
+var process = global$1.process;
+var $Promise = global$1[PROMISE];
+var isNode = classof(process) == 'process';
var empty = function () { /* empty */ };
var Internal;
var newGenericPromiseCapability;
var OwnPromiseCapability;
var Wrapper;
-var newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;
+var newPromiseCapability = newGenericPromiseCapability = newPromiseCapability$1.f;
var USE_NATIVE = !!function () {
try {
// correct subclassing with @@species support
var promise = $Promise.resolve(1);
- var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {
+ var FakePromise = (promise.constructor = {})[wks('species')] = function (exec) {
exec(empty, empty);
};
// unhandled rejections tracking support, NodeJS Promise without it fails @@species test
@@ -2832,7 +3505,7 @@ var USE_NATIVE = !!function () {
// helpers
var isThenable = function (it) {
var then;
- return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+ return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};
var notify = function (promise, isReject) {
if (promise._n) return;
@@ -2877,17 +3550,17 @@ var notify = function (promise, isReject) {
});
};
var onUnhandled = function (promise) {
- task.call(_global, function () {
+ task.call(global$1, function () {
var value = promise._v;
var unhandled = isUnhandled(promise);
var result, handler, console;
if (unhandled) {
- result = _perform(function () {
+ result = perform(function () {
if (isNode) {
process.emit('unhandledRejection', value, promise);
- } else if (handler = _global.onunhandledrejection) {
+ } else if (handler = global$1.onunhandledrejection) {
handler({ promise: promise, reason: value });
- } else if ((console = _global.console) && console.error) {
+ } else if ((console = global$1.console) && console.error) {
console.error('Unhandled promise rejection', value);
}
});
@@ -2901,11 +3574,11 @@ var isUnhandled = function (promise) {
return promise._h !== 1 && (promise._a || promise._c).length === 0;
};
var onHandleUnhandled = function (promise) {
- task.call(_global, function () {
+ task.call(global$1, function () {
var handler;
if (isNode) {
process.emit('rejectionHandled', promise);
- } else if (handler = _global.onrejectionhandled) {
+ } else if (handler = global$1.onrejectionhandled) {
handler({ promise: promise, reason: promise._v });
}
});
@@ -2932,7 +3605,7 @@ var $resolve = function (value) {
microtask(function () {
var wrapper = { _w: promise, _d: false }; // wrap
try {
- then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 1));
+ then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
} catch (e) {
$reject.call(wrapper, e);
}
@@ -2951,11 +3624,11 @@ var $resolve = function (value) {
if (!USE_NATIVE) {
// 25.4.3.1 Promise(executor)
$Promise = function Promise(executor) {
- _anInstance(this, $Promise, PROMISE, '_h');
- _aFunction(executor);
+ anInstance(this, $Promise, PROMISE, '_h');
+ aFunction(executor);
Internal.call(this);
try {
- executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));
+ executor(ctx($resolve, this, 1), ctx($reject, this, 1));
} catch (err) {
$reject.call(this, err);
}
@@ -2970,10 +3643,10 @@ if (!USE_NATIVE) {
this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
this._n = false; // <- notify
};
- Internal.prototype = _redefineAll($Promise.prototype, {
+ Internal.prototype = require$$3($Promise.prototype, {
// 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
then: function then(onFulfilled, onRejected) {
- var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));
+ var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
reaction.fail = typeof onRejected == 'function' && onRejected;
reaction.domain = isNode ? process.domain : undefined;
@@ -2990,23 +3663,23 @@ if (!USE_NATIVE) {
OwnPromiseCapability = function () {
var promise = new Internal();
this.promise = promise;
- this.resolve = _ctx($resolve, promise, 1);
- this.reject = _ctx($reject, promise, 1);
+ this.resolve = ctx($resolve, promise, 1);
+ this.reject = ctx($reject, promise, 1);
};
- _newPromiseCapability.f = newPromiseCapability = function (C) {
+ newPromiseCapability$1.f = newPromiseCapability = function (C) {
return C === $Promise || C === Wrapper
? new OwnPromiseCapability(C)
: newGenericPromiseCapability(C);
};
}
-_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Promise: $Promise });
-_setToStringTag($Promise, PROMISE);
-_setSpecies(PROMISE);
-Wrapper = _core[PROMISE];
+$export$1($export$1.G + $export$1.W + $export$1.F * !USE_NATIVE, { Promise: $Promise });
+setToStringTag($Promise, PROMISE);
+require$$5$1(PROMISE);
+Wrapper = core[PROMISE];
// statics
-_export(_export.S + _export.F * !USE_NATIVE, PROMISE, {
+$export$1($export$1.S + $export$1.F * !USE_NATIVE, PROMISE, {
// 25.4.4.5 Promise.reject(r)
reject: function reject(r) {
var capability = newPromiseCapability(this);
@@ -3015,13 +3688,13 @@ _export(_export.S + _export.F * !USE_NATIVE, PROMISE, {
return capability.promise;
}
});
-_export(_export.S + _export.F * (_library || !USE_NATIVE), PROMISE, {
+$export$1($export$1.S + $export$1.F * (LIBRARY || !USE_NATIVE), PROMISE, {
// 25.4.4.6 Promise.resolve(x)
resolve: function resolve(x) {
- return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);
+ return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
}
});
-_export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
+$export$1($export$1.S + $export$1.F * !(USE_NATIVE && require$$0$8(function (iter) {
$Promise.all(iter)['catch'](empty);
})), PROMISE, {
// 25.4.4.1 Promise.all(iterable)
@@ -3030,11 +3703,11 @@ _export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
var capability = newPromiseCapability(C);
var resolve = capability.resolve;
var reject = capability.reject;
- var result = _perform(function () {
+ var result = perform(function () {
var values = [];
var index = 0;
var remaining = 1;
- _forOf(iterable, false, function (promise) {
+ forOf(iterable, false, function (promise) {
var $index = index++;
var alreadyCalled = false;
values.push(undefined);
@@ -3056,8 +3729,8 @@ _export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
var C = this;
var capability = newPromiseCapability(C);
var reject = capability.reject;
- var result = _perform(function () {
- _forOf(iterable, false, function (promise) {
+ var result = perform(function () {
+ forOf(iterable, false, function (promise) {
C.resolve(promise).then(capability.resolve, reject);
});
});
@@ -3066,37 +3739,55 @@ _export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
}
});
-var f$6 = _wks;
+var f$6 = wks;
var _wksExt = {
f: f$6
};
-var defineProperty = _objectDp.f;
+
+
+var _wksExt$2 = Object.freeze({
+ default: _wksExt,
+ __moduleExports: _wksExt,
+ f: f$6
+});
+
+var wksExt = ( _wksExt$2 && _wksExt ) || _wksExt$2;
+
+var defineProperty = $defineProperty.f;
var _wksDefine = function (name) {
- var $Symbol = _core.Symbol || (_core.Symbol = _library ? {} : _global.Symbol || {});
- if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: _wksExt.f(name) });
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global$1.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
};
-// all enumerable object keys, includes symbols
+var _wksDefine$2 = Object.freeze({
+ default: _wksDefine,
+ __moduleExports: _wksDefine
+});
var _enumKeys = function (it) {
- var result = _objectKeys(it);
- var getSymbols = _objectGops.f;
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
if (getSymbols) {
var symbols = getSymbols(it);
- var isEnum = _objectPie.f;
+ var isEnum = require$$0$6.f;
var i = 0;
var key;
while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
} return result;
};
-// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
-var gOPN$1 = _objectGopn.f;
+
+var _enumKeys$2 = Object.freeze({
+ default: _enumKeys,
+ __moduleExports: _enumKeys
+});
+
+var gOPN$1 = require$$0$4.f;
var toString$1 = {}.toString;
var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
@@ -3111,13 +3802,27 @@ var getWindowNames = function (it) {
};
var f$7 = function getOwnPropertyNames(it) {
- return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN$1(_toIobject(it));
+ return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN$1(toIObject(it));
};
var _objectGopnExt = {
f: f$7
};
+
+
+var _objectGopnExt$2 = Object.freeze({
+ default: _objectGopnExt,
+ __moduleExports: _objectGopnExt,
+ f: f$7
+});
+
+var wksDefine = ( _wksDefine$2 && _wksDefine ) || _wksDefine$2;
+
+var enumKeys = ( _enumKeys$2 && _enumKeys ) || _enumKeys$2;
+
+var require$$1$2 = ( _objectGopnExt$2 && _objectGopnExt ) || _objectGopnExt$2;
+
'use strict';
// ECMAScript 6 symbols shim
@@ -3125,7 +3830,7 @@ var _objectGopnExt = {
-var META = _meta.KEY;
+var META = require$$0$11.KEY;
@@ -3145,28 +3850,28 @@ var META = _meta.KEY;
-var gOPD$3 = _objectGopd.f;
-var dP$2 = _objectDp.f;
-var gOPN = _objectGopnExt.f;
-var $Symbol = _global.Symbol;
-var $JSON = _global.JSON;
+var gOPD$3 = gOPD$1.f;
+var dP$2 = $defineProperty.f;
+var gOPN = require$$1$2.f;
+var $Symbol = global$1.Symbol;
+var $JSON = global$1.JSON;
var _stringify = $JSON && $JSON.stringify;
var PROTOTYPE$2 = 'prototype';
-var HIDDEN = _wks('_hidden');
-var TO_PRIMITIVE = _wks('toPrimitive');
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
var isEnum = {}.propertyIsEnumerable;
-var SymbolRegistry = _shared('symbol-registry');
-var AllSymbols = _shared('symbols');
-var OPSymbols = _shared('op-symbols');
+var SymbolRegistry = shared$1('symbol-registry');
+var AllSymbols = shared$1('symbols');
+var OPSymbols = shared$1('op-symbols');
var ObjectProto$1 = Object[PROTOTYPE$2];
var USE_NATIVE$1 = typeof $Symbol == 'function';
-var QObject = _global.QObject;
+var QObject = global$1.QObject;
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
var setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild;
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
-var setSymbolDesc = _descriptors && _fails(function () {
- return _objectCreate(dP$2({}, 'a', {
+var setSymbolDesc = require$$0$1 && require$$0(function () {
+ return _create(dP$2({}, 'a', {
get: function () { return dP$2(this, 'a', { value: 7 }).a; }
})).a != 7;
}) ? function (it, key, D) {
@@ -3177,7 +3882,7 @@ var setSymbolDesc = _descriptors && _fails(function () {
} : dP$2;
var wrap = function (tag) {
- var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE$2]);
sym._k = tag;
return sym;
};
@@ -3190,22 +3895,22 @@ var isSymbol = USE_NATIVE$1 && typeof $Symbol.iterator == 'symbol' ? function (i
var $defineProperty$1 = function defineProperty(it, key, D) {
if (it === ObjectProto$1) $defineProperty$1(OPSymbols, key, D);
- _anObject(it);
- key = _toPrimitive(key, true);
- _anObject(D);
- if (_has(AllSymbols, key)) {
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
if (!D.enumerable) {
- if (!_has(it, HIDDEN)) dP$2(it, HIDDEN, _propertyDesc(1, {}));
+ if (!has(it, HIDDEN)) dP$2(it, HIDDEN, createDesc(1, {}));
it[HIDDEN][key] = true;
} else {
- if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
- D = _objectCreate(D, { enumerable: _propertyDesc(0, false) });
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
} return setSymbolDesc(it, key, D);
} return dP$2(it, key, D);
};
var $defineProperties = function defineProperties(it, P) {
- _anObject(it);
- var keys = _enumKeys(P = _toIobject(P));
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
var i = 0;
var l = keys.length;
var key;
@@ -3213,38 +3918,38 @@ var $defineProperties = function defineProperties(it, P) {
return it;
};
var $create = function create(it, P) {
- return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
};
var $propertyIsEnumerable = function propertyIsEnumerable(key) {
- var E = isEnum.call(this, key = _toPrimitive(key, true));
- if (this === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;
- return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto$1 && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
- it = _toIobject(it);
- key = _toPrimitive(key, true);
- if (it === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto$1 && has(AllSymbols, key) && !has(OPSymbols, key)) return;
var D = gOPD$3(it, key);
- if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
return D;
};
var $getOwnPropertyNames = function getOwnPropertyNames(it) {
- var names = gOPN(_toIobject(it));
+ var names = gOPN(toIObject(it));
var result = [];
var i = 0;
var key;
while (names.length > i) {
- if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
} return result;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
var IS_OP = it === ObjectProto$1;
- var names = gOPN(IS_OP ? OPSymbols : _toIobject(it));
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
var result = [];
var i = 0;
var key;
while (names.length > i) {
- if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);
} return result;
};
@@ -3252,47 +3957,47 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
if (!USE_NATIVE$1) {
$Symbol = function Symbol() {
if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
- var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
var $set = function (value) {
if (this === ObjectProto$1) $set.call(OPSymbols, value);
- if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
- setSymbolDesc(this, tag, _propertyDesc(1, value));
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
};
- if (_descriptors && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });
+ if (require$$0$1 && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });
return wrap(tag);
};
- _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
+ redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
return this._k;
});
- _objectGopd.f = $getOwnPropertyDescriptor;
- _objectDp.f = $defineProperty$1;
- _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;
- _objectPie.f = $propertyIsEnumerable;
- _objectGops.f = $getOwnPropertySymbols;
+ gOPD$1.f = $getOwnPropertyDescriptor;
+ $defineProperty.f = $defineProperty$1;
+ require$$0$4.f = require$$1$2.f = $getOwnPropertyNames;
+ require$$0$6.f = $propertyIsEnumerable;
+ gOPS.f = $getOwnPropertySymbols;
- if (_descriptors && !_library) {
- _redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ if (require$$0$1 && !LIBRARY) {
+ redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);
}
- _wksExt.f = function (name) {
- return wrap(_wks(name));
+ wksExt.f = function (name) {
+ return wrap(wks(name));
};
}
-_export(_export.G + _export.W + _export.F * !USE_NATIVE$1, { Symbol: $Symbol });
+$export$1($export$1.G + $export$1.W + $export$1.F * !USE_NATIVE$1, { Symbol: $Symbol });
for (var es6Symbols = (
// 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
-).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
-for (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);
+for (var wellKnownSymbols = getKeys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
-_export(_export.S + _export.F * !USE_NATIVE$1, 'Symbol', {
+$export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Symbol', {
// 19.4.2.1 Symbol.for(key)
'for': function (key) {
- return _has(SymbolRegistry, key += '')
+ return has(SymbolRegistry, key += '')
? SymbolRegistry[key]
: SymbolRegistry[key] = $Symbol(key);
},
@@ -3305,7 +4010,7 @@ _export(_export.S + _export.F * !USE_NATIVE$1, 'Symbol', {
useSimple: function () { setter = false; }
});
-_export(_export.S + _export.F * !USE_NATIVE$1, 'Object', {
+$export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Object', {
// 19.1.2.2 Object.create(O [, Properties])
create: $create,
// 19.1.2.4 Object.defineProperty(O, P, Attributes)
@@ -3321,7 +4026,7 @@ _export(_export.S + _export.F * !USE_NATIVE$1, 'Object', {
});
// 24.3.2 JSON.stringify(value [, replacer [, space]])
-$JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
+$JSON && $export$1($export$1.S + $export$1.F * (!USE_NATIVE$1 || require$$0(function () {
var S = $Symbol();
// MS Edge converts symbol values to JSON as {}
// WebKit converts symbol values to JSON as null
@@ -3334,8 +4039,8 @@ $JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
var replacer, $replacer;
while (arguments.length > i) args.push(arguments[i++]);
$replacer = replacer = args[1];
- if (!_isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
- if (!_isArray(replacer)) replacer = function (key, value) {
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
if (!isSymbol(value)) return value;
};
@@ -3345,121 +4050,97 @@ $JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
});
// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
-$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);
+$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);
// 19.4.3.5 Symbol.prototype[@@toStringTag]
-_setToStringTag($Symbol, 'Symbol');
+setToStringTag($Symbol, 'Symbol');
// 20.2.1.9 Math[@@toStringTag]
-_setToStringTag(Math, 'Math', true);
+setToStringTag(Math, 'Math', true);
// 24.3.3 JSON[@@toStringTag]
-_setToStringTag(_global.JSON, 'JSON', true);
-
-// most Object methods by ES6 should accept primitives
-
-
+setToStringTag(global$1.JSON, 'JSON', true);
var _objectSap = function (KEY, exec) {
- var fn = (_core.Object || {})[KEY] || Object[KEY];
+ var fn = (core.Object || {})[KEY] || Object[KEY];
var exp = {};
exp[KEY] = exec(fn);
- _export(_export.S + _export.F * _fails(function () { fn(1); }), 'Object', exp);
+ $export$1($export$1.S + $export$1.F * require$$0(function () { fn(1); }), 'Object', exp);
};
-// 19.1.2.5 Object.freeze(O)
-var meta = _meta.onFreeze;
-_objectSap('freeze', function ($freeze) {
+var _objectSap$2 = Object.freeze({
+ default: _objectSap,
+ __moduleExports: _objectSap
+});
+
+var require$$0$14 = ( _objectSap$2 && _objectSap ) || _objectSap$2;
+
+var meta = require$$0$11.onFreeze;
+
+require$$0$14('freeze', function ($freeze) {
return function freeze(it) {
- return $freeze && _isObject(it) ? $freeze(meta(it)) : it;
+ return $freeze && isObject(it) ? $freeze(meta(it)) : it;
};
});
-// 19.1.2.17 Object.seal(O)
+var meta$1 = require$$0$11.onFreeze;
-var meta$1 = _meta.onFreeze;
-
-_objectSap('seal', function ($seal) {
+require$$0$14('seal', function ($seal) {
return function seal(it) {
- return $seal && _isObject(it) ? $seal(meta$1(it)) : it;
+ return $seal && isObject(it) ? $seal(meta$1(it)) : it;
};
});
-// 19.1.2.15 Object.preventExtensions(O)
-
-var meta$2 = _meta.onFreeze;
+var meta$2 = require$$0$11.onFreeze;
-_objectSap('preventExtensions', function ($preventExtensions) {
+require$$0$14('preventExtensions', function ($preventExtensions) {
return function preventExtensions(it) {
- return $preventExtensions && _isObject(it) ? $preventExtensions(meta$2(it)) : it;
+ return $preventExtensions && isObject(it) ? $preventExtensions(meta$2(it)) : it;
};
});
-// 19.1.2.12 Object.isFrozen(O)
-
-
-_objectSap('isFrozen', function ($isFrozen) {
+require$$0$14('isFrozen', function ($isFrozen) {
return function isFrozen(it) {
- return _isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+ return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
};
});
-// 19.1.2.13 Object.isSealed(O)
-
-
-_objectSap('isSealed', function ($isSealed) {
+require$$0$14('isSealed', function ($isSealed) {
return function isSealed(it) {
- return _isObject(it) ? $isSealed ? $isSealed(it) : false : true;
+ return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
};
});
-// 19.1.2.11 Object.isExtensible(O)
-
-
-_objectSap('isExtensible', function ($isExtensible) {
+require$$0$14('isExtensible', function ($isExtensible) {
return function isExtensible(it) {
- return _isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
+ return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
};
});
-// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+var $getOwnPropertyDescriptor$1 = gOPD$1.f;
-var $getOwnPropertyDescriptor$1 = _objectGopd.f;
-
-_objectSap('getOwnPropertyDescriptor', function () {
+require$$0$14('getOwnPropertyDescriptor', function () {
return function getOwnPropertyDescriptor(it, key) {
- return $getOwnPropertyDescriptor$1(_toIobject(it), key);
+ return $getOwnPropertyDescriptor$1(toIObject(it), key);
};
});
-// 19.1.2.9 Object.getPrototypeOf(O)
-
-
-
-_objectSap('getPrototypeOf', function () {
+require$$0$14('getPrototypeOf', function () {
return function getPrototypeOf(it) {
- return _objectGpo(_toObject(it));
+ return $getPrototypeOf(toObject(it));
};
});
-// 19.1.2.14 Object.keys(O)
-
-
-
-_objectSap('keys', function () {
+require$$0$14('keys', function () {
return function keys(it) {
- return _objectKeys(_toObject(it));
+ return getKeys(toObject(it));
};
});
-// 19.1.2.7 Object.getOwnPropertyNames(O)
-_objectSap('getOwnPropertyNames', function () {
- return _objectGopnExt.f;
+require$$0$14('getOwnPropertyNames', function () {
+ return require$$1$2.f;
});
-// 19.1.3.1 Object.assign(target, source)
-
-
-_export(_export.S + _export.F, 'Object', { assign: _objectAssign });
+$export$1($export$1.S + $export$1.F, 'Object', { assign: require$$0$13 });
// 7.2.9 SameValue(x, y)
var _sameValue = Object.is || function is(x, y) {
@@ -3467,17 +4148,24 @@ var _sameValue = Object.is || function is(x, y) {
return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};
-// 19.1.3.10 Object.is(value1, value2)
-_export(_export.S, 'Object', { is: _sameValue });
-var dP$3 = _objectDp.f;
+var _sameValue$2 = Object.freeze({
+ default: _sameValue,
+ __moduleExports: _sameValue
+});
+
+var require$$0$15 = ( _sameValue$2 && _sameValue ) || _sameValue$2;
+
+$export$1($export$1.S, 'Object', { is: require$$0$15 });
+
+var dP$3 = $defineProperty.f;
var FProto = Function.prototype;
var nameRE = /^\s*function ([^ (]*)/;
var NAME = 'name';
// 19.2.4.2 name
-NAME in FProto || _descriptors && dP$3(FProto, NAME, {
+NAME in FProto || require$$0$1 && dP$3(FProto, NAME, {
configurable: true,
get: function () {
try {
@@ -3488,11 +4176,11 @@ NAME in FProto || _descriptors && dP$3(FProto, NAME, {
}
});
-_export(_export.S, 'String', {
+$export$1($export$1.S, 'String', {
// 21.1.2.4 String.raw(callSite, ...substitutions)
raw: function raw(callSite) {
- var tpl = _toIobject(callSite.raw);
- var len = _toLength(tpl.length);
+ var tpl = toIObject(callSite.raw);
+ var len = toLength(tpl.length);
var aLen = arguments.length;
var res = [];
var i = 0;
@@ -3507,7 +4195,7 @@ var fromCharCode = String.fromCharCode;
var $fromCodePoint = String.fromCodePoint;
// length should be 1, old FF problem
-_export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+$export$1($export$1.S + $export$1.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
// 21.1.2.2 String.fromCodePoint(...codePoints)
fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
var res = [];
@@ -3516,7 +4204,7 @@ _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1)
var code;
while (aLen > i) {
code = +arguments[i++];
- if (_toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
+ if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
res.push(code < 0x10000
? fromCharCode(code)
: fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
@@ -3525,12 +4213,10 @@ _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1)
}
});
-// true -> String#at
-// false -> String#codePointAt
var _stringAt = function (TO_STRING) {
return function (that, pos) {
- var s = String(_defined(that));
- var i = _toInteger(pos);
+ var s = String(defined(that));
+ var i = toInteger(pos);
var l = s.length;
var a, b;
if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
@@ -3541,10 +4227,19 @@ var _stringAt = function (TO_STRING) {
};
};
+
+
+var _stringAt$2 = Object.freeze({
+ default: _stringAt,
+ __moduleExports: _stringAt
+});
+
+var require$$0$16 = ( _stringAt$2 && _stringAt ) || _stringAt$2;
+
'use strict';
-var $at = _stringAt(false);
-_export(_export.P, 'String', {
+var $at = require$$0$16(false);
+$export$1($export$1.P, 'String', {
// 21.1.3.3 String.prototype.codePointAt(pos)
codePointAt: function codePointAt(pos) {
return $at(this, pos);
@@ -3556,38 +4251,56 @@ _export(_export.P, 'String', {
var _stringRepeat = function repeat(count) {
- var str = String(_defined(this));
+ var str = String(defined(this));
var res = '';
- var n = _toInteger(count);
+ var n = toInteger(count);
if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
return res;
};
-_export(_export.P, 'String', {
- // 21.1.3.13 String.prototype.repeat(count)
- repeat: _stringRepeat
+
+
+var _stringRepeat$2 = Object.freeze({
+ default: _stringRepeat,
+ __moduleExports: _stringRepeat
});
-// 7.2.8 IsRegExp(argument)
+var repeat = ( _stringRepeat$2 && _stringRepeat ) || _stringRepeat$2;
+$export$1($export$1.P, 'String', {
+ // 21.1.3.13 String.prototype.repeat(count)
+ repeat: repeat
+});
-var MATCH = _wks('match');
+var MATCH = wks('match');
var _isRegexp = function (it) {
var isRegExp;
- return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');
+ return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
};
-// helper for String#{startsWith, endsWith, includes}
+var _isRegexp$2 = Object.freeze({
+ default: _isRegexp,
+ __moduleExports: _isRegexp
+});
+
+var require$$1$3 = ( _isRegexp$2 && _isRegexp ) || _isRegexp$2;
var _stringContext = function (that, searchString, NAME) {
- if (_isRegexp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
- return String(_defined(that));
+ if (require$$1$3(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
+ return String(defined(that));
};
-var MATCH$1 = _wks('match');
+
+
+var _stringContext$2 = Object.freeze({
+ default: _stringContext,
+ __moduleExports: _stringContext
+});
+
+var MATCH$1 = wks('match');
var _failsIsRegexp = function (KEY) {
var re = /./;
try {
@@ -3600,7 +4313,17 @@ var _failsIsRegexp = function (KEY) {
} return true;
};
-// 21.1.3.18 String.prototype.startsWith(searchString [, position ])
+
+
+var _failsIsRegexp$2 = Object.freeze({
+ default: _failsIsRegexp,
+ __moduleExports: _failsIsRegexp
+});
+
+var context = ( _stringContext$2 && _stringContext ) || _stringContext$2;
+
+var require$$0$17 = ( _failsIsRegexp$2 && _failsIsRegexp ) || _failsIsRegexp$2;
+
'use strict';
@@ -3608,10 +4331,10 @@ var _failsIsRegexp = function (KEY) {
var STARTS_WITH = 'startsWith';
var $startsWith = ''[STARTS_WITH];
-_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
+$export$1($export$1.P + $export$1.F * require$$0$17(STARTS_WITH), 'String', {
startsWith: function startsWith(searchString /* , position = 0 */) {
- var that = _stringContext(this, searchString, STARTS_WITH);
- var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
+ var that = context(this, searchString, STARTS_WITH);
+ var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
var search = String(searchString);
return $startsWith
? $startsWith.call(that, search, index)
@@ -3619,7 +4342,6 @@ _export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
}
});
-// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
'use strict';
@@ -3627,12 +4349,12 @@ _export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
var ENDS_WITH = 'endsWith';
var $endsWith = ''[ENDS_WITH];
-_export(_export.P + _export.F * _failsIsRegexp(ENDS_WITH), 'String', {
+$export$1($export$1.P + $export$1.F * require$$0$17(ENDS_WITH), 'String', {
endsWith: function endsWith(searchString /* , endPosition = @length */) {
- var that = _stringContext(this, searchString, ENDS_WITH);
+ var that = context(this, searchString, ENDS_WITH);
var endPosition = arguments.length > 1 ? arguments[1] : undefined;
- var len = _toLength(that.length);
- var end = endPosition === undefined ? len : Math.min(_toLength(endPosition), len);
+ var len = toLength(that.length);
+ var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);
var search = String(searchString);
return $endsWith
? $endsWith.call(that, search, end)
@@ -3640,15 +4362,14 @@ _export(_export.P + _export.F * _failsIsRegexp(ENDS_WITH), 'String', {
}
});
-// 21.1.3.7 String.prototype.includes(searchString, position = 0)
'use strict';
var INCLUDES = 'includes';
-_export(_export.P + _export.F * _failsIsRegexp(INCLUDES), 'String', {
+$export$1($export$1.P + $export$1.F * require$$0$17(INCLUDES), 'String', {
includes: function includes(searchString /* , position = 0 */) {
- return !!~_stringContext(this, searchString, INCLUDES)
+ return !!~context(this, searchString, INCLUDES)
.indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
}
});
@@ -3657,7 +4378,7 @@ _export(_export.P + _export.F * _failsIsRegexp(INCLUDES), 'String', {
// 21.2.5.3 get RegExp.prototype.flags
var _flags = function () {
- var that = _anObject(this);
+ var that = anObject(this);
var result = '';
if (that.global) result += 'g';
if (that.ignoreCase) result += 'i';
@@ -3667,10 +4388,18 @@ var _flags = function () {
return result;
};
-// 21.2.5.3 get RegExp.prototype.flags()
-if (_descriptors && /./g.flags != 'g') _objectDp.f(RegExp.prototype, 'flags', {
+
+
+var _flags$2 = Object.freeze({
+ default: _flags,
+ __moduleExports: _flags
+});
+
+var require$$2 = ( _flags$2 && _flags ) || _flags$2;
+
+if (require$$0$1 && /./g.flags != 'g') $defineProperty.f(RegExp.prototype, 'flags', {
configurable: true,
- get: _flags
+ get: require$$2
});
'use strict';
@@ -3681,17 +4410,17 @@ if (_descriptors && /./g.flags != 'g') _objectDp.f(RegExp.prototype, 'flags', {
var _fixReWks = function (KEY, length, exec) {
- var SYMBOL = _wks(KEY);
- var fns = exec(_defined, SYMBOL, ''[KEY]);
+ var SYMBOL = wks(KEY);
+ var fns = exec(defined, SYMBOL, ''[KEY]);
var strfn = fns[0];
var rxfn = fns[1];
- if (_fails(function () {
+ if (require$$0(function () {
var O = {};
O[SYMBOL] = function () { return 7; };
return ''[KEY](O) != 7;
})) {
- _redefine(String.prototype, KEY, strfn);
- _hide(RegExp.prototype, SYMBOL, length == 2
+ redefine(String.prototype, KEY, strfn);
+ hide(RegExp.prototype, SYMBOL, length == 2
// 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
// 21.2.5.11 RegExp.prototype[@@split](string, limit)
? function (string, arg) { return rxfn.call(string, this, arg); }
@@ -3702,8 +4431,16 @@ var _fixReWks = function (KEY, length, exec) {
}
};
-// @@match logic
-_fixReWks('match', 1, function (defined, MATCH, $match) {
+
+
+var _fixReWks$2 = Object.freeze({
+ default: _fixReWks,
+ __moduleExports: _fixReWks
+});
+
+var require$$0$18 = ( _fixReWks$2 && _fixReWks ) || _fixReWks$2;
+
+require$$0$18('match', 1, function (defined, MATCH, $match) {
// 21.1.3.11 String.prototype.match(regexp)
return [function match(regexp) {
'use strict';
@@ -3713,8 +4450,7 @@ _fixReWks('match', 1, function (defined, MATCH, $match) {
}, $match];
});
-// @@replace logic
-_fixReWks('replace', 2, function (defined, REPLACE, $replace) {
+require$$0$18('replace', 2, function (defined, REPLACE, $replace) {
// 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
return [function replace(searchValue, replaceValue) {
'use strict';
@@ -3726,10 +4462,9 @@ _fixReWks('replace', 2, function (defined, REPLACE, $replace) {
}, $replace];
});
-// @@split logic
-_fixReWks('split', 2, function (defined, SPLIT, $split) {
+require$$0$18('split', 2, function (defined, SPLIT, $split) {
'use strict';
- var isRegExp = _isRegexp;
+ var isRegExp = require$$1$3;
var _split = $split;
var $push = [].push;
var $SPLIT = 'split';
@@ -3798,8 +4533,7 @@ _fixReWks('split', 2, function (defined, SPLIT, $split) {
}, $split];
});
-// @@search logic
-_fixReWks('search', 1, function (defined, SEARCH, $search) {
+require$$0$18('search', 1, function (defined, SEARCH, $search) {
// 21.1.3.15 String.prototype.search(regexp)
return [function search(regexp) {
'use strict';
@@ -3814,10 +4548,19 @@ _fixReWks('search', 1, function (defined, SEARCH, $search) {
var _createProperty = function (object, index, value) {
- if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));
+ if (index in object) $defineProperty.f(object, index, createDesc(0, value));
else object[index] = value;
};
+
+
+var _createProperty$2 = Object.freeze({
+ default: _createProperty,
+ __moduleExports: _createProperty
+});
+
+var createProperty = ( _createProperty$2 && _createProperty ) || _createProperty$2;
+
'use strict';
@@ -3828,27 +4571,27 @@ var _createProperty = function (object, index, value) {
-_export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {
+$export$1($export$1.S + $export$1.F * !require$$0$8(function (iter) { }), 'Array', {
// 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
- var O = _toObject(arrayLike);
+ var O = toObject(arrayLike);
var C = typeof this == 'function' ? this : Array;
var aLen = arguments.length;
var mapfn = aLen > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
var index = 0;
- var iterFn = core_getIteratorMethod(O);
+ var iterFn = getIterFn(O);
var length, result, step, iterator;
- if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
+ if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
// if object isn't iterable or it's array with default iterator - use simple case
- if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {
+ if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
- _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);
+ createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
}
} else {
- length = _toLength(O.length);
+ length = toLength(O.length);
for (result = new C(length); length > index; index++) {
- _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+ createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
}
}
result.length = index;
@@ -3861,7 +4604,7 @@ _export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {
// WebKit Array.of isn't generic
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
function F() { /* empty */ }
return !(Array.of.call(F) instanceof F);
}), 'Array', {
@@ -3870,126 +4613,113 @@ _export(_export.S + _export.F * _fails(function () {
var index = 0;
var aLen = arguments.length;
var result = new (typeof this == 'function' ? this : Array)(aLen);
- while (aLen > index) _createProperty(result, index, arguments[index++]);
+ while (aLen > index) createProperty(result, index, arguments[index++]);
result.length = aLen;
return result;
}
});
-// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
-
-
-_export(_export.P, 'Array', { copyWithin: _arrayCopyWithin });
+$export$1($export$1.P, 'Array', { copyWithin: require$$0$9 });
-_addToUnscopables('copyWithin');
+require$$1('copyWithin');
'use strict';
// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
-var $find = _arrayMethods(5);
+var $find = require$$0$7(5);
var KEY = 'find';
var forced = true;
// Shouldn't skip holes
if (KEY in []) Array(1)[KEY](function () { forced = false; });
-_export(_export.P + _export.F * forced, 'Array', {
+$export$1($export$1.P + $export$1.F * forced, 'Array', {
find: function find(callbackfn /* , that = undefined */) {
return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
-_addToUnscopables(KEY);
+require$$1(KEY);
'use strict';
// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
-var $find$1 = _arrayMethods(6);
+var $find$1 = require$$0$7(6);
var KEY$1 = 'findIndex';
var forced$1 = true;
// Shouldn't skip holes
if (KEY$1 in []) Array(1)[KEY$1](function () { forced$1 = false; });
-_export(_export.P + _export.F * forced$1, 'Array', {
+$export$1($export$1.P + $export$1.F * forced$1, 'Array', {
findIndex: function findIndex(callbackfn /* , that = undefined */) {
return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
-_addToUnscopables(KEY$1);
-
-// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
-
+require$$1(KEY$1);
-_export(_export.P, 'Array', { fill: _arrayFill });
+$export$1($export$1.P, 'Array', { fill: require$$0$5 });
-_addToUnscopables('fill');
+require$$1('fill');
-// 20.1.2.2 Number.isFinite(number)
+var _isFinite = global$1.isFinite;
-var _isFinite = _global.isFinite;
-
-_export(_export.S, 'Number', {
+$export$1($export$1.S, 'Number', {
isFinite: function isFinite(it) {
return typeof it == 'number' && _isFinite(it);
}
});
-// 20.1.2.3 Number.isInteger(number)
-
var floor$1 = Math.floor;
var _isInteger = function isInteger(it) {
- return !_isObject(it) && isFinite(it) && floor$1(it) === it;
+ return !isObject(it) && isFinite(it) && floor$1(it) === it;
};
-// 20.1.2.3 Number.isInteger(number)
-_export(_export.S, 'Number', { isInteger: _isInteger });
+var _isInteger$2 = Object.freeze({
+ default: _isInteger,
+ __moduleExports: _isInteger
+});
-// 20.1.2.5 Number.isSafeInteger(number)
+var isInteger = ( _isInteger$2 && _isInteger ) || _isInteger$2;
+$export$1($export$1.S, 'Number', { isInteger: isInteger });
var abs = Math.abs;
-_export(_export.S, 'Number', {
+$export$1($export$1.S, 'Number', {
isSafeInteger: function isSafeInteger(number) {
- return _isInteger(number) && abs(number) <= 0x1fffffffffffff;
+ return isInteger(number) && abs(number) <= 0x1fffffffffffff;
}
});
-// 20.1.2.4 Number.isNaN(number)
-
-
-_export(_export.S, 'Number', {
+$export$1($export$1.S, 'Number', {
isNaN: function isNaN(number) {
// eslint-disable-next-line no-self-compare
return number != number;
}
});
-// 20.1.2.1 Number.EPSILON
-
-
-_export(_export.S, 'Number', { EPSILON: Math.pow(2, -52) });
-
-// 20.1.2.10 Number.MIN_SAFE_INTEGER
-
+$export$1($export$1.S, 'Number', { EPSILON: Math.pow(2, -52) });
-_export(_export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
+$export$1($export$1.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
-// 20.1.2.6 Number.MAX_SAFE_INTEGER
-
-
-_export(_export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
+$export$1($export$1.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
// 20.2.2.20 Math.log1p(x)
var _mathLog1p = Math.log1p || function log1p(x) {
return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
};
-// 20.2.2.3 Math.acosh(x)
+var _mathLog1p$2 = Object.freeze({
+ default: _mathLog1p,
+ __moduleExports: _mathLog1p
+});
+
+var require$$0$19 = ( _mathLog1p$2 && _mathLog1p ) || _mathLog1p$2;
+
var sqrt = Math.sqrt;
var $acosh = Math.acosh;
-_export(_export.S + _export.F * !($acosh
+$export$1($export$1.S + $export$1.F * !($acosh
// V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
&& Math.floor($acosh(Number.MAX_VALUE)) == 710
// Tor Browser bug: Math.acosh(Infinity) -> NaN
@@ -3998,12 +4728,10 @@ _export(_export.S + _export.F * !($acosh
acosh: function acosh(x) {
return (x = +x) < 1 ? NaN : x > 94906265.62425156
? Math.log(x) + Math.LN2
- : _mathLog1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
+ : require$$0$19(x - 1 + sqrt(x - 1) * sqrt(x + 1));
}
});
-// 20.2.2.5 Math.asinh(x)
-
var $asinh = Math.asinh;
function asinh(x) {
@@ -4011,14 +4739,12 @@ function asinh(x) {
}
// Tor Browser bug: Math.asinh(0) -> -0
-_export(_export.S + _export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
-
-// 20.2.2.7 Math.atanh(x)
+$export$1($export$1.S + $export$1.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
var $atanh = Math.atanh;
// Tor Browser bug: Math.atanh(-0) -> 0
-_export(_export.S + _export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
+$export$1($export$1.S + $export$1.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
atanh: function atanh(x) {
return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
}
@@ -4030,30 +4756,30 @@ var _mathSign = Math.sign || function sign(x) {
return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
};
-// 20.2.2.9 Math.cbrt(x)
+var _mathSign$2 = Object.freeze({
+ default: _mathSign,
+ __moduleExports: _mathSign
+});
-_export(_export.S, 'Math', {
+var require$$0$20 = ( _mathSign$2 && _mathSign ) || _mathSign$2;
+
+$export$1($export$1.S, 'Math', {
cbrt: function cbrt(x) {
- return _mathSign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
+ return require$$0$20(x = +x) * Math.pow(Math.abs(x), 1 / 3);
}
});
-// 20.2.2.11 Math.clz32(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
clz32: function clz32(x) {
return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
}
});
-// 20.2.2.12 Math.cosh(x)
-
var exp = Math.exp;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
cosh: function cosh(x) {
return (exp(x = +x) + exp(-x)) / 2;
}
@@ -4070,13 +4796,16 @@ var _mathExpm1 = (!$expm1
return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
} : $expm1;
-// 20.2.2.14 Math.expm1(x)
+var _mathExpm1$2 = Object.freeze({
+ default: _mathExpm1,
+ __moduleExports: _mathExpm1
+});
-_export(_export.S + _export.F * (_mathExpm1 != Math.expm1), 'Math', { expm1: _mathExpm1 });
+var expm1 = ( _mathExpm1$2 && _mathExpm1 ) || _mathExpm1$2;
-// 20.2.2.16 Math.fround(x)
+$export$1($export$1.S + $export$1.F * (expm1 != Math.expm1), 'Math', { expm1: expm1 });
var pow = Math.pow;
var EPSILON = pow(2, -52);
@@ -4090,7 +4819,7 @@ var roundTiesToEven = function (n) {
var _mathFround = Math.fround || function fround(x) {
var $abs = Math.abs(x);
- var $sign = _mathSign(x);
+ var $sign = require$$0$20(x);
var a, result;
if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
a = (1 + EPSILON32 / EPSILON) * $abs;
@@ -4100,16 +4829,20 @@ var _mathFround = Math.fround || function fround(x) {
return $sign * result;
};
-// 20.2.2.16 Math.fround(x)
-_export(_export.S, 'Math', { fround: _mathFround });
+var _mathFround$2 = Object.freeze({
+ default: _mathFround,
+ __moduleExports: _mathFround
+});
-// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
+var require$$0$21 = ( _mathFround$2 && _mathFround ) || _mathFround$2;
+
+$export$1($export$1.S, 'Math', { fround: require$$0$21 });
var abs$1 = Math.abs;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
var sum = 0;
var i = 0;
@@ -4131,12 +4864,10 @@ _export(_export.S, 'Math', {
}
});
-// 20.2.2.18 Math.imul(x, y)
-
var $imul = Math.imul;
// some WebKit versions fails with big numbers, some has wrong arity
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
}), 'Math', {
imul: function imul(x, y) {
@@ -4149,67 +4880,46 @@ _export(_export.S + _export.F * _fails(function () {
}
});
-// 20.2.2.20 Math.log1p(x)
-
+$export$1($export$1.S, 'Math', { log1p: require$$0$19 });
-_export(_export.S, 'Math', { log1p: _mathLog1p });
-
-// 20.2.2.21 Math.log10(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
log10: function log10(x) {
return Math.log(x) * Math.LOG10E;
}
});
-// 20.2.2.22 Math.log2(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
log2: function log2(x) {
return Math.log(x) / Math.LN2;
}
});
-// 20.2.2.28 Math.sign(x)
-
-
-_export(_export.S, 'Math', { sign: _mathSign });
-
-// 20.2.2.30 Math.sinh(x)
-
+$export$1($export$1.S, 'Math', { sign: require$$0$20 });
var exp$1 = Math.exp;
// V8 near Chromium 38 has a problem with very small numbers
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
return !Math.sinh(-2e-17) != -2e-17;
}), 'Math', {
sinh: function sinh(x) {
return Math.abs(x = +x) < 1
- ? (_mathExpm1(x) - _mathExpm1(-x)) / 2
+ ? (expm1(x) - expm1(-x)) / 2
: (exp$1(x - 1) - exp$1(-x - 1)) * (Math.E / 2);
}
});
-// 20.2.2.33 Math.tanh(x)
-
-
var exp$2 = Math.exp;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
tanh: function tanh(x) {
- var a = _mathExpm1(x = +x);
- var b = _mathExpm1(-x);
+ var a = expm1(x = +x);
+ var b = expm1(-x);
return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp$2(x) + exp$2(-x));
}
});
-// 20.2.2.34 Math.trunc(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
trunc: function trunc(it) {
return (it > 0 ? Math.floor : Math.ceil)(it);
}
@@ -4218,21 +4928,21 @@ _export(_export.S, 'Math', {
'use strict';
// https://github.com/tc39/Array.prototype.includes
-var $includes = _arrayIncludes(true);
+var $includes = require$$0$2(true);
-_export(_export.P, 'Array', {
+$export$1($export$1.P, 'Array', {
includes: function includes(el /* , fromIndex = 0 */) {
return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
}
});
-_addToUnscopables('includes');
+require$$1('includes');
-var isEnum$1 = _objectPie.f;
+var isEnum$1 = require$$0$6.f;
var _objectToArray = function (isEntries) {
return function (it) {
- var O = _toIobject(it);
- var keys = _objectKeys(O);
+ var O = toIObject(it);
+ var keys = getKeys(O);
var length = keys.length;
var i = 0;
var result = [];
@@ -4243,70 +4953,81 @@ var _objectToArray = function (isEntries) {
};
};
-// https://github.com/tc39/proposal-object-values-entries
-var $values = _objectToArray(false);
-_export(_export.S, 'Object', {
+var _objectToArray$2 = Object.freeze({
+ default: _objectToArray,
+ __moduleExports: _objectToArray
+});
+
+var require$$0$22 = ( _objectToArray$2 && _objectToArray ) || _objectToArray$2;
+
+var $values = require$$0$22(false);
+
+$export$1($export$1.S, 'Object', {
values: function values(it) {
return $values(it);
}
});
-// https://github.com/tc39/proposal-object-values-entries
-
-var $entries = _objectToArray(true);
+var $entries = require$$0$22(true);
-_export(_export.S, 'Object', {
+$export$1($export$1.S, 'Object', {
entries: function entries(it) {
return $entries(it);
}
});
-// https://github.com/tc39/proposal-object-getownpropertydescriptors
-
-
-
-
-
-
-_export(_export.S, 'Object', {
+$export$1($export$1.S, 'Object', {
getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
- var O = _toIobject(object);
- var getDesc = _objectGopd.f;
- var keys = _ownKeys(O);
+ var O = toIObject(object);
+ var getDesc = gOPD$1.f;
+ var keys = ownKeys(O);
var result = {};
var i = 0;
var key, desc;
while (keys.length > i) {
desc = getDesc(O, key = keys[i++]);
- if (desc !== undefined) _createProperty(result, key, desc);
+ if (desc !== undefined) createProperty(result, key, desc);
}
return result;
}
});
-// https://github.com/tc39/proposal-string-pad-start-end
-
-
-
-
var _stringPad = function (that, maxLength, fillString, left) {
- var S = String(_defined(that));
+ var S = String(defined(that));
var stringLength = S.length;
var fillStr = fillString === undefined ? ' ' : String(fillString);
- var intMaxLength = _toLength(maxLength);
+ var intMaxLength = toLength(maxLength);
if (intMaxLength <= stringLength || fillStr == '') return S;
var fillLen = intMaxLength - stringLength;
- var stringFiller = _stringRepeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
+ var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
return left ? stringFiller + S : S + stringFiller;
};
-var navigator$1 = _global.navigator;
+
+
+var _stringPad$2 = Object.freeze({
+ default: _stringPad,
+ __moduleExports: _stringPad
+});
+
+var navigator$1 = global$1.navigator;
var _userAgent = navigator$1 && navigator$1.userAgent || '';
+
+
+var _userAgent$2 = Object.freeze({
+ default: _userAgent,
+ __moduleExports: _userAgent
+});
+
+var $pad = ( _stringPad$2 && _stringPad ) || _stringPad$2;
+
+var userAgent = ( _userAgent$2 && _userAgent ) || _userAgent$2;
+
'use strict';
// https://github.com/tc39/proposal-string-pad-start-end
@@ -4314,9 +5035,9 @@ var _userAgent = navigator$1 && navigator$1.userAgent || '';
// https://github.com/zloirock/core-js/issues/280
-_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
+$export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
padStart: function padStart(maxLength /* , fillString = ' ' */) {
- return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
}
});
@@ -4327,18 +5048,14 @@ _export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAg
// https://github.com/zloirock/core-js/issues/280
-_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
+$export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
- return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
}
});
-// ie9- setTimeout & setInterval additional parameters fix
-
-
-
var slice = [].slice;
-var MSIE = /MSIE .\./.test(_userAgent); // <- dirty ie9- check
+var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
var wrap$1 = function (set) {
return function (fn, time /* , ...args */) {
var boundArgs = arguments.length > 2;
@@ -4349,19 +5066,19 @@ var wrap$1 = function (set) {
} : fn, time);
};
};
-_export(_export.G + _export.B + _export.F * MSIE, {
- setTimeout: wrap$1(_global.setTimeout),
- setInterval: wrap$1(_global.setInterval)
+$export$1($export$1.G + $export$1.B + $export$1.F * MSIE, {
+ setTimeout: wrap$1(global$1.setTimeout),
+ setInterval: wrap$1(global$1.setInterval)
});
-_export(_export.G + _export.B, {
- setImmediate: _task.set,
- clearImmediate: _task.clear
+$export$1($export$1.G + $export$1.B, {
+ setImmediate: $task.set,
+ clearImmediate: $task.clear
});
-var ITERATOR$4 = _wks('iterator');
-var TO_STRING_TAG = _wks('toStringTag');
-var ArrayValues = _iterators.Array;
+var ITERATOR$4 = wks('iterator');
+var TO_STRING_TAG = wks('toStringTag');
+var ArrayValues = Iterators.Array;
var DOMIterables = {
CSSRuleList: true, // TODO: Not spec compliant, should be false.
@@ -4397,17 +5114,17 @@ var DOMIterables = {
TouchList: false
};
-for (var collections = _objectKeys(DOMIterables), i$1 = 0; i$1 < collections.length; i$1++) {
+for (var collections = getKeys(DOMIterables), i$1 = 0; i$1 < collections.length; i$1++) {
var NAME$1 = collections[i$1];
var explicit = DOMIterables[NAME$1];
- var Collection = _global[NAME$1];
+ var Collection = global$1[NAME$1];
var proto = Collection && Collection.prototype;
var key;
if (proto) {
- if (!proto[ITERATOR$4]) _hide(proto, ITERATOR$4, ArrayValues);
- if (!proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME$1);
- _iterators[NAME$1] = ArrayValues;
- if (explicit) for (key in es6_array_iterator) if (!proto[key]) _redefine(proto, key, es6_array_iterator[key], true);
+ if (!proto[ITERATOR$4]) hide(proto, ITERATOR$4, ArrayValues);
+ if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME$1);
+ Iterators[NAME$1] = ArrayValues;
+ if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
}
}
@@ -6663,7 +7380,7 @@ var utils = {
// Force repaint of element
repaint: function repaint(element) {
- window.setTimeout(function () {
+ setTimeout(function () {
utils.toggleHidden(element, true);
element.offsetHeight; // eslint-disable-line
utils.toggleHidden(element, false);
@@ -6675,7 +7392,6 @@ var utils = {
// Plyr support checks
// ==========================================================================
-// Check for feature support
var support = {
// Basic support
audio: 'canPlayType' in document.createElement('audio'),
@@ -7193,7 +7909,6 @@ var Storage = function () {
/* global google */
-// Build the default tag URL
var getTagUrl = function getTagUrl() {
var params = {
AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',
@@ -7825,7 +8540,7 @@ var Ads = function () {
this.player.debug.log('Safety timer invoked from: ' + from);
- this.safetyTimer = window.setTimeout(function () {
+ this.safetyTimer = setTimeout(function () {
_this10.cancel();
_this10.clearSafetyTimer('startSafetyTimer()');
}, time);
@@ -7854,7 +8569,6 @@ var Ads = function () {
// Plyr Event Listeners
// ==========================================================================
-// Sniff out the browser
var browser$2 = utils.getBrowser();
var listeners = {
@@ -8029,7 +8743,7 @@ var listeners = {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
- window.setTimeout(function () {
+ setTimeout(function () {
utils.toggleClass(utils.getFocusElement(), _this.config.classNames.tabFocus, true);
}, 0);
});
@@ -8432,6 +9146,8 @@ var ui = {
// Setup the UI
build: function build() {
+ var _this = this;
+
// Re-attach media element listeners
// TODO: Use event bubbling
listeners.media.call(this);
@@ -8492,7 +9208,9 @@ var ui = {
this.ready = true;
// Ready event at end of execution stack
- utils.dispatchEvent.call(this, this.media, 'ready');
+ setTimeout(function () {
+ utils.dispatchEvent.call(_this, _this.media, 'ready');
+ }, 0);
// Set the title
ui.setTitle.call(this);
@@ -8552,7 +9270,7 @@ var ui = {
// Check if media is loading
checkLoading: function checkLoading(event) {
- var _this = this;
+ var _this2 = this;
this.loading = ['stalled', 'waiting'].includes(event.type);
@@ -8562,17 +9280,17 @@ var ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(function () {
// Toggle container class hook
- utils.toggleClass(_this.elements.container, _this.config.classNames.loading, _this.loading);
+ utils.toggleClass(_this2.elements.container, _this2.config.classNames.loading, _this2.loading);
// Show controls if loading, hide if done
- _this.toggleControls(_this.loading);
+ _this2.toggleControls(_this2.loading);
}, this.loading ? 250 : 0);
},
// Check if media failed to load
checkFailed: function checkFailed() {
- var _this2 = this;
+ var _this3 = this;
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState
this.failed = this.media.networkState === 3;
@@ -8588,10 +9306,10 @@ var ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(function () {
// Toggle container class hook
- utils.toggleClass(_this2.elements.container, _this2.config.classNames.loading, _this2.loading);
+ utils.toggleClass(_this3.elements.container, _this3.config.classNames.loading, _this3.loading);
// Show controls if loading, hide if done
- _this2.toggleControls(_this2.loading);
+ _this3.toggleControls(_this3.loading);
}, this.loading ? 250 : 0);
},
@@ -8650,7 +9368,7 @@ var ui = {
// Update <progress> elements
updateProgress: function updateProgress(event) {
- var _this3 = this;
+ var _this4 = this;
if (!this.supported.ui || !utils.is.event(event)) {
return;
@@ -8676,12 +9394,12 @@ var ui = {
case 'playing':
case 'progress':
value = function () {
- var buffered = _this3.media.buffered;
+ var buffered = _this4.media.buffered;
if (buffered && buffered.length) {
// HTML5
- return utils.getPercentage(buffered.end(0), _this3.duration);
+ return utils.getPercentage(buffered.end(0), _this4.duration);
} else if (utils.is.number(buffered)) {
// YouTube returns between 0 and 1
return buffered * 100;
@@ -8766,7 +9484,6 @@ var ui = {
// Plyr controls
// ==========================================================================
-// Sniff out the browser
var browser$1 = utils.getBrowser();
var controls = {
@@ -10368,17 +11085,14 @@ var youtube = {
// Create a faux HTML5 API using the YouTube API
player.media.play = function () {
instance.playVideo();
- player.media.paused = false;
};
player.media.pause = function () {
instance.pauseVideo();
- player.media.paused = true;
};
player.media.stop = function () {
instance.stopVideo();
- player.media.paused = true;
};
player.media.duration = instance.getDuration();
@@ -10507,7 +11221,7 @@ var youtube = {
}, 200);
// Rebuild UI
- window.setTimeout(function () {
+ setTimeout(function () {
return ui.build.call(player);
}, 50);
},
@@ -10910,7 +11624,7 @@ var vimeo = {
});
// Rebuild UI
- window.setTimeout(function () {
+ setTimeout(function () {
return ui.build.call(player);
}, 0);
}
@@ -10920,7 +11634,6 @@ var vimeo = {
// Plyr Media
// ==========================================================================
-// Sniff out the browser
var browser$3 = utils.getBrowser();
var media = {
@@ -11691,15 +12404,7 @@ var Plyr$1 = function () {
// If toggle is false or if we're playing (regardless of toggle),
// then set the timer to hide the controls
if (!show || this.playing) {
- this.timers.controls = window.setTimeout(function () {
- /* this.debug.warn({
- pressed: this.elements.controls.pressed,
- hover: this.elements.controls.pressed,
- playing: this.playing,
- paused: this.paused,
- loading: this.loading,
- }); */
-
+ this.timers.controls = setTimeout(function () {
// If the mouse is over the controls (and not entering fullscreen), bail
if ((_this2.elements.controls.pressed || _this2.elements.controls.hover) && !isEnterFullscreen) {
return;
@@ -11843,7 +12548,7 @@ var Plyr$1 = function () {
}
// Vimeo does not always return
- window.setTimeout(done, 200);
+ setTimeout(done, 200);
break;
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index b81573ca..8e29964b 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","VIEW","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","process","cel","html","Promise","isNode","newPromiseCapability","TypeError","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","$defineProperty","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","this","CustomEvent","providers","types","defaults","window","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","event","err","src","first","getElementsByTagName","parentNode","insertBefore","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","setTimeout","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisment","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","getKeyCode","which","handleKey","code","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n window.setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = window.setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n utils.dispatchEvent.call(this, this.media, 'ready');\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n player.media.paused = false;\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n player.media.paused = true;\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n player.media.paused = true;\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = window.setTimeout(() => {\n /* this.debug.warn({\n pressed: this.elements.controls.pressed,\n hover: this.elements.controls.pressed,\n playing: this.playing,\n paused: this.paused,\n loading: this.loading,\n }); */\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n window.setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["document","require$$0","require$$1","require$$2","dP","global","VIEW","min","DESCRIPTORS","toIndex","$typed","arrayFill","redefineAll","fails","SPECIES","buffer","$export","TAG","IE_PROTO","PROTOTYPE","ITERATOR","speciesConstructor","ArrayProto","create","descriptor","getPrototypeOf","addToUnscopables","pIE","LIBRARY","require$$3","require$$4","ctx","require$$7","anInstance","require$$8","require$$9","hide","require$$10","require$$11","toInteger","require$$12","toLength","require$$13","toAbsoluteIndex","require$$15","toPrimitive","require$$16","has","require$$17","classof","require$$18","isObject","require$$19","toObject","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","uid","require$$26","wks","require$$27","require$$28","require$$29","require$$30","require$$31","Iterators","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","setSpecies","meta","$iterDetect","createArrayMethod","id","$has","assign","gOPD","getProto","Reflect","gOPN","process","Promise","isNode","newPromiseCapability","TypeError","newPromiseCapabilityModule","require$$5","require$$6","toString","$GOPD","$DP","gOPNExt","shared","ObjectProto","USE_NATIVE","$fails","$defineProperty","$keys","$getOwnPropertyDescriptor","isRegExp","MATCH","$find","KEY","forced","floor","log1p","sign","$expm1","abs","exp","isEnum","navigator","wrap","i","NAME","this","CustomEvent","providers","types","defaults","window","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisment","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","setTimeout","getKeyCode","which","handleKey","code","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index 74423c04..898396ca 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=function(e){return"object"==typeof e?null!==e:"function"==typeof e},o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},s=function(e){try{return!!e()}catch(e){return!0}},a=!s(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},d=!a&&!s(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),f=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},h=Object.defineProperty,p={f:a?Object.defineProperty:function(e,t,n){if(o(e),t=f(t,!0),o(n),d)try{return h(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=a?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},v={}.hasOwnProperty,y=function(e,t){return v.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,s){var a="function"==typeof r;a&&(y(r,"name")||m(r,"name",i)),e[i]!==r&&(a&&(y(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:s?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,s,a,l,c=e&A.F,u=e&A.G,d=e&A.S,f=e&A.P,h=e&A.B,p=u?n:d?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),v=g.prototype||(g.prototype={});for(o in u&&(r=t),r)a=((s=!c&&p&&void 0!==p[o])?p:r)[o],l=h&&s?T(a,n):f&&"function"==typeof a?T(Function.call,a):a,p&&k(p,o,a,e&A.U),g[o]!=a&&m(g,o,l),f&&v[o]!=a&&(v[o]=a)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),L=!(!n.ArrayBuffer||!n.DataView),M=L,N=0,O="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");N<9;)(_=n[O[N++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):M=!1;var j={ABV:L,CONSTR:M,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,D=Math.floor,q=function(e){return isNaN(e=+e)?0:(e>0?D:R)(e)},V=Math.min,U=function(e){return e>0?V(q(e),9007199254740991):0},B=function(e){if(void 0===e)return 0;var t=q(e),n=U(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},G=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},Y=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},z=function(e){return G(Y(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=q(e))<0?K(e+t,0):Q(e,t)},X=function(e){return function(t,n,i){var r,o=z(t),s=U(o.length),a=J(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},$=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return $[e]||($[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=X(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=z(e),r=0,o=[];for(n in i)n!=ie&&y(i,n)&&o.push(n);for(;t.length>r;)y(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),se=oe.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return re(e,se)}},le=function(e){return Object(Y(e))},ce=function(e){for(var t=le(this),n=U(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:J(o,n);s>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),de=p.f,fe=ue("toStringTag"),he=function(e,t,n){e&&!y(e=n?e:e.prototype,fe)&&de(e,fe,{configurable:!0,value:t})},pe=t(function(e,t){var i=ae.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,d=n.Math,f=n.RangeError,h=n.Infinity,g=c,v=d.abs,y=d.pow,b=d.floor,w=d.log,E=d.LN2,k=a?"_b":"buffer",S=a?"_l":"byteLength",T=a?"_o":"byteOffset";function A(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,u=23===t?y(2,-24)-y(2,-77):0,d=0,f=e<0||0===e&&1/e<0?1:0;for((e=v(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=y(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*y(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*y(2,t),i+=c):(r=e*y(2,c-1)*y(2,t),i=0));t>=8;s[d++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[d++]=255&i,i/=256,a-=8);return s[--d]|=128*f,s}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;a>0;u=256*u+e[l],l--,a-=8);for(i=u&(1<<-a)-1,u>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===u)u=1-s;else{if(u===o)return i?NaN:c?-h:h;i+=y(2,t),u-=s}return(c?-1:1)*i*y(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function L(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function M(e){return A(e,52,8)}function N(e){return A(e,23,4)}function O(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=B(+n);if(r+t>e[S])throw f(l);var o=e[k]._b,s=r+e[T],a=o.slice(s,s+t);return i?a:a.reverse()}function D(e,t,n,i,r,o){var s=B(+n);if(s+t>e[S])throw f(l);for(var a=e[k]._b,c=s+e[T],u=i(+r),d=0;d<t;d++)a[c+d]=u[o?d:t-d-1]}if(j.ABV){if(!s(function(){c(1)})||!s(function(){new c(-1)})||s(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var V,H=(c=function(e){return F(this,c),new g(B(e))})[o]=g[o],W=i(g),G=0;W.length>G;)(V=W[G++])in c||m(c,V,g[V]);H.constructor=c}var Y=new u(new c(2)),z=u[o].setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||I(u[o],{setInt8:function(e,t){z.call(this,e,t<<24>>24)},setUint8:function(e,t){z.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=B(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=q(t);if(r<0||r>i)throw f("Wrong offset!");if(r+(n=void 0===n?i-r:U(n))>i)throw f("Wrong length!");this[k]=e,this[T]=r,this[S]=n},a&&(O(c,"byteLength","_l"),O(u,"buffer","_b"),O(u,"byteLength","_l"),O(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){D(this,1,e,P,t)},setUint8:function(e,t){D(this,1,e,P,t)},setInt16:function(e,t){D(this,2,e,x,t,arguments[2])},setUint16:function(e,t){D(this,2,e,x,t,arguments[2])},setInt32:function(e,t){D(this,4,e,L,t,arguments[2])},setUint32:function(e,t){D(this,4,e,L,t,arguments[2])},setFloat32:function(e,t){D(this,4,e,N,t,arguments[2])},setFloat64:function(e,t){D(this,8,e,M,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||void 0==(n=o(i)[ge])?t:S(n)},ve=ue("species"),ye=function(e){var t=n[e];a&&t&&!t[ve]&&p.f(t,ve,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Se=we.prototype.slice,Te=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Te in e}}),C(C.P+C.U+C.F*s(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),s=new(me(this,we))(U(r-i)),a=new Ee(this),l=new Ee(s),c=0;i<r;)l.setUint8(c++,a.getUint8(i++));return s}}),ye("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Le=Array.prototype,Me=function(e){return void 0!==e&&(Pe.Array===e||Le[xe]===e)},Ne=Object.keys||function(e){return re(e,oe)},Oe=a?Object.defineProperties:function(e,t){o(e);for(var n,i=Ne(t),r=i.length,s=0;r>s;)p.f(e,n=i[s++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},De=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),De=e.F;n--;)delete De.prototype[oe[n]];return De()},qe=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=De(),void 0===t?n:Oe(n,t)},Ve=te("IE_PROTO"),Ue=Object.prototype,Be=Object.getPrototypeOf||function(e){return e=le(e),y(e,Ve)?e[Ve]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ue:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(void 0!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},Ge=Array.isArray||function(e){return"Array"==W(e)},Ye=ue("species"),ze=function(e,t){return new(function(e){var t;return Ge(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Ge(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ye])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ze;return function(t,c,u){for(var d,f,h=le(t),p=G(h),g=T(c,u,3),m=U(p.length),v=0,y=n?l(t,m):i?l(t,0):void 0;m>v;v++)if((a||v in p)&&(f=g(d=p[v],v,h),e))if(n)y[v]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return v;case 2:y.push(d)}else if(o)return!1;return s?-1:r||o?o:y}},Qe=ue("unscopables"),Je=Array.prototype;void 0==Je[Qe]&&m(Je,Qe,{});var Xe=function(e){Je[Qe][e]=!0},$e=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=qe(Ze,{next:g(1,n)}),he(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,s){et(n,t,i);var a,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],v=!nt&&g||u(r),b=r?f?u("entries"):v:void 0,w="Array"==t&&p.entries||g;if(w&&(c=Be(w.call(new e)))!==Object.prototype&&c.next&&(he(c,d,!0),y(c,tt)||m(c,tt,it)),f&&g&&"values"!==g.name&&(h=!0,v=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,v),Pe[t]=v,Pe[d]=it,r)if(a={values:f?v:u("values"),keys:o?v:u("keys"),entries:b},s)for(l in a)l in p||k(p,l,a[l]);else C(C.P+C.F*(nt||h),t,a);return a},ot=rt(Array,"Array",function(e,t){this._t=z(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$e(1)):$e(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,Xe("keys"),Xe("values"),Xe("entries");var st=ue("iterator"),at=!1;try{[7][st]().return=function(){at=!0}}catch(e){}var lt=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[st]();r.next=function(){return{done:n=!0}},i[st]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=U(n.length),r=J(e,i),o=J(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:J(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},dt=Object.getOwnPropertyDescriptor,ft={f:a?dt:function(e,t){if(e=z(e),t=f(t,!0),d)try{return dt(e,t)}catch(e){}if(y(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(a){var t=n,i=s,o=C,l=j,c=pe,u=T,d=F,h=g,v=m,b=I,w=q,k=U,S=B,A=J,_=f,P=y,x=Ce,L=r,M=le,N=Me,O=qe,R=Be,D=ae.f,V=We,H=E,W=ue,G=Ke,Y=X,z=me,K=ot,Q=Pe,$=lt,Z=ye,ee=ce,te=ct,ne=p,ie=ft,re=ne.f,oe=ie.f,se=t.RangeError,de=t.TypeError,fe=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ve=c.DataView,be=G(0),we=G(2),Ee=G(3),ke=G(4),Se=G(5),Te=G(6),Ae=Y(!0),_e=Y(!1),xe=K.values,Le=K.keys,Ne=K.entries,Oe=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,De=he.slice,Ve=he.toString,Ue=he.toLocaleString,He=W("iterator"),Ge=W("toStringTag"),Ye=H("typed_constructor"),ze=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,Xe=l.VIEW,$e=G(1,function(e,t){return it(z(e,e[ze]),t)}),Ze=i(function(){return 1===new fe(new Uint16Array([1]).buffer)[0]}),et=!!fe&&!!fe.prototype.set&&i(function(){new fe(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw se("Wrong offset!");return n},nt=function(e){if(L(e)&&Je in e)return e;throw de(e+" is not a typed array!")},it=function(e,t){if(!(L(e)&&Ye in e))throw de("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return st(z(e,e[ze]),t)},st=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},at=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,s,a=M(e),l=arguments.length,c=l>1?arguments[1]:void 0,d=void 0!==c,f=V(a);if(void 0!=f&&!N(f)){for(s=f.call(a),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);a=i}for(d&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(a.length),r=it(this,n);n>t;t++)r[t]=d?c(a[t],t):a[t];return r},dt=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!fe&&i(function(){Ue.call(new fe(1))}),pt=function(){return Ue.apply(ht?De.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Oe.apply(nt(this),arguments)},map:function(e){return $e(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(z(n,n[ze]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,De.call(nt(this),e,t))},vt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=M(e),r=k(i.length),o=0;if(r+t>n)throw se("Wrong length!");for(;o<r;)this[t+o]=i[o++]},yt={entries:function(){return Ne.call(nt(this))},keys:function(){return Le.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return L(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&L(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ve.call({})})&&(Ve=Ue=function(){return Fe.call(this)});var kt=b({},gt);b(kt,yt),v(kt,He,yt.values),b(kt,{slice:mt,set:vt,constructor:function(){},toString:Ve,toLocaleString:pt}),at(kt,"buffer","b"),at(kt,"byteOffset","o"),at(kt,"byteLength","l"),at(kt,"length","e"),re(kt,Ge,{get:function(){return this[Je]}}),e.exports=function(e,n,r,s){var a=e+((s=!!s)?"Clamped":"")+"Array",c="get"+e,u="set"+e,f=t[a],h=f||{},p=f&&R(f),g=!f||!l.ABV,m={},y=f&&f.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;s&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(f=r(function(e,t,i,r){d(e,f,a,"_d");var o,s,l,c,u=0,h=0;if(L(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?st(f,t):ut.call(f,t);o=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw se("Wrong length!");if((s=p-h)<0)throw se("Wrong length!")}else if((s=k(r)*n)+h>p)throw se("Wrong length!");l=s/n}else l=S(t),o=new ge(s=l*n);for(v(e,"_d",{b:o,o:h,l:s,e:l,v:new ve(o)});u<l;)b(e,u++)}),y=f.prototype=O(kt),v(y,"constructor",f)):i(function(){f(1)})&&i(function(){new f(-1)})&&$(function(e){new f,new f(null),new f(1.5),new f(e)},!0)||(f=r(function(e,t,i,r){var o;return d(e,f,a),L(t)?t instanceof ge||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?st(f,t):ut.call(f,t):new h(S(t))}),be(p!==Function.prototype?D(h).concat(D(p)):D(h),function(e){e in f||v(f,e,h[e])}),f.prototype=y,y.constructor=f);var w=y[He],E=!!w&&("values"==w.name||void 0==w.name),T=yt.values;v(f,Ye,!0),v(y,Je,a),v(y,Xe,!0),v(y,ze,f),(s?new f(1)[Ge]==a:Ge in y)||re(y,Ge,{get:function(){return a}}),m[a]=f,o(o.G+o.W+o.F*(f!=h),m),o(o.S,a,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){h.of.call(f,1)}),a,{from:ut,of:dt}),"BYTES_PER_ELEMENT"in y||v(y,"BYTES_PER_ELEMENT",n),o(o.P,a,gt),Z(a),o(o.P+o.F*et,a,{set:vt}),o(o.P+o.F*!E,a,yt),y.toString!=Ve&&(y.toString=Ve),o(o.P+o.F*i(function(){new f(1).slice()}),a,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new f([1,2]).toLocaleString()})||!i(function(){y.toLocaleString.call([1,2])})),a,{toLocaleString:pt}),Q[a]=E?w:T,E||v(y,He,T)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,s,a){var l,c,u,d,f=a?function(){return e}:We(e),h=T(r,s,i?2:1),p=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(Me(f)){for(l=U(e.length);l>p;p++)if((d=i?h(o(c=e[p])[0],c[1]):h(e[p]))===t||d===n)return d}else for(u=f.call(e);!(c=u.next()).done;)if((d=pt(u,h,c.value,i))===t||d===n)return d};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},a=!s(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!y(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!y(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return a&&c.NEED&&o(e)&&!y(e,t)&&l(e),e}}}),vt=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},yt=p.f,bt=mt.fastKey,wt=a?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=qe(null),e._f=void 0,e._l=void 0,e[wt]=0,void 0!=o&&gt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=vt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=vt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){vt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(vt(this,t),e)}}),a&&yt(r.prototype,"size",{get:function(){return vt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=vt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?$e(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,$e(1))},n?"entries":"values",!n,!0),ye(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Tt={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},At=Tt.set,_t=function(e,t,i,o,a,l){var c=n[e],u=c,d=a?"set":"add",f=u&&u.prototype,h={},p=function(e){var t=f[e];k(f,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||f.forEach&&!s(function(){(new u).entries().next()}))){var g=new u,m=g[d](l?{}:-0,1)!=g,v=s(function(){g.has(1)}),y=lt(function(e){new u(e)}),b=!l&&s(function(){for(var e=new u,t=5;t--;)e[d](t,t);return!e.has(-0)});y||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return void 0!=n&&gt(n,a,i[d],i),i})).prototype=f,f.constructor=u),(v||b)&&(p("delete"),p("has"),a&&p("get")),(b||m)&&p(d),l&&f.clear&&delete f.clear}else u=o.getConstructor(t,e,a,d),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||o.setStrong(u,e,a),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(vt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(vt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(vt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||s(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,s=ut.f;i>r;)for(var a,l=G(arguments[r++]),c=o?Ne(l).concat(o(l)):Ne(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Pt,Lt=mt.getWeak,Mt=Ke(5),Nt=Ke(6),Ot=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Mt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Nt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,void 0!=r&&gt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Lt(e);return!0===n?jt(vt(this,t)).delete(e):n&&y(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Lt(e);return!0===n?jt(vt(this,t)).has(e):n&&y(n,this._i)}}),o},def:function(e,t,n){var i=Lt(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,a=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?a(vt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(vt(this,"WeakMap"),e,t)}},d=e.exports=_t("WeakMap",c,u,Rt,!0,!0);s(function(){return 7!=(new d).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=d.prototype,i=n[e];k(n,e,function(n,s){if(r(n)&&!o(n)){this._f||(this._f=new t);var a=this._f[e](n,s);return"set"==e?this:a}return i.call(this,n,s)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(vt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var Dt=(n.Reflect||{}).apply,qt=Function.apply;C(C.S+C.F*!s(function(){Dt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return Dt?Dt(i,t,r):qt.call(i,t,r)}});var Vt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Ut=[].slice,Bt={},Ht=Function.bind||function(e){var t=S(this),n=Ut.call(arguments,1),i=function(){var r=n.concat(Ut.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Bt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Bt[t]=Function("F,a","return new F("+i.join(",")+")")}return Bt[t](e,n)}(t,r.length,r):Vt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,Gt=s(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Yt=!s(function(){Wt(function(){})});C(C.S+C.F*(Gt||Yt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(Yt&&!Gt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var s=n.prototype,a=qe(r(s)?s:Object.prototype),l=Function.apply.call(e,a,t);return r(l)?l:a}}),C(C.S+C.F*s(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=f(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var zt=ft.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=zt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,s,a=arguments.length<3?t:arguments[2];return o(t)===a?t[n]:(i=ft.f(t,n))?y(i,"value")?i.value:void 0!==i.get?i.get.call(a):void 0:r(s=Be(t))?e(s,n,a):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Be(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=ae.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var Xt=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return Xt&&Xt(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var s,a,l=arguments.length<4?t:arguments[3],c=ft.f(o(t),n);if(!c){if(r(a=Be(t)))return e(a,n,i,l);c=g(0)}return y(c,"value")?!(!1===c.writable||!r(l)||((s=ft.f(l,n)||g(0)).value=i,p.f(l,n,s),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Tt&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){Tt.check(e,t);try{return Tt.set(e,t),!0}catch(e){return!1}}});var $t,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,sn=n.Dispatch,an=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++an]=function(){Vt("function"==typeof e?e:Function(e),t)},$t(an),an},rn=function(e){delete ln[e]},"process"==W(tn)?$t=function(e){tn.nextTick(T(cn,e,1))}:sn&&sn.now?$t=function(e){sn.now(T(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,$t=T(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?($t=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):$t="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(T(cn,e,1),0)});var dn={set:nn,clear:rn},fn=dn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);var vn,yn,bn,wn,En={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=dn.set,Tn=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){fn.call(n,r)};else{var s=!0,a=document.createTextNode("");new hn(r).observe(a,{characterData:!0}),i=function(){a.data=s=!s}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,_n=n.process,Cn=n.Promise,Pn="process"==Ce(_n),xn=function(){},Ln=yn=En.f,Mn=!!function(){try{var e=Cn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Pn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},On=function(e,t){if(!e._n){e._n=!0;var n=e._c;Tn(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&Fn(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(o=Nn(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&jn(e)})}},jn=function(e){Sn.call(n,function(){var t,i,r,o=e._v,s=In(e);if(s&&(t=kn(function(){Pn?_n.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Pn||In(e)?2:1),e._a=void 0,s&&t.e)throw t.v})},In=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Sn.call(n,function(){var t;Pn?_n.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Rn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),On(t,!0))},Dn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?Tn(function(){var i={_w:n,_d:!1};try{t.call(e,T(Dn,i,1),T(Rn,i,1))}catch(e){Rn.call(i,e)}}):(n._v=e,n._s=1,On(n,!1))}catch(e){Rn.call({_w:n,_d:!1},e)}}};Mn||(Cn=function(e){F(this,Cn,"Promise","_h"),S(e),vn.call(this);try{e(T(Dn,this,1),T(Rn,this,1))}catch(e){Rn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Cn.prototype,{then:function(e,t){var n=Ln(me(this,Cn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Pn?_n.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&On(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new vn;this.promise=e,this.resolve=T(Dn,e,1),this.reject=T(Rn,e,1)},En.f=Ln=function(e){return e===Cn||e===wn?new bn(e):yn(e)}),C(C.G+C.W+C.F*!Mn,{Promise:Cn}),he(Cn,"Promise"),ye("Promise"),wn=i.Promise,C(C.S+C.F*!Mn,"Promise",{reject:function(e){var t=Ln(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!Mn,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(Mn&&lt(function(e){Cn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Ln(t),i=n.resolve,r=n.reject,o=kn(function(){var n=[],o=0,s=1;gt(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Ln(t),i=n.reject,r=kn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var qn={f:ue},Vn=p.f,Un=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:qn.f(e)})},Bn=ae.f,Hn={}.toString,Wn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return Wn&&"[object Window]"==Hn.call(e)?function(e){try{return Bn(e)}catch(e){return Wn.slice()}}(e):Bn(z(e))}},Yn=mt.KEY,zn=ft.f,Kn=p.f,Qn=Gn.f,Jn=n.Symbol,Xn=n.JSON,$n=Xn&&Xn.stringify,Zn=ue("_hidden"),ei=ue("toPrimitive"),ti={}.propertyIsEnumerable,ni=Z("symbol-registry"),ii=Z("symbols"),ri=Z("op-symbols"),oi=Object.prototype,si="function"==typeof Jn,ai=n.QObject,li=!ai||!ai.prototype||!ai.prototype.findChild,ci=a&&s(function(){return 7!=qe(Kn({},"a",{get:function(){return Kn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=zn(oi,t);i&&delete oi[t],Kn(e,t,n),i&&e!==oi&&Kn(oi,t,i)}:Kn,ui=function(e){var t=ii[e]=qe(Jn.prototype);return t._k=e,t},di=si&&"symbol"==typeof Jn.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Jn},fi=function(e,t,n){return e===oi&&fi(ri,t,n),o(e),t=f(t,!0),o(n),y(ii,t)?(n.enumerable?(y(e,Zn)&&e[Zn][t]&&(e[Zn][t]=!1),n=qe(n,{enumerable:g(0,!1)})):(y(e,Zn)||Kn(e,Zn,g(1,{})),e[Zn][t]=!0),ci(e,t,n)):Kn(e,t,n)},hi=function(e,t){o(e);for(var n,i=function(e){var t=Ne(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t}(t=z(t)),r=0,s=i.length;s>r;)fi(e,n=i[r++],t[n]);return e},pi=function(e){var t=ti.call(this,e=f(e,!0));return!(this===oi&&y(ii,e)&&!y(ri,e))&&(!(t||!y(this,e)||!y(ii,e)||y(this,Zn)&&this[Zn][e])||t)},gi=function(e,t){if(e=z(e),t=f(t,!0),e!==oi||!y(ii,t)||y(ri,t)){var n=zn(e,t);return!n||!y(ii,t)||y(e,Zn)&&e[Zn][t]||(n.enumerable=!0),n}},mi=function(e){for(var t,n=Qn(z(e)),i=[],r=0;n.length>r;)y(ii,t=n[r++])||t==Zn||t==Yn||i.push(t);return i},vi=function(e){for(var t,n=e===oi,i=Qn(n?ri:z(e)),r=[],o=0;i.length>o;)!y(ii,t=i[o++])||n&&!y(oi,t)||r.push(ii[t]);return r};si||(k((Jn=function(){if(this instanceof Jn)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===oi&&t.call(ri,n),y(this,Zn)&&y(this[Zn],e)&&(this[Zn][e]=!1),ci(this,e,g(1,n))};return a&&li&&ci(oi,e,{configurable:!0,set:t}),ui(e)}).prototype,"toString",function(){return this._k}),ft.f=gi,p.f=fi,ae.f=Gn.f=mi,ut.f=pi,Ct.f=vi,a&&k(oi,"propertyIsEnumerable",pi,!0),qn.f=function(e){return ui(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:Jn});for(var yi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),bi=0;yi.length>bi;)ue(yi[bi++]);for(var wi=Ne(ue.store),Ei=0;wi.length>Ei;)Un(wi[Ei++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return y(ni,e+="")?ni[e]:ni[e]=Jn(e)},keyFor:function(e){if(!di(e))throw TypeError(e+" is not a symbol!");for(var t in ni)if(ni[t]===e)return t},useSetter:function(){li=!0},useSimple:function(){li=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?qe(e):hi(qe(e),t)},defineProperty:fi,defineProperties:hi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:mi,getOwnPropertySymbols:vi}),Xn&&C(C.S+C.F*(!si||s(function(){var e=Jn();return"[null]"!=$n([e])||"{}"!=$n({a:e})||"{}"!=$n(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return Ge(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,$n.apply(Xn,i)}}),Jn.prototype[ei]||m(Jn.prototype,ei,Jn.prototype.valueOf),he(Jn,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var ki=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*s(function(){n(1)}),"Object",r)},Si=mt.onFreeze;ki("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ti=mt.onFreeze;ki("seal",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Ai=mt.onFreeze;ki("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),ki("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var _i=ft.f;ki("getOwnPropertyDescriptor",function(){return function(e,t){return _i(z(e),t)}}),ki("getPrototypeOf",function(){return function(e){return Be(le(e))}}),ki("keys",function(){return function(e){return Ne(le(e))}}),ki("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:xt});var Ci=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Ci});var Pi=p.f,xi=Function.prototype,Li=/^\s*function ([^ (]*)/;"name"in xi||a&&Pi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Li)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=z(e.raw),n=U(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Mi=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Mi(t):Mi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Oi,ji=(Oi=!1,function(e,t){var n,i,r=String(Y(e)),o=q(t),s=r.length;return o<0||o>=s?Oi?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===s||(i=r.charCodeAt(o+1))<56320||i>57343?Oi?r.charAt(o):n:Oi?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return ji(this,e)}});var Ii=function(e){var t=String(Y(this)),n="",i=q(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Ii});var Fi=ue("match"),Ri=function(e){var t;return r(e)&&(void 0!==(t=e[Fi])?!!t:"RegExp"==W(e))},Di=function(e,t,n){if(Ri(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Y(e))},qi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[qi]=!1,!"/./"[e](t)}catch(e){}}return!0},Ui="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Di(this,e,"startsWith"),n=U(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Ui?Ui.call(t,i,n):t.slice(n,n+i.length)===i}});var Bi="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Di(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=U(t.length),r=void 0===n?i:Math.min(U(n),i),o=String(e);return Bi?Bi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Di(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});a&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Hi=function(e,t,n){var i=ue(e),r=n(Y,i,""[e]),o=r[0],a=r[1];s(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};Hi("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Hi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("split",2,function(e,t,n){var i=Ri,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Wi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=We(o);if(c&&(l=T(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&Me(d))for(n=new s(t=U(o.length));t>u;u++)Wi(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)Wi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*s(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Wi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),Xe("copyWithin");var Gi=Ke(5),Yi=!0;"find"in[]&&Array(1).find(function(){Yi=!1}),C(C.P+C.F*Yi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("find");var zi=Ke(6),Ki=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ki=!1}),C(C.P+C.F*Ki,"Array",{findIndex:function(e){return zi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("findIndex"),C(C.P,"Array",{fill:ce}),Xe("fill");var Qi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Qi(e)}});var Ji=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&Ji(e)===e};C(C.S,"Number",{isInteger:Xi});var $i=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&$i(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Zi=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},er=Math.sqrt,tr=Math.acosh;C(C.S+C.F*!(tr&&710==Math.floor(tr(Number.MAX_VALUE))&&tr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:Zi(e-1+er(e-1)*er(e+1))}});var nr=Math.asinh;C(C.S+C.F*!(nr&&1/nr(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var ir=Math.atanh;C(C.S+C.F*!(ir&&1/ir(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var rr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return rr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var or=Math.exp;C(C.S,"Math",{cosh:function(e){return(or(e=+e)+or(-e))/2}});var sr=Math.expm1,ar=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(ar!=Math.expm1),"Math",{expm1:ar});var lr=Math.pow,cr=lr(2,-52),ur=lr(2,-23),dr=lr(2,127)*(2-ur),fr=lr(2,-126),hr=Math.fround||function(e){var t,n,i=Math.abs(e),r=rr(e);return i<fr?r*(i/fr/ur+1/cr-1/cr)*fr*ur:(n=(t=(1+ur/cr)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:hr});var pr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=pr(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var gr=Math.imul;C(C.S+C.F*s(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:Zi}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:rr});var mr=Math.exp;C(C.S+C.F*s(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(ar(e)-ar(-e))/2:(mr(e-1)-mr(-e-1))*(Math.E/2)}});var vr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=ar(e=+e),n=ar(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var yr=X(!0);C(C.P,"Array",{includes:function(e){return yr(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("includes");var br=ut.f,wr=function(e){return function(t){for(var n,i=z(t),r=Ne(i),o=r.length,s=0,a=[];o>s;)br.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Er=wr(!1);C(C.S,"Object",{values:function(e){return Er(e)}});var kr=wr(!0);C(C.S,"Object",{entries:function(e){return kr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=z(e),r=ft.f,o=Jt(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&Wi(s,t,n);return s}});var Sr=function(e,t,n,i){var r=String(Y(e)),o=r.length,s=void 0===n?" ":String(n),a=U(t);if(a<=o||""==s)return r;var l=a-o,c=Ii.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Tr=n.navigator,Ar=Tr&&Tr.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var _r=[].slice,Cr=/MSIE .\./.test(Ar),Pr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&_r.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Cr,{setTimeout:Pr(n.setTimeout),setInterval:Pr(n.setInterval)}),C(C.G+C.B,{setImmediate:dn.set,clearImmediate:dn.clear});for(var xr=ue("iterator"),Lr=ue("toStringTag"),Mr=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Or=Ne(Nr),jr=0;jr<Or.length;jr++){var Ir,Fr=Or[jr],Rr=Nr[Fr],Dr=n[Fr],qr=Dr&&Dr.prototype;if(qr&&(qr[xr]||m(qr,xr,Mr),qr[Lr]||m(qr,Lr,Fr),Pe[Fr]=Mr,Rr))for(Ir in ot)qr[Ir]||k(qr,Ir,ot[Ir],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,v=m&&m(m(L([])));v&&v!==i&&r.call(v,s)&&(g=v);var y=S.prototype=E.prototype=Object.create(g);k.prototype=y.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(y),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[a]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(y),y[l]="Generator",y[s]=function(){return this},y.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=L,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:L(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),s=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return M()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=_(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,s){var a=w(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function L(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:M}}function M(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ur=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ur.prototype=window.Event.prototype,window.CustomEvent=Ur}var Br,Hr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Wr={audio:"audio",video:"video"},Gr={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.15/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisment:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},Yr=(function(){function e(e){this.value=e}function t(t){var n,i;function r(n,i){try{var s=t[n](i),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};i?i=i.next=a:(n=i=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),zr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Kr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Qr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Jr={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e,t,n){var i=document.querySelector('script[src="'+e+'"]');if(null!==i)return i.callbacks=i.callbacks||[],void i.callbacks.push(t);var r=document.createElement("script");r.callbacks=r.callbacks||[],r.callbacks.push(t),r.errors=r.errors||[],r.errors.push(n),Jr.is.function(t)&&r.addEventListener("load",function(e){r.callbacks.forEach(function(t){return t.call(null,e)}),r.callbacks=null},!1),r.addEventListener("error",function(e){r.errors.forEach(function(t){return t.call(null,e)}),r.errors=null},!1),r.src=e;var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(r,o)},loadSprite:function(e,t){if(Jr.is.string(e)){var n=Jr.is.string(t);if(!n||!document.querySelectorAll("#"+t).length){var i=document.createElement("div");if(Jr.toggleHidden(i,!0),n&&i.setAttribute("id",t),Xr.storage){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void s.call(i,o.content)}}Jr.fetch(e).then(function(e){Jr.is.empty(e)||(Xr.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s.call(i,e))}).catch(function(){})}}function s(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Jr.is.object(t)&&Jr.setAttributes(i,t),Jr.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Jr.createElement(e,n,i))},removeElement:function(e){Jr.is.element(e)&&Jr.is.element(e.parentNode)&&(Jr.is.nodeList(e)||Jr.is.array(e)?Array.from(e).forEach(Jr.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Jr.is.element(t)&&Jr.is.element(t.parentNode)&&Jr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Jr.is.element(e)&&!Jr.is.empty(t)&&Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})},getAttributesFromSelector:function(e,t){if(!Jr.is.string(e)||Jr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Jr.is.object(i)&&Jr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(Jr.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Jr.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){Jr.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=Jr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Jr.getElements.call(this,this.config.selectors.buttons.play),pause:Jr.getElement.call(this,this.config.selectors.buttons.pause),restart:Jr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Jr.getElement.call(this,this.config.selectors.buttons.rewind),forward:Jr.getElement.call(this,this.config.selectors.buttons.forward),mute:Jr.getElement.call(this,this.config.selectors.buttons.mute),pip:Jr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Jr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Jr.getElement.call(this,this.config.selectors.buttons.settings),captions:Jr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Jr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Jr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Jr.getElement.call(this,this.config.selectors.inputs.seek),volume:Jr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Jr.getElement.call(this,this.config.selectors.display.buffer),duration:Jr.getElement.call(this,this.config.selectors.display.duration),currentTime:Jr.getElement.call(this,this.config.selectors.display.currentTime)},Jr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Jr.is.element(e)){var n=Jr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Jr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Jr.on(this.elements.container,"keydown",o,!1):Jr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n,i,r,o){if(!Jr.is.empty(e)&&!Jr.is.empty(t)&&Jr.is.function(n))if(Jr.is.nodeList(e)||Jr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Jr.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=!!Jr.is.boolean(o)&&o;Xr.passiveListeners&&(a={passive:!Jr.is.boolean(r)||r,capture:!!Jr.is.boolean(o)&&o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e,t,n,i,r){Jr.toggleListener(e,t,n,!0,i,r)},off:function(e,t,n,i,r){Jr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e,t,n,i){if(Jr.is.element(e)&&Jr.is.string(t)){var r=new CustomEvent(t,{bubbles:!!Jr.is.boolean(n)&&n,detail:Object.assign({},i,{plyr:Jr.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Jr.is.array(e)||Jr.is.nodeList(e))Array.from(e).forEach(function(e){return Jr.toggleState(e,t)});else if(Jr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Jr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Jr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Jr.is.object(r)?(Object.keys(r).forEach(function(t){Jr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Kr({},t,{})),Jr.extend(e[t],r[t])):Object.assign(e,Kr({},t,r[t]))}),Jr.extend.apply(Jr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Hr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?Hr.vimeo:null},parseYouTubeId:function(e){if(Jr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Jr.is.empty(e))return null;if(Jr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Qr(n,2),r=i[0],o=i[1];return Object.assign(e,Kr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Jr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Jr.is.string(n)&&t[n]},repaint:function(e){window.setTimeout(function(){Jr.toggleHidden(e,!0),e.offsetHeight,Jr.toggleHidden(e,!1)},0)}},Xr={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Jr.getBrowser(),s=o.isIPhone&&n&&Xr.inline;switch(t+":"+e){case"html5:video":r=(i=Xr.video)&&Xr.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=Xr.audio)&&Xr.rangeInput;break;case"youtube:video":i=!0,r=Xr.rangeInput&&(!o.isIPhone||s);break;case"vimeo:video":i=!0,r=Xr.rangeInput&&!o.isIPhone;break;default:r=(i=Xr.audio&&Xr.video)&&Xr.rangeInput}return{api:i,ui:r}},pip:!Jr.getBrowser().isIPhone&&Jr.is.function(Jr.createElement("video").webkitSetPresentationMode),airplay:Jr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Jr.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Br=document.createElement("input"),Br.type="range","range"===Br.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Jr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},$r=function(){},Zr=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Yr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return zr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):$r}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):$r}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):$r}}]),e}(),eo=Jr.getBrowser();function to(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Jr.is.element(e)&&Jr.toggleState(e,this.active),Jr.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),eo.isIos||Jr.trapFocus.call(this.player,this.target,this.active)}}function no(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Jr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),to.call(this)}var io=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},Jr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){to.call(n)}),Jr.on(this.player.elements.container,"dblclick",function(){n.toggle()}),Jr.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return zr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Jr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(eo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Jr.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():no.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(eo.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?Jr.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():no.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!Jr.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:Jr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return eo.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Jr.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return Jr.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!Jr.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),ro=function(){function e(t){Yr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return zr(e,[{key:"get",value:function(t){var n=window.localStorage.getItem(this.key);if(!e.supported||Jr.is.empty(n))return null;var i=JSON.parse(n);return Jr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Jr.is.object(t)){var n=this.get();Jr.is.empty(n)&&(n={}),Jr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),oo=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=Jr.is.url(t.config.ads.tag),this.enabled&&(Jr.is.object(window.google)?this.ready():Jr.loadScript(t.config.urls.googleIMA.api,function(){n.ready()},function(){n.blocked=!0,n.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return zr(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Jr.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+Jr.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=Jr.formatTime(e.manager.getRemainingTime()),n=e.player.config.i18n.advertisment+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var n=t.player.elements.progress;if(n){var i=100/t.player.duration*e,r=Jr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){Jr.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),r("loaded"),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),r("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),r("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),r("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:r("started");break;case google.ima.AdEvent.Type.MIDPOINT:r("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:r("complete");break;case google.ima.AdEvent.Type.IMPRESSION:r("impression");break;case google.ima.AdEvent.Type.CLICK:r("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){Jr.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){Jr.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){Jr.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=window.setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Jr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),so=Jr.getBrowser(),ao={global:function(){var e=this,t=null,n=function(n){var i=function(e){return e.keyCode?e.keyCode:e.which}(n),r="keydown"===n.type,o=r&&i===t;if(!(n.altKey||n.ctrlKey||n.metaKey||n.shiftKey)&&Jr.is.number(i)){if(r){var s=Jr.getFocusElement();if(Jr.is.element(s)&&Jr.matches(s,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(n.preventDefault(),n.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:o||(e.currentTime=e.duration/10*(i-48));break;case 32:case 75:o||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:o||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:o||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===i&&e.fullscreen.toggle(),t=i}else t=null}};this.config.keyboard.global?Jr.on(window,"keydown keyup",n,!1):this.config.keyboard.focused&&Jr.on(this.elements.container,"keydown keyup",n,!1),Jr.on(this.elements.container,"focusout",function(t){Jr.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),Jr.on(this.elements.container,"keydown",function(t){9===t.keyCode&&window.setTimeout(function(){Jr.toggleClass(Jr.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&Jr.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(Jr.on(this.media,"timeupdate seeking",function(t){return lo.timeUpdate.call(e,t)}),Jr.on(this.media,"durationchange loadedmetadata",function(t){return lo.durationUpdate.call(e,t)}),Jr.on(this.media,"loadeddata",function(){Jr.toggleHidden(e.elements.volume,!e.hasAudio),Jr.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),Jr.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),Jr.on(this.media,"progress playing",function(t){return lo.updateProgress.call(e,t)}),Jr.on(this.media,"volumechange",function(t){return lo.updateVolume.call(e,t)}),Jr.on(this.media,"playing play pause ended",function(t){return lo.checkPlaying.call(e,t)}),Jr.on(this.media,"waiting canplay seeked playing",function(t){return lo.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=Jr.getElement.call(this,"."+this.config.classNames.video);if(!Jr.is.element(t))return;Jr.on(t,"click",function(){e.config.hideControls&&Xr.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&Jr.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),Jr.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),Jr.on(this.media,"ratechange",function(){uo.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),Jr.on(this.media,"qualitychange",function(){uo.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),Jr.on(this.media,"languagechange",function(){uo.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),Jr.on(this.media,"captionsenabled captionsdisabled",function(){uo.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),Jr.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.media.error),Jr.dispatchEvent.call(e,e.elements.container,t.type,!0,n)})},controls:function(){var e=this,t=so.isIE?"change":"input",n=function(t,n,i){var r=e.config.listeners[n];Jr.is.function(r)&&r.call(e,t),!t.defaultPrevented&&Jr.is.function(i)&&i.call(e,t)};Jr.on(this.elements.buttons.play,"click",function(t){return n(t,"play",function(){e.togglePlay()})}),Jr.on(this.elements.buttons.restart,"click",function(t){return n(t,"restart",function(){e.restart()})}),Jr.on(this.elements.buttons.rewind,"click",function(t){return n(t,"rewind",function(){e.rewind()})}),Jr.on(this.elements.buttons.forward,"click",function(t){return n(t,"forward",function(){e.forward()})}),Jr.on(this.elements.buttons.mute,"click",function(t){return n(t,"mute",function(){e.muted=!e.muted})}),Jr.on(this.elements.buttons.captions,"click",function(t){return n(t,"captions",function(){e.toggleCaptions()})}),Jr.on(this.elements.buttons.fullscreen,"click",function(t){return n(t,"fullscreen",function(){e.fullscreen.toggle()})}),Jr.on(this.elements.buttons.pip,"click",function(t){return n(t,"pip",function(){e.pip="toggle"})}),Jr.on(this.elements.buttons.airplay,"click",function(t){return n(t,"airplay",function(){e.airplay()})}),Jr.on(this.elements.buttons.settings,"click",function(t){uo.toggleMenu.call(e,t)}),Jr.on(document.documentElement,"click",function(t){uo.toggleMenu.call(e,t)}),Jr.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),Jr.matches(t.target,e.config.selectors.inputs.language)?n(t,"language",function(){e.language=t.target.value}):Jr.matches(t.target,e.config.selectors.inputs.quality)?n(t,"quality",function(){e.quality=t.target.value}):Jr.matches(t.target,e.config.selectors.inputs.speed)?n(t,"speed",function(){e.speed=parseFloat(t.target.value)}):uo.showTab.call(e,t)}),Jr.on(this.elements.inputs.seek,t,function(t){return n(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!Jr.is.element(this.elements.display.duration)&&Jr.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,lo.timeUpdate.call(e))}),Jr.on(this.elements.inputs.volume,t,function(t){return n(t,"volume",function(){e.volume=t.target.value})}),so.isWebkit&&Jr.on(Jr.getElements.call(this,'input[type="range"]'),"input",function(t){uo.updateRangeFill.call(e,t.target)}),Jr.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return uo.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(Jr.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),Jr.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),Jr.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),Jr.on(this.elements.inputs.volume,"wheel",function(t){return n(t,"volume",function(){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.decreaseVolume(.02),i=-1):(e.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.increaseVolume(.02),i=1):(e.decreaseVolume(.02),i=-1)),(1===i&&e.media.volume<1||-1===i&&e.media.volume>0)&&t.preventDefault()})},!1)}},lo={addStyleHook:function(){Jr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Jr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){if(ao.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void lo.toggleNativeControls.call(this,!0);Jr.is.element(this.elements.controls)||(uo.inject.call(this),ao.controls.call(this)),Jr.is.element(this.elements.controls)&&(lo.toggleNativeControls.call(this),fo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],lo.timeUpdate.call(this),lo.checkPlaying.call(this),this.ready=!0,Jr.dispatchEvent.call(this,this.media,"ready"),lo.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(Jr.is.string(this.config.title)&&!Jr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Jr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Jr.getElement.call(this,"iframe");if(!Jr.is.element(t))return;var n=Jr.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",n))}},checkPlaying:function(){Jr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Jr.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),Jr.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Jr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Jr.toggleClass(this.elements.container,this.config.classNames.loading,!1),Jr.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Jr.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Jr.is.element(this.elements.inputs.volume)&&lo.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Jr.is.element(this.elements.buttons.mute)&&Jr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Jr.is.element(e)&&(e.value=t,uo.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Jr.is.number(t)?t:0,i=Jr.is.element(e)?e:this.elements.display.buffer;if(Jr.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Jr.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){var t=this;if(this.supported.ui&&Jr.is.event(e)){var n,i=0;if(e)switch(e.type){case"timeupdate":case"seeking":i=Jr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&lo.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":i=(n=t.media.buffered)&&n.length?Jr.getPercentage(n.end(0),t.duration):Jr.is.number(n)?100*n:0,lo.setProgress.call(this,this.elements.display.buffer,i)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Jr.is.element(e)&&Jr.is.number(t)){var i=Jr.getHours(this.duration)>0;e.textContent=Jr.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Jr.is.element(this.elements.display.duration)&&this.config.invertTime;lo.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||lo.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Jr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&lo.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&lo.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),uo.updateSeekTooltip.call(this)}}},co=Jr.getBrowser(),uo={updateRangeFill:function(e){if(co.isWebkit){var t=Jr.is.event(e)?e.target:e;Jr.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||co.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=uo.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Jr.setAttributes(r,Jr.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=this.config.i18n[e],i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Jr.createElement("span",i,n)},createBadge:function(e){if(Jr.is.empty(e))return null;var t=Jr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Jr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Jr.createElement("button"),i=Object.assign({},t),r=e,o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,r){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=r}return o?(n.appendChild(uo.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(uo.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(uo.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(uo.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=this.config.i18n[s]):(n.appendChild(uo.createIcon.call(this,a)),n.appendChild(uo.createLabel.call(this,s))),Jr.extend(i,Jr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Jr.setAttributes(n,i),"play"===r?(Jr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Jr.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),i=Jr.createElement("input",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=i,uo.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Jr.createElement("progress",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(Jr.createElement("span",null,"0"));var i="";switch(e){case"played":i=this.config.i18n.played;break;case"buffer":i=this.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Jr.createElement("div",{class:"plyr__time"});return t.appendChild(Jr.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(Jr.createElement("span",Jr.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=Jr.createElement("li"),a=Jr.createElement("label",{class:this.config.classNames.control}),l=Jr.createElement("input",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Jr.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Jr.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&Jr.is.element(this.elements.inputs.seek)&&Jr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,n=this.elements.inputs.seek.getBoundingClientRect(),i=this.config.classNames.tooltip+"--visible";if(Jr.is.event(e))t=100/n.width*(e.pageX-n.left);else{if(!Jr.hasClass(this.elements.display.seekTooltip,i))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),lo.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",Jr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&Jr.toggleClass(this.elements.display.seekTooltip,i,"mouseenter"===e.type)}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];Jr.toggleHidden(n,!t),Jr.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this,n=this.elements.settings.panes.quality.querySelector("ul");Jr.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var i=!Jr.is.empty(this.options.quality)&&this.isYouTube;if(uo.toggleTab.call(this,"quality",i),i){Jr.emptyElement(n);this.options.quality.forEach(function(e){return uo.createMenuItem.call(t,e,n,"quality",uo.getLabel.call(t,"quality",e),function(e){var n="";switch(e){case"hd2160":n="4K";break;case"hd1440":n="WQHD";break;case"hd1080":case"hd720":n="HD"}return n.length?uo.createBadge.call(t,n):null}(e))}),uo.updateSetting.call(this,"quality",n)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return uo.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var n=this.elements.settings.panes[e],i=null,r=t;switch(e){case"captions":i=this.captions.active?this.captions.language:"";break;default:if(i=this[e],Jr.is.empty(i)&&(i=this.config[e].default),!this.options[e].includes(i))return void this.debug.warn("Unsupported value of '"+i+"' for "+e);if(!this.config[e].options.includes(i))return void this.debug.warn("Disabled value of '"+i+"' for "+e)}(Jr.is.element(r)||(r=n&&n.querySelector("ul")),Jr.is.empty(i))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=uo.getLabel.call(this,e,i));var o=r&&r.querySelector('input[value="'+i+'"]');Jr.is.element(o)&&(o.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!Xr.textTracks||!fo.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=fo.getCurrentTrack.call(this);if(Jr.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=fo.getTracks.call(this).length;if(uo.toggleTab.call(this,"captions",n),Jr.emptyElement(t),n){var i=fo.getTracks.call(this).map(function(e){return{language:e.language,label:Jr.is.empty(e.label)?e.language.toUpperCase():e.label}});i.unshift({language:"",label:this.config.i18n.none}),i.forEach(function(n){uo.createMenuItem.call(e,n.language,t,"language",n.label||n.language,uo.createBadge.call(e,n.language.toUpperCase()),n.language.toLowerCase()===e.captions.language.toLowerCase())}),uo.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;Jr.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!Jr.is.empty(this.options.speed);if(uo.toggleTab.call(this,"speed",t),t){var n=this.elements.settings.panes.speed.querySelector("ul");Jr.toggleHidden(this.elements.settings.tabs.speed,!1),Jr.toggleHidden(this.elements.settings.panes.speed,!1),Jr.emptyElement(n),this.options.speed.forEach(function(t){return uo.createMenuItem.call(e,t,n,"speed",uo.getLabel.call(e,"speed",t))}),uo.updateSetting.call(this,"speed",n)}},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings,i=Jr.is.boolean(e)?e:Jr.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(Jr.is.event(e)){var r=Jr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Jr.is.element(n)&&n.setAttribute("aria-expanded",i),Jr.is.element(t)&&(t.setAttribute("aria-hidden",!i),Jr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Jr.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(Jr.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Xr.transitions&&!Xr.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=uo.getTabSize.call(this,r);Jr.on(s,Jr.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",Jr.off(s,Jr.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Jr.is.empty(this.config.controls))return null;var n=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(uo.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(uo.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(uo.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(uo.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.progress)),r=uo.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(uo.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Jr.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(uo.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(uo.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(uo.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=Jr.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=uo.createRange.call(this,"volume",Jr.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(uo.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Jr.is.empty(this.config.settings)){var c=Jr.createElement("div",{class:"plyr__menu"});c.appendChild(uo.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Jr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=Jr.createElement("div"),f=Jr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Jr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Jr.createElement("li",{role:"tab",hidden:""}),r=Jr.createElement("button",Jr.extend(Jr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),t.config.i18n[n]),o=Jr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=Jr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=Jr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[n]);i.appendChild(r);var o=Jr.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Xr.pip&&n.appendChild(uo.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Xr.airplay&&n.appendChild(uo.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(uo.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(uo.createButton.call(this,"play-large")),this.elements.controls=n,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&uo.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=uo.getIconUrl.call(this);t.absolute&&Jr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=Jr.is.string(this.config.controls)||Jr.is.element(this.config.controls)?this.config.controls:Jr.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):uo.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:uo.getLanguage.call(this)});var i=void 0;if(Jr.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),Jr.is.element(i)||(i=this.elements.container),Jr.is.element(n)?i.appendChild(n):i.insertAdjacentHTML("beforeend",n),Jr.is.element(this.elements.controls)||Jr.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Jr.repaint(i),this.config.tooltips.controls){var r=Jr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){Jr.toggleClass(t,e.config.classNames.hidden,!1),Jr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},fo={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Jr.is.empty(e)||(this.captions.language=e),Jr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Jr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Jr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!Xr.textTracks)Jr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&uo.setCaptionsMenu.call(this);else{Jr.is.element(this.elements.captions)||(this.elements.captions=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.captions)),Jr.insertAfter(this.elements.captions,this.elements.wrapper)),Jr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Jr.is.empty(fo.getTracks.call(this)));var n=fo.getTracks.call(this);if(!Jr.is.empty(n)){if(Jr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Jr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Jr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Jr.removeElement(e)})})}fo.setLanguage.call(this),fo.show.call(this),Jr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&uo.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){fo.getTracks.call(this).forEach(function(t){Jr.on(t,"cuechange",function(t){return fo.setCue.call(e,t)}),t.mode="hidden"});var t=fo.getCurrentTrack.call(this);Jr.is.track(t)&&Array.from(t.activeCues||[]).length&&fo.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Jr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return fo.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=Jr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===fo.getCurrentTrack.call(this)&&(Jr.is.cue(i)?fo.setText.call(this,i.getCueAsHTML()):fo.setText.call(this,null),Jr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Jr.is.element(this.elements.captions)){var t=Jr.createElement("span");Jr.emptyElement(this.elements.captions);var n=Jr.is.nullOrUndefined(e)?"":e;Jr.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(Jr.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");Jr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Jr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Jr.toggleState(this.elements.buttons.captions,!0))}}},ho={setup:function(){var e=this;Jr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ho.setAspectRatio.call(this),Jr.is.object(window.YT)&&Jr.is.function(window.YT.Player)?ho.ready.call(this):(Jr.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ho.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Jr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Jr.is.empty(n))return this.config.title=n,void lo.setTitle.call(this)}var i=this.config.keys.google;if(Jr.is.string(i)&&!Jr.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";Jr.fetch(r).then(function(e){Jr.is.object(e)&&(t.config.title=e.items[0].snippet.title,lo.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Jr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Jr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Jr.parseYouTubeId(n),r=Jr.generateId(e.provider),o=Jr.createElement("div",{id:r});e.media=Jr.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Jr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Jr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var n=t.target;e.media.quality=n.getPlaybackQuality(),Jr.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Jr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ho.getTitle.call(e,i),e.media.play=function(){n.playVideo(),e.media.paused=!1},e.media.pause=function(){n.pauseVideo(),e.media.paused=!0},e.media.stop=function(){n.stopVideo(),e.media.paused=!0},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.media.seeking=!0,Jr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return n.getPlaybackQuality()},set:function(t){Jr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),n.setPlaybackQuality(t)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Jr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Jr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Jr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Jr.dispatchEvent.call(e,e.media,"timeupdate"),Jr.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Jr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),Jr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),window.setTimeout(function(){return lo.build.call(e)},50)},onStateChange:function(t){var n=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):Jr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Jr.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Jr.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Jr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){Jr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),Jr.dispatchEvent.call(e,e.media,"durationchange")),uo.setQualityMenu.call(e,n.getAvailableQualityLevels());break;case 2:e.media.paused=!0,Jr.dispatchEvent.call(e,e.media,"pause")}Jr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},po={setup:function(){var e=this;Jr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),po.setAspectRatio.call(this),Jr.is.object(window.Vimeo)?po.ready.call(this):Jr.loadScript(this.config.urls.vimeo.api,function(){po.ready.call(e)})},setAspectRatio:function(e){var t=Jr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1],i=(200-n)/4;this.elements.wrapper.style.paddingBottom=n+"%",this.media.style.transform="translateY(-"+i+"%)"},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},i=Jr.buildUrlParams(n),r=t.media.getAttribute("src");Jr.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=Jr.parseVimeoId(r),s=Jr.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=Jr.createElement("div");l.appendChild(s),t.media=Jr.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Jr.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Jr.dispatchEvent.call(t,t.media,"ratechange")})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,Jr.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!Jr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,Jr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Jr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Jr.getAspectRatio(t[0],t[1]);po.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,lo.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Jr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Jr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,fo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Jr.stripHTML(e.cues[0].text)),fo.setText.call(t,n)}),t.embed.on("loaded",function(){Jr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Jr.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Jr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Jr.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Jr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Jr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Jr.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,Jr.dispatchEvent.call(t,t.media,"seeked"),Jr.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Jr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Jr.dispatchEvent.call(t,t.media,"error")}),window.setTimeout(function(){return lo.build.call(t)},0)}},go=Jr.getBrowser(),mo={setup:function(){if(this.media)if(Jr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Jr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Jr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(Jr.toggleClass(this.elements.container,this.config.classNames.pip.supported,Xr.pip&&this.isHTML5&&this.isVideo),Jr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Xr.airplay&&this.isHTML5),Jr.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),Jr.toggleClass(this.elements.container,this.config.classNames.isIos,go.isIos),Jr.toggleClass(this.elements.container,this.config.classNames.isTouch,Xr.touch)),this.isVideo&&(this.elements.wrapper=Jr.createElement("div",{class:this.config.classNames.video}),Jr.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":ho.setup.call(this);break;case"vimeo":po.setup.call(this)}else this.isHTML5&&lo.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(Jr.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},vo={insertElements:function(e,t){var n=this;Jr.is.string(t)?Jr.insertElement(e,this.media,{src:t}):Jr.is.array(t)&&t.forEach(function(t){Jr.insertElement(e,n.media,t)})},change:function(e){var t=this;Jr.is.object(e)&&"sources"in e&&e.sources.length?(mo.cancelRequests.call(this),this.destroy.call(this,function(){switch(Jr.removeElement(t.media),t.media=null,Jr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Jr.is.empty(e.sources[0].provider)?Hr.html5:e.sources[0].provider,t.supported=Xr.check(t.type,t.provider,t.config.inline),t.provider+":"+t.type){case"html5:video":t.media=Jr.createElement("video");break;case"html5:audio":t.media=Jr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Jr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Jr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.inline&&t.media.setAttribute("playsinline","")),lo.addStyleHook.call(t),t.isHTML5&&vo.insertElements.call(t,"source",e.sources),t.config.title=e.title,mo.setup.call(t),t.isHTML5&&("tracks"in e&&vo.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&lo.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Yr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=t,Jr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Jr.is.nodeList(this.media)||Jr.is.array(this.media))&&(this.media=this.media[0]),this.config=Jr.extend({},Gr,n,function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new Zr(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Xr),!Jr.is.nullOrUndefined(this.media)&&Jr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Xr.check().api){this.elements.original=this.media.cloneNode(!0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),Jr.is.element(o)){if(s=o.getAttribute("src"),this.provider=Jr.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=Jr.getUrlParams(s),!Jr.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.playsinline)&&(this.config.inline=!0),l.includes(a.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Jr.is.empty(this.provider)||!Object.keys(Hr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Wr.video;break;case"video":case"audio":this.type=r,this.provider=Hr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Xr.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new ro(this),this.media.plyr=this,Jr.is.element(this.elements.container)||(this.elements.container=Jr.createElement("div"),Jr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),ao.global.call(this),lo.addStyleHook.call(this),mo.setup.call(this),this.config.debug&&Jr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&lo.build.call(this),this.fullscreen=new io(this),this.ads=new oo(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return zr(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(Jr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Jr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Jr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Jr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Jr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&Jr.is.element(this.elements.buttons.captions)){var t=Jr.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Jr.toggleState(this.elements.buttons.captions,this.captions.active),Jr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Jr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Xr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Jr.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(Jr.is.boolean(e)||(Jr.is.event(e)?(r="enterfullscreen"===e.type,i=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(n=2e3),"focusin"===e.type&&(n=3e3,Jr.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):i=Jr.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Jr.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Jr.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;Xr.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=window.setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Jr.hasClass(t.elements.container,t.config.classNames.hideControls)||Jr.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Jr.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(Jr.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Jr.is.empty(t.config.settings)&&uo.toggleMenu.call(t,!1)))},n))}}},{key:"on",value:function(e,t){Jr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Jr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Jr.removeElement(t.elements.buttons.play),Jr.removeElement(t.elements.captions),Jr.removeElement(t.elements.controls),Jr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Jr.is.function(e)&&e()):(Jr.replaceElement(t.elements.original,t.elements.container),Jr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Jr.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":lo.toggleNativeControls.call(this,!0),i();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),window.setTimeout(i,200)}}},{key:"supports",value:function(e){return Xr.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===Hr.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===Hr.youtube}},{key:"isVimeo",get:function(){return this.provider===Hr.vimeo}},{key:"isVideo",get:function(){return this.type===Wr.video}},{key:"isAudio",get:function(){return this.type===Wr.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;Jr.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Jr.is.string(t)&&(t=Number(t)),Jr.is.number(t)||(t=this.storage.get("volume")),Jr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;Jr.is.boolean(t)||(t=this.storage.get("muted")),Jr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Jr.is.number(e)&&(t=e),Jr.is.number(t)||(t=this.storage.get("speed")),Jr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;Jr.is.string(e)&&(t=e),Jr.is.string(t)||(t=this.storage.get("quality")),Jr.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Jr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){vo.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?Jr.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Jr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(Jr.is.string(e)&&(this.toggleCaptions(!Jr.is.empty(e)),!Jr.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,fo.setText.call(this,null),fo.setLanguage.call(this),Jr.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Xr.pip){var i=Jr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Xr.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Xr.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Jr.loadSprite(e,t)}}]),e}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=Object.freeze({default:n,__moduleExports:n}),r=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),o=r.version,s=Object.freeze({default:r,__moduleExports:r,version:o}),a=function(e){return"object"==typeof e?null!==e:"function"==typeof e},l=Object.freeze({default:a,__moduleExports:a}),c=l&&a||l,u=function(e){if(!c(e))throw TypeError(e+" is not an object!");return e},d=Object.freeze({default:u,__moduleExports:u}),f=function(e){try{return!!e()}catch(e){return!0}},h=Object.freeze({default:f,__moduleExports:f}),p=h&&f||h,m=!p(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),g=Object.freeze({default:m,__moduleExports:m}),v=i&&n||i,y=v.document,b=c(y)&&c(y.createElement),E=function(e){return b?y.createElement(e):{}},w=Object.freeze({default:E,__moduleExports:E}),_=g&&m||g,k=w&&E||w,S=!_&&!p(function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a}),T=Object.freeze({default:S,__moduleExports:S}),x=function(e,t){if(!c(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!c(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},A=Object.freeze({default:x,__moduleExports:x}),O=d&&u||d,C=T&&S||T,j=A&&x||A,P=Object.defineProperty,L=_?Object.defineProperty:function(e,t,n){if(O(e),t=j(t,!0),O(n),C)try{return P(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},N={f:L},M=Object.freeze({default:N,__moduleExports:N,f:L}),I=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},F=Object.freeze({default:I,__moduleExports:I}),R=M&&N||M,z=F&&I||F,D=_?function(e,t,n){return R.f(e,t,z(1,n))}:function(e,t,n){return e[t]=n,e},q=Object.freeze({default:D,__moduleExports:D}),V={}.hasOwnProperty,B=function(e,t){return V.call(e,t)},U=Object.freeze({default:B,__moduleExports:B}),H=0,W=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+W).toString(36))},Y=Object.freeze({default:G,__moduleExports:G}),K=q&&D||q,Q=U&&B||U,J=Y&&G||Y,X=s&&r||s,$=t(function(e){var t=J("src"),n=Function.toString,i=(""+n).split("toString");X.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,r,o){var s="function"==typeof r;s&&(Q(r,"name")||K(r,"name",n)),e[n]!==r&&(s&&(Q(r,t)||K(r,t,e[n]?""+e[n]:i.join(String(n)))),e===v?e[n]=r:o?e[n]?e[n]=r:K(e,n,r):(delete e[n],K(e,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),Z=Object.freeze({default:$,__moduleExports:$}),ee=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},te=Object.freeze({default:ee,__moduleExports:ee}),ne=te&&ee||te,ie=function(e,t,n){if(ne(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},re=Object.freeze({default:ie,__moduleExports:ie}),oe=Z&&$||Z,se=re&&ie||re,ae=function(e,t,n){var i,r,o,s,a=e&ae.F,l=e&ae.G,c=e&ae.S,u=e&ae.P,d=e&ae.B,f=l?v:c?v[t]||(v[t]={}):(v[t]||{}).prototype,h=l?X:X[t]||(X[t]={}),p=h.prototype||(h.prototype={});for(i in l&&(n=t),n)o=((r=!a&&f&&void 0!==f[i])?f:n)[i],s=d&&r?se(o,v):u&&"function"==typeof o?se(Function.call,o):o,f&&oe(f,i,o,e&ae.U),h[i]!=o&&K(h,i,s),u&&p[i]!=o&&(p[i]=o)};v.core=X,ae.F=1,ae.G=2,ae.S=4,ae.P=8,ae.B=16,ae.W=32,ae.U=64,ae.R=128;for(var le,ce=ae,ue=Object.freeze({default:ce,__moduleExports:ce}),de=J("typed_array"),fe=J("view"),he=!(!v.ArrayBuffer||!v.DataView),pe=he,me=0,ge="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");me<9;)(le=v[ge[me++]])?(K(le.prototype,de,!0),K(le.prototype,fe,!0)):pe=!1;var ve={ABV:he,CONSTR:pe,TYPED:de,VIEW:fe},ye=ve.ABV,be=ve.CONSTR,Ee=ve.TYPED,we=ve.VIEW,_e=Object.freeze({default:ve,__moduleExports:ve,ABV:ye,CONSTR:be,TYPED:Ee,VIEW:we}),ke=Object.freeze({default:!1,__moduleExports:!1}),Se=function(e,t,n){for(var i in t)oe(e,i,t[i],n);return e},Te=Object.freeze({default:Se,__moduleExports:Se}),xe=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ae=Object.freeze({default:xe,__moduleExports:xe}),Oe=Math.ceil,Ce=Math.floor,je=function(e){return isNaN(e=+e)?0:(e>0?Ce:Oe)(e)},Pe=Object.freeze({default:je,__moduleExports:je}),Le=Pe&&je||Pe,Ne=Math.min,Me=function(e){return e>0?Ne(Le(e),9007199254740991):0},Ie=Object.freeze({default:Me,__moduleExports:Me}),Fe=Ie&&Me||Ie,Re=function(e){if(void 0===e)return 0;var t=Le(e),n=Fe(t);if(t!==n)throw RangeError("Wrong length!");return n},ze=Object.freeze({default:Re,__moduleExports:Re}),De={}.toString,qe=function(e){return De.call(e).slice(8,-1)},Ve=Object.freeze({default:qe,__moduleExports:qe}),Be=Ve&&qe||Ve,Ue=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==Be(e)?e.split(""):Object(e)},He=Object.freeze({default:Ue,__moduleExports:Ue}),We=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Ge=Object.freeze({default:We,__moduleExports:We}),Ye=He&&Ue||He,Ke=Ge&&We||Ge,Qe=function(e){return Ye(Ke(e))},Je=Object.freeze({default:Qe,__moduleExports:Qe}),Xe=Math.max,$e=Math.min,Ze=function(e,t){return(e=Le(e))<0?Xe(e+t,0):$e(e,t)},et=Object.freeze({default:Ze,__moduleExports:Ze}),tt=Je&&Qe||Je,nt=et&&Ze||et,it=function(e){return function(t,n,i){var r,o=tt(t),s=Fe(o.length),a=nt(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},rt=Object.freeze({default:it,__moduleExports:it}),ot=v["__core-js_shared__"]||(v["__core-js_shared__"]={}),st=function(e){return ot[e]||(ot[e]={})},at=Object.freeze({default:st,__moduleExports:st}),lt=at&&st||at,ct=lt("keys"),ut=function(e){return ct[e]||(ct[e]=J(e))},dt=Object.freeze({default:ut,__moduleExports:ut}),ft=rt&&it||rt,ht=dt&&ut||dt,pt=ft(!1),mt=ht("IE_PROTO"),gt=function(e,t){var n,i=tt(e),r=0,o=[];for(n in i)n!=mt&&Q(i,n)&&o.push(n);for(;t.length>r;)Q(i,n=t[r++])&&(~pt(o,n)||o.push(n));return o},vt=Object.freeze({default:gt,__moduleExports:gt}),yt="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),bt=Object.freeze({default:yt,__moduleExports:yt}),Et=vt&&gt||vt,wt=bt&&yt||bt,_t=wt.concat("length","prototype"),kt=Object.getOwnPropertyNames||function(e){return Et(e,_t)},St={f:kt},Tt=Object.freeze({default:St,__moduleExports:St,f:kt}),xt=function(e){return Object(Ke(e))},At=Object.freeze({default:xt,__moduleExports:xt}),Ot=At&&xt||At,Ct=function(e){for(var t=Ot(this),n=Fe(t.length),i=arguments.length,r=nt(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:nt(o,n);s>r;)t[r++]=e;return t},jt=Object.freeze({default:Ct,__moduleExports:Ct}),Pt=t(function(e){var t=lt("wks"),n=v.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:J)("Symbol."+e))}).store=t}),Lt=Object.freeze({default:Pt,__moduleExports:Pt}),Nt=Lt&&Pt||Lt,Mt=R.f,It=Nt("toStringTag"),Ft=function(e,t,n){e&&!Q(e=n?e:e.prototype,It)&&Mt(e,It,{configurable:!0,value:t})},Rt=Object.freeze({default:Ft,__moduleExports:Ft}),zt=ke,Dt=_e&&ve||_e,qt=Te&&Se||Te,Vt=Ae&&xe||Ae,Bt=ze&&Re||ze,Ut=Tt&&St||Tt,Ht=jt&&Ct||jt,Wt=Rt&&Ft||Rt,Gt=t(function(e,t){var n=Ut.f,i=R.f,r="prototype",o="Wrong index!",s=v.ArrayBuffer,a=v.DataView,l=v.Math,c=v.RangeError,u=v.Infinity,d=s,f=l.abs,h=l.pow,m=l.floor,g=l.log,y=l.LN2,b=_?"_b":"buffer",E=_?"_l":"byteLength",w=_?"_o":"byteOffset";function k(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,d=23===t?h(2,-24)-h(2,-77):0,p=0,v=e<0||0===e&&1/e<0?1:0;for((e=f(e))!=e||e===u?(r=e!=e?1:0,i=l):(i=m(g(e)/y),e*(o=h(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?d/o:d*h(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*h(2,t),i+=c):(r=e*h(2,c-1)*h(2,t),i=0));t>=8;s[p++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[p++]=255&i,i/=256,a-=8);return s[--p]|=128*v,s}function S(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],d=127&c;for(c>>=7;a>0;d=256*d+e[l],l--,a-=8);for(i=d&(1<<-a)-1,d>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===d)d=1-s;else{if(d===o)return i?NaN:c?-u:u;i+=h(2,t),d-=s}return(c?-1:1)*i*h(2,d-t)}function T(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function x(e){return[255&e]}function A(e){return[255&e,e>>8&255]}function O(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function C(e){return k(e,52,8)}function j(e){return k(e,23,4)}function P(e,t,n){i(e[r],t,{get:function(){return this[n]}})}function L(e,t,n,i){var r=Bt(+n);if(r+t>e[E])throw c(o);var s=e[b]._b,a=r+e[w],l=s.slice(a,a+t);return i?l:l.reverse()}function N(e,t,n,i,r,s){var a=Bt(+n);if(a+t>e[E])throw c(o);for(var l=e[b]._b,u=a+e[w],d=i(+r),f=0;f<t;f++)l[u+f]=d[s?f:t-f-1]}if(Dt.ABV){if(!p(function(){s(1)})||!p(function(){new s(-1)})||p(function(){return new s,new s(1.5),new s(NaN),"ArrayBuffer"!=s.name})){for(var M,I=(s=function(e){return Vt(this,s),new d(Bt(e))})[r]=d[r],F=n(d),z=0;F.length>z;)(M=F[z++])in s||K(s,M,d[M]);zt||(I.constructor=s)}var D=new a(new s(2)),q=a[r].setInt8;D.setInt8(0,2147483648),D.setInt8(1,2147483649),!D.getInt8(0)&&D.getInt8(1)||qt(a[r],{setInt8:function(e,t){q.call(this,e,t<<24>>24)},setUint8:function(e,t){q.call(this,e,t<<24>>24)}},!0)}else s=function(e){Vt(this,s,"ArrayBuffer");var t=Bt(e);this._b=Ht.call(new Array(t),0),this[E]=t},a=function(e,t,n){Vt(this,a,"DataView"),Vt(e,s,"DataView");var i=e[E],r=Le(t);if(r<0||r>i)throw c("Wrong offset!");if(r+(n=void 0===n?i-r:Fe(n))>i)throw c("Wrong length!");this[b]=e,this[w]=r,this[E]=n},_&&(P(s,"byteLength","_l"),P(a,"buffer","_b"),P(a,"byteLength","_l"),P(a,"byteOffset","_o")),qt(a[r],{getInt8:function(e){return L(this,1,e)[0]<<24>>24},getUint8:function(e){return L(this,1,e)[0]},getInt16:function(e){var t=L(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=L(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return T(L(this,4,e,arguments[1]))},getUint32:function(e){return T(L(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return S(L(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return S(L(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){N(this,1,e,x,t)},setUint8:function(e,t){N(this,1,e,x,t)},setInt16:function(e,t){N(this,2,e,A,t,arguments[2])},setUint16:function(e,t){N(this,2,e,A,t,arguments[2])},setInt32:function(e,t){N(this,4,e,O,t,arguments[2])},setUint32:function(e,t){N(this,4,e,O,t,arguments[2])},setFloat32:function(e,t){N(this,4,e,j,t,arguments[2])},setFloat64:function(e,t){N(this,8,e,C,t,arguments[2])}});Wt(s,"ArrayBuffer"),Wt(a,"DataView"),K(a[r],Dt.VIEW,!0),t.ArrayBuffer=s,t.DataView=a}),Yt=Object.freeze({default:Gt,__moduleExports:Gt}),Kt=Nt("species"),Qt=function(e,t){var n,i=O(e).constructor;return void 0===i||void 0==(n=O(i)[Kt])?t:ne(n)},Jt=Object.freeze({default:Qt,__moduleExports:Qt}),Xt=Nt("species"),$t=function(e){var t=v[e];_&&t&&!t[Xt]&&R.f(t,Xt,{configurable:!0,get:function(){return this}})},Zt=Object.freeze({default:$t,__moduleExports:$t}),en=ue&&ce||ue,tn=Yt&&Gt||Yt,nn=Jt&&Qt||Jt,rn=Zt&&$t||Zt,on=v.ArrayBuffer,sn=tn.ArrayBuffer,an=tn.DataView,ln=Dt.ABV&&on.isView,cn=sn.prototype.slice,un=Dt.VIEW;en(en.G+en.W+en.F*(on!==sn),{ArrayBuffer:sn}),en(en.S+en.F*!Dt.CONSTR,"ArrayBuffer",{isView:function(e){return ln&&ln(e)||c(e)&&un in e}}),en(en.P+en.U+en.F*p(function(){return!new sn(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==cn&&void 0===t)return cn.call(O(this),e);for(var n=O(this).byteLength,i=nt(e,n),r=nt(void 0===t?n:t,n),o=new(nn(this,sn))(Fe(r-i)),s=new an(this),a=new an(o),l=0;i<r;)a.setUint8(l++,s.getUint8(i++));return o}}),rn("ArrayBuffer");var dn=Nt("toStringTag"),fn="Arguments"==Be(function(){return arguments}()),hn=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),dn))?n:fn?Be(t):"Object"==(i=Be(t))&&"function"==typeof t.callee?"Arguments":i},pn=Object.freeze({default:hn,__moduleExports:hn}),mn={},gn=Object.freeze({default:mn,__moduleExports:mn}),vn=gn&&mn||gn,yn=Nt("iterator"),bn=Array.prototype,En=function(e){return void 0!==e&&(vn.Array===e||bn[yn]===e)},wn=Object.freeze({default:En,__moduleExports:En}),_n=Object.keys||function(e){return Et(e,wt)},kn=Object.freeze({default:_n,__moduleExports:_n}),Sn=kn&&_n||kn,Tn=_?Object.defineProperties:function(e,t){O(e);for(var n,i=Sn(t),r=i.length,o=0;r>o;)R.f(e,n=i[o++],t[n]);return e},xn=Object.freeze({default:Tn,__moduleExports:Tn}),An=v.document,On=An&&An.documentElement,Cn=Object.freeze({default:On,__moduleExports:On}),jn=xn&&Tn||xn,Pn=Cn&&On||Cn,Ln=ht("IE_PROTO"),Nn=function(){},Mn=function(){var e,t=k("iframe"),n=wt.length;for(t.style.display="none",Pn.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Mn=e.F;n--;)delete Mn.prototype[wt[n]];return Mn()},In=Object.create||function(e,t){var n;return null!==e?(Nn.prototype=O(e),n=new Nn,Nn.prototype=null,n[Ln]=e):n=Mn(),void 0===t?n:jn(n,t)},Fn=Object.freeze({default:In,__moduleExports:In}),Rn=ht("IE_PROTO"),zn=Object.prototype,Dn=Object.getPrototypeOf||function(e){return e=Ot(e),Q(e,Rn)?e[Rn]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?zn:null},qn=Object.freeze({default:Dn,__moduleExports:Dn}),Vn=pn&&hn||pn,Bn=Nt("iterator"),Un=X.getIteratorMethod=function(e){if(void 0!=e)return e[Bn]||e["@@iterator"]||vn[Vn(e)]},Hn=Object.freeze({default:Un,__moduleExports:Un}),Wn=Array.isArray||function(e){return"Array"==Be(e)},Gn=Object.freeze({default:Wn,__moduleExports:Wn}),Yn=Gn&&Wn||Gn,Kn=Nt("species"),Qn=function(e){var t;return Yn(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Yn(t.prototype)||(t=void 0),c(t)&&null===(t=t[Kn])&&(t=void 0)),void 0===t?Array:t},Jn=Object.freeze({default:Qn,__moduleExports:Qn}),Xn=Jn&&Qn||Jn,$n=function(e,t){return new(Xn(e))(t)},Zn=Object.freeze({default:$n,__moduleExports:$n}),ei=Zn&&$n||Zn,ti=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ei;return function(t,c,u){for(var d,f,h=Ot(t),p=Ye(h),m=se(c,u,3),g=Fe(p.length),v=0,y=n?l(t,g):i?l(t,0):void 0;g>v;v++)if((a||v in p)&&(f=m(d=p[v],v,h),e))if(n)y[v]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return v;case 2:y.push(d)}else if(o)return!1;return s?-1:r||o?o:y}},ni=Object.freeze({default:ti,__moduleExports:ti}),ii=Nt("unscopables"),ri=Array.prototype;void 0==ri[ii]&&K(ri,ii,{});var oi=function(e){ri[ii][e]=!0},si=Object.freeze({default:oi,__moduleExports:oi}),ai=function(e,t){return{value:t,done:!!e}},li=Object.freeze({default:ai,__moduleExports:ai}),ci=Fn&&In||Fn,ui={};K(ui,Nt("iterator"),function(){return this});var di=function(e,t,n){e.prototype=ci(ui,{next:z(1,n)}),Wt(e,t+" Iterator")},fi=Object.freeze({default:di,__moduleExports:di}),hi=fi&&di||fi,pi=qn&&Dn||qn,mi=Nt("iterator"),gi=!([].keys&&"next"in[].keys()),vi=function(){return this},yi=function(e,t,n,i,r,o,s){hi(n,t,i);var a,l,c,u=function(e){if(!gi&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,m=p[mi]||p["@@iterator"]||r&&p[r],g=!gi&&m||u(r),v=r?f?u("entries"):g:void 0,y="Array"==t&&p.entries||m;if(y&&(c=pi(y.call(new e)))!==Object.prototype&&c.next&&(Wt(c,d,!0),zt||Q(c,mi)||K(c,mi,vi)),f&&m&&"values"!==m.name&&(h=!0,g=function(){return m.call(this)}),zt&&!s||!gi&&!h&&p[mi]||K(p,mi,g),vn[t]=g,vn[d]=vi,r)if(a={values:f?g:u("values"),keys:o?g:u("keys"),entries:v},s)for(l in a)l in p||oe(p,l,a[l]);else en(en.P+en.F*(gi||h),t,a);return a},bi=Object.freeze({default:yi,__moduleExports:yi}),Ei=si&&oi||si,wi=li&&ai||li,_i=bi&&yi||bi,ki=_i(Array,"Array",function(e,t){this._t=tt(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,wi(1)):wi(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");vn.Arguments=vn.Array,Ei("keys"),Ei("values"),Ei("entries");var Si=Object.freeze({default:ki,__moduleExports:ki}),Ti=Nt("iterator"),xi=!1;try{[7][Ti]().return=function(){xi=!0}}catch(e){}var Ai=function(e,t){if(!t&&!xi)return!1;var n=!1;try{var i=[7],r=i[Ti]();r.next=function(){return{done:n=!0}},i[Ti]=function(){return r},e(i)}catch(e){}return n},Oi=Object.freeze({default:Ai,__moduleExports:Ai}),Ci=[].copyWithin||function(e,t){var n=Ot(this),i=Fe(n.length),r=nt(e,i),o=nt(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:nt(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ji=Object.freeze({default:Ci,__moduleExports:Ci}),Pi={}.propertyIsEnumerable,Li={f:Pi},Ni=Object.freeze({default:Li,__moduleExports:Li,f:Pi}),Mi=Ni&&Li||Ni,Ii=Object.getOwnPropertyDescriptor,Fi=_?Ii:function(e,t){if(e=tt(e),t=j(t,!0),C)try{return Ii(e,t)}catch(e){}if(Q(e,t))return z(!Mi.f.call(e,t),e[t])},Ri={f:Fi},zi=Object.freeze({default:Ri,__moduleExports:Ri,f:Fi}),Di=wn&&En||wn,qi=Hn&&Un||Hn,Vi=ni&&ti||ni,Bi=Si&&ki||Si,Ui=Oi&&Ai||Oi,Hi=ji&&Ci||ji,Wi=zi&&Ri||zi,Gi=t(function(e){if(_){var t=zt,n=v,i=p,r=en,o=Dt,s=tn,a=se,l=Vt,u=z,d=K,f=qt,h=Le,m=Fe,g=Bt,y=nt,b=j,E=Q,w=Vn,k=c,S=Ot,T=Di,x=ci,A=pi,O=Ut.f,C=qi,P=J,L=Nt,N=Vi,M=ft,I=nn,F=Bi,D=vn,q=Ui,V=rn,B=Ht,U=Hi,H=R,W=Wi,G=H.f,Y=W.f,X=n.RangeError,$=n.TypeError,Z=n.Uint8Array,ee=Array.prototype,te=s.ArrayBuffer,ne=s.DataView,ie=N(0),re=N(2),oe=N(3),ae=N(4),le=N(5),ce=N(6),ue=M(!0),de=M(!1),fe=F.values,he=F.keys,pe=F.entries,me=ee.lastIndexOf,ge=ee.reduce,ve=ee.reduceRight,ye=ee.join,be=ee.sort,Ee=ee.slice,we=ee.toString,_e=ee.toLocaleString,ke=L("iterator"),Se=L("toStringTag"),Te=P("typed_constructor"),xe=P("def_constructor"),Ae=o.CONSTR,Oe=o.TYPED,Ce=o.VIEW,je=N(1,function(e,t){return Re(I(e,e[xe]),t)}),Pe=i(function(){return 1===new Z(new Uint16Array([1]).buffer)[0]}),Ne=!!Z&&!!Z.prototype.set&&i(function(){new Z(1).set({})}),Me=function(e,t){var n=h(e);if(n<0||n%t)throw X("Wrong offset!");return n},Ie=function(e){if(k(e)&&Oe in e)return e;throw $(e+" is not a typed array!")},Re=function(e,t){if(!(k(e)&&Te in e))throw $("It is not a typed array constructor!");return new e(t)},ze=function(e,t){return De(I(e,e[xe]),t)},De=function(e,t){for(var n=0,i=t.length,r=Re(e,i);i>n;)r[n]=t[n++];return r},qe=function(e,t,n){G(e,t,{get:function(){return this._d[n]}})},Ve=function(e){var t,n,i,r,o,s,l=S(e),c=arguments.length,u=c>1?arguments[1]:void 0,d=void 0!==u,f=C(l);if(void 0!=f&&!T(f)){for(s=f.call(l),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);l=i}for(d&&c>2&&(u=a(u,arguments[2],2)),t=0,n=Fe(l.length),r=Re(this,n);n>t;t++)r[t]=d?u(l[t],t):l[t];return r},Be=function(){for(var e=0,t=arguments.length,n=Re(this,t);t>e;)n[e]=arguments[e++];return n},Ue=!!Z&&i(function(){_e.call(new Z(1))}),He=function(){return _e.apply(Ue?Ee.call(Ie(this)):Ie(this),arguments)},We={copyWithin:function(e,t){return U.call(Ie(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ae(Ie(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return B.apply(Ie(this),arguments)},filter:function(e){return ze(this,re(Ie(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return le(Ie(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ce(Ie(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){ie(Ie(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return de(Ie(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ue(Ie(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ye.apply(Ie(this),arguments)},lastIndexOf:function(e){return me.apply(Ie(this),arguments)},map:function(e){return je(Ie(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return ge.apply(Ie(this),arguments)},reduceRight:function(e){return ve.apply(Ie(this),arguments)},reverse:function(){for(var e,t=Ie(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return oe(Ie(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return be.call(Ie(this),e)},subarray:function(e,t){var n=Ie(this),i=n.length,r=y(e,i);return new(I(n,n[xe]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,m((void 0===t?i:y(t,i))-r))}},Ge=function(e,t){return ze(this,Ee.call(Ie(this),e,t))},Ye=function(e){Ie(this);var t=Me(arguments[1],1),n=this.length,i=S(e),r=m(i.length),o=0;if(r+t>n)throw X("Wrong length!");for(;o<r;)this[t+o]=i[o++]},Ke={entries:function(){return pe.call(Ie(this))},keys:function(){return he.call(Ie(this))},values:function(){return fe.call(Ie(this))}},Qe=function(e,t){return k(e)&&e[Oe]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Je=function(e,t){return Qe(e,t=b(t,!0))?u(2,e[t]):Y(e,t)},Xe=function(e,t,n){return!(Qe(e,t=b(t,!0))&&k(n)&&E(n,"value"))||E(n,"get")||E(n,"set")||n.configurable||E(n,"writable")&&!n.writable||E(n,"enumerable")&&!n.enumerable?G(e,t,n):(e[t]=n.value,e)};Ae||(W.f=Je,H.f=Xe),r(r.S+r.F*!Ae,"Object",{getOwnPropertyDescriptor:Je,defineProperty:Xe}),i(function(){we.call({})})&&(we=_e=function(){return ye.call(this)});var $e=f({},We);f($e,Ke),d($e,ke,Ke.values),f($e,{slice:Ge,set:Ye,constructor:function(){},toString:we,toLocaleString:He}),qe($e,"buffer","b"),qe($e,"byteOffset","o"),qe($e,"byteLength","l"),qe($e,"length","e"),G($e,Se,{get:function(){return this[Oe]}}),e.exports=function(e,s,a,c){var u=e+((c=!!c)?"Clamped":"")+"Array",f="get"+e,h="set"+e,p=n[u],v=p||{},y=p&&A(p),b=!p||!o.ABV,E={},_=p&&p.prototype,S=function(e,t){G(e,t,{get:function(){return function(e,t){var n=e._d;return n.v[f](t*s+n.o,Pe)}(this,t)},set:function(e){return function(e,t,n){var i=e._d;c&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[h](t*s+i.o,n,Pe)}(this,t,e)},enumerable:!0})};b?(p=a(function(e,t,n,i){l(e,p,u,"_d");var r,o,a,c,f=0,h=0;if(k(t)){if(!(t instanceof te||"ArrayBuffer"==(c=w(t))||"SharedArrayBuffer"==c))return Oe in t?De(p,t):Ve.call(p,t);r=t,h=Me(n,s);var v=t.byteLength;if(void 0===i){if(v%s)throw X("Wrong length!");if((o=v-h)<0)throw X("Wrong length!")}else if((o=m(i)*s)+h>v)throw X("Wrong length!");a=o/s}else a=g(t),r=new te(o=a*s);for(d(e,"_d",{b:r,o:h,l:o,e:a,v:new ne(r)});f<a;)S(e,f++)}),_=p.prototype=x($e),d(_,"constructor",p)):i(function(){p(1)})&&i(function(){new p(-1)})&&q(function(e){new p,new p(null),new p(1.5),new p(e)},!0)||(p=a(function(e,t,n,i){var r;return l(e,p,u),k(t)?t instanceof te||"ArrayBuffer"==(r=w(t))||"SharedArrayBuffer"==r?void 0!==i?new v(t,Me(n,s),i):void 0!==n?new v(t,Me(n,s)):new v(t):Oe in t?De(p,t):Ve.call(p,t):new v(g(t))}),ie(y!==Function.prototype?O(v).concat(O(y)):O(v),function(e){e in p||d(p,e,v[e])}),p.prototype=_,t||(_.constructor=p));var T=_[ke],C=!!T&&("values"==T.name||void 0==T.name),j=Ke.values;d(p,Te,!0),d(_,Oe,u),d(_,Ce,!0),d(_,xe,p),(c?new p(1)[Se]==u:Se in _)||G(_,Se,{get:function(){return u}}),E[u]=p,r(r.G+r.W+r.F*(p!=v),E),r(r.S,u,{BYTES_PER_ELEMENT:s}),r(r.S+r.F*i(function(){v.of.call(p,1)}),u,{from:Ve,of:Be}),"BYTES_PER_ELEMENT"in _||d(_,"BYTES_PER_ELEMENT",s),r(r.P,u,We),V(u),r(r.P+r.F*Ne,u,{set:Ye}),r(r.P+r.F*!C,u,Ke),t||_.toString==we||(_.toString=we),r(r.P+r.F*i(function(){new p(1).slice()}),u,{slice:Ge}),r(r.P+r.F*(i(function(){return[1,2].toLocaleString()!=new p([1,2]).toLocaleString()})||!i(function(){_.toLocaleString.call([1,2])})),u,{toLocaleString:He}),D[u]=C?T:j,t||C||d(_,ke,j)}}else e.exports=function(){}}),Yi=Object.freeze({default:Gi,__moduleExports:Gi}),Ki=Yi&&Gi||Yi;Ki("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),Ki("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var Qi=function(e,t,n,i){try{return i?t(O(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&O(r.call(e)),t}},Ji=Object.freeze({default:Qi,__moduleExports:Qi}),Xi=Ji&&Qi||Ji,$i=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,s){var a,l,c,u,d=s?function(){return e}:qi(e),f=se(r,o,i?2:1),h=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(Di(d)){for(a=Fe(e.length);a>h;h++)if((u=i?f(O(l=e[h])[0],l[1]):f(e[h]))===t||u===n)return u}else for(c=d.call(e);!(l=c.next()).done;)if((u=Xi(c,f,l.value,i))===t||u===n)return u};i.BREAK=t,i.RETURN=n}),Zi=Object.freeze({default:$i,__moduleExports:$i}),er=t(function(e){var t=J("meta"),n=R.f,i=0,r=Object.isExtensible||function(){return!0},o=!p(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},a=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!c(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!Q(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!Q(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&a.NEED&&r(e)&&!Q(e,t)&&s(e),e}}}),tr=er.KEY,nr=er.NEED,ir=er.fastKey,rr=er.getWeak,or=er.onFreeze,sr=Object.freeze({default:er,__moduleExports:er,KEY:tr,NEED:nr,fastKey:ir,getWeak:rr,onFreeze:or}),ar=function(e,t){if(!c(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},lr=Object.freeze({default:ar,__moduleExports:ar}),cr=Zi&&$i||Zi,ur=sr&&er||sr,dr=lr&&ar||lr,fr=R.f,hr=ur.fastKey,pr=_?"_s":"size",mr=function(e,t){var n,i=hr(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},gr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Vt(e,r,t,"_i"),e._t=t,e._i=ci(null),e._f=void 0,e._l=void 0,e[pr]=0,void 0!=o&&cr(o,n,e[i],e)});return qt(r.prototype,{clear:function(){for(var e=dr(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[pr]=0},delete:function(e){var n=dr(this,t),i=mr(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[pr]--}return!!i},forEach:function(e){dr(this,t);for(var n,i=se(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!mr(dr(this,t),e)}}),_&&fr(r.prototype,"size",{get:function(){return dr(this,t)[pr]}}),r},def:function(e,t,n){var i,r,o=mr(e,t);return o?o.v=n:(e._l=o={i:r=hr(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[pr]++,"F"!==r&&(e._i[r]=o)),e},getEntry:mr,setStrong:function(e,t,n){_i(e,t,function(e,n){this._t=dr(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?wi(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,wi(1))},n?"entries":"values",!n,!0),rn(t)}},vr=gr.getConstructor,yr=gr.def,br=gr.getEntry,Er=gr.setStrong,wr=Object.freeze({default:gr,__moduleExports:gr,getConstructor:vr,def:yr,getEntry:br,setStrong:Er}),_r=function(e,t){if(O(e),!c(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},kr={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=se(Function.call,Wi.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return _r(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:_r},Sr=kr.set,Tr=kr.check,xr=Object.freeze({default:kr,__moduleExports:kr,set:Sr,check:Tr}),Ar=xr&&kr||xr,Or=Ar.set,Cr=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&c(i)&&Or&&Or(e,i),e},jr=Object.freeze({default:Cr,__moduleExports:Cr}),Pr=jr&&Cr||jr,Lr=function(e,t,n,i,r,o){var s=v[e],a=s,l=r?"set":"add",u=a&&a.prototype,d={},f=function(e){var t=u[e];oe(u,e,"delete"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return o&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof a&&(o||u.forEach&&!p(function(){(new a).entries().next()}))){var h=new a,m=h[l](o?{}:-0,1)!=h,g=p(function(){h.has(1)}),y=Ui(function(e){new a(e)}),b=!o&&p(function(){for(var e=new a,t=5;t--;)e[l](t,t);return!e.has(-0)});y||((a=t(function(t,n){Vt(t,a,e);var i=Pr(new s,t,a);return void 0!=n&&cr(n,r,i[l],i),i})).prototype=u,u.constructor=a),(g||b)&&(f("delete"),f("has"),r&&f("get")),(b||m)&&f(l),o&&u.clear&&delete u.clear}else a=i.getConstructor(t,e,r,l),qt(a.prototype,n),ur.NEED=!0;return Wt(a,e),d[e]=a,en(en.G+en.W+en.F*(a!=s),d),o||i.setStrong(a,e,r),a},Nr=Object.freeze({default:Lr,__moduleExports:Lr}),Mr=wr&&gr||wr,Ir=Nr&&Lr||Nr,Fr=(Ir("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Mr.getEntry(dr(this,"Map"),e);return t&&t.v},set:function(e,t){return Mr.def(dr(this,"Map"),0===e?0:e,t)}},Mr,!0),Ir("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Mr.def(dr(this,"Set"),e=0===e?0:e,e)}},Mr),Object.getOwnPropertySymbols),Rr={f:Fr},zr=Object.freeze({default:Rr,__moduleExports:Rr,f:Fr}),Dr=zr&&Rr||zr,qr=Object.assign,Vr=!qr||p(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=qr({},e)[n]||Object.keys(qr({},t)).join("")!=i})?function(e,t){for(var n=Ot(e),i=arguments.length,r=1,o=Dr.f,s=Mi.f;i>r;)for(var a,l=Ye(arguments[r++]),c=o?Sn(l).concat(o(l)):Sn(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:qr,Br=Object.freeze({default:Vr,__moduleExports:Vr}),Ur=ur.getWeak,Hr=Vi(5),Wr=Vi(6),Gr=0,Yr=function(e){return e._l||(e._l=new Kr)},Kr=function(){this.a=[]},Qr=function(e,t){return Hr(e.a,function(e){return e[0]===t})};Kr.prototype={get:function(e){var t=Qr(this,e);if(t)return t[1]},has:function(e){return!!Qr(this,e)},set:function(e,t){var n=Qr(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Wr(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Jr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Vt(e,r,t,"_i"),e._t=t,e._i=Gr++,e._l=void 0,void 0!=o&&cr(o,n,e[i],e)});return qt(r.prototype,{delete:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Yr(dr(this,t)).delete(e):n&&Q(n,this._i)&&delete n[this._i]},has:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Yr(dr(this,t)).has(e):n&&Q(n,this._i)}}),r},def:function(e,t,n){var i=Ur(O(t),!0);return!0===i?Yr(e).set(t,n):i[e._i]=n,e},ufstore:Yr},Xr=Jr.getConstructor,$r=Jr.def,Zr=Jr.ufstore,eo=Object.freeze({default:Jr,__moduleExports:Jr,getConstructor:Xr,def:$r,ufstore:Zr}),to=Br&&Vr||Br,no=eo&&Jr||eo;t(function(e){var t,n=Vi(0),i=ur.getWeak,r=Object.isExtensible,o=no.ufstore,s={},a=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},l={get:function(e){if(c(e)){var t=i(e);return!0===t?o(dr(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return no.def(dr(this,"WeakMap"),e,t)}},u=e.exports=Ir("WeakMap",a,l,no,!0,!0);p(function(){return 7!=(new u).set((Object.freeze||Object)(s),7).get(s)})&&(t=no.getConstructor(a,"WeakMap"),to(t.prototype,l),ur.NEED=!0,n(["delete","has","get","set"],function(e){var n=u.prototype,i=n[e];oe(n,e,function(n,o){if(c(n)&&!r(n)){this._f||(this._f=new t);var s=this._f[e](n,o);return"set"==e?this:s}return i.call(this,n,o)})}))});Ir("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return no.def(dr(this,"WeakSet"),e,!0)}},no,!1,!0);var io=(v.Reflect||{}).apply,ro=Function.apply;en(en.S+en.F*!p(function(){io(function(){})}),"Reflect",{apply:function(e,t,n){var i=ne(e),r=O(n);return io?io(i,t,r):ro.call(i,t,r)}});var oo=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},so=Object.freeze({default:oo,__moduleExports:oo}),ao=so&&oo||so,lo=[].slice,co={},uo=Function.bind||function(e){var t=ne(this),n=lo.call(arguments,1),i=function(){var r=n.concat(lo.call(arguments));return this instanceof i?function(e,t,n){if(!(t in co)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";co[t]=Function("F,a","return new F("+i.join(",")+")")}return co[t](e,n)}(t,r.length,r):ao(t,r,e)};return c(t.prototype)&&(i.prototype=t.prototype),i},fo=Object.freeze({default:uo,__moduleExports:uo}),ho=fo&&uo||fo,po=(v.Reflect||{}).construct,mo=p(function(){function e(){}return!(po(function(){},[],e)instanceof e)}),go=!p(function(){po(function(){})});en(en.S+en.F*(mo||go),"Reflect",{construct:function(e,t){ne(e),O(t);var n=arguments.length<3?e:ne(arguments[2]);if(go&&!mo)return po(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(ho.apply(e,i))}var r=n.prototype,o=ci(c(r)?r:Object.prototype),s=Function.apply.call(e,o,t);return c(s)?s:o}}),en(en.S+en.F*p(function(){Reflect.defineProperty(R.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){O(e),t=j(t,!0),O(n);try{return R.f(e,t,n),!0}catch(e){return!1}}});var vo=Wi.f;en(en.S,"Reflect",{deleteProperty:function(e,t){var n=vo(O(e),t);return!(n&&!n.configurable)&&delete e[t]}}),en(en.S,"Reflect",{get:function e(t,n){var i,r,o=arguments.length<3?t:arguments[2];return O(t)===o?t[n]:(i=Wi.f(t,n))?Q(i,"value")?i.value:void 0!==i.get?i.get.call(o):void 0:c(r=pi(t))?e(r,n,o):void 0}}),en(en.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return Wi.f(O(e),t)}}),en(en.S,"Reflect",{getPrototypeOf:function(e){return pi(O(e))}}),en(en.S,"Reflect",{has:function(e,t){return t in e}});var yo=Object.isExtensible;en(en.S,"Reflect",{isExtensible:function(e){return O(e),!yo||yo(e)}});var bo=v.Reflect,Eo=bo&&bo.ownKeys||function(e){var t=Ut.f(O(e)),n=Dr.f;return n?t.concat(n(e)):t},wo=Object.freeze({default:Eo,__moduleExports:Eo}),_o=wo&&Eo||wo;en(en.S,"Reflect",{ownKeys:_o});var ko=Object.preventExtensions;en(en.S,"Reflect",{preventExtensions:function(e){O(e);try{return ko&&ko(e),!0}catch(e){return!1}}}),en(en.S,"Reflect",{set:function e(t,n,i){var r,o,s=arguments.length<4?t:arguments[3],a=Wi.f(O(t),n);if(!a){if(c(o=pi(t)))return e(o,n,i,s);a=z(0)}return Q(a,"value")?!(!1===a.writable||!c(s)||((r=Wi.f(s,n)||z(0)).value=i,R.f(s,n,r),0)):void 0!==a.set&&(a.set.call(s,i),!0)}}),Ar&&en(en.S,"Reflect",{setPrototypeOf:function(e,t){Ar.check(e,t);try{return Ar.set(e,t),!0}catch(e){return!1}}});var So,To,xo,Ao=v.process,Oo=v.setImmediate,Co=v.clearImmediate,jo=v.MessageChannel,Po=v.Dispatch,Lo=0,No={},Mo=function(){var e=+this;if(No.hasOwnProperty(e)){var t=No[e];delete No[e],t()}},Io=function(e){Mo.call(e.data)};Oo&&Co||(Oo=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return No[++Lo]=function(){ao("function"==typeof e?e:Function(e),t)},So(Lo),Lo},Co=function(e){delete No[e]},"process"==Be(Ao)?So=function(e){Ao.nextTick(se(Mo,e,1))}:Po&&Po.now?So=function(e){Po.now(se(Mo,e,1))}:jo?(xo=(To=new jo).port2,To.port1.onmessage=Io,So=se(xo.postMessage,xo,1)):v.addEventListener&&"function"==typeof postMessage&&!v.importScripts?(So=function(e){v.postMessage(e+"","*")},v.addEventListener("message",Io,!1)):So="onreadystatechange"in k("script")?function(e){Pn.appendChild(k("script")).onreadystatechange=function(){Pn.removeChild(this),Mo.call(e)}}:function(e){setTimeout(se(Mo,e,1),0)});var Fo={set:Oo,clear:Co},Ro=Fo.set,zo=Fo.clear,Do=Object.freeze({default:Fo,__moduleExports:Fo,set:Ro,clear:zo}),qo=Do&&Fo||Do,Vo=qo.set,Bo=v.MutationObserver||v.WebKitMutationObserver,Uo=v.process,Ho=v.Promise,Wo="process"==Be(Uo),Go=function(){var e,t,n,i=function(){var i,r;for(Wo&&(i=Uo.domain)&&i.exit();e;){r=e.fn,e=e.next;try{r()}catch(i){throw e?n():t=void 0,i}}t=void 0,i&&i.enter()};if(Wo)n=function(){Uo.nextTick(i)};else if(!Bo||v.navigator&&v.navigator.standalone)if(Ho&&Ho.resolve){var r=Ho.resolve();n=function(){r.then(i)}}else n=function(){Vo.call(v,i)};else{var o=!0,s=document.createTextNode("");new Bo(i).observe(s,{characterData:!0}),n=function(){s.data=o=!o}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}},Yo=Object.freeze({default:Go,__moduleExports:Go});var Ko,Qo,Jo,Xo,$o=function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=ne(t),this.reject=ne(n)}(e)},Zo={f:$o},es=Object.freeze({default:Zo,__moduleExports:Zo,f:$o}),ts=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},ns=Object.freeze({default:ts,__moduleExports:ts}),is=es&&Zo||es,rs=function(e,t){if(O(e),c(t)&&t.constructor===e)return t;var n=is.f(e);return(0,n.resolve)(t),n.promise},os=Object.freeze({default:rs,__moduleExports:rs}),ss=Yo&&Go||Yo,as=ns&&ts||ns,ls=os&&rs||os,cs=qo.set,us=ss(),ds=v.TypeError,fs=v.process,hs=v.Promise,ps="process"==Vn(fs),ms=function(){},gs=Qo=is.f,vs=!!function(){try{var e=hs.resolve(1),t=(e.constructor={})[Nt("species")]=function(e){e(ms,ms)};return(ps||"function"==typeof PromiseRejectionEvent)&&e.then(ms)instanceof t}catch(e){}}(),ys=function(e){var t;return!(!c(e)||"function"!=typeof(t=e.then))&&t},bs=function(e,t){if(!e._n){e._n=!0;var n=e._c;us(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&_s(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(ds("Promise-chain cycle")):(o=ys(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Es(e)})}},Es=function(e){cs.call(v,function(){var t,n,i,r=e._v,o=ws(e);if(o&&(t=as(function(){ps?fs.emit("unhandledRejection",r,e):(n=v.onunhandledrejection)?n({promise:e,reason:r}):(i=v.console)&&i.error&&i.error("Unhandled promise rejection",r)}),e._h=ps||ws(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},ws=function(e){return 1!==e._h&&0===(e._a||e._c).length},_s=function(e){cs.call(v,function(){var t;ps?fs.emit("rejectionHandled",e):(t=v.onrejectionhandled)&&t({promise:e,reason:e._v})})},ks=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),bs(t,!0))},Ss=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw ds("Promise can't be resolved itself");(t=ys(e))?us(function(){var i={_w:n,_d:!1};try{t.call(e,se(Ss,i,1),se(ks,i,1))}catch(e){ks.call(i,e)}}):(n._v=e,n._s=1,bs(n,!1))}catch(e){ks.call({_w:n,_d:!1},e)}}};vs||(hs=function(e){Vt(this,hs,"Promise","_h"),ne(e),Ko.call(this);try{e(se(Ss,this,1),se(ks,this,1))}catch(e){ks.call(this,e)}},(Ko=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=qt(hs.prototype,{then:function(e,t){var n=gs(nn(this,hs));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=ps?fs.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&bs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Jo=function(){var e=new Ko;this.promise=e,this.resolve=se(Ss,e,1),this.reject=se(ks,e,1)},is.f=gs=function(e){return e===hs||e===Xo?new Jo(e):Qo(e)}),en(en.G+en.W+en.F*!vs,{Promise:hs}),Wt(hs,"Promise"),rn("Promise"),Xo=X.Promise,en(en.S+en.F*!vs,"Promise",{reject:function(e){var t=gs(this);return(0,t.reject)(e),t.promise}}),en(en.S+en.F*(zt||!vs),"Promise",{resolve:function(e){return ls(zt&&this===Xo?hs:this,e)}}),en(en.S+en.F*!(vs&&Ui(function(e){hs.all(e).catch(ms)})),"Promise",{all:function(e){var t=this,n=gs(t),i=n.resolve,r=n.reject,o=as(function(){var n=[],o=0,s=1;cr(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=gs(t),i=n.reject,r=as(function(){cr(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Ts=Nt,xs={f:Ts},As=Object.freeze({default:xs,__moduleExports:xs,f:Ts}),Os=As&&xs||As,Cs=R.f,js=function(e){var t=X.Symbol||(X.Symbol=zt?{}:v.Symbol||{});"_"==e.charAt(0)||e in t||Cs(t,e,{value:Os.f(e)})},Ps=Object.freeze({default:js,__moduleExports:js}),Ls=function(e){var t=Sn(e),n=Dr.f;if(n)for(var i,r=n(e),o=Mi.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t},Ns=Object.freeze({default:Ls,__moduleExports:Ls}),Ms=Ut.f,Is={}.toString,Fs="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Rs=function(e){return Fs&&"[object Window]"==Is.call(e)?function(e){try{return Ms(e)}catch(e){return Fs.slice()}}(e):Ms(tt(e))},zs={f:Rs},Ds=Object.freeze({default:zs,__moduleExports:zs,f:Rs}),qs=Ps&&js||Ps,Vs=Ns&&Ls||Ns,Bs=Ds&&zs||Ds,Us=ur.KEY,Hs=Wi.f,Ws=R.f,Gs=Bs.f,Ys=v.Symbol,Ks=v.JSON,Qs=Ks&&Ks.stringify,Js=Nt("_hidden"),Xs=Nt("toPrimitive"),$s={}.propertyIsEnumerable,Zs=lt("symbol-registry"),ea=lt("symbols"),ta=lt("op-symbols"),na=Object.prototype,ia="function"==typeof Ys,ra=v.QObject,oa=!ra||!ra.prototype||!ra.prototype.findChild,sa=_&&p(function(){return 7!=ci(Ws({},"a",{get:function(){return Ws(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Hs(na,t);i&&delete na[t],Ws(e,t,n),i&&e!==na&&Ws(na,t,i)}:Ws,aa=function(e){var t=ea[e]=ci(Ys.prototype);return t._k=e,t},la=ia&&"symbol"==typeof Ys.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Ys},ca=function(e,t,n){return e===na&&ca(ta,t,n),O(e),t=j(t,!0),O(n),Q(ea,t)?(n.enumerable?(Q(e,Js)&&e[Js][t]&&(e[Js][t]=!1),n=ci(n,{enumerable:z(0,!1)})):(Q(e,Js)||Ws(e,Js,z(1,{})),e[Js][t]=!0),sa(e,t,n)):Ws(e,t,n)},ua=function(e,t){O(e);for(var n,i=Vs(t=tt(t)),r=0,o=i.length;o>r;)ca(e,n=i[r++],t[n]);return e},da=function(e){var t=$s.call(this,e=j(e,!0));return!(this===na&&Q(ea,e)&&!Q(ta,e))&&(!(t||!Q(this,e)||!Q(ea,e)||Q(this,Js)&&this[Js][e])||t)},fa=function(e,t){if(e=tt(e),t=j(t,!0),e!==na||!Q(ea,t)||Q(ta,t)){var n=Hs(e,t);return!n||!Q(ea,t)||Q(e,Js)&&e[Js][t]||(n.enumerable=!0),n}},ha=function(e){for(var t,n=Gs(tt(e)),i=[],r=0;n.length>r;)Q(ea,t=n[r++])||t==Js||t==Us||i.push(t);return i},pa=function(e){for(var t,n=e===na,i=Gs(n?ta:tt(e)),r=[],o=0;i.length>o;)!Q(ea,t=i[o++])||n&&!Q(na,t)||r.push(ea[t]);return r};ia||(oe((Ys=function(){if(this instanceof Ys)throw TypeError("Symbol is not a constructor!");var e=J(arguments.length>0?arguments[0]:void 0),t=function(n){this===na&&t.call(ta,n),Q(this,Js)&&Q(this[Js],e)&&(this[Js][e]=!1),sa(this,e,z(1,n))};return _&&oa&&sa(na,e,{configurable:!0,set:t}),aa(e)}).prototype,"toString",function(){return this._k}),Wi.f=fa,R.f=ca,Ut.f=Bs.f=ha,Mi.f=da,Dr.f=pa,_&&!zt&&oe(na,"propertyIsEnumerable",da,!0),Os.f=function(e){return aa(Nt(e))}),en(en.G+en.W+en.F*!ia,{Symbol:Ys});for(var ma="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ga=0;ma.length>ga;)Nt(ma[ga++]);for(var va=Sn(Nt.store),ya=0;va.length>ya;)qs(va[ya++]);en(en.S+en.F*!ia,"Symbol",{for:function(e){return Q(Zs,e+="")?Zs[e]:Zs[e]=Ys(e)},keyFor:function(e){if(!la(e))throw TypeError(e+" is not a symbol!");for(var t in Zs)if(Zs[t]===e)return t},useSetter:function(){oa=!0},useSimple:function(){oa=!1}}),en(en.S+en.F*!ia,"Object",{create:function(e,t){return void 0===t?ci(e):ua(ci(e),t)},defineProperty:ca,defineProperties:ua,getOwnPropertyDescriptor:fa,getOwnPropertyNames:ha,getOwnPropertySymbols:pa}),Ks&&en(en.S+en.F*(!ia||p(function(){var e=Ys();return"[null]"!=Qs([e])||"{}"!=Qs({a:e})||"{}"!=Qs(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],r=1;arguments.length>r;)i.push(arguments[r++]);if(n=t=i[1],(c(t)||void 0!==e)&&!la(e))return Yn(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!la(t))return t}),i[1]=t,Qs.apply(Ks,i)}}),Ys.prototype[Xs]||K(Ys.prototype,Xs,Ys.prototype.valueOf),Wt(Ys,"Symbol"),Wt(Math,"Math",!0),Wt(v.JSON,"JSON",!0);var ba=function(e,t){var n=(X.Object||{})[e]||Object[e],i={};i[e]=t(n),en(en.S+en.F*p(function(){n(1)}),"Object",i)},Ea=Object.freeze({default:ba,__moduleExports:ba}),wa=Ea&&ba||Ea,_a=ur.onFreeze;wa("freeze",function(e){return function(t){return e&&c(t)?e(_a(t)):t}});var ka=ur.onFreeze;wa("seal",function(e){return function(t){return e&&c(t)?e(ka(t)):t}});var Sa=ur.onFreeze;wa("preventExtensions",function(e){return function(t){return e&&c(t)?e(Sa(t)):t}}),wa("isFrozen",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isSealed",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isExtensible",function(e){return function(t){return!!c(t)&&(!e||e(t))}});var Ta=Wi.f;wa("getOwnPropertyDescriptor",function(){return function(e,t){return Ta(tt(e),t)}}),wa("getPrototypeOf",function(){return function(e){return pi(Ot(e))}}),wa("keys",function(){return function(e){return Sn(Ot(e))}}),wa("getOwnPropertyNames",function(){return Bs.f}),en(en.S+en.F,"Object",{assign:to});var xa=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},Aa=Object.freeze({default:xa,__moduleExports:xa}),Oa=Aa&&xa||Aa;en(en.S,"Object",{is:Oa});var Ca=R.f,ja=Function.prototype,Pa=/^\s*function ([^ (]*)/;"name"in ja||_&&Ca(ja,"name",{configurable:!0,get:function(){try{return(""+this).match(Pa)[1]}catch(e){return""}}}),en(en.S,"String",{raw:function(e){for(var t=tt(e.raw),n=Fe(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var La=String.fromCharCode,Na=String.fromCodePoint;en(en.S+en.F*(!!Na&&1!=Na.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],nt(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?La(t):La(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Ma=function(e){return function(t,n){var i,r,o=String(Ke(t)),s=Le(n),a=o.length;return s<0||s>=a?e?"":void 0:(i=o.charCodeAt(s))<55296||i>56319||s+1===a||(r=o.charCodeAt(s+1))<56320||r>57343?e?o.charAt(s):i:e?o.slice(s,s+2):r-56320+(i-55296<<10)+65536}},Ia=Object.freeze({default:Ma,__moduleExports:Ma}),Fa=(Ia&&Ma||Ia)(!1);en(en.P,"String",{codePointAt:function(e){return Fa(this,e)}});var Ra=function(e){var t=String(Ke(this)),n="",i=Le(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n},za=Object.freeze({default:Ra,__moduleExports:Ra}),Da=za&&Ra||za;en(en.P,"String",{repeat:Da});var qa=Nt("match"),Va=function(e){var t;return c(e)&&(void 0!==(t=e[qa])?!!t:"RegExp"==Be(e))},Ba=Object.freeze({default:Va,__moduleExports:Va}),Ua=Ba&&Va||Ba,Ha=function(e,t,n){if(Ua(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Ke(e))},Wa=Object.freeze({default:Ha,__moduleExports:Ha}),Ga=Nt("match"),Ya=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ga]=!1,!"/./"[e](t)}catch(e){}}return!0},Ka=Object.freeze({default:Ya,__moduleExports:Ya}),Qa=Wa&&Ha||Wa,Ja=Ka&&Ya||Ka,Xa="".startsWith;en(en.P+en.F*Ja("startsWith"),"String",{startsWith:function(e){var t=Qa(this,e,"startsWith"),n=Fe(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Xa?Xa.call(t,i,n):t.slice(n,n+i.length)===i}});var $a="".endsWith;en(en.P+en.F*Ja("endsWith"),"String",{endsWith:function(e){var t=Qa(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=Fe(t.length),r=void 0===n?i:Math.min(Fe(n),i),o=String(e);return $a?$a.call(t,o,r):t.slice(r-o.length,r)===o}});en(en.P+en.F*Ja("includes"),"String",{includes:function(e){return!!~Qa(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var Za=function(){var e=O(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},el=Object.freeze({default:Za,__moduleExports:Za}),tl=el&&Za||el;_&&"g"!=/./g.flags&&R.f(RegExp.prototype,"flags",{configurable:!0,get:tl});var nl=function(e,t,n){var i=Nt(e),r=n(Ke,i,""[e]),o=r[0],s=r[1];p(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(oe(String.prototype,e,o),K(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))},il=Object.freeze({default:nl,__moduleExports:nl}),rl=il&&nl||il;rl("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),rl("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("split",2,function(e,t,n){var i=Ua,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,m=void 0===t?4294967295:t>>>0,g=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+g.source+"$(?!\\s)",h));(l=g.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=m));)g.lastIndex===l.index&&g.lastIndex++;return p===n.length?!u&&g.test("")||f.push(""):f.push(n.slice(p)),f.length>m?f.slice(0,m):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var ol=function(e,t,n){t in e?R.f(e,t,z(0,n)):e[t]=n},sl=Object.freeze({default:ol,__moduleExports:ol}),al=sl&&ol||sl;en(en.S+en.F*!Ui(function(e){}),"Array",{from:function(e){var t,n,i,r,o=Ot(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=qi(o);if(c&&(l=se(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&Di(d))for(n=new s(t=Fe(o.length));t>u;u++)al(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)al(n,u,c?Xi(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),en(en.S+en.F*p(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)al(n,e,arguments[e++]);return n.length=t,n}}),en(en.P,"Array",{copyWithin:Hi}),Ei("copyWithin");var ll=Vi(5),cl=!0;"find"in[]&&Array(1).find(function(){cl=!1}),en(en.P+en.F*cl,"Array",{find:function(e){return ll(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("find");var ul=Vi(6),dl=!0;"findIndex"in[]&&Array(1).findIndex(function(){dl=!1}),en(en.P+en.F*dl,"Array",{findIndex:function(e){return ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("findIndex"),en(en.P,"Array",{fill:Ht}),Ei("fill");var fl=v.isFinite;en(en.S,"Number",{isFinite:function(e){return"number"==typeof e&&fl(e)}});var hl=Math.floor,pl=function(e){return!c(e)&&isFinite(e)&&hl(e)===e},ml=Object.freeze({default:pl,__moduleExports:pl}),gl=ml&&pl||ml;en(en.S,"Number",{isInteger:gl});var vl=Math.abs;en(en.S,"Number",{isSafeInteger:function(e){return gl(e)&&vl(e)<=9007199254740991}}),en(en.S,"Number",{isNaN:function(e){return e!=e}}),en(en.S,"Number",{EPSILON:Math.pow(2,-52)}),en(en.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),en(en.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var yl=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},bl=Object.freeze({default:yl,__moduleExports:yl}),El=bl&&yl||bl,wl=Math.sqrt,_l=Math.acosh;en(en.S+en.F*!(_l&&710==Math.floor(_l(Number.MAX_VALUE))&&_l(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:El(e-1+wl(e-1)*wl(e+1))}});var kl=Math.asinh;en(en.S+en.F*!(kl&&1/kl(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var Sl=Math.atanh;en(en.S+en.F*!(Sl&&1/Sl(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var Tl=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1},xl=Object.freeze({default:Tl,__moduleExports:Tl}),Al=xl&&Tl||xl;en(en.S,"Math",{cbrt:function(e){return Al(e=+e)*Math.pow(Math.abs(e),1/3)}}),en(en.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var Ol=Math.exp;en(en.S,"Math",{cosh:function(e){return(Ol(e=+e)+Ol(-e))/2}});var Cl=Math.expm1,jl=!Cl||Cl(10)>22025.465794806718||Cl(10)<22025.465794806718||-2e-17!=Cl(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:Cl,Pl=Object.freeze({default:jl,__moduleExports:jl}),Ll=Pl&&jl||Pl;en(en.S+en.F*(Ll!=Math.expm1),"Math",{expm1:Ll});var Nl=Math.pow,Ml=Nl(2,-52),Il=Nl(2,-23),Fl=Nl(2,127)*(2-Il),Rl=Nl(2,-126),zl=Math.fround||function(e){var t,n,i=Math.abs(e),r=Al(e);return i<Rl?r*(i/Rl/Il+1/Ml-1/Ml)*Rl*Il:(n=(t=(1+Il/Ml)*i)-(t-i))>Fl||n!=n?r*(1/0):r*n},Dl=Object.freeze({default:zl,__moduleExports:zl}),ql=Dl&&zl||Dl;en(en.S,"Math",{fround:ql});var Vl=Math.abs;en(en.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=Vl(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var Bl=Math.imul;en(en.S+en.F*p(function(){return-5!=Bl(4294967295,5)||2!=Bl.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),en(en.S,"Math",{log1p:El}),en(en.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),en(en.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),en(en.S,"Math",{sign:Al});var Ul=Math.exp;en(en.S+en.F*p(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(Ll(e)-Ll(-e))/2:(Ul(e-1)-Ul(-e-1))*(Math.E/2)}});var Hl=Math.exp;en(en.S,"Math",{tanh:function(e){var t=Ll(e=+e),n=Ll(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Hl(e)+Hl(-e))}}),en(en.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var Wl=ft(!0);en(en.P,"Array",{includes:function(e){return Wl(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("includes");var Gl=Mi.f,Yl=function(e){return function(t){for(var n,i=tt(t),r=Sn(i),o=r.length,s=0,a=[];o>s;)Gl.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Kl=Object.freeze({default:Yl,__moduleExports:Yl}),Ql=Kl&&Yl||Kl,Jl=Ql(!1);en(en.S,"Object",{values:function(e){return Jl(e)}});var Xl=Ql(!0);en(en.S,"Object",{entries:function(e){return Xl(e)}}),en(en.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=tt(e),r=Wi.f,o=_o(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&al(s,t,n);return s}});var $l=function(e,t,n,i){var r=String(Ke(e)),o=r.length,s=void 0===n?" ":String(n),a=Fe(t);if(a<=o||""==s)return r;var l=a-o,c=Da.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Zl=Object.freeze({default:$l,__moduleExports:$l}),ec=v.navigator,tc=ec&&ec.userAgent||"",nc=Object.freeze({default:tc,__moduleExports:tc}),ic=Zl&&$l||Zl,rc=nc&&tc||nc;en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padStart:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padEnd:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var oc=[].slice,sc=/MSIE .\./.test(rc),ac=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&oc.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};en(en.G+en.B+en.F*sc,{setTimeout:ac(v.setTimeout),setInterval:ac(v.setInterval)}),en(en.G+en.B,{setImmediate:qo.set,clearImmediate:qo.clear});for(var lc=Nt("iterator"),cc=Nt("toStringTag"),uc=vn.Array,dc={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},fc=Sn(dc),hc=0;hc<fc.length;hc++){var pc,mc=fc[hc],gc=dc[mc],vc=v[mc],yc=vc&&vc.prototype;if(yc&&(yc[lc]||K(yc,lc,uc),yc[cc]||K(yc,cc,mc),vn[mc]=uc,gc))for(pc in Bi)yc[pc]||oe(yc,pc,Bi[pc],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},m={};m[s]=function(){return this};var g=Object.getPrototypeOf,v=g&&g(g(j([])));v&&v!==i&&r.call(v,s)&&(m=v);var y=k.prototype=w.prototype=Object.create(m);_.prototype=y.constructor=k,k.constructor=_,k[l]=_.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(y),e},c.awrap=function(e){return{__await:e}},S(T.prototype),T.prototype[a]=function(){return this},c.AsyncIterator=T,c.async=function(e,t,n,i){var r=new T(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},S(y),y[l]="Generator",y[s]=function(){return this},y.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=j,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;O(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:j(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof w?t:w,o=Object.create(r.prototype),s=new C(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return P()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=x(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=E(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function w(){}function _(){}function k(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function T(t){function n(e,i,o,s){var a=E(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function x(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,x(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=E(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function j(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:P}}function P(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var bc=new window.CustomEvent("test");if(bc.preventDefault(),!0!==bc.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ec=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ec.prototype=window.Event.prototype,window.CustomEvent=Ec}var wc,_c={html5:"html5",youtube:"youtube",vimeo:"vimeo"},kc={audio:"audio",video:"video"},Sc={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.15/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisment:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},Tc=(function(){function e(e){this.value=e}function t(t){var n,i;function r(n,i){try{var s=t[n](i),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};i?i=i.next=a:(n=i=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),xc=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Ac=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Oc=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Cc={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e,t,n){var i=document.querySelector('script[src="'+e+'"]');if(null!==i)return i.callbacks=i.callbacks||[],void i.callbacks.push(t);var r=document.createElement("script");r.callbacks=r.callbacks||[],r.callbacks.push(t),r.errors=r.errors||[],r.errors.push(n),Cc.is.function(t)&&r.addEventListener("load",function(e){r.callbacks.forEach(function(t){return t.call(null,e)}),r.callbacks=null},!1),r.addEventListener("error",function(e){r.errors.forEach(function(t){return t.call(null,e)}),r.errors=null},!1),r.src=e;var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(r,o)},loadSprite:function(e,t){if(Cc.is.string(e)){var n=Cc.is.string(t);if(!n||!document.querySelectorAll("#"+t).length){var i=document.createElement("div");if(Cc.toggleHidden(i,!0),n&&i.setAttribute("id",t),jc.storage){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void s.call(i,o.content)}}Cc.fetch(e).then(function(e){Cc.is.empty(e)||(jc.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s.call(i,e))}).catch(function(){})}}function s(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Cc.is.object(t)&&Cc.setAttributes(i,t),Cc.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Cc.createElement(e,n,i))},removeElement:function(e){Cc.is.element(e)&&Cc.is.element(e.parentNode)&&(Cc.is.nodeList(e)||Cc.is.array(e)?Array.from(e).forEach(Cc.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Cc.is.element(t)&&Cc.is.element(t.parentNode)&&Cc.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Cc.is.element(e)&&!Cc.is.empty(t)&&Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})},getAttributesFromSelector:function(e,t){if(!Cc.is.string(e)||Cc.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Cc.is.object(i)&&Cc.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(Cc.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Cc.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){Cc.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=Cc.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Cc.getElements.call(this,this.config.selectors.buttons.play),pause:Cc.getElement.call(this,this.config.selectors.buttons.pause),restart:Cc.getElement.call(this,this.config.selectors.buttons.restart),rewind:Cc.getElement.call(this,this.config.selectors.buttons.rewind),forward:Cc.getElement.call(this,this.config.selectors.buttons.forward),mute:Cc.getElement.call(this,this.config.selectors.buttons.mute),pip:Cc.getElement.call(this,this.config.selectors.buttons.pip),airplay:Cc.getElement.call(this,this.config.selectors.buttons.airplay),settings:Cc.getElement.call(this,this.config.selectors.buttons.settings),captions:Cc.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Cc.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Cc.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Cc.getElement.call(this,this.config.selectors.inputs.seek),volume:Cc.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Cc.getElement.call(this,this.config.selectors.display.buffer),duration:Cc.getElement.call(this,this.config.selectors.display.duration),currentTime:Cc.getElement.call(this,this.config.selectors.display.currentTime)},Cc.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Cc.is.element(e)){var n=Cc.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Cc.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Cc.on(this.elements.container,"keydown",o,!1):Cc.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n,i,r,o){if(!Cc.is.empty(e)&&!Cc.is.empty(t)&&Cc.is.function(n))if(Cc.is.nodeList(e)||Cc.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Cc.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=!!Cc.is.boolean(o)&&o;jc.passiveListeners&&(a={passive:!Cc.is.boolean(r)||r,capture:!!Cc.is.boolean(o)&&o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e,t,n,i,r){Cc.toggleListener(e,t,n,!0,i,r)},off:function(e,t,n,i,r){Cc.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e,t,n,i){if(Cc.is.element(e)&&Cc.is.string(t)){var r=new CustomEvent(t,{bubbles:!!Cc.is.boolean(n)&&n,detail:Object.assign({},i,{plyr:Cc.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Cc.is.array(e)||Cc.is.nodeList(e))Array.from(e).forEach(function(e){return Cc.toggleState(e,t)});else if(Cc.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Cc.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Cc.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Cc.is.object(r)?(Object.keys(r).forEach(function(t){Cc.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Ac({},t,{})),Cc.extend(e[t],r[t])):Object.assign(e,Ac({},t,r[t]))}),Cc.extend.apply(Cc,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_c.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?_c.vimeo:null},parseYouTubeId:function(e){if(Cc.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Cc.is.empty(e))return null;if(Cc.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Oc(n,2),r=i[0],o=i[1];return Object.assign(e,Ac({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Cc.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Cc.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Cc.toggleHidden(e,!0),e.offsetHeight,Cc.toggleHidden(e,!1)},0)}},jc={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Cc.getBrowser(),s=o.isIPhone&&n&&jc.inline;switch(t+":"+e){case"html5:video":r=(i=jc.video)&&jc.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=jc.audio)&&jc.rangeInput;break;case"youtube:video":i=!0,r=jc.rangeInput&&(!o.isIPhone||s);break;case"vimeo:video":i=!0,r=jc.rangeInput&&!o.isIPhone;break;default:r=(i=jc.audio&&jc.video)&&jc.rangeInput}return{api:i,ui:r}},pip:!Cc.getBrowser().isIPhone&&Cc.is.function(Cc.createElement("video").webkitSetPresentationMode),airplay:Cc.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Cc.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(wc=document.createElement("input"),wc.type="range","range"===wc.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Cc.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Pc=function(){},Lc=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Tc(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return xc(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Pc}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Pc}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Pc}}]),e}(),Nc=Cc.getBrowser();function Mc(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Cc.is.element(e)&&Cc.toggleState(e,this.active),Cc.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Nc.isIos||Cc.trapFocus.call(this.player,this.target,this.active)}}function Ic(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Cc.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),Mc.call(this)}var Fc=function(){function e(t){var n=this;Tc(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},Cc.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){Mc.call(n)}),Cc.on(this.player.elements.container,"dblclick",function(){n.toggle()}),Cc.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return xc(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Cc.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Cc.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():Ic.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?Cc.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():Ic.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!Cc.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:Cc.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Cc.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return Cc.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!Cc.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),Rc=function(){function e(t){Tc(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return xc(e,[{key:"get",value:function(t){var n=window.localStorage.getItem(this.key);if(!e.supported||Cc.is.empty(n))return null;var i=JSON.parse(n);return Cc.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Cc.is.object(t)){var n=this.get();Cc.is.empty(n)&&(n={}),Cc.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),zc=function(){function e(t){var n=this;Tc(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=Cc.is.url(t.config.ads.tag),this.enabled&&(Cc.is.object(window.google)?this.ready():Cc.loadScript(t.config.urls.googleIMA.api,function(){n.ready()},function(){n.blocked=!0,n.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return xc(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Cc.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+Cc.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=Cc.formatTime(e.manager.getRemainingTime()),n=e.player.config.i18n.advertisment+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var n=t.player.elements.progress;if(n){var i=100/t.player.duration*e,r=Cc.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){Cc.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),r("loaded"),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),r("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),r("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),r("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:r("started");break;case google.ima.AdEvent.Type.MIDPOINT:r("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:r("complete");break;case google.ima.AdEvent.Type.IMPRESSION:r("impression");break;case google.ima.AdEvent.Type.CLICK:r("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){Cc.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){Cc.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){Cc.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Cc.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),Dc=Cc.getBrowser(),qc={global:function(){var e=this,t=null,n=function(n){var i=function(e){return e.keyCode?e.keyCode:e.which}(n),r="keydown"===n.type,o=r&&i===t;if(!(n.altKey||n.ctrlKey||n.metaKey||n.shiftKey)&&Cc.is.number(i)){if(r){var s=Cc.getFocusElement();if(Cc.is.element(s)&&Cc.matches(s,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(n.preventDefault(),n.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:o||(e.currentTime=e.duration/10*(i-48));break;case 32:case 75:o||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:o||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:o||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===i&&e.fullscreen.toggle(),t=i}else t=null}};this.config.keyboard.global?Cc.on(window,"keydown keyup",n,!1):this.config.keyboard.focused&&Cc.on(this.elements.container,"keydown keyup",n,!1),Cc.on(this.elements.container,"focusout",function(t){Cc.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),Cc.on(this.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Cc.toggleClass(Cc.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&Cc.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(Cc.on(this.media,"timeupdate seeking",function(t){return Vc.timeUpdate.call(e,t)}),Cc.on(this.media,"durationchange loadedmetadata",function(t){return Vc.durationUpdate.call(e,t)}),Cc.on(this.media,"loadeddata",function(){Cc.toggleHidden(e.elements.volume,!e.hasAudio),Cc.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),Cc.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),Cc.on(this.media,"progress playing",function(t){return Vc.updateProgress.call(e,t)}),Cc.on(this.media,"volumechange",function(t){return Vc.updateVolume.call(e,t)}),Cc.on(this.media,"playing play pause ended",function(t){return Vc.checkPlaying.call(e,t)}),Cc.on(this.media,"waiting canplay seeked playing",function(t){return Vc.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=Cc.getElement.call(this,"."+this.config.classNames.video);if(!Cc.is.element(t))return;Cc.on(t,"click",function(){e.config.hideControls&&jc.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&Cc.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),Cc.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),Cc.on(this.media,"ratechange",function(){Uc.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),Cc.on(this.media,"qualitychange",function(){Uc.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),Cc.on(this.media,"languagechange",function(){Uc.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),Cc.on(this.media,"captionsenabled captionsdisabled",function(){Uc.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),Cc.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.media.error),Cc.dispatchEvent.call(e,e.elements.container,t.type,!0,n)})},controls:function(){var e=this,t=Dc.isIE?"change":"input",n=function(t,n,i){var r=e.config.listeners[n];Cc.is.function(r)&&r.call(e,t),!t.defaultPrevented&&Cc.is.function(i)&&i.call(e,t)};Cc.on(this.elements.buttons.play,"click",function(t){return n(t,"play",function(){e.togglePlay()})}),Cc.on(this.elements.buttons.restart,"click",function(t){return n(t,"restart",function(){e.restart()})}),Cc.on(this.elements.buttons.rewind,"click",function(t){return n(t,"rewind",function(){e.rewind()})}),Cc.on(this.elements.buttons.forward,"click",function(t){return n(t,"forward",function(){e.forward()})}),Cc.on(this.elements.buttons.mute,"click",function(t){return n(t,"mute",function(){e.muted=!e.muted})}),Cc.on(this.elements.buttons.captions,"click",function(t){return n(t,"captions",function(){e.toggleCaptions()})}),Cc.on(this.elements.buttons.fullscreen,"click",function(t){return n(t,"fullscreen",function(){e.fullscreen.toggle()})}),Cc.on(this.elements.buttons.pip,"click",function(t){return n(t,"pip",function(){e.pip="toggle"})}),Cc.on(this.elements.buttons.airplay,"click",function(t){return n(t,"airplay",function(){e.airplay()})}),Cc.on(this.elements.buttons.settings,"click",function(t){Uc.toggleMenu.call(e,t)}),Cc.on(document.documentElement,"click",function(t){Uc.toggleMenu.call(e,t)}),Cc.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),Cc.matches(t.target,e.config.selectors.inputs.language)?n(t,"language",function(){e.language=t.target.value}):Cc.matches(t.target,e.config.selectors.inputs.quality)?n(t,"quality",function(){e.quality=t.target.value}):Cc.matches(t.target,e.config.selectors.inputs.speed)?n(t,"speed",function(){e.speed=parseFloat(t.target.value)}):Uc.showTab.call(e,t)}),Cc.on(this.elements.inputs.seek,t,function(t){return n(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!Cc.is.element(this.elements.display.duration)&&Cc.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,Vc.timeUpdate.call(e))}),Cc.on(this.elements.inputs.volume,t,function(t){return n(t,"volume",function(){e.volume=t.target.value})}),Dc.isWebkit&&Cc.on(Cc.getElements.call(this,'input[type="range"]'),"input",function(t){Uc.updateRangeFill.call(e,t.target)}),Cc.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return Uc.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(Cc.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),Cc.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),Cc.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),Cc.on(this.elements.inputs.volume,"wheel",function(t){return n(t,"volume",function(){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.decreaseVolume(.02),i=-1):(e.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.increaseVolume(.02),i=1):(e.decreaseVolume(.02),i=-1)),(1===i&&e.media.volume<1||-1===i&&e.media.volume>0)&&t.preventDefault()})},!1)}},Vc={addStyleHook:function(){Cc.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Cc.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(qc.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void Vc.toggleNativeControls.call(this,!0);Cc.is.element(this.elements.controls)||(Uc.inject.call(this),qc.controls.call(this)),Cc.is.element(this.elements.controls)&&(Vc.toggleNativeControls.call(this),Hc.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],Vc.timeUpdate.call(this),Vc.checkPlaying.call(this),this.ready=!0,setTimeout(function(){Cc.dispatchEvent.call(e,e.media,"ready")},0),Vc.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(Cc.is.string(this.config.title)&&!Cc.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Cc.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Cc.getElement.call(this,"iframe");if(!Cc.is.element(t))return;var n=Cc.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",n))}},checkPlaying:function(){Cc.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Cc.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),Cc.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Cc.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Cc.toggleClass(this.elements.container,this.config.classNames.loading,!1),Cc.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Cc.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Cc.is.element(this.elements.inputs.volume)&&Vc.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Cc.is.element(this.elements.buttons.mute)&&Cc.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Cc.is.element(e)&&(e.value=t,Uc.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Cc.is.number(t)?t:0,i=Cc.is.element(e)?e:this.elements.display.buffer;if(Cc.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Cc.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){var t=this;if(this.supported.ui&&Cc.is.event(e)){var n,i=0;if(e)switch(e.type){case"timeupdate":case"seeking":i=Cc.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&Vc.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":i=(n=t.media.buffered)&&n.length?Cc.getPercentage(n.end(0),t.duration):Cc.is.number(n)?100*n:0,Vc.setProgress.call(this,this.elements.display.buffer,i)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Cc.is.element(e)&&Cc.is.number(t)){var i=Cc.getHours(this.duration)>0;e.textContent=Cc.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Cc.is.element(this.elements.display.duration)&&this.config.invertTime;Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Vc.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Cc.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Vc.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Uc.updateSeekTooltip.call(this)}}},Bc=Cc.getBrowser(),Uc={updateRangeFill:function(e){if(Bc.isWebkit){var t=Cc.is.event(e)?e.target:e;Cc.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||Bc.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=Uc.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Cc.setAttributes(r,Cc.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=this.config.i18n[e],i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Cc.createElement("span",i,n)},createBadge:function(e){if(Cc.is.empty(e))return null;var t=Cc.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Cc.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Cc.createElement("button"),i=Object.assign({},t),r=e,o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,r){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=r}return o?(n.appendChild(Uc.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Uc.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(Uc.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Uc.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=this.config.i18n[s]):(n.appendChild(Uc.createIcon.call(this,a)),n.appendChild(Uc.createLabel.call(this,s))),Cc.extend(i,Cc.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Cc.setAttributes(n,i),"play"===r?(Cc.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Cc.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),i=Cc.createElement("input",Cc.extend(Cc.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=i,Uc.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Cc.createElement("progress",Cc.extend(Cc.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(Cc.createElement("span",null,"0"));var i="";switch(e){case"played":i=this.config.i18n.played;break;case"buffer":i=this.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Cc.createElement("div",{class:"plyr__time"});return t.appendChild(Cc.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(Cc.createElement("span",Cc.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=Cc.createElement("li"),a=Cc.createElement("label",{class:this.config.classNames.control}),l=Cc.createElement("input",Cc.extend(Cc.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Cc.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Cc.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&Cc.is.element(this.elements.inputs.seek)&&Cc.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,n=this.elements.inputs.seek.getBoundingClientRect(),i=this.config.classNames.tooltip+"--visible";if(Cc.is.event(e))t=100/n.width*(e.pageX-n.left);else{if(!Cc.hasClass(this.elements.display.seekTooltip,i))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),Vc.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",Cc.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&Cc.toggleClass(this.elements.display.seekTooltip,i,"mouseenter"===e.type)}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];Cc.toggleHidden(n,!t),Cc.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this,n=this.elements.settings.panes.quality.querySelector("ul");Cc.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var i=!Cc.is.empty(this.options.quality)&&this.isYouTube;if(Uc.toggleTab.call(this,"quality",i),i){Cc.emptyElement(n);this.options.quality.forEach(function(e){return Uc.createMenuItem.call(t,e,n,"quality",Uc.getLabel.call(t,"quality",e),function(e){var n="";switch(e){case"hd2160":n="4K";break;case"hd1440":n="WQHD";break;case"hd1080":case"hd720":n="HD"}return n.length?Uc.createBadge.call(t,n):null}(e))}),Uc.updateSetting.call(this,"quality",n)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return Uc.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var n=this.elements.settings.panes[e],i=null,r=t;switch(e){case"captions":i=this.captions.active?this.captions.language:"";break;default:if(i=this[e],Cc.is.empty(i)&&(i=this.config[e].default),!this.options[e].includes(i))return void this.debug.warn("Unsupported value of '"+i+"' for "+e);if(!this.config[e].options.includes(i))return void this.debug.warn("Disabled value of '"+i+"' for "+e)}(Cc.is.element(r)||(r=n&&n.querySelector("ul")),Cc.is.empty(i))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Uc.getLabel.call(this,e,i));var o=r&&r.querySelector('input[value="'+i+'"]');Cc.is.element(o)&&(o.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!jc.textTracks||!Hc.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=Hc.getCurrentTrack.call(this);if(Cc.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=Hc.getTracks.call(this).length;if(Uc.toggleTab.call(this,"captions",n),Cc.emptyElement(t),n){var i=Hc.getTracks.call(this).map(function(e){return{language:e.language,label:Cc.is.empty(e.label)?e.language.toUpperCase():e.label}});i.unshift({language:"",label:this.config.i18n.none}),i.forEach(function(n){Uc.createMenuItem.call(e,n.language,t,"language",n.label||n.language,Uc.createBadge.call(e,n.language.toUpperCase()),n.language.toLowerCase()===e.captions.language.toLowerCase())}),Uc.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;Cc.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!Cc.is.empty(this.options.speed);if(Uc.toggleTab.call(this,"speed",t),t){var n=this.elements.settings.panes.speed.querySelector("ul");Cc.toggleHidden(this.elements.settings.tabs.speed,!1),Cc.toggleHidden(this.elements.settings.panes.speed,!1),Cc.emptyElement(n),this.options.speed.forEach(function(t){return Uc.createMenuItem.call(e,t,n,"speed",Uc.getLabel.call(e,"speed",t))}),Uc.updateSetting.call(this,"speed",n)}},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings,i=Cc.is.boolean(e)?e:Cc.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(Cc.is.event(e)){var r=Cc.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Cc.is.element(n)&&n.setAttribute("aria-expanded",i),Cc.is.element(t)&&(t.setAttribute("aria-hidden",!i),Cc.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Cc.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(Cc.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),jc.transitions&&!jc.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=Uc.getTabSize.call(this,r);Cc.on(s,Cc.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",Cc.off(s,Cc.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Cc.is.empty(this.config.controls))return null;var n=Cc.createElement("div",Cc.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Uc.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Uc.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Uc.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Uc.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Cc.createElement("div",Cc.getAttributesFromSelector(this.config.selectors.progress)),r=Uc.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(Uc.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Cc.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Uc.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Uc.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Uc.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=Cc.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=Uc.createRange.call(this,"volume",Cc.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(Uc.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Cc.is.empty(this.config.settings)){var c=Cc.createElement("div",{class:"plyr__menu"});c.appendChild(Uc.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Cc.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=Cc.createElement("div"),f=Cc.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Cc.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Cc.createElement("li",{role:"tab",hidden:""}),r=Cc.createElement("button",Cc.extend(Cc.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),t.config.i18n[n]),o=Cc.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=Cc.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=Cc.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[n]);i.appendChild(r);var o=Cc.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&jc.pip&&n.appendChild(Uc.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&jc.airplay&&n.appendChild(Uc.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Uc.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Uc.createButton.call(this,"play-large")),this.elements.controls=n,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Uc.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Uc.getIconUrl.call(this);t.absolute&&Cc.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=Cc.is.string(this.config.controls)||Cc.is.element(this.config.controls)?this.config.controls:Cc.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):Uc.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Uc.getLanguage.call(this)});var i=void 0;if(Cc.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),Cc.is.element(i)||(i=this.elements.container),Cc.is.element(n)?i.appendChild(n):i.insertAdjacentHTML("beforeend",n),Cc.is.element(this.elements.controls)||Cc.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Cc.repaint(i),this.config.tooltips.controls){var r=Cc.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){Cc.toggleClass(t,e.config.classNames.hidden,!1),Cc.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},Hc={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Cc.is.empty(e)||(this.captions.language=e),Cc.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Cc.is.boolean(this.captions.active)){var t=this.storage.get("captions");Cc.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!jc.textTracks)Cc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this);else{Cc.is.element(this.elements.captions)||(this.elements.captions=Cc.createElement("div",Cc.getAttributesFromSelector(this.config.selectors.captions)),Cc.insertAfter(this.elements.captions,this.elements.wrapper)),Cc.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Cc.is.empty(Hc.getTracks.call(this)));var n=Hc.getTracks.call(this);if(!Cc.is.empty(n)){if(Cc.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Cc.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Cc.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Cc.removeElement(e)})})}Hc.setLanguage.call(this),Hc.show.call(this),Cc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){Hc.getTracks.call(this).forEach(function(t){Cc.on(t,"cuechange",function(t){return Hc.setCue.call(e,t)}),t.mode="hidden"});var t=Hc.getCurrentTrack.call(this);Cc.is.track(t)&&Array.from(t.activeCues||[]).length&&Hc.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Cc.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return Hc.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=Cc.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===Hc.getCurrentTrack.call(this)&&(Cc.is.cue(i)?Hc.setText.call(this,i.getCueAsHTML()):Hc.setText.call(this,null),Cc.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Cc.is.element(this.elements.captions)){var t=Cc.createElement("span");Cc.emptyElement(this.elements.captions);var n=Cc.is.nullOrUndefined(e)?"":e;Cc.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(Cc.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");Cc.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Cc.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Cc.toggleState(this.elements.buttons.captions,!0))}}},Wc={setup:function(){var e=this;Cc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Wc.setAspectRatio.call(this),Cc.is.object(window.YT)&&Cc.is.function(window.YT.Player)?Wc.ready.call(this):(Cc.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Wc.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Cc.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Cc.is.empty(n))return this.config.title=n,void Vc.setTitle.call(this)}var i=this.config.keys.google;if(Cc.is.string(i)&&!Cc.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";Cc.fetch(r).then(function(e){Cc.is.object(e)&&(t.config.title=e.items[0].snippet.title,Vc.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Cc.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Cc.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Cc.parseYouTubeId(n),r=Cc.generateId(e.provider),o=Cc.createElement("div",{id:r});e.media=Cc.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Cc.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Cc.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var n=t.target;e.media.quality=n.getPlaybackQuality(),Cc.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Cc.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Wc.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.media.seeking=!0,Cc.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return n.getPlaybackQuality()},set:function(t){Cc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),n.setPlaybackQuality(t)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Cc.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Cc.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Cc.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Cc.dispatchEvent.call(e,e.media,"timeupdate"),Cc.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Cc.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),Cc.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Vc.build.call(e)},50)},onStateChange:function(t){var n=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):Cc.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Cc.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Cc.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Cc.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){Cc.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),Cc.dispatchEvent.call(e,e.media,"durationchange")),Uc.setQualityMenu.call(e,n.getAvailableQualityLevels());break;case 2:e.media.paused=!0,Cc.dispatchEvent.call(e,e.media,"pause")}Cc.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Gc={setup:function(){var e=this;Cc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Gc.setAspectRatio.call(this),Cc.is.object(window.Vimeo)?Gc.ready.call(this):Cc.loadScript(this.config.urls.vimeo.api,function(){Gc.ready.call(e)})},setAspectRatio:function(e){var t=Cc.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1],i=(200-n)/4;this.elements.wrapper.style.paddingBottom=n+"%",this.media.style.transform="translateY(-"+i+"%)"},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},i=Cc.buildUrlParams(n),r=t.media.getAttribute("src");Cc.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=Cc.parseVimeoId(r),s=Cc.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=Cc.createElement("div");l.appendChild(s),t.media=Cc.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Cc.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Cc.dispatchEvent.call(t,t.media,"ratechange")})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,Cc.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!Cc.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,Cc.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Cc.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Cc.getAspectRatio(t[0],t[1]);Gc.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Vc.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Cc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Cc.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,Hc.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Cc.stripHTML(e.cues[0].text)),Hc.setText.call(t,n)}),t.embed.on("loaded",function(){Cc.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Cc.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Cc.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Cc.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Cc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Cc.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Cc.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,Cc.dispatchEvent.call(t,t.media,"seeked"),Cc.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Cc.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Cc.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return Vc.build.call(t)},0)}},Yc=Cc.getBrowser(),Kc={setup:function(){if(this.media)if(Cc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Cc.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Cc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(Cc.toggleClass(this.elements.container,this.config.classNames.pip.supported,jc.pip&&this.isHTML5&&this.isVideo),Cc.toggleClass(this.elements.container,this.config.classNames.airplay.supported,jc.airplay&&this.isHTML5),Cc.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),Cc.toggleClass(this.elements.container,this.config.classNames.isIos,Yc.isIos),Cc.toggleClass(this.elements.container,this.config.classNames.isTouch,jc.touch)),this.isVideo&&(this.elements.wrapper=Cc.createElement("div",{class:this.config.classNames.video}),Cc.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":Wc.setup.call(this);break;case"vimeo":Gc.setup.call(this)}else this.isHTML5&&Vc.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(Cc.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},Qc={insertElements:function(e,t){var n=this;Cc.is.string(t)?Cc.insertElement(e,this.media,{src:t}):Cc.is.array(t)&&t.forEach(function(t){Cc.insertElement(e,n.media,t)})},change:function(e){var t=this;Cc.is.object(e)&&"sources"in e&&e.sources.length?(Kc.cancelRequests.call(this),this.destroy.call(this,function(){switch(Cc.removeElement(t.media),t.media=null,Cc.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Cc.is.empty(e.sources[0].provider)?_c.html5:e.sources[0].provider,t.supported=jc.check(t.type,t.provider,t.config.inline),t.provider+":"+t.type){case"html5:video":t.media=Cc.createElement("video");break;case"html5:audio":t.media=Cc.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Cc.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Cc.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.inline&&t.media.setAttribute("playsinline","")),Vc.addStyleHook.call(t),t.isHTML5&&Qc.insertElements.call(t,"source",e.sources),t.config.title=e.title,Kc.setup.call(t),t.isHTML5&&("tracks"in e&&Qc.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Vc.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Tc(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=t,Cc.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Cc.is.nodeList(this.media)||Cc.is.array(this.media))&&(this.media=this.media[0]),this.config=Cc.extend({},Sc,n,function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new Lc(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",jc),!Cc.is.nullOrUndefined(this.media)&&Cc.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(jc.check().api){this.elements.original=this.media.cloneNode(!0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),Cc.is.element(o)){if(s=o.getAttribute("src"),this.provider=Cc.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=Cc.getUrlParams(s),!Cc.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.playsinline)&&(this.config.inline=!0),l.includes(a.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Cc.is.empty(this.provider)||!Object.keys(_c).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=kc.video;break;case"video":case"audio":this.type=r,this.provider=_c.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=jc.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new Rc(this),this.media.plyr=this,Cc.is.element(this.elements.container)||(this.elements.container=Cc.createElement("div"),Cc.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),qc.global.call(this),Vc.addStyleHook.call(this),Kc.setup.call(this),this.config.debug&&Cc.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Vc.build.call(this),this.fullscreen=new Fc(this),this.ads=new zc(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return xc(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(Cc.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Cc.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Cc.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Cc.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Cc.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&Cc.is.element(this.elements.buttons.captions)){var t=Cc.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Cc.toggleState(this.elements.buttons.captions,this.captions.active),Cc.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Cc.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){jc.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Cc.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(Cc.is.boolean(e)||(Cc.is.event(e)?(r="enterfullscreen"===e.type,i=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(n=2e3),"focusin"===e.type&&(n=3e3,Cc.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):i=Cc.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Cc.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Cc.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;jc.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Cc.hasClass(t.elements.container,t.config.classNames.hideControls)||Cc.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Cc.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(Cc.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Cc.is.empty(t.config.settings)&&Uc.toggleMenu.call(t,!1)))},n))}}},{key:"on",value:function(e,t){Cc.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Cc.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Cc.removeElement(t.elements.buttons.play),Cc.removeElement(t.elements.captions),Cc.removeElement(t.elements.controls),Cc.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Cc.is.function(e)&&e()):(Cc.replaceElement(t.elements.original,t.elements.container),Cc.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Cc.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":Vc.toggleNativeControls.call(this,!0),i();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}},{key:"supports",value:function(e){return jc.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===_c.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===_c.youtube}},{key:"isVimeo",get:function(){return this.provider===_c.vimeo}},{key:"isVideo",get:function(){return this.type===kc.video}},{key:"isAudio",get:function(){return this.type===kc.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;Cc.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Cc.is.string(t)&&(t=Number(t)),Cc.is.number(t)||(t=this.storage.get("volume")),Cc.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;Cc.is.boolean(t)||(t=this.storage.get("muted")),Cc.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Cc.is.number(e)&&(t=e),Cc.is.number(t)||(t=this.storage.get("speed")),Cc.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;Cc.is.string(e)&&(t=e),Cc.is.string(t)||(t=this.storage.get("quality")),Cc.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Cc.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){Qc.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?Cc.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Cc.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(Cc.is.string(e)&&(this.toggleCaptions(!Cc.is.empty(e)),!Cc.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,Hc.setText.call(this,null),Hc.setLanguage.call(this),Cc.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(jc.pip){var i=Cc.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return jc.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return jc.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Cc.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index 569ab9b9..1ff7116e 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","resolve","reject","promise","$$resolve","$$reject","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","callback","current","querySelector","callbacks","element","errors","function","cb","getElementsByTagName","parentNode","insertBefore","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","updateSprite","innerHTML","body","childNodes","prefix","top","elements","targets","child","cloneNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","sel","existingAttributes","existing","selector","trim","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","youtube","vimeo","$2","parser","href","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","msExitFullscreen","Storage","json","removeItem","Ads","ads","initialized","blocked","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","_this4","getRemainingTime","label","i18n","advertisment","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this8","adError","_this9","destroy","handleKey","which","getKeyCode","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"mXACA,IAAIA,EAASC,EAAAC,QAAkC,oBAAVC,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DC,SAAS,cAATA,GACc,iBAAPC,MAAiBA,IAAMP,qBCLlC,IAAIQ,EAAOP,EAAAC,SAAmBO,QAAS,SACrB,iBAAPC,MAAiBA,IAAMF,KCDlCG,EAAiB,SAAUC,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,GCAvDC,EAAiB,SAAUD,GACzB,IAAKE,EAASF,GAAK,MAAMG,UAAUH,EAAK,sBACxC,OAAOA,GCHTI,EAAiB,SAAUC,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,ICHXC,GAAkBC,EAAoB,WACpC,OAA+E,GAAxEC,OAAOC,kBAAmB,KAAOC,IAAK,WAAc,OAAO,KAAQC,ICDxEC,EAAWL,EAAqBK,SAEhCC,EAAKZ,EAASW,IAAaX,EAASW,EAASE,eACjDC,EAAiB,SAAUhB,GACzB,OAAOc,EAAKD,EAASE,cAAcf,OCLrCiB,GAAkBT,IAA8BU,EAAoB,WAClE,OAA4G,GAArGT,OAAOC,eAAeS,EAAyB,OAAQ,KAAOR,IAAK,WAAc,OAAO,KAAQC,ICGzGQ,EAAiB,SAAUpB,EAAIqB,GAC7B,IAAKnB,EAASF,GAAK,OAAOA,EAC1B,IAAIsB,EAAIC,EACR,GAAIF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACzF,GAAgC,mBAApBD,EAAKtB,EAAG0B,WAA2BxB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACnF,IAAKF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EAC1F,MAAMpB,UAAU,4CCPdwB,EAAKlB,OAAOC,oBAEJF,EAA4BC,OAAOC,eAAiB,SAAwBkB,EAAGC,EAAGC,GAI5F,GAHAC,EAASH,GACTC,EAAIG,EAAYH,GAAG,GACnBE,EAASD,GACLG,EAAgB,IAClB,OAAON,EAAGC,EAAGC,EAAGC,GAChB,MAAOxB,IACT,GAAI,QAASwB,GAAc,QAASA,EAAY,MAAM3B,UAAU,4BAEhE,MADI,UAAW2B,IAAYF,EAAEC,GAAKC,EAAWI,OACtCN,ICdTO,EAAiB,SAAUC,EAAQF,GACjC,OACEG,aAAuB,EAATD,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZF,MAAOA,ICHXM,EAAiBhC,EAA4B,SAAUiC,EAAQC,EAAKR,GAClE,OAAOP,EAAGgB,EAAEF,EAAQC,EAAKE,EAAW,EAAGV,KACrC,SAAUO,EAAQC,EAAKR,GAEzB,OADAO,EAAOC,GAAOR,EACPO,GCNLI,KAAoBA,eACxBC,EAAiB,SAAU9C,EAAI0C,GAC7B,OAAOG,EAAepB,KAAKzB,EAAI0C,ICF7BK,EAAK,EACLC,EAAKxD,KAAKyD,SACdC,EAAiB,SAAUR,GACzB,MAAO,UAAUS,YAAeC,IAARV,EAAoB,GAAKA,EAAK,QAASK,EAAKC,GAAIxB,SAAS,sBCAnF,IAAI6B,EAAM7C,EAAkB,OAExB8C,EAAY5D,SAAkB,SAC9B6D,GAAO,GAAKD,GAAWE,MAFX,YAIhBtC,EAAmBuC,cAAgB,SAAUzD,GAC3C,OAAOsD,EAAU7B,KAAKzB,KAGvBX,EAAAC,QAAiB,SAAUsC,EAAGc,EAAKnB,EAAKmC,GACvC,IAAIC,EAA2B,mBAAPpC,EACpBoC,IAAYC,EAAIrC,EAAK,SAAWsC,EAAKtC,EAAK,OAAQmB,IAClDd,EAAEc,KAASnB,IACXoC,IAAYC,EAAIrC,EAAK8B,IAAQQ,EAAKtC,EAAK8B,EAAKzB,EAAEc,GAAO,GAAKd,EAAEc,GAAOa,EAAIO,KAAKC,OAAOrB,MACnFd,IAAMxC,EACRwC,EAAEc,GAAOnB,EACCmC,EAGD9B,EAAEc,GACXd,EAAEc,GAAOnB,EAETsC,EAAKjC,EAAGc,EAAKnB,WALNK,EAAEc,GACTmB,EAAKjC,EAAGc,EAAKnB,OAOd7B,SAASsE,UAxBI,WAwBkB,WAChC,MAAsB,mBAARC,MAAsBA,KAAKZ,IAAQC,EAAU7B,KAAKwC,UC7BlEC,EAAiB,SAAUlE,GACzB,GAAiB,mBAANA,EAAkB,MAAMG,UAAUH,EAAK,uBAClD,OAAOA,GCATmE,EAAiB,SAAU7C,EAAI8C,EAAMC,GAEnC,GADAC,EAAUhD,QACG8B,IAATgB,EAAoB,OAAO9C,EAC/B,OAAQ+C,GACN,KAAK,EAAG,OAAO,SAAUzD,GACvB,OAAOU,EAAGG,KAAK2C,EAAMxD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAG2D,GAC1B,OAAOjD,EAAGG,KAAK2C,EAAMxD,EAAG2D,IAE1B,KAAK,EAAG,OAAO,SAAU3D,EAAG2D,EAAGC,GAC7B,OAAOlD,EAAGG,KAAK2C,EAAMxD,EAAG2D,EAAGC,IAG/B,OAAO,WACL,OAAOlD,EAAGmD,MAAML,EAAMM,aCVtBC,EAAU,SAAUC,EAAMC,EAAMC,GAClC,IAQIpC,EAAKqC,EAAKC,EAAKC,EARfC,EAAYN,EAAOD,EAAQQ,EAC3BC,EAAYR,EAAOD,EAAQU,EAC3BC,EAAYV,EAAOD,EAAQtD,EAC3BkE,EAAWX,EAAOD,EAAQ9C,EAC1B2D,EAAUZ,EAAOD,EAAQc,EACzBC,EAASN,EAAYhG,EAASkG,EAAYlG,EAAOyF,KAAUzF,EAAOyF,QAAezF,EAAOyF,QAAsB,UAC9GvF,EAAU8F,EAAYxF,EAAOA,EAAKiF,KAAUjF,EAAKiF,OACjDc,EAAWrG,EAAiB,YAAMA,EAAiB,cAGvD,IAAKoD,KADD0C,IAAWN,EAASD,GACZC,EAIVE,IAFAD,GAAOG,GAAaQ,QAA0BtC,IAAhBsC,EAAOhD,IAExBgD,EAASZ,GAAQpC,GAE9BuC,EAAMO,GAAWT,EAAMa,EAAIZ,EAAK5F,GAAUmG,GAA0B,mBAAPP,EAAoBY,EAAIlG,SAAS+B,KAAMuD,GAAOA,EAEvGU,GAAQG,EAASH,EAAQhD,EAAKsC,EAAKJ,EAAOD,EAAQmB,GAElDxG,EAAQoD,IAAQsC,GAAKnB,EAAKvE,EAASoD,EAAKuC,GACxCM,GAAYI,EAASjD,IAAQsC,IAAKW,EAASjD,GAAOsC,IAG1D5F,EAAOQ,KAAOA,EAEd+E,EAAQQ,EAAI,EACZR,EAAQU,EAAI,EACZV,EAAQtD,EAAI,EACZsD,EAAQ9C,EAAI,EACZ8C,EAAQc,EAAI,GACZd,EAAQoB,EAAI,GACZpB,EAAQmB,EAAI,GACZnB,EAAQqB,EAAI,IC1BZ,ID2BA,ICjCIC,EDiCJC,EAAiBvB,ECvCbwB,EAAQC,EAAI,eACZC,EAAOD,EAAI,QACXE,KAASlH,EAAOmH,cAAenH,EAAOoH,UACtCC,EAASH,EACTI,EAAI,EAIJC,EAAyB,iHAE3BnD,MAAM,KAEDkD,EAPC,IAQFT,EAAQ7G,EAAOuH,EAAuBD,QACxC7C,EAAKoC,EAAMjC,UAAWmC,GAAO,GAC7BtC,EAAKoC,EAAMjC,UAAWqC,GAAM,IACvBI,GAAS,EAGlB,IAAAG,GACEN,IAAKA,EACLG,OAAQA,EACRN,MAAOA,EACPE,KAAMA,GCzBRQ,EAAiB,SAAUnB,EAAQoB,EAAKpD,GACtC,IAAK,IAAIhB,KAAOoE,EAAKjB,EAASH,EAAQhD,EAAKoE,EAAIpE,GAAMgB,GACrD,OAAOgC,GCHTqB,EAAiB,SAAU/G,EAAIgH,EAAanC,EAAMoC,GAChD,KAAMjH,aAAcgH,SAAoC5D,IAAnB6D,GAAgCA,KAAkBjH,EACrF,MAAMG,UAAU0E,EAAO,2BACvB,OAAO7E,GCFPkH,EAAO1H,KAAK0H,KACZC,EAAQ3H,KAAK2H,MACjBC,EAAiB,SAAUpH,GACzB,OAAOqH,MAAMrH,GAAMA,GAAM,GAAKA,EAAK,EAAImH,EAAQD,GAAMlH,ICFnDsH,EAAM9H,KAAK8H,IACfC,EAAiB,SAAUvH,GACzB,OAAOA,EAAK,EAAIsH,EAAIE,EAAUxH,GAAK,kBAAoB,GCDzDyH,EAAiB,SAAUzH,GACzB,QAAWoD,IAAPpD,EAAkB,OAAO,EAC7B,IAAI0H,EAASF,EAAUxH,GACnBqE,EAASsD,EAASD,GACtB,GAAIA,IAAWrD,EAAQ,MAAMuD,WAAW,iBACxC,OAAOvD,GCRL7C,KAAcA,SAElBqG,EAAiB,SAAU7H,GACzB,OAAOwB,EAASC,KAAKzB,GAAI8H,MAAM,GAAI,ICArCC,EAAiBtH,OAAO,KAAKuH,qBAAqB,GAAKvH,OAAS,SAAUT,GACxE,MAAkB,UAAXiI,EAAIjI,GAAkBA,EAAGwD,MAAM,IAAM/C,OAAOT,ICHrDkI,EAAiB,SAAUlI,GACzB,QAAUoD,GAANpD,EAAiB,MAAMG,UAAU,yBAA2BH,GAChE,OAAOA,GCATmI,EAAiB,SAAUnI,GACzB,OAAOoI,EAAQC,EAAQrI,KCHrBsI,EAAM9I,KAAK8I,IACXhB,EAAM9H,KAAK8H,IACfiB,EAAiB,SAAUC,EAAOnE,GAEhC,OADAmE,EAAQhB,EAAUgB,IACH,EAAIF,EAAIE,EAAQnE,EAAQ,GAAKiD,EAAIkB,EAAOnE,ICAzDoE,EAAiB,SAAUC,GACzB,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGI3G,EAHAN,EAAIkH,EAAUH,GACdtE,EAASsD,EAAS/F,EAAEyC,QACpBmE,EAAQO,EAAgBF,EAAWxE,GAIvC,GAAIqE,GAAeE,GAAMA,GAAI,KAAOvE,EAASmE,GAG3C,IAFAtG,EAAQN,EAAE4G,OAEGtG,EAAO,OAAO,OAEtB,KAAMmC,EAASmE,EAAOA,IAAS,IAAIE,GAAeF,KAAS5G,IAC5DA,EAAE4G,KAAWI,EAAI,OAAOF,GAAeF,GAAS,EACpD,OAAQE,IAAgB,IClB1BM,EAAQ5J,EADC,wBACkBA,EADlB,0BAEb6J,EAAiB,SAAUvG,GACzB,OAAOsG,EAAMtG,KAASsG,EAAMtG,QCJ1BwG,GAAS1I,EAAqB,QAElC2I,GAAiB,SAAUzG,GACzB,OAAOwG,GAAOxG,KAASwG,GAAOxG,GAAO0D,EAAI1D,KCDvC0G,GAAe5I,GAA6B,GAC5C6I,GAAWnI,GAAyB,YAExCoI,GAAiB,SAAU7G,EAAQ8G,GACjC,IAGI7G,EAHAd,EAAIkH,EAAUrG,GACdiE,EAAI,EACJ8C,KAEJ,IAAK9G,KAAOd,EAAOc,GAAO2G,IAAUzF,EAAIhC,EAAGc,IAAQ8G,EAAOC,KAAK/G,GAE/D,KAAO6G,EAAMlF,OAASqC,GAAO9C,EAAIhC,EAAGc,EAAM6G,EAAM7C,SAC7C0C,GAAaI,EAAQ9G,IAAQ8G,EAAOC,KAAK/G,IAE5C,OAAO8G,GCdTE,GAAiB,gGAEflG,MAAM,KCDJmG,GAAanJ,GAA4B2C,OAAO,SAAU,mBAElD1C,OAAOmJ,qBAAuB,SAA6BhI,GACrE,OAAOiI,GAAMjI,EAAG+H,MCHlBG,GAAiB,SAAU9J,GACzB,OAAOS,OAAO4H,EAAQrI,KCExB+J,GAAiB,SAAc7H,GAO7B,IANA,IAAIN,EAAIoI,GAAS/F,MACbI,EAASsD,EAAS/F,EAAEyC,QACpB4F,EAAOvF,UAAUL,OACjBmE,EAAQO,EAAgBkB,EAAO,EAAIvF,UAAU,QAAKtB,EAAWiB,GAC7D6F,EAAMD,EAAO,EAAIvF,UAAU,QAAKtB,EAChC+G,OAAiB/G,IAAR8G,EAAoB7F,EAAS0E,EAAgBmB,EAAK7F,GACxD8F,EAAS3B,GAAO5G,EAAE4G,KAAWtG,EACpC,OAAON,oBCbT,IAAIoH,EAAQxI,EAAqB,OAE7B4J,EAASlJ,EAAqBkJ,OAC9BC,EAA8B,mBAAVD,GAET/K,EAAAC,QAAiB,SAAUuF,GACxC,OAAOmE,EAAMnE,KAAUmE,EAAMnE,GAC3BwF,GAAcD,EAAOvF,KAAUwF,EAAaD,EAAShE,GAAK,UAAYvB,MAGjEmE,MAAQA,ICVbsB,GAAM9J,EAAwBmC,EAE9B4H,GAAMrJ,GAAkB,eAE5BsJ,GAAiB,SAAUxK,EAAIyK,EAAKC,GAC9B1K,IAAO4D,EAAI5D,EAAK0K,EAAO1K,EAAKA,EAAGgE,UAAWuG,KAAMD,GAAItK,EAAIuK,IAAOjI,cAAc,EAAMJ,MAAOuI,wBCOhG,IAAIE,EAAOnK,GAA0BmC,EACjChB,EAAKT,EAAwByB,EAK7BiI,EAAY,YAEZC,EAAc,eACdC,EAAe1L,EAAmB,YAClC2L,EAAY3L,EAAgB,SAC5BI,EAAOJ,EAAOI,KACdoI,EAAaxI,EAAOwI,WAEpBoD,EAAW5L,EAAO4L,SAClBC,EAAaH,EACbI,EAAM1L,EAAK0L,IACXC,EAAM3L,EAAK2L,IACXhE,EAAQ3H,EAAK2H,MACbiE,EAAM5L,EAAK4L,IACXC,EAAM7L,EAAK6L,IAIXC,EAAUC,EAAc,KAHf,SAITC,EAAUD,EAAc,KAHV,aAIdE,EAAUF,EAAc,KAHV,aAMlB,SAASG,EAAYxJ,EAAOyJ,EAAMC,GAChC,IAOItL,EAAGuL,EAAGrH,EAPNsH,EAAS,IAAIC,MAAMH,GACnBI,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAc,KAATR,EAAcR,EAAI,GAAI,IAAMA,EAAI,GAAI,IAAM,EAC/CzE,EAAI,EACJ0F,EAAIlK,EAAQ,GAAe,IAAVA,GAAe,EAAIA,EAAQ,EAAI,EAAI,EAkCxD,KAhCAA,EAAQgJ,EAAIhJ,KAECA,GAASA,IAAU8I,GAE9Ba,EAAI3J,GAASA,EAAQ,EAAI,EACzB5B,EAAI2L,IAEJ3L,EAAI6G,EAAMiE,EAAIlJ,GAASmJ,GACnBnJ,GAASsC,EAAI2G,EAAI,GAAI7K,IAAM,IAC7BA,IACAkE,GAAK,IAGLtC,GADE5B,EAAI4L,GAAS,EACNC,EAAK3H,EAEL2H,EAAKhB,EAAI,EAAG,EAAIe,IAEf1H,GAAK,IACflE,IACAkE,GAAK,GAEHlE,EAAI4L,GAASD,GACfJ,EAAI,EACJvL,EAAI2L,GACK3L,EAAI4L,GAAS,GACtBL,GAAK3J,EAAQsC,EAAI,GAAK2G,EAAI,EAAGQ,GAC7BrL,GAAQ4L,IAERL,EAAI3J,EAAQiJ,EAAI,EAAGe,EAAQ,GAAKf,EAAI,EAAGQ,GACvCrL,EAAI,IAGDqL,GAAQ,EAAGG,EAAOpF,KAAW,IAAJmF,EAASA,GAAK,IAAKF,GAAQ,GAG3D,IAFArL,EAAIA,GAAKqL,EAAOE,EAChBG,GAAQL,EACDK,EAAO,EAAGF,EAAOpF,KAAW,IAAJpG,EAASA,GAAK,IAAK0L,GAAQ,GAE1D,OADAF,IAASpF,IAAU,IAAJ0F,EACRN,EAET,SAASO,EAAcP,EAAQH,EAAMC,GACnC,IAOIC,EAPAG,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBK,EAAQN,EAAO,EACftF,EAAIkF,EAAS,EACbQ,EAAIN,EAAOpF,KACXpG,EAAQ,IAAJ8L,EAGR,IADAA,IAAM,EACCE,EAAQ,EAAGhM,EAAQ,IAAJA,EAAUwL,EAAOpF,GAAIA,IAAK4F,GAAS,GAIzD,IAHAT,EAAIvL,GAAK,IAAMgM,GAAS,EACxBhM,KAAOgM,EACPA,GAASX,EACFW,EAAQ,EAAGT,EAAQ,IAAJA,EAAUC,EAAOpF,GAAIA,IAAK4F,GAAS,GACzD,GAAU,IAANhM,EACFA,EAAI,EAAI4L,MACH,CAAA,GAAI5L,IAAM2L,EACf,OAAOJ,EAAIU,IAAMH,GAAKpB,EAAWA,EAEjCa,GAAQV,EAAI,EAAGQ,GACfrL,GAAQ4L,EACR,OAAQE,GAAK,EAAI,GAAKP,EAAIV,EAAI,EAAG7K,EAAIqL,GAGzC,SAASa,EAAUC,GACjB,OAAOA,EAAM,IAAM,GAAKA,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GAEjE,SAASC,EAAO1M,GACd,OAAa,IAALA,GAEV,SAAS2M,EAAQ3M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,KAE/B,SAAS4M,EAAQ5M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,IAAMA,GAAM,GAAK,IAAMA,GAAM,GAAK,KAEjE,SAAS6M,EAAQ7M,GACf,OAAO0L,EAAY1L,EAAI,GAAI,GAE7B,SAAS8M,EAAQ9M,GACf,OAAO0L,EAAY1L,EAAI,GAAI,GAG7B,SAAS+M,EAAUC,EAAGtK,EAAKuK,GACzBtL,EAAGqL,EAAEpC,GAAYlI,GAAO/B,IAAK,WAAc,OAAOsD,KAAKgJ,MAGzD,SAAStM,EAAIuM,EAAMT,EAAOjE,EAAO2E,GAC/B,IACIC,EAAWC,GADC7E,GAEhB,GAAI4E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM5D,EAAWiD,GACvD,IAAI7B,EAAQkE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOxE,EAAMlB,MAAMyF,EAAOA,EAAQd,GACtC,OAAOU,EAAiBK,EAAOA,EAAKC,UAEtC,SAASC,EAAIR,EAAMT,EAAOjE,EAAOmF,EAAYzL,EAAOiL,GAClD,IACIC,EAAWC,GADC7E,GAEhB,GAAI4E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM5D,EAAWiD,GAIvD,IAHA,IAAI7B,EAAQkE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOG,GAAYzL,GACdwE,EAAI,EAAGA,EAAI+F,EAAO/F,IAAKsC,EAAMuE,EAAQ7G,GAAK8G,EAAKL,EAAiBzG,EAAI+F,EAAQ/F,EAAI,GAG3F,GAAKkH,EAAOtH,IAgFL,CACL,IAAKuH,EAAM,WACT/C,EAAa,OACR+C,EAAM,WACX,IAAI/C,GAAc,MACd+C,EAAM,WAIV,OAHA,IAAI/C,EACJ,IAAIA,EAAa,KACjB,IAAIA,EAAayB,KApOF,eAqORzB,EAAajG,OAClB,CAMF,IADA,IACyCnC,EADrCoL,GAJJhD,EAAe,SAAqBzG,GAElC,OADA0J,EAAW9J,KAAM6G,GACV,IAAIG,EAAWoC,EAAQhJ,MAEIuG,GAAaK,EAAWL,GACnDoD,EAAOrD,EAAKM,GAAagD,EAAI,EAAQD,EAAK3J,OAAS4J,IACnDvL,EAAMsL,EAAKC,QAASnD,GAAejH,EAAKiH,EAAcpI,EAAKuI,EAAWvI,IAEjEoL,EAAiBI,YAAcpD,EAG/C,IAAIoC,EAAO,IAAInC,EAAU,IAAID,EAAa,IACtCqD,EAAWpD,EAAUH,GAAWwD,QACpClB,EAAKkB,QAAQ,EAAG,YAChBlB,EAAKkB,QAAQ,EAAG,aACZlB,EAAKmB,QAAQ,IAAOnB,EAAKmB,QAAQ,IAAIC,EAAYvD,EAAUH,IAC7DwD,QAAS,SAAiBG,EAAYrM,GACpCiM,EAAS1M,KAAKwC,KAAMsK,EAAYrM,GAAS,IAAM,KAEjDsM,SAAU,SAAkBD,EAAYrM,GACtCiM,EAAS1M,KAAKwC,KAAMsK,EAAYrM,GAAS,IAAM,OAEhD,QAhHH4I,EAAe,SAAqBzG,GAClC0J,EAAW9J,KAAM6G,EA9IF,eA+If,IAAI2D,EAAapB,EAAQhJ,GACzBJ,KAAKqJ,GAAKoB,GAAUjN,KAAK,IAAIsK,MAAM0C,GAAa,GAChDxK,KAAKuH,GAAWiD,GAGlB1D,EAAY,SAAkBe,EAAQyC,EAAYE,GAChDV,EAAW9J,KAAM8G,EApJL,YAqJZgD,EAAWjC,EAAQhB,EArJP,YAsJZ,IAAI6D,EAAe7C,EAAON,GACtBoD,EAASpH,EAAU+G,GACvB,GAAIK,EAAS,GAAKA,EAASD,EAAc,MAAM/G,EAAW,iBAE1D,GAAIgH,GADJH,OAA4BrL,IAAfqL,EAA2BE,EAAeC,EAASjH,EAAS8G,IAC/CE,EAAc,MAAM/G,EAxJ/B,iBAyJf3D,KAAKqH,GAAWQ,EAChB7H,KAAKwH,GAAWmD,EAChB3K,KAAKuH,GAAWiD,GAGdlD,IACFwB,EAAUjC,EAhJI,aAgJuB,MACrCiC,EAAUhC,EAlJD,SAkJoB,MAC7BgC,EAAUhC,EAlJI,aAkJoB,MAClCgC,EAAUhC,EAlJI,aAkJoB,OAGpCuD,EAAYvD,EAAUH,IACpByD,QAAS,SAAiBE,GACxB,OAAO5N,EAAIsD,KAAM,EAAGsK,GAAY,IAAM,IAAM,IAE9CM,SAAU,SAAkBN,GAC1B,OAAO5N,EAAIsD,KAAM,EAAGsK,GAAY,IAElCO,SAAU,SAAkBP,GAC1B,IAAI9B,EAAQ9L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAC/C,OAAQ+H,EAAM,IAAM,EAAIA,EAAM,KAAO,IAAM,IAE7CsC,UAAW,SAAmBR,GAC5B,IAAI9B,EAAQ9L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAC/C,OAAO+H,EAAM,IAAM,EAAIA,EAAM,IAE/BuC,SAAU,SAAkBT,GAC1B,OAAO/B,EAAU7L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,MAEtDuK,UAAW,SAAmBV,GAC5B,OAAO/B,EAAU7L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,OAAS,GAE/DwK,WAAY,SAAoBX,GAC9B,OAAOlC,EAAc1L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAAK,GAAI,IAEnEyK,WAAY,SAAoBZ,GAC9B,OAAOlC,EAAc1L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAAK,GAAI,IAEnE0J,QAAS,SAAiBG,EAAYrM,GACpCwL,EAAIzJ,KAAM,EAAGsK,EAAY7B,EAAQxK,IAEnCsM,SAAU,SAAkBD,EAAYrM,GACtCwL,EAAIzJ,KAAM,EAAGsK,EAAY7B,EAAQxK,IAEnCkN,SAAU,SAAkBb,EAAYrM,GACtCwL,EAAIzJ,KAAM,EAAGsK,EAAY5B,EAASzK,EAAOwC,UAAU,KAErD2K,UAAW,SAAmBd,EAAYrM,GACxCwL,EAAIzJ,KAAM,EAAGsK,EAAY5B,EAASzK,EAAOwC,UAAU,KAErD4K,SAAU,SAAkBf,EAAYrM,GACtCwL,EAAIzJ,KAAM,EAAGsK,EAAY3B,EAAS1K,EAAOwC,UAAU,KAErD6K,UAAW,SAAmBhB,EAAYrM,GACxCwL,EAAIzJ,KAAM,EAAGsK,EAAY3B,EAAS1K,EAAOwC,UAAU,KAErD8K,WAAY,SAAoBjB,EAAYrM,GAC1CwL,EAAIzJ,KAAM,EAAGsK,EAAYzB,EAAS5K,EAAOwC,UAAU,KAErD+K,WAAY,SAAoBlB,EAAYrM,GAC1CwL,EAAIzJ,KAAM,EAAGsK,EAAY1B,EAAS3K,EAAOwC,UAAU,OAsCzDgL,GAAe5E,EA/PI,eAgQnB4E,GAAe3E,EA/PC,YAgQhBlH,EAAKkH,EAAUH,GAAYgD,EAAOvH,MAAM,GACxC/G,EAAoB,YAAIwL,EACxBxL,EAAiB,SAAIyL,IChRjB4E,GAAUnP,GAAkB,WAChCoP,GAAiB,SAAUhO,EAAGiO,GAC5B,IACIxO,EADA2L,EAAIjL,EAASH,GAAGsM,YAEpB,YAAa9K,IAAN4J,QAAiD5J,IAA7B/B,EAAIU,EAASiL,GAAG2C,KAAyBE,EAAIvL,EAAUjD,ICHhFsO,GAAUnP,GAAkB,WAEhCsP,GAAiB,SAAUC,GACzB,IAAI/C,EAAI5N,EAAO2Q,GACXxE,GAAeyB,IAAMA,EAAE2C,KAAUhO,EAAGgB,EAAEqK,EAAG2C,IAC3CrN,cAAc,EACd3B,IAAK,WAAc,OAAOsD,SCF1BsC,GAAc/F,EAAqB+F,YAEnCuE,GAAegB,GAAOvF,YACtBwE,GAAYe,GAAOtF,SACnBwJ,GAAUpC,EAAOtH,KAAOC,GAAY0J,OACpCC,GAASpF,GAAa9G,UAAU8D,MAChCzB,GAAOuH,EAAOvH,KAGlB1B,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKoB,KAAgBuE,KAAiBvE,YAAauE,KAE3FnG,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKyI,EAAOnH,OAJrB,eAMjBwJ,OAAQ,SAAgBjQ,GACtB,OAAOgQ,IAAWA,GAAQhQ,IAAOE,EAASF,IAAOqG,MAAQrG,KAI7D2E,EAAQA,EAAQ9C,EAAI8C,EAAQmB,EAAInB,EAAQQ,EAAIjE,EAAoB,WAC9D,OAAQ,IAAI4J,GAAa,GAAGhD,MAAM,OAAG1E,GAAWqL,aAZ/B,eAejB3G,MAAO,SAAeyF,EAAOrD,GAC3B,QAAe9G,IAAX8M,SAAgC9M,IAAR8G,EAAmB,OAAOgG,GAAOzO,KAAKM,EAASkC,MAAOsJ,GAQlF,IAPA,IAAI4C,EAAMpO,EAASkC,MAAMwK,WACrB2B,EAAQrH,EAAgBwE,EAAO4C,GAC/BE,EAAQtH,OAAwB3F,IAAR8G,EAAoBiG,EAAMjG,EAAKiG,GACvD3G,EAAS,IAAK8G,GAAmBrM,KAAM6G,IAA9B,CAA6CnD,EAAS0I,EAAQD,IACvEG,EAAQ,IAAIxF,GAAU9G,MACtBuM,EAAQ,IAAIzF,GAAUvB,GACtBhB,EAAQ,EACL4H,EAAQC,GACbG,EAAMhC,SAAShG,IAAS+H,EAAM1B,SAASuB,MACvC,OAAO5G,KAIbrI,GA9BmB,eCbnB,IAAIoJ,GAAM/J,GAAkB,eAExBiQ,GAAkD,aAA5CxI,EAAI,WAAc,OAAOvD,UAArB,IASdgM,GAAiB,SAAU1Q,GACzB,IAAI4B,EAAG+O,EAAGlL,EACV,YAAcrC,IAAPpD,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApC2Q,EAVD,SAAU3Q,EAAI0C,GACzB,IACE,OAAO1C,EAAG0C,GACV,MAAOpC,KAOOsQ,CAAOhP,EAAInB,OAAOT,GAAKuK,KAAoBoG,EAEvDF,GAAMxI,EAAIrG,GAEM,WAAf6D,EAAIwC,EAAIrG,KAAsC,mBAAZA,EAAEiP,OAAuB,YAAcpL,GCrBhFqL,MCEIC,GAAWvQ,GAAkB,YAC7BwQ,GAAajF,MAAM/H,UAEvBiN,GAAiB,SAAUjR,GACzB,YAAcoD,IAAPpD,IAAqBkR,GAAUnF,QAAU/L,GAAMgR,GAAWD,MAAc/Q,ICFjFmR,GAAiB1Q,OAAOuN,MAAQ,SAAcpM,GAC5C,OAAOiI,GAAMjI,EAAGwP,KCDlBC,GAAiB7Q,EAA4BC,OAAO6Q,iBAAmB,SAA0B1P,EAAG2P,GAClGxP,EAASH,GAKT,IAJA,IAGIC,EAHAmM,EAAOwD,GAAQD,GACflN,EAAS2J,EAAK3J,OACdqC,EAAI,EAEDrC,EAASqC,GAAG/E,EAAGgB,EAAEf,EAAGC,EAAImM,EAAKtH,KAAM6K,EAAW1P,IACrD,OAAOD,GCXLf,GAAWL,EAAqBK,SACpC4Q,GAAiB5Q,IAAYA,GAAS6Q,gBCGlCrI,GAAW7I,GAAyB,YACpCmR,GAAQ,aAIRC,GAAa,WAEf,IAIIC,EAJAC,EAAS5Q,EAAyB,UAClCwF,EAAI0K,GAAY/M,OAcpB,IAVAyN,EAAOC,MAAMC,QAAU,OACvB7Q,GAAmB8Q,YAAYH,GAC/BA,EAAOhL,IAAM,eAGb+K,EAAiBC,EAAOI,cAAcrR,UACvBsR,OACfN,EAAeO,MAAMC,uCACrBR,EAAeS,QACfV,GAAaC,EAAe1M,EACrBuB,YAAYkL,GAAoB,UAAER,GAAY1K,IACrD,OAAOkL,MAGTW,GAAiB9R,OAAO+R,QAAU,SAAgB5Q,EAAG2P,GACnD,IAAI/H,EAQJ,OAPU,OAAN5H,GACF+P,GAAe,UAAI5P,EAASH,GAC5B4H,EAAS,IAAImI,GACbA,GAAe,UAAI,KAEnBnI,EAAOH,IAAYzH,GACd4H,EAASoI,UACMxO,IAAfmO,EAA2B/H,EAASiJ,GAAIjJ,EAAQ+H,ICpCrDlI,GAAW7I,GAAyB,YACpCkS,GAAcjS,OAAOuD,UAEzB2O,GAAiBlS,OAAOmS,gBAAkB,SAAUhR,GAElD,OADAA,EAAIoI,GAASpI,GACTgC,EAAIhC,EAAGyH,IAAkBzH,EAAEyH,IACH,mBAAjBzH,EAAEsM,aAA6BtM,aAAaA,EAAEsM,YAChDtM,EAAEsM,YAAYlK,UACdpC,aAAanB,OAASiS,GAAc,MCV3C3B,GAAWvQ,GAAkB,YAEjCqS,GAAiB3R,EAAmB4R,kBAAoB,SAAU9S,GAChE,QAAUoD,GAANpD,EAAiB,OAAOA,EAAG+Q,KAC1B/Q,EAAG,eACHkR,GAAU6B,GAAQ/S,KCJzBgT,GAAiBjH,MAAMkH,SAAW,SAAiBC,GACjD,MAAmB,SAAZjL,EAAIiL,ICDTvD,GAAUnP,GAAkB,WCChC2S,GAAiB,SAAUC,EAAU/O,GACnC,OAAO,IDAQ,SAAU+O,GACzB,IAAIpG,EASF,OAREiG,GAAQG,KAGM,mBAFhBpG,EAAIoG,EAASlF,cAEkBlB,IAAMjB,QAASkH,GAAQjG,EAAEhJ,aAAagJ,OAAI5J,GACrElD,EAAS8M,IAED,QADVA,EAAIA,EAAE2C,OACU3C,OAAI5J,SAETA,IAAN4J,EAAkBjB,MAAQiB,ECV5B,CAAwBoG,GAAxB,CAAmC/O,ICQ5CgP,GAAiB,SAAUC,EAAMC,GAC/B,IAAIC,EAAiB,GAARF,EACTG,EAAoB,GAARH,EACZI,EAAkB,GAARJ,EACVK,EAAmB,GAARL,EACXM,EAAwB,GAARN,EAChBO,EAAmB,GAARP,GAAaM,EACxBpB,EAASe,GAAWO,GACxB,OAAO,SAAUnL,EAAOoL,EAAY3P,GAQlC,IAPA,IAMI7C,EAAKyS,EANLpS,EAAIoI,GAASrB,GACblJ,EAAO2I,EAAQxG,GACfe,EAAIiD,EAAImO,EAAY3P,EAAM,GAC1BC,EAASsD,EAASlI,EAAK4E,QACvBmE,EAAQ,EACRgB,EAASgK,EAAShB,EAAO7J,EAAOtE,GAAUoP,EAAYjB,EAAO7J,EAAO,QAAKvF,EAEvEiB,EAASmE,EAAOA,IAAS,IAAIqL,GAAYrL,KAAS/I,KAEtDuU,EAAMrR,EADNpB,EAAM9B,EAAK+I,GACEA,EAAO5G,GAChB0R,GACF,GAAIE,EAAQhK,EAAOhB,GAASwL,OACvB,GAAIA,EAAK,OAAQV,GACpB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO/R,EACf,KAAK,EAAG,OAAOiH,EACf,KAAK,EAAGgB,EAAOC,KAAKlI,QACf,GAAIoS,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWnK,ICxC7DyK,GAAczT,GAAkB,eAChCwQ,GAAajF,MAAM/H,eACQZ,GAA3B4N,GAAWiD,KAA2B/S,EAAmB8P,GAAYiD,OACzE,IAAAC,GAAiB,SAAUxR,GACzBsO,GAAWiD,IAAavR,IAAO,GCLjCyR,GAAiB,SAAUC,EAAMlS,GAC/B,OAASA,MAAOA,EAAOkS,OAAQA,ICG7BC,MAGJ7T,EAAmB6T,GAAmBnT,GAAkB,YAAa,WAAc,OAAO+C,OAE1F,IAAAqQ,GAAiB,SAAUtN,EAAauN,EAAMC,GAC5CxN,EAAYhD,UAAYwO,GAAO6B,IAAqBG,KAAMC,EAAW,EAAGD,KACxE9E,GAAe1I,EAAauN,EAAO,cCDjCxD,GAAWvQ,GAAkB,YAC7BkU,QAAa1G,MAAQ,WAAaA,QAKlC2G,GAAa,WAAc,OAAO1Q,MAEtC2Q,GAAiB,SAAUC,EAAMN,EAAMvN,EAAawN,EAAMM,EAASC,EAAQC,GACzEC,GAAYjO,EAAauN,EAAMC,GAC/B,IAeIU,EAASxS,EAAK2R,EAfdc,EAAY,SAAUC,GACxB,IAAKV,IAASU,KAAQC,EAAO,OAAOA,EAAMD,GAC1C,OAAQA,GACN,IAVK,OAWL,IAVO,SAUM,OAAO,WAAoB,OAAO,IAAIpO,EAAY/C,KAAMmR,IACrE,OAAO,WAAqB,OAAO,IAAIpO,EAAY/C,KAAMmR,KAEzD7K,EAAMgK,EAAO,YACbe,EAdO,UAcMR,EACbS,GAAa,EACbF,EAAQR,EAAK7Q,UACbwR,EAAUH,EAAMtE,KAAasE,EAnBjB,eAmBuCP,GAAWO,EAAMP,GACpEW,GAAaf,IAASc,GAAYL,EAAUL,GAC5CY,EAAWZ,EAAWQ,EAAwBH,EAAU,WAArBM,OAAkCrS,EACrEuS,EAAqB,SAARpB,GAAkBc,EAAMO,SAAqBJ,EAwB9D,GArBIG,IACFtB,EAAoBzB,GAAe+C,EAAWlU,KAAK,IAAIoT,OAC7BpU,OAAOuD,WAAaqQ,EAAkBG,OAE9D9E,GAAe2E,EAAmB9J,GAAK,GAEtB3G,EAAIyQ,EAAmBtD,KAAWlN,EAAKwQ,EAAmBtD,GAAU4D,KAIrFW,GAAcE,GAjCP,WAiCkBA,EAAQ3Q,OACnC0Q,GAAa,EACbE,EAAW,WAAoB,OAAOD,EAAQ/T,KAAKwC,SAGxByQ,IAASa,IAAeF,EAAMtE,MACzDlN,EAAKwR,EAAOtE,GAAU0E,GAGxBvE,GAAUqD,GAAQkB,EAClBvE,GAAU3G,GAAOoK,GACbG,EAMF,GALAI,GACEW,OAAQP,EAAaG,EAAWN,EA9CzB,UA+CPnH,KAAM+G,EAASU,EAAWN,EAhDrB,QAiDLS,QAASF,GAEPV,EAAQ,IAAKtS,KAAOwS,EAChBxS,KAAO2S,GAAQxP,EAASwP,EAAO3S,EAAKwS,EAAQxS,SAC7CiC,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAKuP,IAASa,GAAahB,EAAMW,GAEtE,OAAOA,GC1DTY,GAAiBtV,GAA0BuL,MAAO,QAAS,SAAUgK,EAAUX,GAC7EnR,KAAK+R,GAAKlN,EAAUiN,GACpB9R,KAAKgS,GAAK,EACVhS,KAAKiS,GAAKd,GAET,WACD,IAAIxT,EAAIqC,KAAK+R,GACTZ,EAAOnR,KAAKiS,GACZ1N,EAAQvE,KAAKgS,KACjB,OAAKrU,GAAK4G,GAAS5G,EAAEyC,QACnBJ,KAAK+R,QAAK5S,EACH+S,GAAK,IAEaA,GAAK,EAApB,QAARf,EAA+B5M,EACvB,UAAR4M,EAAiCxT,EAAE4G,IACvBA,EAAO5G,EAAE4G,MACxB,UAGH0I,GAAUkF,UAAYlF,GAAUnF,MAEhCsK,GAAiB,QACjBA,GAAiB,UACjBA,GAAiB,WCjCjB,IAAItF,GAAWvQ,GAAkB,YAC7B8V,IAAe,EAEnB,KACe,GAAGvF,MACF,OAAI,WAAcuF,IAAe,GAG/C,MAAOhW,IAET,IAAAiW,GAAiB,SAAUlW,EAAMmW,GAC/B,IAAKA,IAAgBF,GAAc,OAAO,EAC1C,IAAI5S,GAAO,EACX,IACE,IAAI+S,GAAO,GACPC,EAAOD,EAAI1F,MACf2F,EAAKlC,KAAO,WAAc,OAASJ,KAAM1Q,GAAO,IAChD+S,EAAI1F,IAAY,WAAc,OAAO2F,GACrCrW,EAAKoW,GACL,MAAOnW,IACT,OAAOoD,GCdTiT,MAAoBC,YAAc,SAAoBlR,EAAkB6H,GACtE,IAAI3L,EAAIoI,GAAS/F,MACbkM,EAAMxI,EAAS/F,EAAEyC,QACjBwS,EAAK9N,EAAgBrD,EAAQyK,GAC7B2G,EAAO/N,EAAgBwE,EAAO4C,GAC9BjG,EAAMxF,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAC5C2T,EAAQvX,KAAK8H,UAAalE,IAAR8G,EAAoBiG,EAAMpH,EAAgBmB,EAAKiG,IAAQ2G,EAAM3G,EAAM0G,GACrFG,EAAM,EAMV,IALIF,EAAOD,GAAMA,EAAKC,EAAOC,IAC3BC,GAAO,EACPF,GAAQC,EAAQ,EAChBF,GAAME,EAAQ,GAETA,KAAU,GACXD,KAAQlV,EAAGA,EAAEiV,GAAMjV,EAAEkV,UACblV,EAAEiV,GACdA,GAAMG,EACNF,GAAQE,EACR,OAAOpV,YCxBIoG,sBCMXiP,GAAOxW,OAAOyW,+BAEN1W,EAA4ByW,GAAO,SAAkCrV,EAAGC,GAGlF,GAFAD,EAAIkH,EAAUlH,GACdC,EAAIG,EAAYH,GAAG,GACfI,EAAgB,IAClB,OAAOgV,GAAKrV,EAAGC,GACf,MAAOvB,IACT,GAAIsD,EAAIhC,EAAGC,GAAI,OAAOe,GAAYuU,GAAIxU,EAAElB,KAAKG,EAAGC,GAAID,EAAEC,uBCbxD,GAAIrB,EAA2B,CAC7B,IACIpB,EAAS+B,EACT0M,EAAQuJ,EACRzS,EAAU0S,EACVzJ,EAAS0J,EACTC,EAAUC,GACV5R,EAAM6R,EACN1J,EAAa2J,EACbC,EAAeC,EACf/T,EAAOgU,EACPvJ,EAAcwJ,EACdtQ,EAAYuQ,EACZpQ,EAAWqQ,EACX3K,EAAU4K,EACVlP,EAAkBmP,EAClBlW,EAAcmW,EACdvU,EAAMwU,EACNrF,EAAUsF,GACVnY,EAAWoY,EACXtO,EAAWuO,GACXC,EAAcC,GACdjG,EAASkG,GACT9F,EAAiB+F,GACjBhO,EAAOiO,GAA0BjW,EACjCkW,EAAYC,GACZ1S,EAAM2S,EACNC,EAAMC,GACNC,EAAoBC,GACpBC,EAAsBC,EACtB/I,EAAqBgJ,GACrBC,EAAiBC,GACjBtI,EAAYuI,GACZC,EAAcC,GACdC,EAAaC,GACbnL,GAAYoL,GACZC,GAAkBC,GAClBC,GAAMC,EACNC,GAAQC,GACRzY,GAAKsY,GAAItX,EACTsU,GAAOkD,GAAMxX,EACbiF,GAAaxI,EAAOwI,WACpBzH,GAAYf,EAAOe,UACnBka,GAAajb,EAAOib,WAKpBrJ,GAAajF,MAAe,UAC5BjB,GAAeyM,EAAQhR,YACvBwE,GAAYwM,EAAQ/Q,SACpB8T,GAAepB,EAAkB,GACjCqB,GAAcrB,EAAkB,GAChCsB,GAAYtB,EAAkB,GAC9BuB,GAAavB,EAAkB,GAC/BwB,GAAYxB,EAAkB,GAC9ByB,GAAiBzB,EAAkB,GACnC0B,GAAgBxB,GAAoB,GACpChQ,GAAegQ,GAAoB,GACnCyB,GAActB,EAAe1D,OAC7BiF,GAAYvB,EAAevL,KAC3B+M,GAAexB,EAAe3D,QAC9BoF,GAAmBhK,GAAWiK,YAC9BC,GAAclK,GAAWmK,OACzBC,GAAmBpK,GAAWqK,YAC9BC,GAAYtK,GAAWlN,KACvByX,GAAYvK,GAAWwK,KACvBC,GAAazK,GAAWlJ,MACxB4T,GAAgB1K,GAAWxP,SAC3Bma,GAAsB3K,GAAW4K,eACjC7K,GAAWiI,EAAI,YACfzO,GAAMyO,EAAI,eACV6C,GAAoBzV,EAAI,qBACxB0V,GAAkB1V,EAAI,mBACtB2V,GAAmBnO,EAAOnH,OAC1BuV,GAAcpO,EAAOzH,MACrBE,GAAOuH,EAAOvH,KAGd4V,GAAO/C,EAAkB,EAAG,SAAUtX,EAAGyC,GAC3C,OAAO6X,GAAS5L,EAAmB1O,EAAGA,EAAEka,KAAmBzX,KAGzD8X,GAAgBtO,EAAM,WAExB,OAA0D,IAAnD,IAAIwM,GAAW,IAAI+B,aAAa,IAAItQ,QAAQ,KAGjDuQ,KAAehC,MAAgBA,GAAoB,UAAE3M,KAAOG,EAAM,WACpE,IAAIwM,GAAW,GAAG3M,UAGhB4O,GAAW,SAAUtc,EAAIuc,GAC3B,IAAI3N,EAASpH,EAAUxH,GACvB,GAAI4O,EAAS,GAAKA,EAAS2N,EAAO,MAAM3U,GAAW,iBACnD,OAAOgH,GAGL4N,GAAW,SAAUxc,GACvB,GAAIE,EAASF,IAAOgc,MAAehc,EAAI,OAAOA,EAC9C,MAAMG,GAAUH,EAAK,2BAGnBkc,GAAW,SAAUlP,EAAG3I,GAC1B,KAAMnE,EAAS8M,IAAM6O,MAAqB7O,GACxC,MAAM7M,GAAU,wCAChB,OAAO,IAAI6M,EAAE3I,IAGboY,GAAkB,SAAU7a,EAAG8a,GACjC,OAAOC,GAASrM,EAAmB1O,EAAGA,EAAEka,KAAmBY,IAGzDC,GAAW,SAAU3P,EAAG0P,GAI1B,IAHA,IAAIlU,EAAQ,EACRnE,EAASqY,EAAKrY,OACdmF,EAAS0S,GAASlP,EAAG3I,GAClBA,EAASmE,GAAOgB,EAAOhB,GAASkU,EAAKlU,KAC5C,OAAOgB,GAGLuD,GAAY,SAAU/M,EAAI0C,EAAKuK,GACjCtL,GAAG3B,EAAI0C,GAAO/B,IAAK,WAAc,OAAOsD,KAAK2Y,GAAG3P,OAG9C4P,GAAQ,SAAc/X,GACxB,IAKI4B,EAAGrC,EAAQwR,EAAQrM,EAAQ2M,EAAM2G,EALjClb,EAAIoI,EAASlF,GACbmF,EAAOvF,UAAUL,OACjB0Y,EAAQ9S,EAAO,EAAIvF,UAAU,QAAKtB,EAClC4Z,OAAoB5Z,IAAV2Z,EACVE,EAASpE,EAAUjX,GAEvB,QAAcwB,GAAV6Z,IAAwBzE,EAAYyE,GAAS,CAC/C,IAAKH,EAAWG,EAAOxb,KAAKG,GAAIiU,KAAanP,EAAI,IAAKyP,EAAO2G,EAAStI,QAAQJ,KAAM1N,IAClFmP,EAAOpM,KAAK0M,EAAKjU,OACjBN,EAAIiU,EAGR,IADImH,GAAW/S,EAAO,IAAG8S,EAAQnX,EAAImX,EAAOrY,UAAU,GAAI,IACrDgC,EAAI,EAAGrC,EAASsD,EAAS/F,EAAEyC,QAASmF,EAAS0S,GAASjY,KAAMI,GAASA,EAASqC,EAAGA,IACpF8C,EAAO9C,GAAKsW,EAAUD,EAAMnb,EAAE8E,GAAIA,GAAK9E,EAAE8E,GAE3C,OAAO8C,GAGL0T,GAAM,WAIR,IAHA,IAAI1U,EAAQ,EACRnE,EAASK,UAAUL,OACnBmF,EAAS0S,GAASjY,KAAMI,GACrBA,EAASmE,GAAOgB,EAAOhB,GAAS9D,UAAU8D,KACjD,OAAOgB,GAIL2T,KAAkB9C,IAAcxM,EAAM,WAAc8N,GAAoBla,KAAK,IAAI4Y,GAAW,MAE5F+C,GAAkB,WACpB,OAAOzB,GAAoBlX,MAAM0Y,GAAgB1B,GAAWha,KAAK+a,GAASvY,OAASuY,GAASvY,MAAOS,YAGjG2Q,IACFuB,WAAY,SAAoBlR,EAAQ6H,GACtC,OAAOwM,GAAgBtY,KAAK+a,GAASvY,MAAOyB,EAAQ6H,EAAO7I,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEnGia,MAAO,SAAetJ,GACpB,OAAO0G,GAAW+B,GAASvY,MAAO8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEtFka,KAAM,SAAcpb,GAClB,OAAOwM,GAAUjK,MAAM+X,GAASvY,MAAOS,YAEzC6Y,OAAQ,SAAgBxJ,GACtB,OAAO0I,GAAgBxY,KAAMsW,GAAYiC,GAASvY,MAAO8P,EACvDrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAE1Coa,KAAM,SAAcC,GAClB,OAAO/C,GAAU8B,GAASvY,MAAOwZ,EAAW/Y,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEpFsa,UAAW,SAAmBD,GAC5B,OAAO9C,GAAe6B,GAASvY,MAAOwZ,EAAW/Y,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEzFua,QAAS,SAAiB5J,GACxBuG,GAAakC,GAASvY,MAAO8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEjFwa,QAAS,SAAiBC,GACxB,OAAOzU,GAAaoT,GAASvY,MAAO4Z,EAAenZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3F0a,SAAU,SAAkBD,GAC1B,OAAOjD,GAAc4B,GAASvY,MAAO4Z,EAAenZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE5FU,KAAM,SAAcia,GAClB,OAAOzC,GAAU7W,MAAM+X,GAASvY,MAAOS,YAEzCuW,YAAa,SAAqB4C,GAChC,OAAO7C,GAAiBvW,MAAM+X,GAASvY,MAAOS,YAEhDsZ,IAAK,SAAajB,GAChB,OAAOd,GAAKO,GAASvY,MAAO8Y,EAAOrY,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3E+X,OAAQ,SAAgBpH,GACtB,OAAOmH,GAAYzW,MAAM+X,GAASvY,MAAOS,YAE3C2W,YAAa,SAAqBtH,GAChC,OAAOqH,GAAiB3W,MAAM+X,GAASvY,MAAOS,YAEhD+I,QAAS,WAMP,IALA,IAIIvL,EAHAmC,EAASmY,GADFvY,MACiBI,OACxB4Z,EAASze,KAAK2H,MAAM9C,EAAS,GAC7BmE,EAAQ,EAELA,EAAQyV,GACb/b,EANS+B,KAMIuE,GANJvE,KAOJuE,KAPIvE,OAOcI,GAPdJ,KAQJI,GAAUnC,EACf,OATS+B,MAWbia,KAAM,SAAcnK,GAClB,OAAOyG,GAAUgC,GAASvY,MAAO8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAErFoY,KAAM,SAAc2C,GAClB,OAAO5C,GAAU9Z,KAAK+a,GAASvY,MAAOka,IAExCC,SAAU,SAAkBC,EAAOnU,GACjC,IAAItI,EAAI4a,GAASvY,MACbI,EAASzC,EAAEyC,OACXia,EAASvV,EAAgBsV,EAAOha,GACpC,OAAO,IAAKiM,EAAmB1O,EAAGA,EAAEka,KAA7B,CACLla,EAAEkK,OACFlK,EAAE2M,WAAa+P,EAAS1c,EAAE2c,kBAC1B5W,QAAkBvE,IAAR8G,EAAoB7F,EAAS0E,EAAgBmB,EAAK7F,IAAWia,MAKzEpO,GAAS,SAAe3C,EAAOrD,GACjC,OAAOuS,GAAgBxY,KAAMwX,GAAWha,KAAK+a,GAASvY,MAAOsJ,EAAOrD,KAGlEsU,GAAO,SAAaC,GACtBjC,GAASvY,MACT,IAAI2K,EAAS0N,GAAS5X,UAAU,GAAI,GAChCL,EAASJ,KAAKI,OACdyC,EAAMkD,EAASyU,GACftO,EAAMxI,EAASb,EAAIzC,QACnBmE,EAAQ,EACZ,GAAI2H,EAAMvB,EAASvK,EAAQ,MAAMuD,GAvKhB,iBAwKjB,KAAOY,EAAQ2H,GAAKlM,KAAK2K,EAASpG,GAAS1B,EAAI0B,MAG7CkW,IACF9I,QAAS,WACP,OAAOmF,GAAatZ,KAAK+a,GAASvY,QAEpC+J,KAAM,WACJ,OAAO8M,GAAUrZ,KAAK+a,GAASvY,QAEjC4R,OAAQ,WACN,OAAOgF,GAAYpZ,KAAK+a,GAASvY,SAIjC0a,GAAY,SAAUjZ,EAAQhD,GAChC,OAAOxC,EAASwF,IACXA,EAAOsW,KACO,iBAAPtZ,GACPA,KAAOgD,GACP3B,QAAQrB,IAAQqB,OAAOrB,IAE1Bkc,GAAW,SAAkClZ,EAAQhD,GACvD,OAAOic,GAAUjZ,EAAQhD,EAAMV,EAAYU,GAAK,IAC5CiV,EAAa,EAAGjS,EAAOhD,IACvBuU,GAAKvR,EAAQhD,IAEfmc,GAAW,SAAwBnZ,EAAQhD,EAAKoc,GAClD,QAAIH,GAAUjZ,EAAQhD,EAAMV,EAAYU,GAAK,KACxCxC,EAAS4e,IACTlb,EAAIkb,EAAM,WACTlb,EAAIkb,EAAM,QACVlb,EAAIkb,EAAM,QAEVA,EAAKxc,cACJsB,EAAIkb,EAAM,cAAeA,EAAKvc,UAC9BqB,EAAIkb,EAAM,gBAAiBA,EAAKzc,WAI9BV,GAAG+D,EAAQhD,EAAKoc,IAFvBpZ,EAAOhD,GAAOoc,EAAK5c,MACZwD,IAINqW,KACH5B,GAAMxX,EAAIic,GACV3E,GAAItX,EAAIkc,IAGVla,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK4W,GAAkB,UACjD7E,yBAA0B0H,GAC1Ble,eAAgBme,KAGdhR,EAAM,WAAc6N,GAAcja,aACpCia,GAAgBC,GAAsB,WACpC,OAAOL,GAAU7Z,KAAKwC,QAI1B,IAAI8a,GAAwBzQ,KAAgB+G,IAC5C/G,EAAYyQ,GAAuBL,IACnC7a,EAAKkb,GAAuBhO,GAAU2N,GAAW7I,QACjDvH,EAAYyQ,IACVjX,MAAOoI,GACPxC,IAAK8Q,GACLtQ,YAAa,aACb1M,SAAUka,GACVE,eAAgBwB,KAElBrQ,GAAUgS,GAAuB,SAAU,KAC3ChS,GAAUgS,GAAuB,aAAc,KAC/ChS,GAAUgS,GAAuB,aAAc,KAC/ChS,GAAUgS,GAAuB,SAAU,KAC3Cpd,GAAGod,GAAuBxU,IACxB5J,IAAK,WAAc,OAAOsD,KAAK+X,OAIjC3c,EAAAC,QAAiB,SAAUyQ,EAAKwM,EAAOyC,EAASC,GAE9C,IAAI1K,EAAOxE,IADXkP,IAAYA,GACgB,UAAY,IAAM,QAC1CC,EAAS,MAAQnP,EACjBoP,EAAS,MAAQpP,EACjBqP,EAAahgB,EAAOmV,GACpBM,EAAOuK,MACPC,EAAMD,GAAcxM,EAAewM,GACnCpK,GAAUoK,IAAexR,EAAOtH,IAChC1E,KACA0d,EAAsBF,GAAcA,EAAoB,UAUxDG,EAAa,SAAUnb,EAAMoE,GAC/B7G,GAAGyC,EAAMoE,GACP7H,IAAK,WACH,OAZO,SAAUyD,EAAMoE,GAC3B,IAAIgX,EAAOpb,EAAKwY,GAChB,OAAO4C,EAAKC,EAAEP,GAAQ1W,EAAQ+T,EAAQiD,EAAKE,EAAGvD,IAUnCwD,CAAO1b,KAAMuE,IAEtBkF,IAAK,SAAUxL,GACb,OAXO,SAAUkC,EAAMoE,EAAOtG,GAClC,IAAIsd,EAAOpb,EAAKwY,GACZqC,IAAS/c,GAASA,EAAQ1C,KAAKogB,MAAM1d,IAAU,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,GACjFsd,EAAKC,EAAEN,GAAQ3W,EAAQ+T,EAAQiD,EAAKE,EAAGxd,EAAOia,IAQnC0D,CAAO5b,KAAMuE,EAAOtG,IAE7BG,YAAY,KAGZ2S,GACFoK,EAAaJ,EAAQ,SAAU5a,EAAMob,EAAMM,EAASC,GAClDhS,EAAW3J,EAAMgb,EAAY7K,EAAM,MACnC,IAEIzI,EAAQ2C,EAAYpK,EAAQ2b,EAF5BxX,EAAQ,EACRoG,EAAS,EAEb,GAAK1O,EAASsf,GAIP,CAAA,KAAIA,aAAgB1U,IAhUd,gBAgU+BkV,EAAQjN,EAAQyM,KA/T9C,qBA+TwEQ,GAa/E,OAAIhE,MAAewD,EACjB7C,GAASyC,EAAYI,GAErB3C,GAAMpb,KAAK2d,EAAYI,GAf9B1T,EAAS0T,EACT5Q,EAAS0N,GAASwD,EAASvD,GAC3B,IAAI0D,EAAOT,EAAK/Q,WAChB,QAAgBrL,IAAZ2c,EAAuB,CACzB,GAAIE,EAAO1D,EAAO,MAAM3U,GApSf,iBAsST,IADA6G,EAAawR,EAAOrR,GACH,EAAG,MAAMhH,GAtSjB,sBAyST,IADA6G,EAAa9G,EAASoY,GAAWxD,GAChB3N,EAASqR,EAAM,MAAMrY,GAzS7B,iBA2SXvD,EAASoK,EAAa8N,OAftBlY,EAASgJ,EAAQmS,GAEjB1T,EAAS,IAAIhB,GADb2D,EAAapK,EAASkY,GA2BxB,IAPA1Y,EAAKO,EAAM,MACTG,EAAGuH,EACH4T,EAAG9Q,EACHsR,EAAGzR,EACHnO,EAAG+D,EACHob,EAAG,IAAI1U,GAAUe,KAEZtD,EAAQnE,GAAQkb,EAAWnb,EAAMoE,OAE1C8W,EAAsBF,EAAoB,UAAI5M,EAAOuM,IACrDlb,EAAKyb,EAAqB,cAAeF,IAC/BvR,EAAM,WAChBuR,EAAW,MACNvR,EAAM,WACX,IAAIuR,GAAY,MACX1F,EAAY,SAAUhD,GAC3B,IAAI0I,EACJ,IAAIA,EAAW,MACf,IAAIA,EAAW,KACf,IAAIA,EAAW1I,KACd,KACD0I,EAAaJ,EAAQ,SAAU5a,EAAMob,EAAMM,EAASC,GAElD,IAAIC,EAGJ,OAJAjS,EAAW3J,EAAMgb,EAAY7K,GAIxBrU,EAASsf,GACVA,aAAgB1U,IA7WP,gBA6WwBkV,EAAQjN,EAAQyM,KA5WvC,qBA4WiEQ,OAC1D5c,IAAZ2c,EACH,IAAIlL,EAAK2K,EAAMlD,GAASwD,EAASvD,GAAQwD,QAC7B3c,IAAZ0c,EACE,IAAIjL,EAAK2K,EAAMlD,GAASwD,EAASvD,IACjC,IAAI1H,EAAK2K,GAEbxD,MAAewD,EAAa7C,GAASyC,EAAYI,GAC9C3C,GAAMpb,KAAK2d,EAAYI,GATF,IAAI3K,EAAKxH,EAAQmS,MAW/ClF,GAAa+E,IAAQ3f,SAASsE,UAAY2G,EAAKkK,GAAM1R,OAAOwH,EAAK0U,IAAQ1U,EAAKkK,GAAO,SAAUnS,GACvFA,KAAO0c,GAAavb,EAAKub,EAAY1c,EAAKmS,EAAKnS,MAEvD0c,EAAoB,UAAIE,EACVA,EAAoBpR,YAAckR,GAElD,IAAIe,EAAkBb,EAAoBvO,IACtCqP,IAAsBD,IACI,UAAxBA,EAAgBtb,WAA4CzB,GAAxB+c,EAAgBtb,MACtDwb,EAAY3B,GAAW7I,OAC3BhS,EAAKub,EAAYvD,IAAmB,GACpChY,EAAKyb,EAAqBtD,GAAazH,GACvC1Q,EAAKyb,EAAqBjZ,IAAM,GAChCxC,EAAKyb,EAAqBxD,GAAiBsD,IAEvCH,EAAU,IAAIG,EAAW,GAAG7U,KAAQgK,EAAShK,MAAO+U,IACtD3d,GAAG2d,EAAqB/U,IACtB5J,IAAK,WAAc,OAAO4T,KAI9B3S,EAAE2S,GAAQ6K,EAEVza,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKia,GAAcvK,GAAOjT,GAElE+C,EAAQA,EAAQtD,EAAGkT,GACjBgK,kBAAmBhC,IAGrB5X,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI0I,EAAM,WAAcgH,EAAKyL,GAAG7e,KAAK2d,EAAY,KAAQ7K,GACnFuC,KAAM+F,GACNyD,GAAIpD,KApZgB,sBAuZKoC,GAAsBzb,EAAKyb,EAvZhC,oBAuZwE/C,GAE9F5X,EAAQA,EAAQ9C,EAAG0S,EAAMc,IAEzBuE,EAAWrF,GAEX5P,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAIkX,GAAY9H,GAAQ7G,IAAK8Q,KAEzD7Z,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAKib,EAAmB7L,EAAMmK,IAE1CY,EAAoB9d,UAAYka,KAAe4D,EAAoB9d,SAAWka,IAE9F/W,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI0I,EAAM,WACpC,IAAIuR,EAAW,GAAGtX,UAChByM,GAAQzM,MAAOoI,KAEnBvL,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAK0I,EAAM,WACrC,OAAQ,EAAG,GAAG+N,kBAAoB,IAAIwD,GAAY,EAAG,IAAIxD,qBACpD/N,EAAM,WACXyR,EAAoB1D,eAAena,MAAM,EAAG,OACzC8S,GAAQqH,eAAgBwB,KAE7BlM,EAAUqD,GAAQ6L,EAAoBD,EAAkBE,EACvCD,GAAmBvc,EAAKyb,EAAqBvO,GAAUsP,SAErEhhB,EAAAC,QAAiB,eC/dxBkB,GAA0B,OAAQ,EAAG,SAAU+f,GAC7C,OAAO,SAAmBf,EAAMjR,EAAYlK,GAC1C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYlK,GAC3C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAA2Bf,EAAMjR,EAAYlK,GAClD,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MAErC,GCJH7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYlK,GAC3C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,SAAU,EAAG,SAAU+f,GAC/C,OAAO,SAAqBf,EAAMjR,EAAYlK,GAC5C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYlK,GAC3C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,SAAU,EAAG,SAAU+f,GAC/C,OAAO,SAAqBf,EAAMjR,EAAYlK,GAC5C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,UAAW,EAAG,SAAU+f,GAChD,OAAO,SAAsBf,EAAMjR,EAAYlK,GAC7C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,UAAW,EAAG,SAAU+f,GAChD,OAAO,SAAsBf,EAAMjR,EAAYlK,GAC7C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCAxC,IAAAmc,GAAiB,SAAU1D,EAAUxb,EAAIY,EAAO0T,GAC9C,IACE,OAAOA,EAAUtU,EAAGS,EAASG,GAAO,GAAIA,EAAM,IAAMZ,EAAGY,GAEvD,MAAO5B,GACP,IAAImgB,EAAM3D,EAAiB,OAE3B,WADY1Z,IAARqd,GAAmB1e,EAAS0e,EAAIhf,KAAKqb,IACnCxc,qBCHV,IAAIogB,KACAC,KACArhB,EAAUD,EAAAC,QAAiB,SAAUshB,EAAUhL,EAAStU,EAAI8C,EAAM2M,GACpE,IAGI1M,EAAQ8R,EAAM2G,EAAUtT,EAHxByT,EAASlM,EAAW,WAAc,OAAO6P,GAAc/H,GAAU+H,GACjEje,EAAIiD,EAAItE,EAAI8C,EAAMwR,EAAU,EAAI,GAChCpN,EAAQ,EAEZ,GAAqB,mBAAVyU,EAAsB,MAAM9c,UAAUygB,EAAW,qBAE5D,GAAIpI,GAAYyE,IAAS,IAAK5Y,EAASsD,EAASiZ,EAASvc,QAASA,EAASmE,EAAOA,IAEhF,IADAgB,EAASoM,EAAUjT,EAAEZ,EAASoU,EAAOyK,EAASpY,IAAQ,GAAI2N,EAAK,IAAMxT,EAAEie,EAASpY,OACjEkY,GAASlX,IAAWmX,EAAQ,OAAOnX,OAC7C,IAAKsT,EAAWG,EAAOxb,KAAKmf,KAAazK,EAAO2G,EAAStI,QAAQJ,MAEtE,IADA5K,EAAS/H,GAAKqb,EAAUna,EAAGwT,EAAKjU,MAAO0T,MACxB8K,GAASlX,IAAWmX,EAAQ,OAAOnX,GAGtDlK,EAAQohB,MAAQA,EAChBphB,EAAQqhB,OAASA,qBCxBjB,IAAIE,EAAOrgB,EAAkB,QAGzBsgB,EAAU5f,EAAwByB,EAClCI,EAAK,EACLge,EAAetgB,OAAOsgB,cAAgB,WACxC,OAAO,GAELC,GAAU7f,EAAoB,WAChC,OAAO4f,EAAatgB,OAAOwgB,yBAEzBC,EAAU,SAAUlhB,GACtB8gB,EAAQ9gB,EAAI6gB,GAAQ3e,OAClBwE,EAAG,OAAQ3D,EACXoe,SAgCAC,EAAO/hB,EAAAC,SACTyQ,IAAK8Q,EACLQ,MAAM,EACNC,QAhCY,SAAUthB,EAAIwS,GAE1B,IAAKtS,EAASF,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK4D,EAAI5D,EAAI6gB,GAAO,CAElB,IAAKE,EAAa/gB,GAAK,MAAO,IAE9B,IAAKwS,EAAQ,MAAO,IAEpB0O,EAAQlhB,GAER,OAAOA,EAAG6gB,GAAMna,GAsBlB6a,QApBY,SAAUvhB,EAAIwS,GAC1B,IAAK5O,EAAI5D,EAAI6gB,GAAO,CAElB,IAAKE,EAAa/gB,GAAK,OAAO,EAE9B,IAAKwS,EAAQ,OAAO,EAEpB0O,EAAQlhB,GAER,OAAOA,EAAG6gB,GAAMM,GAYlBK,SATa,SAAUxhB,GAEvB,OADIghB,GAAUI,EAAKC,MAAQN,EAAa/gB,KAAQ4D,EAAI5D,EAAI6gB,IAAOK,EAAQlhB,GAChEA,MC3CTyhB,GAAiB,SAAUzhB,EAAIsT,GAC7B,IAAKpT,EAASF,IAAOA,EAAGgW,KAAO1C,EAAM,MAAMnT,UAAU,0BAA4BmT,EAAO,cACxF,OAAOtT,GCFL2B,GAAKnB,EAAwBmC,EAU7B2e,GAAUpgB,GAAmBogB,QAE7BI,GAAOnW,EAAc,KAAO,OAE5BoW,GAAW,SAAUvd,EAAM1B,GAE7B,IACIkf,EADApZ,EAAQ8Y,GAAQ5e,GAEpB,GAAc,MAAV8F,EAAe,OAAOpE,EAAK6R,GAAGzN,GAElC,IAAKoZ,EAAQxd,EAAKyd,GAAID,EAAOA,EAAQA,EAAME,EACzC,GAAIF,EAAMG,GAAKrf,EAAK,OAAOkf,GAI/BI,IACEC,eAAgB,SAAUjD,EAASzK,EAAMf,EAAQ0O,GAC/C,IAAIlV,EAAIgS,EAAQ,SAAU5a,EAAMwc,GAC9B7S,EAAW3J,EAAM4I,EAAGuH,EAAM,MAC1BnQ,EAAK4R,GAAKzB,EACVnQ,EAAK6R,GAAKzD,GAAO,MACjBpO,EAAKyd,QAAKze,EACVgB,EAAK+d,QAAK/e,EACVgB,EAAKsd,IAAQ,OACGte,GAAZwd,GAAuBwB,GAAMxB,EAAUpN,EAAQpP,EAAK8d,GAAQ9d,KAsDlE,OApDAkK,EAAYtB,EAAEhJ,WAGZqe,MAAO,WACL,IAAK,IAAIje,EAAOoY,GAASvY,KAAMsQ,GAAOiL,EAAOpb,EAAK6R,GAAI2L,EAAQxd,EAAKyd,GAAID,EAAOA,EAAQA,EAAME,EAC1FF,EAAMU,GAAI,EACNV,EAAMW,IAAGX,EAAMW,EAAIX,EAAMW,EAAET,OAAI1e,UAC5Boc,EAAKoC,EAAMlb,GAEpBtC,EAAKyd,GAAKzd,EAAK+d,QAAK/e,EACpBgB,EAAKsd,IAAQ,GAIfc,OAAU,SAAU9f,GAClB,IAAI0B,EAAOoY,GAASvY,KAAMsQ,GACtBqN,EAAQD,GAASvd,EAAM1B,GAC3B,GAAIkf,EAAO,CACT,IAAIpN,EAAOoN,EAAME,EACbW,EAAOb,EAAMW,SACVne,EAAK6R,GAAG2L,EAAMlb,GACrBkb,EAAMU,GAAI,EACNG,IAAMA,EAAKX,EAAItN,GACfA,IAAMA,EAAK+N,EAAIE,GACfre,EAAKyd,IAAMD,IAAOxd,EAAKyd,GAAKrN,GAC5BpQ,EAAK+d,IAAMP,IAAOxd,EAAK+d,GAAKM,GAChCre,EAAKsd,MACL,QAASE,GAIbjE,QAAS,SAAiB5J,GACxByI,GAASvY,KAAMsQ,GAGf,IAFA,IACIqN,EADAjf,EAAIiD,EAAImO,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAW,GAElEwe,EAAQA,EAAQA,EAAME,EAAI7d,KAAK4d,IAGpC,IAFAlf,EAAEif,EAAMnC,EAAGmC,EAAMG,EAAG9d,MAEb2d,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,GAK3C3e,IAAK,SAAalB,GAChB,QAASif,GAASnF,GAASvY,KAAMsQ,GAAO7R,MAGxC6I,GAAa5J,GAAGqL,EAAEhJ,UAAW,QAC/BrD,IAAK,WACH,OAAO6b,GAASvY,KAAMsQ,GAAMmN,OAGzB1U,GAET1C,IAAK,SAAUlG,EAAM1B,EAAKR,GACxB,IACIugB,EAAMja,EADNoZ,EAAQD,GAASvd,EAAM1B,GAoBzB,OAjBEkf,EACFA,EAAMnC,EAAIvd,GAGVkC,EAAK+d,GAAKP,GACRlb,EAAG8B,EAAQ8Y,GAAQ5e,GAAK,GACxBqf,EAAGrf,EACH+c,EAAGvd,EACHqgB,EAAGE,EAAOre,EAAK+d,GACfL,OAAG1e,EACHkf,GAAG,GAEAle,EAAKyd,KAAIzd,EAAKyd,GAAKD,GACpBa,IAAMA,EAAKX,EAAIF,GACnBxd,EAAKsd,MAES,MAAVlZ,IAAepE,EAAK6R,GAAGzN,GAASoZ,IAC7Bxd,GAEXud,SAAUA,GACVe,UAAW,SAAU1V,EAAGuH,EAAMf,GAG5BmP,GAAY3V,EAAGuH,EAAM,SAAUwB,EAAUX,GACvCnR,KAAK+R,GAAKwG,GAASzG,EAAUxB,GAC7BtQ,KAAKiS,GAAKd,EACVnR,KAAKke,QAAK/e,GACT,WAKD,IAJA,IACIgS,EADOnR,KACKiS,GACZ0L,EAFO3d,KAEMke,GAEVP,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,EAEvC,OANWte,KAMD+R,KANC/R,KAMYke,GAAKP,EAAQA,EAAQA,EAAME,EANvC7d,KAMgD+R,GAAG6L,IAMnC1L,GAAK,EAApB,QAARf,EAA+BwM,EAAMG,EAC7B,UAAR3M,EAAiCwM,EAAMnC,GAC3BmC,EAAMG,EAAGH,EAAMnC,KAdpBxb,KAQJ+R,QAAK5S,EACH+S,GAAK,KAMb3C,EAAS,UAAY,UAAWA,GAAQ,GAG3CoG,GAAWrF,KCzIXqO,GAAQ,SAAUhhB,EAAGyT,GAEvB,GADAtT,EAASH,IACJ1B,EAASmV,IAAoB,OAAVA,EAAgB,MAAMlV,UAAUkV,EAAQ,8BAElEwN,IACEnV,IAAKjN,OAAOqiB,iBAAmB,gBAC7B,SAAUC,EAAMC,EAAOtV,GACrB,KACEA,EAAMlN,EAAkBd,SAAS+B,KAAMP,GAA0ByB,EAAElC,OAAOuD,UAAW,aAAa0J,IAAK,IACnGqV,MACJC,IAAUD,aAAgBhX,OAC1B,MAAOzL,GAAK0iB,GAAQ,EACtB,OAAO,SAAwBphB,EAAGyT,GAIhC,OAHAuN,GAAMhhB,EAAGyT,GACL2N,EAAOphB,EAAEqhB,UAAY5N,EACpB3H,EAAI9L,EAAGyT,GACLzT,GAVX,KAYM,QAASwB,GACjBwf,MAAOA,ICtBLE,GAAiBtiB,GAAwBkN,ICa7CwV,GAAiB,SAAU3O,EAAMyK,EAAS9J,EAASiO,EAAQ3P,EAAQ4P,GACjE,IAAIvO,EAAOzV,EAAOmV,GACdvH,EAAI6H,EACJqN,EAAQ1O,EAAS,MAAQ,MACzB6B,EAAQrI,GAAKA,EAAEhJ,UACfpC,KACAyhB,EAAY,SAAUtT,GACxB,IAAIzO,EAAK+T,EAAMtF,GACflK,EAASwP,EAAOtF,EACP,UAAPA,EAAkB,SAAUnP,GAC1B,QAAOwiB,IAAYljB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPmP,EAAe,SAAanP,GAC9B,QAAOwiB,IAAYljB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPmP,EAAe,SAAanP,GAC9B,OAAOwiB,IAAYljB,EAASU,QAAKwC,EAAY9B,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAChE,OAAPmP,EAAe,SAAanP,GAAqC,OAAhCU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,GAAWqD,MACxE,SAAarD,EAAG2D,GAAwC,OAAnCjD,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,EAAG2D,GAAWN,QAGvE,GAAgB,mBAAL+I,IAAqBoW,GAAW/N,EAAMsI,UAAY9P,EAAM,YACjE,IAAIb,GAAI4I,UAAUpB,UAMb,CACL,IAAI8O,EAAW,IAAItW,EAEfuW,EAAiBD,EAASpB,GAAOkB,MAAgB,EAAG,IAAME,EAE1DE,EAAuB3V,EAAM,WAAcyV,EAAS1f,IAAI,KAExD6f,EAAmB/J,GAAY,SAAUhD,GAAQ,IAAI1J,EAAE0J,KAEvDgN,GAAcN,GAAWvV,EAAM,WAIjC,IAFA,IAAI8V,EAAY,IAAI3W,EAChBxE,EAAQ,EACLA,KAASmb,EAAUzB,GAAO1Z,EAAOA,GACxC,OAAQmb,EAAU/f,KAAK,KAEpB6f,KACHzW,EAAIgS,EAAQ,SAAUtZ,EAAQkb,GAC5B7S,EAAWrI,EAAQsH,EAAGuH,GACtB,IAAInQ,EDzDK,SAAUA,EAAMsB,EAAQsH,GACvC,IACInL,EADAR,EAAIqE,EAAOwI,YAIb,OAFE7M,IAAM2L,GAAiB,mBAAL3L,IAAoBQ,EAAIR,EAAE2C,aAAegJ,EAAEhJ,WAAa9D,EAAS2B,IAAMihB,IAC3FA,GAAe1e,EAAMvC,GACduC,ECoDQwf,CAAkB,IAAI/O,EAAQnP,EAAQsH,GAEjD,YADgB5J,GAAZwd,GAAuBwB,GAAMxB,EAAUpN,EAAQpP,EAAK8d,GAAQ9d,GACzDA,KAEPJ,UAAYqR,EACdA,EAAMnH,YAAclB,IAElBwW,GAAwBE,KAC1BL,EAAU,UACVA,EAAU,OACV7P,GAAU6P,EAAU,SAElBK,GAAcH,IAAgBF,EAAUnB,GAExCkB,GAAW/N,EAAMgN,cAAchN,EAAMgN,WApCzCrV,EAAImW,EAAOlB,eAAejD,EAASzK,EAAMf,EAAQ0O,GACjD5T,EAAYtB,EAAEhJ,UAAWkR,GACzBkM,GAAKC,MAAO,EA4Cd,OAPA3R,GAAe1C,EAAGuH,GAElB3S,EAAE2S,GAAQvH,EACVrI,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAK6H,GAAK6H,GAAOjT,GAEpDwhB,GAASD,EAAOT,UAAU1V,EAAGuH,EAAMf,GAEjCxG,OC7EQxM,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/EzC,IAAK,SAAa+B,GAChB,IAAIkf,EAAQiC,GAAOlC,SAASnF,GAASvY,KAR/B,OAQ2CvB,GACjD,OAAOkf,GAASA,EAAMnC,GAGxB/R,IAAK,SAAahL,EAAKR,GACrB,OAAO2hB,GAAOvZ,IAAIkS,GAASvY,KAbrB,OAayC,IAARvB,EAAY,EAAIA,EAAKR,KAE7D2hB,IAAQ,GCZMrjB,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/E0gB,IAAK,SAAa5hB,GAChB,OAAO2hB,GAAOvZ,IAAIkS,GAASvY,KARrB,OAQiC/B,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,KAEzE2hB,OCbSpjB,OAAOsjB,wBCOfC,GAAUvjB,OAAOwjB,OAGrBC,IAAkBF,IAAWxjB,EAAoB,WAC/C,IAAI2jB,KACA1e,KAEApE,EAAI+I,SACJga,EAAI,uBAGR,OAFAD,EAAE9iB,GAAK,EACP+iB,EAAE5gB,MAAM,IAAIma,QAAQ,SAAUoE,GAAKtc,EAAEsc,GAAKA,IACd,GAArBiC,MAAYG,GAAG9iB,IAAWZ,OAAOuN,KAAKgW,MAAYve,IAAI3B,KAAK,KAAOsgB,IACtE,SAAgB1e,EAAQZ,GAM3B,IALA,IAAI6L,EAAI3G,GAAStE,GACbuE,EAAOvF,UAAUL,OACjBmE,EAAQ,EACR6b,EAAaC,GAAK3hB,EAClB4hB,EAASpN,GAAIxU,EACVsH,EAAOzB,GAMZ,IALA,IAII9F,EAJArB,EAAI+G,EAAQ1D,UAAU8D,MACtBwF,EAAOqW,EAAa7S,GAAQnQ,GAAG8B,OAAOkhB,EAAWhjB,IAAMmQ,GAAQnQ,GAC/DgD,EAAS2J,EAAK3J,OACd4J,EAAI,EAED5J,EAAS4J,GAAOsW,EAAO9iB,KAAKJ,EAAGqB,EAAMsL,EAAKC,QAAO0C,EAAEjO,GAAOrB,EAAEqB,IACnE,OAAOiO,GACPqT,GC/BAzC,GAAU/gB,GAAmB+gB,QAQ7B7G,GAAYxB,GAAkB,GAC9ByB,GAAiBzB,GAAkB,GACnCnW,GAAK,EAGLyhB,GAAsB,SAAUpgB,GAClC,OAAOA,EAAK+d,KAAO/d,EAAK+d,GAAK,IAAIsC,KAE/BA,GAAsB,WACxBxgB,KAAKrD,MAEH8jB,GAAqB,SAAU1b,EAAOtG,GACxC,OAAOgY,GAAU1R,EAAMpI,EAAG,SAAUZ,GAClC,OAAOA,EAAG,KAAO0C,KAGrB+hB,GAAoBzgB,WAClBrD,IAAK,SAAU+B,GACb,IAAIkf,EAAQ8C,GAAmBzgB,KAAMvB,GACrC,GAAIkf,EAAO,OAAOA,EAAM,IAE1Bhe,IAAK,SAAUlB,GACb,QAASgiB,GAAmBzgB,KAAMvB,IAEpCgL,IAAK,SAAUhL,EAAKR,GAClB,IAAI0f,EAAQ8C,GAAmBzgB,KAAMvB,GACjCkf,EAAOA,EAAM,GAAK1f,EACjB+B,KAAKrD,EAAE6I,MAAM/G,EAAKR,KAEzBsgB,OAAU,SAAU9f,GAClB,IAAI8F,EAAQmS,GAAe1W,KAAKrD,EAAG,SAAUZ,GAC3C,OAAOA,EAAG,KAAO0C,IAGnB,OADK8F,GAAOvE,KAAKrD,EAAE+jB,OAAOnc,EAAO,MACvBA,IAId,IAAAoc,IACE3C,eAAgB,SAAUjD,EAASzK,EAAMf,EAAQ0O,GAC/C,IAAIlV,EAAIgS,EAAQ,SAAU5a,EAAMwc,GAC9B7S,EAAW3J,EAAM4I,EAAGuH,EAAM,MAC1BnQ,EAAK4R,GAAKzB,EACVnQ,EAAK6R,GAAKlT,KACVqB,EAAK+d,QAAK/e,OACMA,GAAZwd,GAAuBwB,GAAMxB,EAAUpN,EAAQpP,EAAK8d,GAAQ9d,KAoBlE,OAlBAkK,EAAYtB,EAAEhJ,WAGZwe,OAAU,SAAU9f,GAClB,IAAKxC,EAASwC,GAAM,OAAO,EAC3B,IAAI8c,EAAO+B,GAAQ7e,GACnB,OAAa,IAAT8c,EAAsBgF,GAAoBhI,GAASvY,KAAMsQ,IAAe,OAAE7R,GACvE8c,GAAQqF,EAAKrF,EAAMvb,KAAKgS,YAAcuJ,EAAKvb,KAAKgS,KAIzDrS,IAAK,SAAalB,GAChB,IAAKxC,EAASwC,GAAM,OAAO,EAC3B,IAAI8c,EAAO+B,GAAQ7e,GACnB,OAAa,IAAT8c,EAAsBgF,GAAoBhI,GAASvY,KAAMsQ,IAAO3Q,IAAIlB,GACjE8c,GAAQqF,EAAKrF,EAAMvb,KAAKgS,OAG5BjJ,GAET1C,IAAK,SAAUlG,EAAM1B,EAAKR,GACxB,IAAIsd,EAAO+B,GAAQxf,EAASW,IAAM,GAGlC,OAFa,IAAT8c,EAAegF,GAAoBpgB,GAAMsJ,IAAIhL,EAAKR,GACjDsd,EAAKpb,EAAK6R,IAAM/T,EACdkC,GAET0gB,QAASN,kBClFX,IAaIO,EAbAC,EAAOxkB,GAA4B,GASnC+gB,EAAUH,GAAKG,QACfR,EAAetgB,OAAOsgB,aACtByD,EAAsBS,GAAKH,QAC3BI,KAGAlG,EAAU,SAAUre,GACtB,OAAO,WACL,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAIvD8R,GAEFvU,IAAK,SAAa+B,GAChB,GAAIxC,EAASwC,GAAM,CACjB,IAAI8c,EAAO+B,EAAQ7e,GACnB,OAAa,IAAT8c,EAAsBgF,EAAoBhI,GAASvY,KAlB9C,YAkB+DtD,IAAI+B,GACrE8c,EAAOA,EAAKvb,KAAKgS,SAAM7S,IAIlCsK,IAAK,SAAahL,EAAKR,GACrB,OAAO+iB,GAAK3a,IAAIkS,GAASvY,KAxBd,WAwB+BvB,EAAKR,KAK/CijB,EAAW9lB,EAAAC,QAAiB4B,GA7BjB,UA6BoD8d,EAAS9J,EAAS+P,IAAM,GAAM,GAG7FpX,EAAM,WAAc,OAAyE,IAAlE,IAAIsX,GAAWzX,KAAKjN,OAAO2kB,QAAU3kB,QAAQykB,GAAM,GAAGvkB,IAAIukB,OACvFH,EAAcE,GAAKhD,eAAejD,EAjCrB,WAkCbiF,GAAOc,EAAY/gB,UAAWkR,GAC9BkM,GAAKC,MAAO,EACZ2D,GAAM,SAAU,MAAO,MAAO,OAAQ,SAAUtiB,GAC9C,IAAI2S,EAAQ8P,EAASnhB,UACjBqhB,EAAShQ,EAAM3S,GACnBmD,EAASwP,EAAO3S,EAAK,SAAU9B,EAAG2D,GAEhC,GAAIrE,EAASU,KAAOmgB,EAAangB,GAAI,CAC9BqD,KAAK4d,KAAI5d,KAAK4d,GAAK,IAAIkD,GAC5B,IAAIvb,EAASvF,KAAK4d,GAAGnf,GAAK9B,EAAG2D,GAC7B,MAAc,OAAP7B,EAAeuB,KAAOuF,EAE7B,OAAO6b,EAAO5jB,KAAKwC,KAAMrD,EAAG2D,UCjDpC/D,GAHe,UAGoB,SAAUG,GAC3C,OAAO,WAAqB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGnF0gB,IAAK,SAAa5hB,GAChB,OAAO+iB,GAAK3a,IAAIkS,GAASvY,KARd,WAQ+B/B,GAAO,KAElD+iB,IAAM,GAAO,GCThB,IAAIK,IAAU9kB,EAAqB+kB,aAAe9gB,MAC9C+gB,GAAS9lB,SAAS+E,MAEtBE,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKjE,EAAoB,WACnDokB,GAAO,gBACL,WACF7gB,MAAO,SAAeiB,EAAQ+f,EAAcC,GAC1C,IAAI/U,EAAIrM,EAAUoB,GACdigB,EAAI5jB,EAAS2jB,GACjB,OAAOJ,GAASA,GAAO3U,EAAG8U,EAAcE,GAAKH,GAAO/jB,KAAKkP,EAAG8U,EAAcE,MCZ9E,IAAAC,GAAiB,SAAUtkB,EAAIukB,EAAMzhB,GACnC,IAAI0hB,OAAc1iB,IAATgB,EACT,OAAQyhB,EAAKxhB,QACX,KAAK,EAAG,OAAOyhB,EAAKxkB,IACAA,EAAGG,KAAK2C,GAC5B,KAAK,EAAG,OAAO0hB,EAAKxkB,EAAGukB,EAAK,IACRvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,IACvC,KAAK,EAAG,OAAOC,EAAKxkB,EAAGukB,EAAK,GAAIA,EAAK,IACjBvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOC,EAAKxkB,EAAGukB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1BvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzD,KAAK,EAAG,OAAOC,EAAKxkB,EAAGukB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACnCvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAClE,OAAOvkB,EAAGmD,MAAML,EAAMyhB,ICVtBpK,MAAgB3T,MAChBie,MAUJC,GAAiBtmB,SAASumB,MAAQ,SAAc7hB,GAC9C,IAAI9C,EAAKgD,EAAUL,MACfiiB,EAAWzK,GAAWha,KAAKiD,UAAW,GACtCyhB,EAAQ,WACV,IAAIN,EAAOK,EAAS/iB,OAAOsY,GAAWha,KAAKiD,YAC3C,OAAOT,gBAAgBkiB,EAbX,SAAUhhB,EAAGgL,EAAK0V,GAChC,KAAM1V,KAAO4V,IAAY,CACvB,IAAK,IAAIjE,KAAQpb,EAAI,EAAGA,EAAIyJ,EAAKzJ,IAAKob,EAAEpb,GAAK,KAAOA,EAAI,IAExDqf,GAAU5V,GAAOzQ,SAAS,MAAO,gBAAkBoiB,EAAEhe,KAAK,KAAO,KACjE,OAAOiiB,GAAU5V,GAAKhL,EAAG0gB,GAQMO,CAAU9kB,EAAIukB,EAAKxhB,OAAQwhB,GAAQQ,GAAO/kB,EAAIukB,EAAMzhB,IAGrF,OADIlE,EAASoB,EAAG0C,aAAYmiB,EAAMniB,UAAY1C,EAAG0C,WAC1CmiB,GCfLG,IAAc9lB,EAAqB+kB,aAAea,UAIlDG,GAAiB1Y,EAAM,WACzB,SAAS1I,KACT,QAASmhB,GAAW,gBAAiCnhB,aAAcA,KAEjEqhB,IAAY3Y,EAAM,WACpByY,GAAW,gBAGb3hB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKohB,IAAkBC,IAAW,WAC5DJ,UAAW,SAAmBK,EAAQZ,GACpCvhB,EAAUmiB,GACV1kB,EAAS8jB,GACT,IAAIa,EAAYhiB,UAAUL,OAAS,EAAIoiB,EAASniB,EAAUI,UAAU,IACpE,GAAI8hB,KAAaD,GAAgB,OAAOD,GAAWG,EAAQZ,EAAMa,GACjE,GAAID,GAAUC,EAAW,CAEvB,OAAQb,EAAKxhB,QACX,KAAK,EAAG,OAAO,IAAIoiB,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAOZ,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAIc,GAAS,MAEb,OADAA,EAAMld,KAAKhF,MAAMkiB,EAAOd,GACjB,IAAKI,GAAKxhB,MAAMgiB,EAAQE,IAGjC,IAAItR,EAAQqR,EAAU1iB,UAClBsf,EAAW9Q,GAAOtS,EAASmV,GAASA,EAAQ5U,OAAOuD,WACnDwF,EAAS9J,SAAS+E,MAAMhD,KAAKglB,EAAQnD,EAAUuC,GACnD,OAAO3lB,EAASsJ,GAAUA,EAAS8Z,KCrCvC3e,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAElD+kB,QAAQ7kB,eAAeiB,EAAGgB,KAAM,GAAKT,MAAO,IAAM,GAAKA,MAAO,MAC5D,WACFxB,eAAgB,SAAwBgF,EAAQkhB,EAAaC,GAC3D9kB,EAAS2D,GACTkhB,EAAc5kB,EAAY4kB,GAAa,GACvC7kB,EAAS8kB,GACT,IAEE,OADAllB,EAAGgB,EAAE+C,EAAQkhB,EAAaC,IACnB,EACP,MAAOvmB,GACP,OAAO,MCjBb,IAAI2W,GAAOzW,GAA0BmC,EAGrCgC,EAAQA,EAAQtD,EAAG,WACjBylB,eAAgB,SAAwBphB,EAAQkhB,GAC9C,IAAI9H,EAAO7H,GAAKlV,EAAS2D,GAASkhB,GAClC,QAAO9H,IAASA,EAAKxc,sBAA8BoD,EAAOkhB,MCY9DjiB,EAAQA,EAAQtD,EAAG,WAAaV,IAZhC,SAASA,EAAI+E,EAAQkhB,GACnB,IACI9H,EAAMzJ,EADN0R,EAAWriB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GAEzD,OAAI3C,EAAS2D,KAAYqhB,EAAiBrhB,EAAOkhB,IAC7C9H,EAAO7H,GAAKtU,EAAE+C,EAAQkhB,IAAqBhjB,EAAIkb,EAAM,SACrDA,EAAK5c,WACQkB,IAAb0b,EAAKne,IACHme,EAAKne,IAAIc,KAAKslB,QACd3jB,EACFlD,EAASmV,EAAQzC,GAAelN,IAAiB/E,EAAI0U,EAAOuR,EAAaG,QAA7E,KCZFpiB,EAAQA,EAAQtD,EAAG,WACjB6V,yBAA0B,SAAkCxR,EAAQkhB,GAClE,OAAO3P,GAAKtU,EAAEZ,EAAS2D,GAASkhB,MCFpCjiB,EAAQA,EAAQtD,EAAG,WACjBuR,eAAgB,SAAwBlN,GACtC,OAAOshB,GAASjlB,EAAS2D,OCJ7Bf,EAAQA,EAAQtD,EAAG,WACjBuC,IAAK,SAAa8B,EAAQkhB,GACxB,OAAOA,KAAelhB,KCF1B,IAAIuhB,GAAgBxmB,OAAOsgB,aAE3Bpc,EAAQA,EAAQtD,EAAG,WACjB0f,aAAc,SAAsBrb,GAElC,OADA3D,EAAS2D,IACFuhB,IAAgBA,GAAcvhB,MCJzC,IAAI6f,GAAU/kB,EAAqB+kB,QACnC2B,GAAiB3B,IAAWA,GAAQ4B,SAAW,SAAiBnnB,GAC9D,IAAIgO,EAAOrD,GAAKhI,EAAEZ,EAAS/B,IACvBqkB,EAAaC,GAAK3hB,EACtB,OAAO0hB,EAAarW,EAAK7K,OAAOkhB,EAAWrkB,IAAOgO,GCLpDrJ,EAAQA,EAAQtD,EAAG,WAAa8lB,QAAS3mB,KCAzC,IAAI4mB,GAAqB3mB,OAAOwgB,kBAEhCtc,EAAQA,EAAQtD,EAAG,WACjB4f,kBAAmB,SAA2Bvb,GAC5C3D,EAAS2D,GACT,IAEE,OADI0hB,IAAoBA,GAAmB1hB,IACpC,EACP,MAAOpF,GACP,OAAO,MCkBbqE,EAAQA,EAAQtD,EAAG,WAAaqM,IApBhC,SAASA,EAAIhI,EAAQkhB,EAAaS,GAChC,IAEIC,EAAoBjS,EAFpB0R,EAAWriB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GACrD6iB,EAAUtQ,GAAKtU,EAAEZ,EAAS2D,GAASkhB,GAEvC,IAAKW,EAAS,CACZ,GAAIrnB,EAASmV,EAAQzC,GAAelN,IAClC,OAAOgI,EAAI2H,EAAOuR,EAAaS,EAAGN,GAEpCQ,EAAU3kB,EAAW,GAEvB,OAAIgB,EAAI2jB,EAAS,YACU,IAArBA,EAAQhlB,WAAuBrC,EAAS6mB,MAC5CO,EAAqBrQ,GAAKtU,EAAEokB,EAAUH,IAAgBhkB,EAAW,IAC9CV,MAAQmlB,EAC3B1lB,EAAGgB,EAAEokB,EAAUH,EAAaU,GACrB,SAEclkB,IAAhBmkB,EAAQ7Z,MAA6B6Z,EAAQ7Z,IAAIjM,KAAKslB,EAAUM,IAAI,MCvBzEG,IAAU7iB,EAAQA,EAAQtD,EAAG,WAC/ByhB,eAAgB,SAAwBpd,EAAQ2P,GAC9CmS,GAAS5E,MAAMld,EAAQ2P,GACvB,IAEE,OADAmS,GAAS9Z,IAAIhI,EAAQ2P,IACd,EACP,MAAO/U,GACP,OAAO,MCNb,IAQImnB,GAAOC,GAASC,GARhBC,GAAUxoB,EAAOwoB,QACjBC,GAAUzoB,EAAO0oB,aACjBC,GAAY3oB,EAAO4oB,eACnBC,GAAiB7oB,EAAO6oB,eACxBC,GAAW9oB,EAAO8oB,SAClBC,GAAU,EACVC,MAGAC,GAAM,WACR,IAAItlB,GAAMkB,KAEV,GAAImkB,GAAMvlB,eAAeE,GAAK,CAC5B,IAAIzB,EAAK8mB,GAAMrlB,UACRqlB,GAAMrlB,GACbzB,MAGAgnB,GAAW,SAAUC,GACvBF,GAAI5mB,KAAK8mB,EAAM/I,OAGZqI,IAAYE,KACfF,GAAU,SAAsBvmB,GAG9B,IAFA,IAAIukB,KACAnf,EAAI,EACDhC,UAAUL,OAASqC,GAAGmf,EAAKpc,KAAK/E,UAAUgC,MAMjD,OALA0hB,KAAQD,IAAW,WAEjB9B,GAAoB,mBAAN/kB,EAAmBA,EAAK5B,SAAS4B,GAAKukB,IAEtD4B,GAAMU,IACCA,IAETJ,GAAY,SAAwBhlB,UAC3BqlB,GAAMrlB,IAGmB,WAA9BvC,EAAkBonB,IACpBH,GAAQ,SAAU1kB,GAChB6kB,GAAQY,SAAS5iB,EAAIyiB,GAAKtlB,EAAI,KAGvBmlB,IAAYA,GAASO,IAC9BhB,GAAQ,SAAU1kB,GAChBmlB,GAASO,IAAI7iB,EAAIyiB,GAAKtlB,EAAI,KAGnBklB,IAETN,IADAD,GAAU,IAAIO,IACCS,MACfhB,GAAQiB,MAAMC,UAAYN,GAC1Bb,GAAQ7hB,EAAI+hB,GAAKkB,YAAalB,GAAM,IAG3BvoB,EAAO0pB,kBAA0C,mBAAfD,cAA8BzpB,EAAO2pB,eAChFtB,GAAQ,SAAU1kB,GAChB3D,EAAOypB,YAAY9lB,EAAK,GAAI,MAE9B3D,EAAO0pB,iBAAiB,UAAWR,IAAU,IAG7Cb,GAvDqB,uBAsDUuB,EAAI,UAC3B,SAAUjmB,GAChBkmB,GAAKhX,YAAY+W,EAAI,WAA6B,mBAAI,WACpDC,GAAKC,YAAYjlB,MACjBokB,GAAI5mB,KAAKsB,KAKL,SAAUA,GAChBomB,WAAWvjB,EAAIyiB,GAAKtlB,EAAI,GAAI,KAIlC,IAAAqmB,IACE1b,IAAKma,GACLxF,MAAO0F,ICjFLsB,GAAY7oB,GAAmBkN,IAC/B4b,GAAWlqB,EAAOmqB,kBAAoBnqB,EAAOoqB,uBAC7C5B,GAAUxoB,EAAOwoB,QACjB6B,GAAUrqB,EAAOqqB,QACjBC,GAAuC,WAA9BxoB,EAAkB0mB,ICU/B,ICOI+B,GAAUC,GAA6BC,GAAsBC,SDP9C,SAAU9c,GAC3B,OAAO,IAZT,SAA2BA,GACzB,IAAI+c,EAASC,EACb/lB,KAAKgmB,QAAU,IAAIjd,EAAE,SAAUkd,EAAWC,GACxC,QAAgB/mB,IAAZ2mB,QAAoC3mB,IAAX4mB,EAAsB,MAAM7pB,UAAU,2BACnE4pB,EAAUG,EACVF,EAASG,IAEXlmB,KAAK8lB,QAAUzlB,EAAUylB,GACzB9lB,KAAK+lB,OAAS1lB,EAAU0lB,GAIjB,CAAsBhd,KEhB/Bod,GAAiB,SAAU/pB,GACzB,IACE,OAASC,GAAG,EAAOmf,EAAGpf,KACtB,MAAOC,GACP,OAASA,GAAG,EAAMmf,EAAGnf,KDOrB+pB,GAAO7pB,GAAmBkN,IAC1B4c,GFLa,WACf,IAAIC,EAAMC,EAAMC,EAEZC,EAAQ,WACV,IAAIC,EAAQrpB,EAEZ,IADIooB,KAAWiB,EAAS/C,GAAQgD,SAASD,EAAOE,OACzCN,GAAM,CACXjpB,EAAKipB,EAAKjpB,GACVipB,EAAOA,EAAK/V,KACZ,IACElT,IACA,MAAOhB,GAGP,MAFIiqB,EAAME,IACLD,OAAOpnB,EACN9C,GAERkqB,OAAOpnB,EACLunB,GAAQA,EAAOG,SAIrB,GAAIpB,GACFe,EAAS,WACP7C,GAAQY,SAASkC,SAGd,IAAIpB,IAAclqB,EAAO2rB,WAAa3rB,EAAO2rB,UAAUC,WAQvD,GAAIvB,IAAWA,GAAQM,QAAS,CACrC,IAAIE,EAAUR,GAAQM,UACtBU,EAAS,WACPR,EAAQgB,KAAKP,SASfD,EAAS,WAEPpB,GAAU5nB,KAAKrC,EAAQsrB,QAtBgD,CACzE,IAAIQ,GAAS,EACTC,EAAOtqB,SAASuqB,eAAe,IACnC,IAAI9B,GAASoB,GAAOW,QAAQF,GAAQG,eAAe,IACnDb,EAAS,WACPU,EAAK3L,KAAO0L,GAAUA,GAqB1B,OAAO,SAAU5pB,GACf,IAAI+oB,GAAS/oB,GAAIA,EAAIkT,UAAMpR,GACvBonB,IAAMA,EAAKhW,KAAO6V,GACjBE,IACHA,EAAOF,EACPI,KACAD,EAAOH,GErDGnpB,GAKZf,GAAYf,EAAOe,UACnBynB,GAAUxoB,EAAOwoB,QACjB2D,GAAWnsB,EAAc,QACzBsqB,GAA6B,WAApB3W,GAAQ6U,IACjB4D,GAAQ,aAERC,GAAuB7B,GAA8B8B,GAA2B/oB,EAEhFgpB,KAAe,WACjB,IAEE,IAAI1B,EAAUsB,GAASxB,QAAQ,GAC3B6B,GAAe3B,EAAQ/b,gBAAkB/M,GAAkB,YAAc,SAAUd,GACrFA,EAAKmrB,GAAOA,KAGd,OAAQ9B,IAA0C,mBAAzBmC,wBAAwC5B,EAAQgB,KAAKO,cAAkBI,EAChG,MAAOtrB,KATQ,GAafwrB,GAAa,SAAU9rB,GACzB,IAAIirB,EACJ,SAAO/qB,EAASF,IAAkC,mBAAnBirB,EAAOjrB,EAAGirB,QAAsBA,GAE7DR,GAAS,SAAUR,EAAS8B,GAC9B,IAAI9B,EAAQ+B,GAAZ,CACA/B,EAAQ+B,IAAK,EACb,IAAIC,EAAQhC,EAAQiC,GACpB5B,GAAU,WAgCR,IA/BA,IAAIpoB,EAAQ+nB,EAAQkC,GAChBC,EAAmB,GAAdnC,EAAQoC,GACb3lB,EAAI,EACJ2hB,EAAM,SAAUiE,GAClB,IAII9iB,EAAQyhB,EAJRsB,EAAUH,EAAKE,EAASF,GAAKE,EAASE,KACtCzC,EAAUuC,EAASvC,QACnBC,EAASsC,EAAStC,OAClBY,EAAS0B,EAAS1B,OAEtB,IACM2B,GACGH,IACe,GAAdnC,EAAQwC,IAASC,GAAkBzC,GACvCA,EAAQwC,GAAK,IAEC,IAAZF,EAAkB/iB,EAAStH,GAEzB0oB,GAAQA,EAAOE,QACnBthB,EAAS+iB,EAAQrqB,GACb0oB,GAAQA,EAAOC,QAEjBrhB,IAAW8iB,EAASrC,QACtBD,EAAO7pB,GAAU,yBACR8qB,EAAOa,GAAWtiB,IAC3ByhB,EAAKxpB,KAAK+H,EAAQugB,EAASC,GACtBD,EAAQvgB,IACVwgB,EAAO9nB,GACd,MAAO5B,GACP0pB,EAAO1pB,KAGJ2rB,EAAM5nB,OAASqC,GAAG2hB,EAAI4D,EAAMvlB,MACnCujB,EAAQiC,MACRjC,EAAQ+B,IAAK,EACTD,IAAa9B,EAAQwC,IAAIE,GAAY1C,OAGzC0C,GAAc,SAAU1C,GAC1BI,GAAK5oB,KAAKrC,EAAQ,WAChB,IAEIoK,EAAQ+iB,EAASK,EAFjB1qB,EAAQ+nB,EAAQkC,GAChBU,EAAYC,GAAY7C,GAe5B,GAbI4C,IACFrjB,EAASujB,GAAQ,WACXrD,GACF9B,GAAQoF,KAAK,qBAAsB9qB,EAAO+nB,IACjCsC,EAAUntB,EAAO6tB,sBAC1BV,GAAUtC,QAASA,EAASiD,OAAQhrB,KAC1B0qB,EAAUxtB,EAAOwtB,UAAYA,EAAQO,OAC/CP,EAAQO,MAAM,8BAA+BjrB,KAIjD+nB,EAAQwC,GAAK/C,IAAUoD,GAAY7C,GAAW,EAAI,GAClDA,EAAQmD,QAAKhqB,EACXypB,GAAarjB,EAAOlJ,EAAG,MAAMkJ,EAAOiW,KAGxCqN,GAAc,SAAU7C,GAC1B,OAAsB,IAAfA,EAAQwC,IAAkD,KAArCxC,EAAQmD,IAAMnD,EAAQiC,IAAI7nB,QAEpDqoB,GAAoB,SAAUzC,GAChCI,GAAK5oB,KAAKrC,EAAQ,WAChB,IAAImtB,EACA7C,GACF9B,GAAQoF,KAAK,mBAAoB/C,IACxBsC,EAAUntB,EAAOiuB,qBAC1Bd,GAAUtC,QAASA,EAASiD,OAAQjD,EAAQkC,QAI9CmB,GAAU,SAAUprB,GACtB,IAAI+nB,EAAUhmB,KACVgmB,EAAQrN,KACZqN,EAAQrN,IAAK,GACbqN,EAAUA,EAAQsD,IAAMtD,GAChBkC,GAAKjqB,EACb+nB,EAAQoC,GAAK,EACRpC,EAAQmD,KAAInD,EAAQmD,GAAKnD,EAAQiC,GAAGpkB,SACzC2iB,GAAOR,GAAS,KAEduD,GAAW,SAAUtrB,GACvB,IACI+oB,EADAhB,EAAUhmB,KAEd,IAAIgmB,EAAQrN,GAAZ,CACAqN,EAAQrN,IAAK,EACbqN,EAAUA,EAAQsD,IAAMtD,EACxB,IACE,GAAIA,IAAY/nB,EAAO,MAAM/B,GAAU,qCACnC8qB,EAAOa,GAAW5pB,IACpBooB,GAAU,WACR,IAAItL,GAAYuO,GAAItD,EAASrN,IAAI,GACjC,IACEqO,EAAKxpB,KAAKS,EAAO0D,EAAI4nB,GAAUxO,EAAS,GAAIpZ,EAAI0nB,GAAStO,EAAS,IAClE,MAAO1e,GACPgtB,GAAQ7rB,KAAKud,EAAS1e,OAI1B2pB,EAAQkC,GAAKjqB,EACb+nB,EAAQoC,GAAK,EACb5B,GAAOR,GAAS,IAElB,MAAO3pB,GACPgtB,GAAQ7rB,MAAO8rB,GAAItD,EAASrN,IAAI,GAAStc,MAKxCqrB,KAEHJ,GAAW,SAAiBkC,GAC1B1f,EAAW9J,KAAMsnB,GA/IP,UA+I0B,MACpCjnB,EAAUmpB,GACV9D,GAASloB,KAAKwC,MACd,IACEwpB,EAAS7nB,EAAI4nB,GAAUvpB,KAAM,GAAI2B,EAAI0nB,GAASrpB,KAAM,IACpD,MAAOypB,GACPJ,GAAQ7rB,KAAKwC,KAAMypB,MAIvB/D,GAAW,SAAiB8D,GAC1BxpB,KAAKioB,MACLjoB,KAAKmpB,QAAKhqB,EACVa,KAAKooB,GAAK,EACVpoB,KAAK2Y,IAAK,EACV3Y,KAAKkoB,QAAK/oB,EACVa,KAAKwoB,GAAK,EACVxoB,KAAK+nB,IAAK,IAEHhoB,UAAYoT,EAA2BmU,GAASvnB,WAEvDinB,KAAM,SAAc0C,EAAaC,GAC/B,IAAItB,EAAWb,GAAqBnb,GAAmBrM,KAAMsnB,KAO7D,OANAe,EAASF,GAA2B,mBAAfuB,GAA4BA,EACjDrB,EAASE,KAA4B,mBAAdoB,GAA4BA,EACnDtB,EAAS1B,OAASlB,GAAS9B,GAAQgD,YAASxnB,EAC5Ca,KAAKioB,GAAGziB,KAAK6iB,GACTroB,KAAKmpB,IAAInpB,KAAKmpB,GAAG3jB,KAAK6iB,GACtBroB,KAAKooB,IAAI5B,GAAOxmB,MAAM,GACnBqoB,EAASrC,SAGlB4D,MAAS,SAAUD,GACjB,OAAO3pB,KAAKgnB,UAAK7nB,EAAWwqB,MAGhC/D,GAAuB,WACrB,IAAII,EAAU,IAAIN,GAClB1lB,KAAKgmB,QAAUA,EACfhmB,KAAK8lB,QAAUnkB,EAAI4nB,GAAUvD,EAAS,GACtChmB,KAAK+lB,OAASpkB,EAAI0nB,GAASrD,EAAS,IAEtCyB,GAA2B/oB,EAAI8oB,GAAuB,SAAUze,GAC9D,OAAOA,IAAMue,IAAYve,IAAM8c,GAC3B,IAAID,GAAqB7c,GACzB4c,GAA4B5c,KAIpCrI,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKwmB,IAAclC,QAAS8B,KACpElU,GAAgCkU,GAjMlB,WAkMdjU,GAlMc,WAmMdwS,GAAUtS,EAA0B,QAGpC7S,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKwmB,GAtMnB,WAwMZ3B,OAAQ,SAAgB1H,GACtB,IAAIwL,EAAarC,GAAqBxnB,MAGtC,OADAkmB,EADe2D,EAAW9D,QACjB1H,GACFwL,EAAW7D,WAGtBtlB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAiBwmB,GA/M/B,WAiNZ5B,QAAS,SAAiBgE,GACxB,OE9Na,SAAU/gB,EAAG+gB,GAE5B,GADAhsB,EAASiL,GACL9M,EAAS6tB,IAAMA,EAAE7f,cAAgBlB,EAAG,OAAO+gB,EAC/C,IAAIC,EAAoBvC,GAAqB9oB,EAAEqK,GAG/C,OADA+c,EADciE,EAAkBjE,SACxBgE,GACDC,EAAkB/D,QFwNhBgE,CAAwDhqB,KAAM8pB,MAGzEppB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMwmB,IAAclU,GAA0B,SAAUf,GAClF6U,GAAS2C,IAAIxX,GAAa,MAAE8U,OAtNhB,WAyNZ0C,IAAK,SAAatN,GAChB,IAAI5T,EAAI/I,KACJ6pB,EAAarC,GAAqBze,GAClC+c,EAAU+D,EAAW/D,QACrBC,EAAS8D,EAAW9D,OACpBxgB,EAASujB,GAAQ,WACnB,IAAIlX,KACArN,EAAQ,EACR2lB,EAAY,EAChB/L,GAAMxB,GAAU,EAAO,SAAUqJ,GAC/B,IAAImE,EAAS5lB,IACT6lB,GAAgB,EACpBxY,EAAOpM,UAAKrG,GACZ+qB,IACAnhB,EAAE+c,QAAQE,GAASgB,KAAK,SAAU/oB,GAC5BmsB,IACJA,GAAgB,EAChBxY,EAAOuY,GAAUlsB,IACfisB,GAAapE,EAAQlU,KACtBmU,OAEHmE,GAAapE,EAAQlU,KAGzB,OADIrM,EAAOlJ,GAAG0pB,EAAOxgB,EAAOiW,GACrBqO,EAAW7D,SAGpBqE,KAAM,SAAc1N,GAClB,IAAI5T,EAAI/I,KACJ6pB,EAAarC,GAAqBze,GAClCgd,EAAS8D,EAAW9D,OACpBxgB,EAASujB,GAAQ,WACnB3K,GAAMxB,GAAU,EAAO,SAAUqJ,GAC/Bjd,EAAE+c,QAAQE,GAASgB,KAAK6C,EAAW/D,QAASC,OAIhD,OADIxgB,EAAOlJ,GAAG0pB,EAAOxgB,EAAOiW,GACrBqO,EAAW7D,WG9QtB,UAAYzpB,ICIRE,GAAiBF,EAAwBmC,EAC7C4rB,GAAiB,SAAU1pB,GACzB,IAAI2pB,EAAU5uB,EAAKwK,SAAWxK,EAAKwK,OAAwBhL,EAAOgL,YAC5C,KAAlBvF,EAAK4pB,OAAO,IAAe5pB,KAAQ2pB,GAAU9tB,GAAe8tB,EAAS3pB,GAAQ3C,MAAOwsB,GAAO/rB,EAAEkC,MCL/F8F,GAAOnK,GAA0BmC,EACjCnB,MAAcA,SAEdmtB,GAA+B,iBAAVpvB,QAAsBA,QAAUkB,OAAOmJ,oBAC5DnJ,OAAOmJ,oBAAoBrK,iBAUZ,SAA6BS,GAC9C,OAAO2uB,IAAoC,mBAArBntB,GAASC,KAAKzB,GATjB,SAAUA,GAC7B,IACE,OAAO2K,GAAK3K,GACZ,MAAOM,GACP,OAAOquB,GAAY7mB,SAK0C8mB,CAAe5uB,GAAM2K,GAAK7B,EAAU9I,MCVjG6gB,GAAOrgB,GAAmBuP,IAoB1BkH,GAAOkD,GAAMxX,EACbhB,GAAKsY,EAAItX,EACTgI,GAAOkkB,GAAQlsB,EACf6rB,GAAUpvB,EAAOgL,OACjB0kB,GAAQ1vB,EAAO2vB,KACfC,GAAaF,IAASA,GAAMG,UAE5BC,GAASlW,GAAI,WACbmW,GAAenW,GAAI,eACnBuL,MAAYvc,qBACZonB,GAAiBlmB,EAAO,mBACxBmmB,GAAanmB,EAAO,WACpBomB,GAAYpmB,EAAO,cACnBwJ,GAAcjS,OAAgB,UAC9BkrB,GAA+B,mBAAX6C,GACpBe,GAAUnwB,EAAOmwB,QAEjB1P,IAAU0P,KAAYA,GAAiB,YAAMA,GAAiB,UAAEC,UAGhEC,GAAgBlkB,GAAemkB,EAAO,WACxC,OAES,GAFFC,GAAQhuB,MAAO,KACpBhB,IAAK,WAAc,OAAOgB,GAAGsC,KAAM,KAAO/B,MAAO,IAAKtB,MACpDA,IACD,SAAUZ,EAAI0C,EAAKmN,GACtB,IAAI+f,EAAY3Y,GAAKvE,GAAahQ,GAC9BktB,UAAkBld,GAAYhQ,GAClCf,GAAG3B,EAAI0C,EAAKmN,GACR+f,GAAa5vB,IAAO0S,IAAa/Q,GAAG+Q,GAAahQ,EAAKktB,IACxDjuB,GAEAkuB,GAAO,SAAUplB,GACnB,IAAIqlB,EAAMT,GAAW5kB,GAAOklB,GAAQnB,GAAiB,WAErD,OADAsB,EAAI5Z,GAAKzL,EACFqlB,GAGLC,GAAWpE,IAAyC,iBAApB6C,GAAQ1R,SAAuB,SAAU9c,GAC3E,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAOA,aAAcwuB,IAGnBwB,GAAkB,SAAwBhwB,EAAI0C,EAAKmN,GAKrD,OAJI7P,IAAO0S,IAAasd,GAAgBV,GAAW5sB,EAAKmN,GACxD9N,EAAS/B,GACT0C,EAAMV,EAAYU,GAAK,GACvBX,EAAS8N,GACLjM,EAAIyrB,GAAY3sB,IACbmN,EAAExN,YAIDuB,EAAI5D,EAAIkvB,KAAWlvB,EAAGkvB,IAAQxsB,KAAM1C,EAAGkvB,IAAQxsB,IAAO,GAC1DmN,EAAI8f,GAAQ9f,GAAKxN,WAAYO,EAAW,GAAG,OAJtCgB,EAAI5D,EAAIkvB,KAASvtB,GAAG3B,EAAIkvB,GAAQtsB,EAAW,OAChD5C,EAAGkvB,IAAQxsB,IAAO,GAIX+sB,GAAczvB,EAAI0C,EAAKmN,IACzBlO,GAAG3B,EAAI0C,EAAKmN,IAEnBogB,GAAoB,SAA0BjwB,EAAI6B,GACpDE,EAAS/B,GAKT,IAJA,IAGI0C,EAHAsL,ECnFW,SAAUhO,GACzB,IAAIwJ,EAASgI,GAAQxR,GACjBqkB,EAAaC,GAAK3hB,EACtB,GAAI0hB,EAKF,IAJA,IAGI3hB,EAHAwtB,EAAU7L,EAAWrkB,GACrBukB,EAASpN,GAAIxU,EACb+D,EAAI,EAEDwpB,EAAQ7rB,OAASqC,GAAO6d,EAAO9iB,KAAKzB,EAAI0C,EAAMwtB,EAAQxpB,OAAO8C,EAAOC,KAAK/G,GAChF,OAAO8G,ED0EE2mB,CAAStuB,EAAIiH,EAAUjH,IAC9B6E,EAAI,EACJwZ,EAAIlS,EAAK3J,OAEN6b,EAAIxZ,GAAGspB,GAAgBhwB,EAAI0C,EAAMsL,EAAKtH,KAAM7E,EAAEa,IACrD,OAAO1C,GAKLowB,GAAwB,SAA8B1tB,GACxD,IAAI2tB,EAAI9L,GAAO9iB,KAAKwC,KAAMvB,EAAMV,EAAYU,GAAK,IACjD,QAAIuB,OAASyO,IAAe9O,EAAIyrB,GAAY3sB,KAASkB,EAAI0rB,GAAW5sB,QAC7D2tB,IAAMzsB,EAAIK,KAAMvB,KAASkB,EAAIyrB,GAAY3sB,IAAQkB,EAAIK,KAAMirB,KAAWjrB,KAAKirB,IAAQxsB,KAAO2tB,IAE/FC,GAA4B,SAAkCtwB,EAAI0C,GAGpE,GAFA1C,EAAK8I,EAAU9I,GACf0C,EAAMV,EAAYU,GAAK,GACnB1C,IAAO0S,KAAe9O,EAAIyrB,GAAY3sB,IAASkB,EAAI0rB,GAAW5sB,GAAlE,CACA,IAAImN,EAAIoH,GAAKjX,EAAI0C,GAEjB,OADImN,IAAKjM,EAAIyrB,GAAY3sB,IAAUkB,EAAI5D,EAAIkvB,KAAWlvB,EAAGkvB,IAAQxsB,KAAOmN,EAAExN,YAAa,GAChFwN,IAEL0gB,GAAuB,SAA6BvwB,GAKtD,IAJA,IAGI0C,EAHA6G,EAAQoB,GAAK7B,EAAU9I,IACvBwJ,KACA9C,EAAI,EAED6C,EAAMlF,OAASqC,GACf9C,EAAIyrB,GAAY3sB,EAAM6G,EAAM7C,OAAShE,GAAOwsB,IAAUxsB,GAAOme,IAAMrX,EAAOC,KAAK/G,GACpF,OAAO8G,GAEPgnB,GAAyB,SAA+BxwB,GAM1D,IALA,IAII0C,EAJA+tB,EAAQzwB,IAAO0S,GACfnJ,EAAQoB,GAAK8lB,EAAQnB,GAAYxmB,EAAU9I,IAC3CwJ,KACA9C,EAAI,EAED6C,EAAMlF,OAASqC,IAChB9C,EAAIyrB,GAAY3sB,EAAM6G,EAAM7C,OAAU+pB,IAAQ7sB,EAAI8O,GAAahQ,IAAc8G,EAAOC,KAAK4lB,GAAW3sB,IACxG,OAAO8G,GAINmiB,KAYH9lB,GAXA2oB,GAAU,WACR,GAAIvqB,gBAAgBuqB,GAAS,MAAMruB,UAAU,gCAC7C,IAAIsK,EAAMrE,EAAI1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAChDob,EAAO,SAAUtc,GACf+B,OAASyO,IAAa8L,EAAK/c,KAAK6tB,GAAWptB,GAC3C0B,EAAIK,KAAMirB,KAAWtrB,EAAIK,KAAKirB,IAASzkB,KAAMxG,KAAKirB,IAAQzkB,IAAO,GACrEglB,GAAcxrB,KAAMwG,EAAK7H,EAAW,EAAGV,KAGzC,OADIqJ,GAAesU,IAAQ4P,GAAc/c,GAAajI,GAAOnI,cAAc,EAAMoL,IAAK8Q,IAC/EqR,GAAKplB,KAEY,UAAG,WAAY,WACvC,OAAOxG,KAAKiS,KAGdiE,GAAMxX,EAAI2tB,GACVrW,EAAItX,EAAIqtB,GACR9uB,GAA0ByB,EAAIksB,GAAQlsB,EAAI4tB,GAC1CpvB,GAAyBwB,EAAIytB,GAC7BhZ,GAA0BzU,EAAI6tB,GAE1BjlB,GACF1F,EAAS6M,GAAa,uBAAwB0d,IAAuB,GAGvE1B,GAAO/rB,EAAI,SAAUkC,GACnB,OAAOgrB,GAAK7W,GAAInU,MAIpBF,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKwmB,IAAcvhB,OAAQokB,KAEnE,IAAK,IAAIkC,GAAa,iHAGpBltB,MAAM,KAAMyK,GAAI,EAAGyiB,GAAWrsB,OAAS4J,IAAG+K,GAAI0X,GAAWziB,OAE3D,IAAK,IAAI0iB,GAAmB9mB,GAAMmP,GAAIhQ,OAAQ+Y,GAAI,EAAG4O,GAAiBtsB,OAAS0d,IAAI6O,GAAUD,GAAiB5O,OAE9Gpd,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKwmB,GAAY,UAE3CkF,IAAO,SAAUnuB,GACf,OAAOkB,EAAIwrB,GAAgB1sB,GAAO,IAC9B0sB,GAAe1sB,GACf0sB,GAAe1sB,GAAO8rB,GAAQ9rB,IAGpCouB,OAAQ,SAAgBhB,GACtB,IAAKC,GAASD,GAAM,MAAM3vB,UAAU2vB,EAAM,qBAC1C,IAAK,IAAIptB,KAAO0sB,GAAgB,GAAIA,GAAe1sB,KAASotB,EAAK,OAAOptB,GAE1EquB,UAAW,WAAclR,IAAS,GAClCmR,UAAW,WAAcnR,IAAS,KAGpClb,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKwmB,GAAY,UAE3CnZ,OA/FY,SAAgBxS,EAAI6B,GAChC,YAAauB,IAANvB,EAAkB8tB,GAAQ3vB,GAAMiwB,GAAkBN,GAAQ3vB,GAAK6B,IAgGtEnB,eAAgBsvB,GAEhB1e,iBAAkB2e,GAElB/Y,yBAA0BoZ,GAE1B1mB,oBAAqB2mB,GAErBxM,sBAAuByM,KAIzB1B,IAASnqB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMwmB,IAAc+D,EAAO,WAC9D,IAAIruB,EAAImtB,KAIR,MAA0B,UAAnBQ,IAAY3tB,KAA2C,MAAxB2tB,IAAapuB,EAAGS,KAAyC,MAAzB2tB,GAAWvuB,OAAOY,OACrF,QACH4tB,UAAW,SAAmBjvB,GAI5B,IAHA,IAEIixB,EAAUC,EAFVrL,GAAQ7lB,GACR0G,EAAI,EAEDhC,UAAUL,OAASqC,GAAGmf,EAAKpc,KAAK/E,UAAUgC,MAEjD,GADAwqB,EAAYD,EAAWpL,EAAK,IACvB3lB,EAAS+wB,SAAoB7tB,IAAPpD,KAAoB+vB,GAAS/vB,GAMxD,OALKiT,GAAQge,KAAWA,EAAW,SAAUvuB,EAAKR,GAEhD,GADwB,mBAAbgvB,IAAyBhvB,EAAQgvB,EAAUzvB,KAAKwC,KAAMvB,EAAKR,KACjE6tB,GAAS7tB,GAAQ,OAAOA,IAE/B2jB,EAAK,GAAKoL,EACHjC,GAAWvqB,MAAMqqB,GAAOjJ,MAKnC2I,GAAiB,UAAEW,KAAiB7X,EAAmBkX,GAAiB,UAAGW,GAAcX,GAAiB,UAAE9sB,SAE5GgO,GAAe8e,GAAS,UAExB9e,GAAelQ,KAAM,QAAQ,GAE7BkQ,GAAetQ,EAAO2vB,KAAM,QAAQ,GErOpC,IAAAoC,GAAiB,SAAUphB,EAAK1P,GAC9B,IAAIiB,GAAM1B,EAAKa,YAAcsP,IAAQtP,OAAOsP,GACxC9K,KACJA,EAAI8K,GAAO1P,EAAKiB,GAChBqD,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI0I,EAAM,WAAcvM,EAAG,KAAQ,SAAU2D,ICNvEmc,GAAO5gB,GAAmBghB,SAE9BtgB,GAAyB,SAAU,SAAUkwB,GAC3C,OAAO,SAAgBpxB,GACrB,OAAOoxB,GAAWlxB,EAASF,GAAMoxB,EAAQhQ,GAAKphB,IAAOA,KCJzD,IAAIohB,GAAO5gB,GAAmBghB,SAE9BtgB,GAAyB,OAAQ,SAAUmwB,GACzC,OAAO,SAAcrxB,GACnB,OAAOqxB,GAASnxB,EAASF,GAAMqxB,EAAMjQ,GAAKphB,IAAOA,KCJrD,IAAIohB,GAAO5gB,GAAmBghB,SAE9BtgB,GAAyB,oBAAqB,SAAUkmB,GACtD,OAAO,SAA2BpnB,GAChC,OAAOonB,GAAsBlnB,EAASF,GAAMonB,EAAmBhG,GAAKphB,IAAOA,KCH/EQ,GAAyB,WAAY,SAAU8wB,GAC7C,OAAO,SAAkBtxB,GACvB,OAAOE,EAASF,MAAMsxB,GAAYA,EAAUtxB,MCFhDQ,GAAyB,WAAY,SAAU+wB,GAC7C,OAAO,SAAkBvxB,GACvB,OAAOE,EAASF,MAAMuxB,GAAYA,EAAUvxB,MCFhDQ,GAAyB,eAAgB,SAAUymB,GACjD,OAAO,SAAsBjnB,GAC3B,QAAOE,EAASF,MAAMinB,GAAgBA,EAAcjnB,OCHxD,IAAIswB,GAA4B9vB,GAA0BmC,EAE1DzB,GAAyB,2BAA4B,WACnD,OAAO,SAAkClB,EAAI0C,GAC3C,OAAO4tB,GAA0BxnB,EAAU9I,GAAK0C,MCFpDlC,GAAyB,iBAAkB,WACzC,OAAO,SAAwBR,GAC7B,OAAOwxB,GAAgBxnB,GAAShK,OCFpCQ,GAAyB,OAAQ,WAC/B,OAAO,SAAcR,GACnB,OAAO6J,GAAMG,GAAShK,OCL1BQ,GAAyB,sBAAuB,WAC9C,OAAOU,GAA8ByB,ICCvCgC,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAG,UAAY8e,OAAQzjB,KCFnD,IAAAixB,GAAiBhxB,OAAOK,IAAM,SAAYitB,EAAG2D,GAE3C,OAAO3D,IAAM2D,EAAU,IAAN3D,GAAW,EAAIA,GAAM,EAAI2D,EAAI3D,GAAKA,GAAK2D,GAAKA,GCD/D/sB,EAAQA,EAAQtD,EAAG,UAAYP,GAAIN,KCFnC,IAAImB,GAAKnB,EAAwBmC,EAC7BgvB,GAASjyB,SAASsE,UAClB4tB,GAAS,wBACF,SAGHD,IAAUzwB,GAA6BS,GAAGgwB,GAHvC,QAITrvB,cAAc,EACd3B,IAAK,WACH,IACE,OAAQ,GAAKsD,MAAM4tB,MAAMD,IAAQ,GACjC,MAAOtxB,GACP,MAAO,OCRbqE,EAAQA,EAAQtD,EAAG,UAEjBywB,IAAK,SAAaC,GAMhB,IALA,IAAIC,EAAMlpB,EAAUipB,EAASD,KACzB3hB,EAAMxI,EAASqqB,EAAI3tB,QACnB4F,EAAOvF,UAAUL,OACjB2P,KACAtN,EAAI,EACDyJ,EAAMzJ,GACXsN,EAAIvK,KAAK1F,OAAOiuB,EAAItrB,OAChBA,EAAIuD,GAAM+J,EAAIvK,KAAK1F,OAAOW,UAAUgC,KACxC,OAAOsN,EAAIlQ,KAAK,OCbtB,IAAImuB,GAAeluB,OAAOkuB,aACtBC,GAAiBnuB,OAAOouB,cAG5BxtB,EAAQA,EAAQtD,EAAIsD,EAAQQ,KAAO+sB,IAA2C,GAAzBA,GAAe7tB,QAAc,UAEhF8tB,cAAe,SAAuBpE,GAKpC,IAJA,IAGIqE,EAHApe,KACA/J,EAAOvF,UAAUL,OACjBqC,EAAI,EAEDuD,EAAOvD,GAAG,CAEf,GADA0rB,GAAQ1tB,UAAUgC,KACdqC,EAAgBqpB,EAAM,WAAcA,EAAM,MAAMxqB,WAAWwqB,EAAO,8BACtEpe,EAAIvK,KAAK2oB,EAAO,MACZH,GAAaG,GACbH,GAAyC,QAA1BG,GAAQ,QAAY,IAAcA,EAAO,KAAQ,QAEpE,OAAOpe,EAAIlQ,KAAK,OChBtB,IAA2BuuB,GCFvBC,IDEuBD,ICFO,EDGzB,SAAUjuB,EAAMmuB,GACrB,IAGI3xB,EAAG2D,EAHH6H,EAAIrI,OAAOsE,EAAQjE,IACnBsC,EAAIc,EAAU+qB,GACdrS,EAAI9T,EAAE/H,OAEV,OAAIqC,EAAI,GAAKA,GAAKwZ,EAAUmS,GAAY,QAAKjvB,GAC7CxC,EAAIwL,EAAEomB,WAAW9rB,IACN,OAAU9F,EAAI,OAAU8F,EAAI,IAAMwZ,IAAM3b,EAAI6H,EAAEomB,WAAW9rB,EAAI,IAAM,OAAUnC,EAAI,MACxF8tB,GAAYjmB,EAAEqiB,OAAO/nB,GAAK9F,EAC1ByxB,GAAYjmB,EAAEtE,MAAMpB,EAAGA,EAAI,GAA2BnC,EAAI,OAAzB3D,EAAI,OAAU,IAAqB,QCX5E+D,EAAQA,EAAQ9C,EAAG,UAEjB4wB,YAAa,SAAqBF,GAChC,OAAOD,GAAIruB,KAAMsuB,MCFrB,IAAAG,GAAiB,SAAgB3b,GAC/B,IAAI4b,EAAM5uB,OAAOsE,EAAQpE,OACrB+P,EAAM,GACN8N,EAAIta,EAAUuP,GAClB,GAAI+K,EAAI,GAAKA,GAAK9W,EAAAA,EAAU,MAAMpD,WAAW,2BAC7C,KAAMka,EAAI,GAAIA,KAAO,KAAO6Q,GAAOA,GAAc,EAAJ7Q,IAAO9N,GAAO2e,GAC3D,OAAO3e,GCRTrP,EAAQA,EAAQ9C,EAAG,UAEjB+wB,OAAQpyB,KCDV,IAAIqyB,GAAQryB,GAAkB,SAC9BsyB,GAAiB,SAAU9yB,GACzB,IAAI+yB,EACJ,OAAO7yB,EAASF,UAAmCoD,KAA1B2vB,EAAW/yB,EAAG6yB,OAA0BE,EAAsB,UAAX9qB,EAAIjI,KCFlFgzB,GAAiB,SAAU5uB,EAAM6uB,EAAc1e,GAC7C,GAAIwe,GAASE,GAAe,MAAM9yB,UAAU,UAAYoU,EAAO,0BAC/D,OAAOxQ,OAAOsE,EAAQjE,KCNpByuB,GAAQryB,GAAkB,SAC9B0yB,GAAiB,SAAUnjB,GACzB,IAAIojB,EAAK,IACT,IACE,MAAMpjB,GAAKojB,GACX,MAAO7yB,GACP,IAEE,OADA6yB,EAAGN,KAAS,GACJ,MAAM9iB,GAAKojB,GACnB,MAAOxwB,KACT,OAAO,GCJPywB,GAAc,GAAc,WAEhCzuB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAHd,cAG0D,UAC1E6yB,WAAY,SAAoBJ,GAC9B,IAAI7uB,EAAOkvB,GAAQrvB,KAAMgvB,EALX,cAMVzqB,EAAQb,EAASnI,KAAK8H,IAAI5C,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAWgB,EAAKC,SAChFkvB,EAASxvB,OAAOkvB,GACpB,OAAOG,GACHA,GAAY3xB,KAAK2C,EAAMmvB,EAAQ/qB,GAC/BpE,EAAK0D,MAAMU,EAAOA,EAAQ+qB,EAAOlvB,UAAYkvB,KCVrD,IACIC,GAAY,GAAY,SAE5B7uB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAHhB,YAG0D,UACxEizB,SAAU,SAAkBR,GAC1B,IAAI7uB,EAAOkvB,GAAQrvB,KAAMgvB,EALb,YAMRS,EAAchvB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EACpD+M,EAAMxI,EAASvD,EAAKC,QACpB6F,OAAsB9G,IAAhBswB,EAA4BvjB,EAAM3Q,KAAK8H,IAAIK,EAAS+rB,GAAcvjB,GACxEojB,EAASxvB,OAAOkvB,GACpB,OAAOO,GACHA,GAAU/xB,KAAK2C,EAAMmvB,EAAQrpB,GAC7B9F,EAAK0D,MAAMoC,EAAMqpB,EAAOlvB,OAAQ6F,KAASqpB,KCXjD5uB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAFjB,YAE0D,UACvEsd,SAAU,SAAkBmV,GAC1B,SAAUK,GAAQrvB,KAAMgvB,EAJb,YAKRrV,QAAQqV,EAAcvuB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MCR/D5C,GAA2C,KAAd,KAAKmzB,OAAczyB,EAAwByB,EAAEixB,OAAO5vB,UAAW,SAC9F1B,cAAc,EACd3B,ICAe,WACf,IAAIyD,EAAOrC,EAASkC,MAChBuF,EAAS,GAMb,OALIpF,EAAKhF,SAAQoK,GAAU,KACvBpF,EAAKyvB,aAAYrqB,GAAU,KAC3BpF,EAAK0vB,YAAWtqB,GAAU,KAC1BpF,EAAK2vB,UAASvqB,GAAU,KACxBpF,EAAK4vB,SAAQxqB,GAAU,KACpBA,KCJT,IAAAyqB,GAAiB,SAAUlkB,EAAK1L,EAAQhE,GACtC,IAAI6zB,EAASlb,GAAIjJ,GACbokB,EAAM9zB,EAAKgI,EAAS6rB,EAAQ,GAAGnkB,IAC/BqkB,EAAQD,EAAI,GACZE,EAAOF,EAAI,GACXtmB,EAAM,WACR,IAAIjM,KAEJ,OADAA,EAAEsyB,GAAU,WAAc,OAAO,GACZ,GAAd,GAAGnkB,GAAKnO,OAEfiE,EAAS9B,OAAOC,UAAW+L,EAAKqkB,GAChCvwB,EAAK+vB,OAAO5vB,UAAWkwB,EAAkB,GAAV7vB,EAG3B,SAAUiwB,EAAQphB,GAAO,OAAOmhB,EAAK5yB,KAAK6yB,EAAQrwB,KAAMiP,IAGxD,SAAUohB,GAAU,OAAOD,EAAK5yB,KAAK6yB,EAAQrwB,UCvBrDzD,GAAyB,QAAS,EAAG,SAAU6H,EAASwqB,EAAO0B,GAE7D,OAAQ,SAAeC,GAErB,IAAI5yB,EAAIyG,EAAQpE,MACZ3C,OAAe8B,GAAVoxB,OAAsBpxB,EAAYoxB,EAAO3B,GAClD,YAAczvB,IAAP9B,EAAmBA,EAAGG,KAAK+yB,EAAQ5yB,GAAK,IAAIgyB,OAAOY,GAAQ3B,GAAO9uB,OAAOnC,KAC/E2yB,KCPL/zB,GAAyB,UAAW,EAAG,SAAU6H,EAASosB,EAASC,GAEjE,OAAQ,SAAiBC,EAAaC,GAEpC,IAAIhzB,EAAIyG,EAAQpE,MACZ3C,OAAoB8B,GAAfuxB,OAA2BvxB,EAAYuxB,EAAYF,GAC5D,YAAcrxB,IAAP9B,EACHA,EAAGG,KAAKkzB,EAAa/yB,EAAGgzB,GACxBF,EAASjzB,KAAKsC,OAAOnC,GAAI+yB,EAAaC,IACzCF,KCTLl0B,GAAyB,QAAS,EAAG,SAAU6H,EAASwsB,EAAOC,GAE7D,IAAI/B,EAAW7xB,GACX6zB,EAASD,EACTE,KAAWvrB,KAIf,GAC+B,KAA7B,OAAa,MAAE,QAAQ,IACe,GAAtC,OAAa,MAAE,QAAS,GAAS,QACE,GAAnC,KAAW,MAAE,WAAiB,QACK,GAAnC,IAAU,MAAE,YAAkB,QAC9B,IAAU,MAAE,QAAc,OAAI,GAC9B,GAAS,MAAE,MAAY,OACvB,CACA,IAAIwrB,OAA8B7xB,IAAvB,OAAO/C,KAAK,IAAI,GAE3By0B,EAAS,SAAU/W,EAAWmX,GAC5B,IAAIZ,EAASvwB,OAAOE,MACpB,QAAkBb,IAAd2a,GAAqC,IAAVmX,EAAa,SAE5C,IAAKnC,EAAShV,GAAY,OAAOgX,EAAOtzB,KAAK6yB,EAAQvW,EAAWmX,GAChE,IASIC,EAAYtD,EAAOuD,EAAWC,EAAY3uB,EAT1C4uB,KACA3B,GAAS5V,EAAU8V,WAAa,IAAM,KAC7B9V,EAAU+V,UAAY,IAAM,KAC5B/V,EAAUgW,QAAU,IAAM,KAC1BhW,EAAUiW,OAAS,IAAM,IAClCuB,EAAgB,EAChBC,OAAuBpyB,IAAV8xB,EAAsB,WAAaA,IAAU,EAE1DO,EAAgB,IAAI7B,OAAO7V,EAAUjZ,OAAQ6uB,EAAQ,KAIzD,IADKsB,IAAME,EAAa,IAAIvB,OAAO,IAAM6B,EAAc3wB,OAAS,WAAY6uB,KACrE9B,EAAQ4D,EAAcp1B,KAAKi0B,QAEhCc,EAAYvD,EAAMrpB,MAAQqpB,EAAM,GAAS,QACzB0D,IACdD,EAAO7rB,KAAK6qB,EAAOxsB,MAAMytB,EAAe1D,EAAMrpB,SAGzCysB,GAAQpD,EAAY,OAAI,GAAGA,EAAM,GAAG6D,QAAQP,EAAY,WAC3D,IAAKzuB,EAAI,EAAGA,EAAIhC,UAAgB,OAAI,EAAGgC,SAA0BtD,IAAjBsB,UAAUgC,KAAkBmrB,EAAMnrB,QAAKtD,KAErFyuB,EAAY,OAAI,GAAKA,EAAMrpB,MAAQ8rB,EAAa,QAAGU,EAAMvwB,MAAM6wB,EAAQzD,EAAM/pB,MAAM,IACvFutB,EAAaxD,EAAM,GAAS,OAC5B0D,EAAgBH,EACZE,EAAa,QAAKE,KAEpBC,EAAwB,YAAM5D,EAAMrpB,OAAOitB,EAAwB,YAKzE,OAHIF,IAAkBjB,EAAa,QAC7Be,GAAeI,EAAc1S,KAAK,KAAKuS,EAAO7rB,KAAK,IAClD6rB,EAAO7rB,KAAK6qB,EAAOxsB,MAAMytB,IACzBD,EAAa,OAAIE,EAAaF,EAAOxtB,MAAM,EAAG0tB,GAAcF,OAG5D,IAAU,WAAElyB,EAAW,GAAS,SACzC0xB,EAAS,SAAU/W,EAAWmX,GAC5B,YAAqB9xB,IAAd2a,GAAqC,IAAVmX,KAAmBH,EAAOtzB,KAAKwC,KAAM8Z,EAAWmX,KAItF,OAAQ,SAAenX,EAAWmX,GAChC,IAAItzB,EAAIyG,EAAQpE,MACZ3C,OAAkB8B,GAAb2a,OAAyB3a,EAAY2a,EAAU8W,GACxD,YAAczxB,IAAP9B,EAAmBA,EAAGG,KAAKsc,EAAWnc,EAAGszB,GAASJ,EAAOrzB,KAAKsC,OAAOnC,GAAImc,EAAWmX,IAC1FJ,KCpELt0B,GAAyB,SAAU,EAAG,SAAU6H,EAASstB,EAAQC,GAE/D,OAAQ,SAAgBpB,GAEtB,IAAI5yB,EAAIyG,EAAQpE,MACZ3C,OAAe8B,GAAVoxB,OAAsBpxB,EAAYoxB,EAAOmB,GAClD,YAAcvyB,IAAP9B,EAAmBA,EAAGG,KAAK+yB,EAAQ5yB,GAAK,IAAIgyB,OAAOY,GAAQmB,GAAQ5xB,OAAOnC,KAChFg0B,KCJL,IAAAC,GAAiB,SAAUpzB,EAAQ+F,EAAOtG,GACpCsG,KAAS/F,EAAQutB,EAAgBrtB,EAAEF,EAAQ+F,EAAO5F,EAAW,EAAGV,IAC/DO,EAAO+F,GAAStG,GCIvByC,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK3E,GAA0B,SAAUkW,MAA8B,SAEjGI,KAAM,SAAc2H,GAClB,IAOIpa,EAAQmF,EAAQ2M,EAAM2G,EAPtBlb,EAAIoI,GAASyU,GACbzR,EAAmB,mBAAR/I,KAAqBA,KAAO8H,MACvC9B,EAAOvF,UAAUL,OACjB0Y,EAAQ9S,EAAO,EAAIvF,UAAU,QAAKtB,EAClC4Z,OAAoB5Z,IAAV2Z,EACVvU,EAAQ,EACRyU,EAASpE,GAAUjX,GAIvB,GAFIob,IAASD,EAAQnX,EAAImX,EAAO9S,EAAO,EAAIvF,UAAU,QAAKtB,EAAW,SAEvDA,GAAV6Z,GAAyBjQ,GAAKjB,OAASyM,GAAYyE,GAMrD,IAAKzT,EAAS,IAAIwD,EADlB3I,EAASsD,EAAS/F,EAAEyC,SACSA,EAASmE,EAAOA,IAC3CstB,GAAetsB,EAAQhB,EAAOwU,EAAUD,EAAMnb,EAAE4G,GAAQA,GAAS5G,EAAE4G,SANrE,IAAKsU,EAAWG,EAAOxb,KAAKG,GAAI4H,EAAS,IAAIwD,IAAOmJ,EAAO2G,EAAStI,QAAQJ,KAAM5L,IAChFstB,GAAetsB,EAAQhB,EAAOwU,EAAUvb,GAAKqb,EAAUC,GAAQ5G,EAAKjU,MAAOsG,IAAQ,GAAQ2N,EAAKjU,OASpG,OADAsH,EAAOnF,OAASmE,EACTgB,KC7BX7E,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,SAAS2E,KACT,QAAS4G,MAAMuU,GAAG7e,KAAK0D,aAAcA,KACnC,SAEFmb,GAAI,WAIF,IAHA,IAAI9X,EAAQ,EACRyB,EAAOvF,UAAUL,OACjBmF,EAAS,IAAoB,mBAARvF,KAAqBA,KAAO8H,OAAO9B,GACrDA,EAAOzB,GAAOstB,GAAetsB,EAAQhB,EAAO9D,UAAU8D,MAE7D,OADAgB,EAAOnF,OAAS4F,EACTT,KCbX7E,EAAQA,EAAQ9C,EAAG,SAAW+U,WAAYpW,KAE1CU,GAAiC,cCFjC,IAAI60B,GAAQv1B,GAA4B,GAEpCw1B,IAAS,EADH,YAGKjqB,MAAM,GAAM,KAAE,WAAciqB,IAAS,IACpDrxB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI6wB,GAAQ,SACtCxY,KAAM,SAAczJ,GAClB,OAAOgiB,GAAM9xB,KAAM8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,QCDV,IAAI60B,GAAQv1B,GAA4B,GAEpCw1B,IAAS,EADH,iBAGKjqB,MAAM,GAAM,UAAE,WAAciqB,IAAS,IACpDrxB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI6wB,GAAQ,SACtCtY,UAAW,SAAmB3J,GAC5B,OAAOgiB,GAAM9xB,KAAM8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,aCDVyD,EAAQA,EAAQ9C,EAAG,SAAWyb,KAAM9c,KAEpCU,GAAiC,QCHjC,IAAI+0B,GAAYz1B,EAAqB01B,SAErCvxB,EAAQA,EAAQtD,EAAG,UACjB60B,SAAU,SAAkBl2B,GAC1B,MAAoB,iBAANA,GAAkBi2B,GAAUj2B,MCJ9C,IAAImH,GAAQ3H,KAAK2H,MACjBgvB,GAAiB,SAAmBn2B,GAClC,OAAQE,EAASF,IAAOk2B,SAASl2B,IAAOmH,GAAMnH,KAAQA,GCDxD2E,EAAQA,EAAQtD,EAAG,UAAY+0B,UAAW51B,KCA1C,IAAI0K,GAAM1L,KAAK0L,IAEfvG,EAAQA,EAAQtD,EAAG,UACjBg1B,cAAe,SAAuB3uB,GACpC,OAAO0uB,GAAU1uB,IAAWwD,GAAIxD,IAAW,oBCJ/C/C,EAAQA,EAAQtD,EAAG,UACjBgG,MAAO,SAAeK,GAEpB,OAAOA,GAAUA,KCHrB/C,EAAQA,EAAQtD,EAAG,UAAYi1B,QAAS92B,KAAK2L,IAAI,GAAI,MCArDxG,EAAQA,EAAQtD,EAAG,UAAYk1B,kBAAmB,mBCAlD5xB,EAAQA,EAAQtD,EAAG,UAAYm1B,iBAAkB,mBCFjD,IAAAC,GAAiBj3B,KAAKk3B,OAAS,SAAe3I,GAC5C,OAAQA,GAAKA,IAAM,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAIvuB,KAAK4L,IAAI,EAAI2iB,ICCjE4I,GAAOn3B,KAAKm3B,KACZC,GAASp3B,KAAKq3B,MAElBlyB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMyxB,IAEW,KAAxCp3B,KAAK2H,MAAMyvB,GAAOE,OAAOC,aAEzBH,GAAO5rB,EAAAA,IAAaA,EAAAA,GACtB,QACD6rB,MAAO,SAAe9I,GACpB,OAAQA,GAAKA,GAAK,EAAIxhB,IAAMwhB,EAAI,kBAC5BvuB,KAAK4L,IAAI2iB,GAAKvuB,KAAK6L,IACnBqrB,GAAM3I,EAAI,EAAI4I,GAAK5I,EAAI,GAAK4I,GAAK5I,EAAI,OCb7C,IAAIiJ,GAASx3B,KAAKy3B,MAOlBtyB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAM6xB,IAAU,EAAIA,GAAO,GAAK,GAAI,QAAUC,MAL1E,SAASA,EAAMlJ,GACb,OAAQmI,SAASnI,GAAKA,IAAW,GAALA,EAAaA,EAAI,GAAKkJ,GAAOlJ,GAAKvuB,KAAK4L,IAAI2iB,EAAIvuB,KAAKm3B,KAAK5I,EAAIA,EAAI,IAAxDA,KCHvC,IAAImJ,GAAS13B,KAAK23B,MAGlBxyB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAM+xB,IAAU,EAAIA,IAAQ,GAAK,GAAI,QAC/DC,MAAO,SAAepJ,GACpB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIvuB,KAAK4L,KAAK,EAAI2iB,IAAM,EAAIA,IAAM,KCN7D,IAAAqJ,GAAiB53B,KAAK63B,MAAQ,SAActJ,GAE1C,OAAmB,IAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,GCCpDppB,EAAQA,EAAQtD,EAAG,QACjBi2B,KAAM,SAAcvJ,GAClB,OAAOsJ,GAAKtJ,GAAKA,GAAKvuB,KAAK2L,IAAI3L,KAAK0L,IAAI6iB,GAAI,EAAI,MCHpDppB,EAAQA,EAAQtD,EAAG,QACjBk2B,MAAO,SAAexJ,GACpB,OAAQA,KAAO,GAAK,GAAKvuB,KAAK2H,MAAM3H,KAAK4L,IAAI2iB,EAAI,IAAOvuB,KAAKg4B,OAAS,MCH1E,IAAIvyB,GAAMzF,KAAKyF,IAEfN,EAAQA,EAAQtD,EAAG,QACjBo2B,KAAM,SAAc1J,GAClB,OAAQ9oB,GAAI8oB,GAAKA,GAAK9oB,IAAK8oB,IAAM,KCLrC,IAAI2J,GAASl4B,KAAKm4B,MAClBC,IAAmBF,IAEdA,GAAO,IAAM,oBAAsBA,GAAO,IAAM,qBAE7B,OAAnBA,IAAQ,OACT,SAAe3J,GACjB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIA,GAAK,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAIvuB,KAAKyF,IAAI8oB,GAAK,GAC/E2J,GCLJ/yB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKuyB,IAAUl4B,KAAKm4B,OAAQ,QAAUA,MAAOD,KCFzE,IAAIvsB,GAAM3L,KAAK2L,IACXmrB,GAAUnrB,GAAI,GAAI,IAClB0sB,GAAY1sB,GAAI,GAAI,IACpB2sB,GAAQ3sB,GAAI,EAAG,MAAQ,EAAI0sB,IAC3BE,GAAQ5sB,GAAI,GAAI,KAMpB6sB,GAAiBx4B,KAAKy4B,QAAU,SAAgBlK,GAC9C,IAEIntB,EAAG4I,EAFH0uB,EAAO14B,KAAK0L,IAAI6iB,GAChBoK,EAAQd,GAAKtJ,GAEjB,OAAImK,EAAOH,GAAcI,GAAwBD,EAAOH,GAAQF,GAPrD,EAAIvB,GAAU,EAAIA,IAOgDyB,GAAQF,IAErFruB,GADA5I,GAAK,EAAIi3B,GAAYvB,IAAW4B,IAClBt3B,EAAIs3B,IAELJ,IAAStuB,GAAUA,EAAe2uB,GAAQntB,EAAAA,GAChDmtB,EAAQ3uB,GClBjB7E,EAAQA,EAAQtD,EAAG,QAAU42B,OAAQz3B,KCDrC,IAAI0K,GAAM1L,KAAK0L,IAEfvG,EAAQA,EAAQtD,EAAG,QACjB+2B,MAAO,SAAeC,EAAQC,GAM5B,IALA,IAIIplB,EAAKqlB,EAJLC,EAAM,EACN9xB,EAAI,EACJuD,EAAOvF,UAAUL,OACjBo0B,EAAO,EAEJ/xB,EAAIuD,GAELwuB,GADJvlB,EAAMhI,GAAIxG,UAAUgC,QAGlB8xB,EAAMA,GADND,EAAME,EAAOvlB,GACKqlB,EAAM,EACxBE,EAAOvlB,GAGPslB,GAFStlB,EAAM,GACfqlB,EAAMrlB,EAAMulB,GACCF,EACDrlB,EAEhB,OAAOulB,IAASztB,EAAAA,EAAWA,EAAAA,EAAWytB,EAAOj5B,KAAKm3B,KAAK6B,MCpB3D,IAAIE,GAAQl5B,KAAKm5B,KAGjBh0B,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,OAAgC,GAAzBk4B,GAAM,WAAY,IAA4B,GAAhBA,GAAMr0B,SACzC,QACFs0B,KAAM,SAAc5K,EAAG2D,GACrB,IACIkH,GAAM7K,EACN8K,GAAMnH,EACNoH,EAHS,MAGKF,EACdG,EAJS,MAIKF,EAClB,OAAO,EAAIC,EAAKC,IALH,MAKmBH,IAAO,IAAMG,EAAKD,GALrC,MAKoDD,IAAO,KAAO,KAAO,MCX1Fl0B,EAAQA,EAAQtD,EAAG,QAAUq1B,MAAOl2B,KCApCmE,EAAQA,EAAQtD,EAAG,QACjB23B,MAAO,SAAejL,GACpB,OAAOvuB,KAAK4L,IAAI2iB,GAAKvuB,KAAKy5B,UCF9Bt0B,EAAQA,EAAQtD,EAAG,QACjB63B,KAAM,SAAcnL,GAClB,OAAOvuB,KAAK4L,IAAI2iB,GAAKvuB,KAAK6L,OCF9B1G,EAAQA,EAAQtD,EAAG,QAAUg2B,KAAM72B,KCAnC,IAAIyE,GAAMzF,KAAKyF,IAGfN,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,OAA8B,QAAtBhB,KAAK25B,MAAM,SACjB,QACFA,KAAM,SAAcpL,GAClB,OAAOvuB,KAAK0L,IAAI6iB,GAAKA,GAAK,GACrB4J,GAAM5J,GAAK4J,IAAO5J,IAAM,GACxB9oB,GAAI8oB,EAAI,GAAK9oB,IAAK8oB,EAAI,KAAOvuB,KAAK6wB,EAAI,MCT/C,IAAIprB,GAAMzF,KAAKyF,IAEfN,EAAQA,EAAQtD,EAAG,QACjB+3B,KAAM,SAAcrL,GAClB,IAAIntB,EAAI+2B,GAAM5J,GAAKA,GACfxpB,EAAIozB,IAAO5J,GACf,OAAOntB,GAAKoK,EAAAA,EAAW,EAAIzG,GAAKyG,EAAAA,GAAY,GAAKpK,EAAI2D,IAAMU,GAAI8oB,GAAK9oB,IAAK8oB,OCN7EppB,EAAQA,EAAQtD,EAAG,QACjBg4B,MAAO,SAAer5B,GACpB,OAAQA,EAAK,EAAIR,KAAK2H,MAAQ3H,KAAK0H,MAAMlH,MCF7C,IAAIs5B,GAAY94B,GAA6B,GAE7CmE,EAAQA,EAAQ9C,EAAG,SACjBic,SAAU,SAAkBlV,GAC1B,OAAO0wB,GAAUr1B,KAAM2E,EAAIlE,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAIrElC,GAAiC,YCTjC,IAAIqjB,GAAS/jB,GAAyBmC,EACtC42B,GAAiB,SAAUC,GACzB,OAAO,SAAUx5B,GAOf,IANA,IAKI0C,EALAd,EAAIkH,EAAU9I,GACdgO,EAAOwD,GAAQ5P,GACfyC,EAAS2J,EAAK3J,OACdqC,EAAI,EACJ8C,KAEGnF,EAASqC,GAAO6d,GAAO9iB,KAAKG,EAAGc,EAAMsL,EAAKtH,OAC/C8C,EAAOC,KAAK+vB,GAAa92B,EAAKd,EAAEc,IAAQd,EAAEc,IAC1C,OAAO8G,ICXTiwB,GAAUj5B,IAA8B,GAE5CmE,EAAQA,EAAQtD,EAAG,UACjBwU,OAAQ,SAAgB7V,GACtB,OAAOy5B,GAAQz5B,MCJnB,IAAI0V,GAAWlV,IAA8B,GAE7CmE,EAAQA,EAAQtD,EAAG,UACjBuU,QAAS,SAAiB5V,GACxB,OAAO0V,GAAS1V,MCCpB2E,EAAQA,EAAQtD,EAAG,UACjBq4B,0BAA2B,SAAmCj3B,GAO5D,IANA,IAKIC,EAAKoc,EALLld,EAAIkH,EAAUrG,GACdk3B,EAAU1iB,GAAKtU,EACfqL,EAAOmZ,GAAQvlB,GACf4H,KACA9C,EAAI,EAEDsH,EAAK3J,OAASqC,QAENtD,KADb0b,EAAO6a,EAAQ/3B,EAAGc,EAAMsL,EAAKtH,QACLovB,GAAetsB,EAAQ9G,EAAKoc,GAEtD,OAAOtV,KCdX,IAAAowB,GAAiB,SAAUx1B,EAAMy1B,EAAWC,EAAYC,GACtD,IAAI14B,EAAI0C,OAAOsE,EAAQjE,IACnB41B,EAAe34B,EAAEgD,OACjB41B,OAAyB72B,IAAf02B,EAA2B,IAAM/1B,OAAO+1B,GAClDI,EAAevyB,EAASkyB,GAC5B,GAAIK,GAAgBF,GAA2B,IAAXC,EAAe,OAAO54B,EAC1D,IAAI84B,EAAUD,EAAeF,EACzBI,EAAexH,GAAOnxB,KAAKw4B,EAASz6B,KAAK0H,KAAKizB,EAAUF,EAAQ51B,SAEpE,OADI+1B,EAAa/1B,OAAS81B,IAASC,EAAeA,EAAatyB,MAAM,EAAGqyB,IACjEJ,EAAOK,EAAe/4B,EAAIA,EAAI+4B,GCbnCrP,GAAY3rB,EAAO2rB,UAEvBsP,GAAiBtP,IAAaA,GAAUuP,WAAa,GCIrD31B,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI,oCAAoC4d,KAAKuX,IAAY,UACnFC,SAAU,SAAkBV,GAC1B,OAAOW,GAAKv2B,KAAM41B,EAAWn1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCFlFuB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI,oCAAoC4d,KAAKuX,IAAY,UACnFG,OAAQ,SAAgBZ,GACtB,OAAOW,GAAKv2B,KAAM41B,EAAWn1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCLlF,IAAI0E,MAAWA,MACX4yB,GAAO,WAAW3X,KAAKuX,IACvBzK,GAAO,SAAUniB,GACnB,OAAO,SAAUpM,EAAIq5B,GACnB,IAAIC,EAAYl2B,UAAUL,OAAS,EAC/BwhB,IAAO+U,GAAY9yB,GAAMrG,KAAKiD,UAAW,GAC7C,OAAOgJ,EAAIktB,EAAY,YAEP,mBAANt5B,EAAmBA,EAAK5B,SAAS4B,IAAKmD,MAAMR,KAAM4hB,IACxDvkB,EAAIq5B,KAGZh2B,EAAQA,EAAQU,EAAIV,EAAQc,EAAId,EAAQQ,EAAIu1B,IAC1CvR,WAAY0G,GAAKzwB,EAAO+pB,YACxB0R,YAAahL,GAAKzwB,EAAOy7B,eChB3Bl2B,EAAQA,EAAQU,EAAIV,EAAQc,GAC1BqiB,aAAcgT,GAAMptB,IACpBsa,eAAgB8S,GAAMzY,QCyCxB,IAtCA,IAAItR,GAAWiI,GAAI,YACf+hB,GAAgB/hB,GAAI,eACpBgiB,GAAc9pB,GAAUnF,MAExBkvB,IACFC,aAAa,EACbC,qBAAqB,EACrBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,EACVC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,UAAU,EACVC,kBAAkB,EAClBC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,WAAW,GAGJC,GAAczrB,GAAQypB,IAAev0B,GAAI,EAAGA,GAAIu2B,GAAY54B,OAAQqC,KAAK,CAChF,IAIIhE,GAJA6R,GAAO0oB,GAAYv2B,IACnBw2B,GAAWjC,GAAa1mB,IACxB4oB,GAAa/9B,EAAOmV,IACpBc,GAAQ8nB,IAAcA,GAAWn5B,UAErC,GAAIqR,KACGA,GAAMtE,KAAWlN,EAAKwR,GAAOtE,GAAUiqB,IACvC3lB,GAAM0lB,KAAgBl3B,EAAKwR,GAAO0lB,GAAexmB,IACtDrD,GAAUqD,IAAQymB,GACdkC,IAAU,IAAKx6B,MAAOgc,GAAiBrJ,GAAM3S,KAAMmD,EAASwP,GAAO3S,GAAKgc,GAAWhc,KAAM,kBC7ChG,SAAUtD,GAGT,IAEIgE,EAFAg6B,EAAK38B,OAAOuD,UACZq5B,EAASD,EAAGv6B,eAEZ2rB,EAA4B,mBAAXpkB,OAAwBA,UACzCkzB,EAAiB9O,EAAQ1R,UAAY,aACrCygB,EAAsB/O,EAAQgP,eAAiB,kBAC/CC,EAAoBjP,EAAQkP,aAAe,gBAG3CC,EAAUv+B,EAAOw+B,mBACrB,GAAID,EAIAt+B,EAAAC,QAAiBq+B,MAJrB,EAaAA,EAAUv+B,EAAOw+B,mBAAgCv+B,EAAOC,SAchDuwB,KAAOA,EAoBf,IAAIgO,EAAyB,iBACzBC,EAAyB,iBACzBC,EAAoB,YACpBC,EAAoB,YAIpBC,KAYA5pB,KACJA,EAAkBipB,GAAkB,WAClC,OAAOr5B,MAGT,IAAI+iB,EAAWvmB,OAAOmS,eAClBsrB,EAA0BlX,GAAYA,EAASA,EAASnR,QACxDqoB,GACAA,IAA4Bd,GAC5BC,EAAO57B,KAAKy8B,EAAyBZ,KAGvCjpB,EAAoB6pB,GAGtB,IAAIC,EAAKC,EAA2Bp6B,UAClCq6B,EAAUr6B,UAAYvD,OAAO+R,OAAO6B,GACtCiqB,EAAkBt6B,UAAYm6B,EAAGjwB,YAAckwB,EAC/CA,EAA2BlwB,YAAcowB,EACzCF,EAA2BX,GACzBa,EAAkBC,YAAc,oBAYlCZ,EAAQa,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAOvwB,YAClD,QAAOwwB,IACHA,IAASJ,GAG2B,uBAAnCI,EAAKH,aAAeG,EAAK75B,QAIhC84B,EAAQgB,KAAO,SAASF,GAUtB,OATIh+B,OAAOqiB,eACTriB,OAAOqiB,eAAe2b,EAAQL,IAE9BK,EAAOxb,UAAYmb,EACbX,KAAqBgB,IACzBA,EAAOhB,GAAqB,sBAGhCgB,EAAOz6B,UAAYvD,OAAO+R,OAAO2rB,GAC1BM,GAOTd,EAAQiB,MAAQ,SAAS1rB,GACvB,OAAS2rB,QAAS3rB,IAkFpB4rB,EAAsBC,EAAc/6B,WACpC+6B,EAAc/6B,UAAUu5B,GAAuB,WAC7C,OAAOt5B,MAET05B,EAAQoB,cAAgBA,EAKxBpB,EAAQqB,MAAQ,SAASC,EAASC,EAASz/B,EAAM0/B,GAC/C,IAAIzoB,EAAO,IAAIqoB,EACblP,EAAKoP,EAASC,EAASz/B,EAAM0/B,IAG/B,OAAOxB,EAAQa,oBAAoBU,GAC/BxoB,EACAA,EAAKlC,OAAOyW,KAAK,SAASzhB,GACxB,OAAOA,EAAO4K,KAAO5K,EAAOtH,MAAQwU,EAAKlC,UAsKjDsqB,EAAsBX,GAEtBA,EAAGV,GAAqB,YAOxBU,EAAGb,GAAkB,WACnB,OAAOr5B,MAGTk6B,EAAG38B,SAAW,WACZ,MAAO,sBAkCTm8B,EAAQ3vB,KAAO,SAASvL,GACtB,IAAIuL,KACJ,IAAK,IAAItL,KAAOD,EACduL,EAAKvE,KAAK/G,GAMZ,OAJAsL,EAAKP,UAIE,SAAS+G,IACd,KAAOxG,EAAK3J,QAAQ,CAClB,IAAI3B,EAAMsL,EAAKoxB,MACf,GAAI18B,KAAOD,EAGT,OAFA+R,EAAKtS,MAAQQ,EACb8R,EAAKJ,MAAO,EACLI,EAQX,OADAA,EAAKJ,MAAO,EACLI,IAsCXmpB,EAAQ9nB,OAASA,EAMjBwpB,EAAQr7B,WACNkK,YAAamxB,EAEbC,MAAO,SAASC,GAcd,GAbAt7B,KAAKwe,KAAO,EACZxe,KAAKuQ,KAAO,EAGZvQ,KAAKu7B,KAAOv7B,KAAKw7B,MAAQr8B,EACzBa,KAAKmQ,MAAO,EACZnQ,KAAKy7B,SAAW,KAEhBz7B,KAAKohB,OAAS,OACdphB,KAAKiP,IAAM9P,EAEXa,KAAK07B,WAAWhiB,QAAQiiB,IAEnBL,EACH,IAAK,IAAI16B,KAAQZ,KAEQ,MAAnBY,EAAK4pB,OAAO,IACZ4O,EAAO57B,KAAKwC,KAAMY,KACjBwC,OAAOxC,EAAKiD,MAAM,MACrB7D,KAAKY,GAAQzB,IAMrBy8B,KAAM,WACJ57B,KAAKmQ,MAAO,EAEZ,IACI0rB,EADY77B,KAAK07B,WAAW,GACLI,WAC3B,GAAwB,UAApBD,EAAWl7B,KACb,MAAMk7B,EAAW5sB,IAGnB,OAAOjP,KAAK+7B,MAGdC,kBAAmB,SAASC,GAC1B,GAAIj8B,KAAKmQ,KACP,MAAM8rB,EAGR,IAAI5M,EAAUrvB,KACd,SAASk8B,EAAOC,EAAKC,GAYnB,OAXAC,EAAO17B,KAAO,QACd07B,EAAOptB,IAAMgtB,EACb5M,EAAQ9e,KAAO4rB,EAEXC,IAGF/M,EAAQjO,OAAS,OACjBiO,EAAQpgB,IAAM9P,KAGNi9B,EAGZ,IAAK,IAAI35B,EAAIzC,KAAK07B,WAAWt7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK07B,WAAWj5B,GACxB45B,EAAS1e,EAAMme,WAEnB,GAAqB,SAAjBne,EAAM2e,OAIR,OAAOJ,EAAO,OAGhB,GAAIve,EAAM2e,QAAUt8B,KAAKwe,KAAM,CAC7B,IAAI+d,EAAWnD,EAAO57B,KAAKmgB,EAAO,YAC9B6e,EAAapD,EAAO57B,KAAKmgB,EAAO,cAEpC,GAAI4e,GAAYC,EAAY,CAC1B,GAAIx8B,KAAKwe,KAAOb,EAAM8e,SACpB,OAAOP,EAAOve,EAAM8e,UAAU,GACzB,GAAIz8B,KAAKwe,KAAOb,EAAM+e,WAC3B,OAAOR,EAAOve,EAAM+e,iBAGjB,GAAIH,GACT,GAAIv8B,KAAKwe,KAAOb,EAAM8e,SACpB,OAAOP,EAAOve,EAAM8e,UAAU,OAG3B,CAAA,IAAID,EAMT,MAAM,IAAIG,MAAM,0CALhB,GAAI38B,KAAKwe,KAAOb,EAAM+e,WACpB,OAAOR,EAAOve,EAAM+e,gBAU9BE,OAAQ,SAASj8B,EAAMsO,GACrB,IAAK,IAAIxM,EAAIzC,KAAK07B,WAAWt7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK07B,WAAWj5B,GAC5B,GAAIkb,EAAM2e,QAAUt8B,KAAKwe,MACrB4a,EAAO57B,KAAKmgB,EAAO,eACnB3d,KAAKwe,KAAOb,EAAM+e,WAAY,CAChC,IAAIG,EAAelf,EACnB,OAIAkf,IACU,UAATl8B,GACS,aAATA,IACDk8B,EAAaP,QAAUrtB,GACvBA,GAAO4tB,EAAaH,aAGtBG,EAAe,MAGjB,IAAIR,EAASQ,EAAeA,EAAaf,cAIzC,OAHAO,EAAO17B,KAAOA,EACd07B,EAAOptB,IAAMA,EAET4tB,GACF78B,KAAKohB,OAAS,OACdphB,KAAKuQ,KAAOssB,EAAaH,WAClB1C,GAGFh6B,KAAK88B,SAAST,IAGvBS,SAAU,SAAST,EAAQU,GACzB,GAAoB,UAAhBV,EAAO17B,KACT,MAAM07B,EAAOptB,IAcf,MAXoB,UAAhBotB,EAAO17B,MACS,aAAhB07B,EAAO17B,KACTX,KAAKuQ,KAAO8rB,EAAOptB,IACM,WAAhBotB,EAAO17B,MAChBX,KAAK+7B,KAAO/7B,KAAKiP,IAAMotB,EAAOptB,IAC9BjP,KAAKohB,OAAS,SACdphB,KAAKuQ,KAAO,OACa,WAAhB8rB,EAAO17B,MAAqBo8B,IACrC/8B,KAAKuQ,KAAOwsB,GAGP/C,GAGTgD,OAAQ,SAASN,GACf,IAAK,IAAIj6B,EAAIzC,KAAK07B,WAAWt7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK07B,WAAWj5B,GAC5B,GAAIkb,EAAM+e,aAAeA,EAGvB,OAFA18B,KAAK88B,SAASnf,EAAMme,WAAYne,EAAMof,UACtCpB,EAAche,GACPqc,IAKbpQ,MAAS,SAAS0S,GAChB,IAAK,IAAI75B,EAAIzC,KAAK07B,WAAWt7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK07B,WAAWj5B,GAC5B,GAAIkb,EAAM2e,SAAWA,EAAQ,CAC3B,IAAID,EAAS1e,EAAMme,WACnB,GAAoB,UAAhBO,EAAO17B,KAAkB,CAC3B,IAAIs8B,EAASZ,EAAOptB,IACpB0sB,EAAche,GAEhB,OAAOsf,GAMX,MAAM,IAAIN,MAAM,0BAGlBO,cAAe,SAASvgB,EAAUwgB,EAAYC,GAa5C,OAZAp9B,KAAKy7B,UACH5iB,SAAUjH,EAAO+K,GACjBwgB,WAAYA,EACZC,QAASA,GAGS,SAAhBp9B,KAAKohB,SAGPphB,KAAKiP,IAAM9P,GAGN66B,IA/qBX,SAASpO,EAAKoP,EAASC,EAASz/B,EAAM0/B,GAEpC,IAAImC,EAAiBpC,GAAWA,EAAQl7B,qBAAqBq6B,EAAYa,EAAUb,EAC/EkD,EAAY9gC,OAAO+R,OAAO8uB,EAAet9B,WACzCsvB,EAAU,IAAI+L,EAAQF,OAM1B,OAFAoC,EAAU3b,QA8MZ,SAA0BqZ,EAASx/B,EAAM6zB,GACvC,IAAIkO,EAAQ3D,EAEZ,OAAO,SAAgBxY,EAAQnS,GAC7B,GAAIsuB,IAAUzD,EACZ,MAAM,IAAI6C,MAAM,gCAGlB,GAAIY,IAAUxD,EAAmB,CAC/B,GAAe,UAAX3Y,EACF,MAAMnS,EAKR,OAAOuuB,IAMT,IAHAnO,EAAQjO,OAASA,EACjBiO,EAAQpgB,IAAMA,IAED,CACX,IAAIwsB,EAAWpM,EAAQoM,SACvB,GAAIA,EAAU,CACZ,IAAIgC,EAAiBC,EAAoBjC,EAAUpM,GACnD,GAAIoO,EAAgB,CAClB,GAAIA,IAAmBzD,EAAkB,SACzC,OAAOyD,GAIX,GAAuB,SAAnBpO,EAAQjO,OAGViO,EAAQkM,KAAOlM,EAAQmM,MAAQnM,EAAQpgB,SAElC,GAAuB,UAAnBogB,EAAQjO,OAAoB,CACrC,GAAImc,IAAU3D,EAEZ,MADA2D,EAAQxD,EACF1K,EAAQpgB,IAGhBogB,EAAQ2M,kBAAkB3M,EAAQpgB,SAEN,WAAnBogB,EAAQjO,QACjBiO,EAAQuN,OAAO,SAAUvN,EAAQpgB,KAGnCsuB,EAAQzD,EAER,IAAIuC,EAASsB,EAAS3C,EAASx/B,EAAM6zB,GACrC,GAAoB,WAAhBgN,EAAO17B,KAAmB,CAO5B,GAJA48B,EAAQlO,EAAQlf,KACZ4pB,EACAF,EAEAwC,EAAOptB,MAAQ+qB,EACjB,SAGF,OACE/7B,MAAOo+B,EAAOptB,IACdkB,KAAMkf,EAAQlf,MAGS,UAAhBksB,EAAO17B,OAChB48B,EAAQxD,EAGR1K,EAAQjO,OAAS,QACjBiO,EAAQpgB,IAAMotB,EAAOptB,OAtRP2uB,CAAiB5C,EAASx/B,EAAM6zB,GAE7CiO,EAcT,SAASK,EAAStgC,EAAIwgC,EAAK5uB,GACzB,IACE,OAAStO,KAAM,SAAUsO,IAAK5R,EAAGG,KAAKqgC,EAAK5uB,IAC3C,MAAOwa,GACP,OAAS9oB,KAAM,QAASsO,IAAKwa,IAiBjC,SAAS2Q,KACT,SAASC,KACT,SAASF,KA4BT,SAASU,EAAsB96B,IAC5B,OAAQ,QAAS,UAAU2Z,QAAQ,SAAS0H,GAC3CrhB,EAAUqhB,GAAU,SAASnS,GAC3B,OAAOjP,KAAK2hB,QAAQP,EAAQnS,MAoClC,SAAS6rB,EAAcwC,GACrB,SAASlb,EAAOhB,EAAQnS,EAAK6W,EAASC,GACpC,IAAIsW,EAASsB,EAASL,EAAUlc,GAASkc,EAAWruB,GACpD,GAAoB,UAAhBotB,EAAO17B,KAEJ,CACL,IAAI4E,EAAS82B,EAAOptB,IAChBhR,EAAQsH,EAAOtH,MACnB,OAAIA,GACiB,iBAAVA,GACPm7B,EAAO57B,KAAKS,EAAO,WACdunB,QAAQM,QAAQ7nB,EAAM28B,SAAS5T,KAAK,SAAS/oB,GAClDmkB,EAAO,OAAQnkB,EAAO6nB,EAASC,IAC9B,SAAS0D,GACVrH,EAAO,QAASqH,EAAK3D,EAASC,KAI3BP,QAAQM,QAAQ7nB,GAAO+oB,KAAK,SAAS8W,GAgB1Cv4B,EAAOtH,MAAQ6/B,EACfhY,EAAQvgB,IACPwgB,GAhCHA,EAAOsW,EAAOptB,KAwClB,IAAI8uB,EAJ0B,iBAAnB5iC,EAAOwoB,SAAwBxoB,EAAOwoB,QAAQgD,SACvDvE,EAASjnB,EAAOwoB,QAAQgD,OAAO3E,KAAKI,IAmCtCpiB,KAAK2hB,QA9BL,SAAiBP,EAAQnS,GACvB,SAAS+uB,IACP,OAAO,IAAIxY,QAAQ,SAASM,EAASC,GACnC3D,EAAOhB,EAAQnS,EAAK6W,EAASC,KAIjC,OAAOgY,EAaLA,EAAkBA,EAAgB/W,KAChCgX,EAGAA,GACEA,KA+GV,SAASN,EAAoBjC,EAAUpM,GACrC,IAAIjO,EAASqa,EAAS5iB,SAASwW,EAAQjO,QACvC,GAAIA,IAAWjiB,EAAW,CAKxB,GAFAkwB,EAAQoM,SAAW,KAEI,UAAnBpM,EAAQjO,OAAoB,CAC9B,GAAIqa,EAAS5iB,SAASolB,SAGpB5O,EAAQjO,OAAS,SACjBiO,EAAQpgB,IAAM9P,EACdu+B,EAAoBjC,EAAUpM,GAEP,UAAnBA,EAAQjO,QAGV,OAAO4Y,EAIX3K,EAAQjO,OAAS,QACjBiO,EAAQpgB,IAAM,IAAI/S,UAChB,kDAGJ,OAAO89B,EAGT,IAAIqC,EAASsB,EAASvc,EAAQqa,EAAS5iB,SAAUwW,EAAQpgB,KAEzD,GAAoB,UAAhBotB,EAAO17B,KAIT,OAHA0uB,EAAQjO,OAAS,QACjBiO,EAAQpgB,IAAMotB,EAAOptB,IACrBogB,EAAQoM,SAAW,KACZzB,EAGT,IAAIkE,EAAO7B,EAAOptB,IAElB,OAAMivB,EAOFA,EAAK/tB,MAGPkf,EAAQoM,EAAS0B,YAAce,EAAKjgC,MAGpCoxB,EAAQ9e,KAAOkrB,EAAS2B,QAQD,WAAnB/N,EAAQjO,SACViO,EAAQjO,OAAS,OACjBiO,EAAQpgB,IAAM9P,GAUlBkwB,EAAQoM,SAAW,KACZzB,GANEkE,GA3BP7O,EAAQjO,OAAS,QACjBiO,EAAQpgB,IAAM,IAAI/S,UAAU,oCAC5BmzB,EAAQoM,SAAW,KACZzB,GAoDX,SAASmE,EAAaC,GACpB,IAAIzgB,GAAU2e,OAAQ8B,EAAK,IAEvB,KAAKA,IACPzgB,EAAM8e,SAAW2B,EAAK,IAGpB,KAAKA,IACPzgB,EAAM+e,WAAa0B,EAAK,GACxBzgB,EAAMof,SAAWqB,EAAK,IAGxBp+B,KAAK07B,WAAWl2B,KAAKmY,GAGvB,SAASge,EAAche,GACrB,IAAI0e,EAAS1e,EAAMme,eACnBO,EAAO17B,KAAO,gBACP07B,EAAOptB,IACd0O,EAAMme,WAAaO,EAGrB,SAASjB,EAAQF,GAIfl7B,KAAK07B,aAAgBY,OAAQ,SAC7BpB,EAAYxhB,QAAQykB,EAAcn+B,MAClCA,KAAKq7B,OAAM,GA8Bb,SAASzpB,EAAO+K,GACd,GAAIA,EAAU,CACZ,IAAI0hB,EAAiB1hB,EAAS0c,GAC9B,GAAIgF,EACF,OAAOA,EAAe7gC,KAAKmf,GAG7B,GAA6B,mBAAlBA,EAASpM,KAClB,OAAOoM,EAGT,IAAKvZ,MAAMuZ,EAASvc,QAAS,CAC3B,IAAIqC,GAAK,EAAG8N,EAAO,SAASA,IAC1B,OAAS9N,EAAIka,EAASvc,QACpB,GAAIg5B,EAAO57B,KAAKmf,EAAUla,GAGxB,OAFA8N,EAAKtS,MAAQ0e,EAASla,GACtB8N,EAAKJ,MAAO,EACLI,EAOX,OAHAA,EAAKtS,MAAQkB,EACboR,EAAKJ,MAAO,EAELI,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,OAASA,KAAMitB,GAIjB,SAASA,IACP,OAASv/B,MAAOkB,EAAWgR,MAAM,IApgBpC,CAktBmB,iBAAXhV,EAAsBA,EACX,iBAAXG,OAAsBA,OACb,iBAATE,KAAoBA,KAAOwE,KCxtBpC,IACI,IAAIs+B,GAAK,IAAIhjC,OAAOijC,YAAY,QAEhC,GADAD,GAAGE,kBACyB,IAAxBF,GAAGG,iBAGH,MAAM,IAAI9B,MAAM,6BAEtB,MAAMtgC,GACN,IAAIkiC,GAAc,SAASja,EAAOoa,GAChC,IAAIC,EAAKC,EAsBT,OArBAF,EAASA,IACPG,SAAS,EACTC,YAAY,EACZC,YAAQ5/B,IAGVw/B,EAAM/hC,SAASoiC,YAAY,gBACvBC,gBAAgB3a,EAAOoa,EAAOG,QAASH,EAAOI,WAAYJ,EAAOK,QACrEH,EAAcD,EAAIH,eAClBG,EAAIH,eAAiB,WACnBI,EAAYphC,KAAKwC,MACjB,IACExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAKy+B,kBAAmB,IAGrBE,GAGTJ,GAAYx+B,UAAYzE,OAAO4jC,MAAMn/B,UACrCzE,OAAOijC,YAAcA,GCtCvB,IC2IcY,GD3IDC,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SERLC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEhkC,OAAOwrB,UAAUyY,SAAShgC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,wBACI,uBAML,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,oxDClXXigC,aAEE,SACKC,UACMz/B,KAAK0/B,WAAWD,EAAOnkC,OAAOqkC,cAFzC,SAIOF,UACIz/B,KAAKge,eAAeyhB,KAAWjjC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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n window.setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = window.setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n window.setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n utils.dispatchEvent.call(this, this.media, 'ready');\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n player.media.paused = false;\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n player.media.paused = true;\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n player.media.paused = true;\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n window.setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = window.setTimeout(() => {\n /* this.debug.warn({\n pressed: this.elements.controls.pressed,\n hover: this.elements.controls.pressed,\n playing: this.playing,\n paused: this.paused,\n loading: this.loading,\n }); */\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n window.setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","f","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","f$1","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","LIBRARY","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesConstructor","original","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","f$3","gOPD","getOwnPropertyDescriptor","f$2","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_inheritIfRequired","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","f$4","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","_microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","f$5","reject","$$resolve","$$reject","_perform","_promiseResolve","x","promiseCapability","newPromiseCapability","microtask","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","promiseResolve","all","remaining","$index","alreadyCalled","race","f$6","_wksDefine","$Symbol","charAt","wksExt","_enumKeys","symbols","windowNames","f$7","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","_stringAt","TO_STRING","pos","charCodeAt","$at","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","_flags","ignoreCase","multiline","unicode","sticky","flags","RegExp","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","callback","current","querySelector","callbacks","element","errors","function","cb","getElementsByTagName","parentNode","insertBefore","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","updateSprite","innerHTML","body","childNodes","prefix","top","elements","targets","child","cloneNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","sel","existingAttributes","existing","selector","trim","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","youtube","vimeo","$2","parser","href","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","msExitFullscreen","Storage","json","removeItem","Ads","ads","initialized","blocked","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","_this4","getRemainingTime","label","i18n","advertisment","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this8","adError","_this9","destroy","handleKey","which","getKeyCode","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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CExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAKw/B,kBAAmB,IAGrBE,GAGTJ,GAAYv/B,UAAYzE,OAAO2kC,MAAMlgC,UACrCzE,OAAOgkC,YAAcA,GCtCvB,IC2IcY,GD3IDC,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SERLC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACE/kC,OAAOorB,UAAU4Z,SAAS/gC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,wBACI,uBAML,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BAC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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.15/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisment: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisment} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.15\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/package.json b/package.json
index a157e8b2..16131940 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "plyr",
- "version": "3.0.0-beta.15",
+ "version": "3.0.0-beta.16",
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
"homepage": "https://plyr.io",
"main": "./dist/plyr.js",
@@ -9,22 +9,22 @@
"style": "./dist/plyr.css",
"devDependencies": {
"babel-core": "^6.26.0",
- "babel-eslint": "^8.2.1",
+ "babel-eslint": "^8.2.2",
"babel-plugin-external-helpers": "^6.22.0",
"babel-preset-env": "^1.6.1",
"del": "^3.0.0",
- "eslint": "^4.18.0",
+ "eslint": "^4.18.2",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-config-prettier": "^2.9.0",
- "eslint-plugin-import": "^2.8.0",
+ "eslint-plugin-import": "^2.9.0",
"git-branch": "^1.0.0",
"gulp": "^3.9.1",
- "gulp-autoprefixer": "^4.1.0",
+ "gulp-autoprefixer": "^5.0.0",
"gulp-better-rollup": "^3.0.0",
"gulp-clean-css": "^3.9.2",
"gulp-concat": "^2.6.1",
"gulp-filter": "^5.1.0",
- "gulp-open": "^2.1.0",
+ "gulp-open": "^3.0.0",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.6.1",
"gulp-s3": "^0.11.0",
@@ -39,12 +39,12 @@
"rollup-plugin-commonjs": "^8.3.0",
"rollup-plugin-node-resolve": "^3.0.3",
"run-sequence": "^2.2.1",
- "stylelint": "^9.0.0",
- "stylelint-config-prettier": "^2.0.0",
- "stylelint-config-sass-guidelines": "^4.1.0",
- "stylelint-config-standard": "^18.1.0",
+ "stylelint": "^9.1.1",
+ "stylelint-config-prettier": "^2.1.0",
+ "stylelint-config-sass-guidelines": "^5.0.0",
+ "stylelint-config-recommended": "^2.1.0",
"stylelint-order": "^0.8.1",
- "stylelint-scss": "^2.3.0",
+ "stylelint-scss": "^2.4.0",
"stylelint-selector-bem-pattern": "^2.0.0"
},
"keywords": ["HTML5 Video", "HTML5 Audio", "Media Player", "DASH", "Shaka", "WordPress", "HLS"],
diff --git a/readme.md b/readme.md
index b49740de..d329c462 100644
--- a/readme.md
+++ b/readme.md
@@ -12,22 +12,22 @@ A simple, lightweight, accessible and customizable HTML5, YouTube and Vimeo medi
## Features
-* **Accessible** - full support for VTT captions and screen readers
-* **Lightweight** - just 18KB minified and gzipped
-* **[Customisable](#html)** - make the player look how you want with the markup you want
-* **Semantic** - uses the _right_ elements. `<input type="range">` for volume and `<progress>` for progress and well, `<button>`s for buttons. There's no
- `<span>` or `<a href="#">` button hacks
-* **Responsive** - works with any screen size
-* **HTML Video & Audio** - support for both formats
-* **[Embedded Video](#embeds)** - support for YouTube and Vimeo video playback
-* **[Streaming](#streaming)** - support for hls.js, Shaka and dash.js streaming playback
-* **[API](#api)** - toggle playback, volume, seeking, and more through a standardized API
-* **[Events](#events)** - no messing around with Vimeo and YouTube APIs, all events are standardized across formats
-* **[Fullscreen](#fullscreen)** - supports native fullscreen with fallback to "full window" modes
-* **[Shortcuts](#shortcuts)** - supports keyboard shortcuts
-* **i18n support** - support for internationalization of controls
-* **No dependencies** - written in "vanilla" ES6 JavaScript, no jQuery required
-* **SASS** - to include in your build processes
+* **Accessible** - full support for VTT captions and screen readers
+* **Lightweight** - just 18KB minified and gzipped
+* **[Customisable](#html)** - make the player look how you want with the markup you want
+* **Semantic** - uses the _right_ elements. `<input type="range">` for volume and `<progress>` for progress and well, `<button>`s for buttons. There's no
+ `<span>` or `<a href="#">` button hacks
+* **Responsive** - works with any screen size
+* **HTML Video & Audio** - support for both formats
+* **[Embedded Video](#embeds)** - support for YouTube and Vimeo video playback
+* **[Streaming](#streaming)** - support for hls.js, Shaka and dash.js streaming playback
+* **[API](#api)** - toggle playback, volume, seeking, and more through a standardized API
+* **[Events](#events)** - no messing around with Vimeo and YouTube APIs, all events are standardized across formats
+* **[Fullscreen](#fullscreen)** - supports native fullscreen with fallback to "full window" modes
+* **[Shortcuts](#shortcuts)** - supports keyboard shortcuts
+* **i18n support** - support for internationalization of controls
+* **No dependencies** - written in "vanilla" ES6 JavaScript, no jQuery required
+* **SASS** - to include in your build processes
Oh and yes, it works with Bootstrap.
@@ -53,8 +53,7 @@ Here's a quick run through on getting up and running. There's also a [demo on Co
### HTML
-Plyr extends upon the standard HTML5 markup so that's all you need for those types. More info on advanced HTML markup can be found under
-[initialising](#initialising).
+Plyr extends upon the standard [HTML5 media element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement) markup so that's all you need for those types.
#### HTML5 Video
@@ -117,14 +116,15 @@ Or the `<div>` non progressively enhanced method:
### JavaScript
-Include the `plyr.js` script before the closing `</body>` tag and then call `plyr.setup()`. More info on `setup()` can be found under
-[initialising](#initialising).
+Include the `plyr.js` script before the closing `</body>` tag and then in your JS create a new instance of Plyr as below.
```html
<script src="path/to/plyr.js"></script>
<script>const player = new Plyr('#player');</script>
```
+See [initialising](#initialising) for more information on advanced setups.
+
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript, you can use the following:
```html
@@ -195,11 +195,12 @@ WebVTT captions are supported. To add a caption track, check the HTML example ab
You can specify a range of arguments for the constructor to use:
-* A CSS string selector that's compatible with [`querySelector`](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector)
-* A [HTMLElement](https://developer.mozilla.org/en/docs/Web/API/HTMLElement)
-* A [NodeList](https://developer.mozilla.org/en-US/docs/Web/API/NodeList) or Array of [HTMLElement](https://developer.mozilla.org/en/docs/Web/API/HTMLElement) -
- the first element will be used
-* A [jQuery](https://jquery.com) object - if multiple are passed, the first element will be used
+* A CSS string selector that's compatible with [`querySelector`](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector)
+* A [`HTMLElement`](https://developer.mozilla.org/en/docs/Web/API/HTMLElement)
+* A [`NodeList]`(https://developer.mozilla.org/en-US/docs/Web/API/NodeList)
+* A [jQuery](https://jquery.com) object
+
+_Note_: If a `NodeList`, `Array`, or jQuery object are passed, the first element will be used for setup.
Here's some examples
@@ -223,6 +224,12 @@ const player = new Plyr(document.querySelectorAll('.js-player'));
The NodeList, HTMLElement or string selector can be the target `<video>`, `<audio>`, or `<div>` wrapper for embeds
+##### Setting up multiple players
+
+```javascript
+const players = Array.from(document.querySelectorAll('.js-player')).map(player => new Plyr(player));
+```
+
The second argument for the constructor is the [#options](options) object:
```javascript
@@ -278,7 +285,7 @@ Note the single quotes encapsulating the JSON and double quotes on the object ke
| `quality` | Object | `{ default: 'default', options: ['hd2160', 'hd1440', 'hd1080', 'hd720', 'large', 'medium', 'small', 'tiny', 'default'] }` | Currently only supported by YouTube. `default` is the default quality level, determined by YouTube. `options` are the options to display. |
| `loop` | Object | `{ active: false }` | `active`: Whether to loop the current video. If the `loop` attribute is present on a `<video>` or `<audio>` element, this will be automatically set to true This is an object to support future functionality. |
-1. Vimeo only
+1. Vimeo only
## API
@@ -333,7 +340,7 @@ player.fullscreen.enter(); // Enter fullscreen
| `supports(type)` | String | Check support for a mime type. |
| `destroy()` | - | Destroy the instance and garbage collect any elements. |
-1. For HTML5 players, `play()` will return a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) in _some_ browsers - WebKit and Mozilla [according to MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play) at time of writing.
+1. For HTML5 players, `play()` will return a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) in _some_ browsers - WebKit and Mozilla [according to MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play) at time of writing.
### Getters and Setters
@@ -376,8 +383,8 @@ player.fullscreen.active; // false;
| `fullscreen.enabled` | ✓ | - | Returns a boolean indicating if the current player has fullscreen enabled. |
| `pip` | ✓ | ✓ | Gets or sets the picture-in-picture state of the player. The setter accepts a boolean. This currently only supported on Safari 10+ on MacOS Sierra+ and iOS 10+. |
-1. YouTube only. HTML5 will follow.
-2. HTML5 only
+1. YouTube only. HTML5 will follow.
+2. HTML5 only
#### The `.source` setter
@@ -477,7 +484,7 @@ _Note:_ `src` property for YouTube and Vimeo can either be the video ID or the w
| `poster`&sup1; | String | The URL for the poster image (HTML5 video only). |
| `tracks`&sup1; | String | An array of track objects. Each element in the array is mapped directly to a track element and any keys mapped directly to HTML attributes so as in the example above, it will render as `<track kind="captions" label="English" srclang="en" src="https://cdn.selz.com/plyr/1.0/example_captions_en.vtt" default>` and similar for the French version. Booleans are converted to HTML5 value-less attributes. |
-1. HTML5 only
+1. HTML5 only
## Events
@@ -547,8 +554,8 @@ YouTube and Vimeo are currently supported and function much like a HTML5 video.
to access the API's directly. You can do so via the `embed` property of your player object - e.g. `player.embed`. You can then use the relevant methods from the
third party APIs. More info on the respective API's here:
-* [YouTube iframe API Reference](https://developers.google.com/youtube/iframe_api_reference)
-* [Vimeo player.js Reference](https://github.com/vimeo/player.js)
+* [YouTube iframe API Reference](https://developers.google.com/youtube/iframe_api_reference)
+* [Vimeo player.js Reference](https://github.com/vimeo/player.js)
_Note_: Not all API methods may work 100%. Your mileage may vary. It's better to use the Plyr API where possible.
@@ -576,9 +583,9 @@ document then the shortcuts will work when any element has focus, apart from an
Because Plyr is an extension of the standard HTML5 video and audio elements, third party streaming plugins can be used with Plyr. Massive thanks to Matias
Russitto ([@russitto](https://github.com/russitto)) for working on this. Here's a few examples:
-* Using [hls.js](https://github.com/dailymotion/hls.js) - [Demo](http://codepen.io/sampotts/pen/JKEMqB)
-* Using [Shaka](https://github.com/google/shaka-player) - [Demo](http://codepen.io/sampotts/pen/zBNpVR)
-* Using [dash.js](https://github.com/Dash-Industry-Forum/dash.js) - [Demo](http://codepen.io/sampotts/pen/BzpJXN)
+* Using [hls.js](https://github.com/dailymotion/hls.js) - [Demo](http://codepen.io/sampotts/pen/JKEMqB)
+* Using [Shaka](https://github.com/google/shaka-player) - [Demo](http://codepen.io/sampotts/pen/zBNpVR)
+* Using [dash.js](https://github.com/Dash-Industry-Forum/dash.js) - [Demo](http://codepen.io/sampotts/pen/BzpJXN)
## Fullscreen
@@ -599,8 +606,8 @@ Plyr supports the last 2 versions of most _modern_ browsers.
| IE11 | ✓ |
| IE10 | ✓&sup2; |
-1. Mobile Safari on the iPhone forces the native player for `<video>` unless the `playsinline` attribute is present. Volume controls are also disabled as they are handled device wide.
-2. Native player used (no support for `<progress>` or `<input type="range">`) but the API is supported. No native fullscreen support, fallback can be used (see [options](#options))
+1. Mobile Safari on the iPhone forces the native player for `<video>` unless the `playsinline` attribute is present. Volume controls are also disabled as they are handled device wide.
+2. Native player used (no support for `<progress>` or `<input type="range">`) but the API is supported. No native fullscreen support, fallback can be used (see [options](#options))
### Polyfills
@@ -616,9 +623,9 @@ const supported = Plyr.supported('video', 'html5', true);
The arguments are:
-* Media type (`audio` or `video`)
-* Provider (`html5`, `youtube` or `vimeo`)
-* Whether the player has the `playsinline` attribute (only applicable to iOS 10+)
+* Media type (`audio` or `video`)
+* Provider (`html5`, `youtube` or `vimeo`)
+* Whether the player has the `playsinline` attribute (only applicable to iOS 10+)
### Disable support programatically
@@ -654,28 +661,28 @@ Plyr costs money to run, not only my time - I donate that for free but domains,
## Mentions
-* [ProductHunt](https://www.producthunt.com/tech/plyr)
-* [The Changelog](http://thechangelog.com/plyr-simple-html5-media-player-custom-controls-webvtt-captions/)
-* [HTML5 Weekly #177](http://html5weekly.com/issues/177)
-* [Responsive Design #149](http://us4.campaign-archive2.com/?u=559bc631fe5294fc66f5f7f89&id=451a61490f)
-* [Web Design Weekly #174](https://web-design-weekly.com/2015/02/24/web-design-weekly-174/)
-* [Hacker News](https://news.ycombinator.com/item?id=9136774)
-* [Web Platform Daily](http://webplatformdaily.org/releases/2015-03-04)
-* [LayerVault Designer News](https://news.layervault.com/stories/45394-plyr--a-simple-html5-media-player)
-* [The Treehouse Show #131](https://teamtreehouse.com/library/episode-131-origami-react-responsive-hero-images)
-* [noupe.com](http://www.noupe.com/design/html5-plyr-is-a-responsive-and-accessible-video-player-94389.html)
+* [ProductHunt](https://www.producthunt.com/tech/plyr)
+* [The Changelog](http://thechangelog.com/plyr-simple-html5-media-player-custom-controls-webvtt-captions/)
+* [HTML5 Weekly #177](http://html5weekly.com/issues/177)
+* [Responsive Design #149](http://us4.campaign-archive2.com/?u=559bc631fe5294fc66f5f7f89&id=451a61490f)
+* [Web Design Weekly #174](https://web-design-weekly.com/2015/02/24/web-design-weekly-174/)
+* [Hacker News](https://news.ycombinator.com/item?id=9136774)
+* [Web Platform Daily](http://webplatformdaily.org/releases/2015-03-04)
+* [LayerVault Designer News](https://news.layervault.com/stories/45394-plyr--a-simple-html5-media-player)
+* [The Treehouse Show #131](https://teamtreehouse.com/library/episode-131-origami-react-responsive-hero-images)
+* [noupe.com](http://www.noupe.com/design/html5-plyr-is-a-responsive-and-accessible-video-player-94389.html)
## Used by
-* [Selz.com](https://selz.com)
-* [Peugeot.fr](http://www.peugeot.fr/marque-et-technologie/technologies/peugeot-i-cockpit.html)
-* [Peugeot.de](http://www.peugeot.de/modelle/modellberater/208-3-turer/fotos-videos.html)
-* [TomTom.com](http://prioritydriving.tomtom.com/)
-* [DIGBMX](http://digbmx.com/)
-* [Grime Archive](https://grimearchive.com/)
-* [koel - A personal music streaming server that works.](http://koel.phanan.net/)
-* [Oscar Radio](http://oscar-radio.xyz/)
-* [Sparkk TV](https://www.sparkktv.com/)
+* [Selz.com](https://selz.com)
+* [Peugeot.fr](http://www.peugeot.fr/marque-et-technologie/technologies/peugeot-i-cockpit.html)
+* [Peugeot.de](http://www.peugeot.de/modelle/modellberater/208-3-turer/fotos-videos.html)
+* [TomTom.com](http://prioritydriving.tomtom.com/)
+* [DIGBMX](http://digbmx.com/)
+* [Grime Archive](https://grimearchive.com/)
+* [koel - A personal music streaming server that works.](http://koel.phanan.net/)
+* [Oscar Radio](http://oscar-radio.xyz/)
+* [Sparkk TV](https://www.sparkktv.com/)
Let me know on [Twitter](https://twitter.com/sam_potts) I can add you to the above list. It'd be awesome to see how you're using Plyr :-)
@@ -683,8 +690,8 @@ Let me know on [Twitter](https://twitter.com/sam_potts) I can add you to the abo
Credit to the PayPal HTML5 Video player from which Plyr's caption functionality was originally ported from:
-* [PayPal's Accessible HTML5 Video Player](https://github.com/paypal/accessible-html5-video-player)
-* [An awesome guide for Plyr in Japanese!](http://syncer.jp/how-to-use-plyr-io) by [@arayutw](https://twitter.com/arayutw)
+* [PayPal's Accessible HTML5 Video Player](https://github.com/paypal/accessible-html5-video-player)
+* [An awesome guide for Plyr in Japanese!](http://syncer.jp/how-to-use-plyr-io) by [@arayutw](https://twitter.com/arayutw)
## Thanks
diff --git a/src/js/listeners.js b/src/js/listeners.js
index 214f6e7d..f7efa7e6 100644
--- a/src/js/listeners.js
+++ b/src/js/listeners.js
@@ -202,7 +202,7 @@ const listeners = {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
- window.setTimeout(() => {
+ setTimeout(() => {
utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);
}, 0);
});
diff --git a/src/js/plugins/ads.js b/src/js/plugins/ads.js
index 72fd49d8..eee03752 100644
--- a/src/js/plugins/ads.js
+++ b/src/js/plugins/ads.js
@@ -553,7 +553,7 @@ class Ads {
startSafetyTimer(time, from) {
this.player.debug.log(`Safety timer invoked from: ${from}`);
- this.safetyTimer = window.setTimeout(() => {
+ this.safetyTimer = setTimeout(() => {
this.cancel();
this.clearSafetyTimer('startSafetyTimer()');
}, time);
diff --git a/src/js/plugins/vimeo.js b/src/js/plugins/vimeo.js
index 4b604337..7b846f04 100644
--- a/src/js/plugins/vimeo.js
+++ b/src/js/plugins/vimeo.js
@@ -311,7 +311,7 @@ const vimeo = {
});
// Rebuild UI
- window.setTimeout(() => ui.build.call(player), 0);
+ setTimeout(() => ui.build.call(player), 0);
},
};
diff --git a/src/js/plugins/youtube.js b/src/js/plugins/youtube.js
index d66b98b7..07e12b79 100644
--- a/src/js/plugins/youtube.js
+++ b/src/js/plugins/youtube.js
@@ -194,17 +194,14 @@ const youtube = {
// Create a faux HTML5 API using the YouTube API
player.media.play = () => {
instance.playVideo();
- player.media.paused = false;
};
player.media.pause = () => {
instance.pauseVideo();
- player.media.paused = true;
};
player.media.stop = () => {
instance.stopVideo();
- player.media.paused = true;
};
player.media.duration = instance.getDuration();
@@ -331,7 +328,7 @@ const youtube = {
}, 200);
// Rebuild UI
- window.setTimeout(() => ui.build.call(player), 50);
+ setTimeout(() => ui.build.call(player), 50);
},
onStateChange(event) {
// Get the instance
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 17336f06..50b9458e 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -972,15 +972,7 @@ class Plyr {
// If toggle is false or if we're playing (regardless of toggle),
// then set the timer to hide the controls
if (!show || this.playing) {
- this.timers.controls = window.setTimeout(() => {
- /* this.debug.warn({
- pressed: this.elements.controls.pressed,
- hover: this.elements.controls.pressed,
- playing: this.playing,
- paused: this.paused,
- loading: this.loading,
- }); */
-
+ this.timers.controls = setTimeout(() => {
// If the mouse is over the controls (and not entering fullscreen), bail
if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {
return;
@@ -1111,7 +1103,7 @@ class Plyr {
}
// Vimeo does not always return
- window.setTimeout(done, 200);
+ setTimeout(done, 200);
break;
diff --git a/src/js/ui.js b/src/js/ui.js
index d8d420b0..7e09dea6 100644
--- a/src/js/ui.js
+++ b/src/js/ui.js
@@ -84,7 +84,9 @@ const ui = {
this.ready = true;
// Ready event at end of execution stack
- utils.dispatchEvent.call(this, this.media, 'ready');
+ setTimeout(() => {
+ utils.dispatchEvent.call(this, this.media, 'ready');
+ }, 0);
// Set the title
ui.setTitle.call(this);
diff --git a/src/js/utils.js b/src/js/utils.js
index 3e176d10..5dafee89 100644
--- a/src/js/utils.js
+++ b/src/js/utils.js
@@ -854,7 +854,7 @@ const utils = {
// Force repaint of element
repaint(element) {
- window.setTimeout(() => {
+ setTimeout(() => {
utils.toggleHidden(element, true);
element.offsetHeight; // eslint-disable-line
utils.toggleHidden(element, false);
diff --git a/yarn.lock b/yarn.lock
index e47872a6..72fda203 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,53 +2,70 @@
# yarn lockfile v1
-"@babel/code-frame@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
+"@babel/code-frame@7.0.0-beta.40", "@babel/code-frame@^7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6"
dependencies:
- chalk "^2.0.0"
- esutils "^2.0.2"
- js-tokens "^3.0.0"
+ "@babel/highlight" "7.0.0-beta.40"
-"@babel/helper-function-name@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
+"@babel/generator@7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.40.tgz#ab61f9556f4f71dbd1138949c795bb9a21e302ea"
dependencies:
- "@babel/helper-get-function-arity" "7.0.0-beta.36"
- "@babel/template" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
+ "@babel/types" "7.0.0-beta.40"
+ jsesc "^2.5.1"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
-"@babel/helper-get-function-arity@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
+"@babel/helper-function-name@7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz#9d033341ab16517f40d43a73f2d81fc431ccd7b6"
dependencies:
- "@babel/types" "7.0.0-beta.36"
+ "@babel/helper-get-function-arity" "7.0.0-beta.40"
+ "@babel/template" "7.0.0-beta.40"
+ "@babel/types" "7.0.0-beta.40"
-"@babel/template@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
+"@babel/helper-get-function-arity@7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz#ac0419cf067b0ec16453e1274f03878195791c6e"
dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
+ "@babel/types" "7.0.0-beta.40"
+
+"@babel/highlight@7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255"
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+"@babel/template@7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8"
+ dependencies:
+ "@babel/code-frame" "7.0.0-beta.40"
+ "@babel/types" "7.0.0-beta.40"
+ babylon "7.0.0-beta.40"
lodash "^4.2.0"
-"@babel/traverse@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
+"@babel/traverse@^7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.40.tgz#d140e449b2e093ef9fe1a2eecc28421ffb4e521e"
dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/helper-function-name" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
+ "@babel/code-frame" "7.0.0-beta.40"
+ "@babel/generator" "7.0.0-beta.40"
+ "@babel/helper-function-name" "7.0.0-beta.40"
+ "@babel/types" "7.0.0-beta.40"
+ babylon "7.0.0-beta.40"
debug "^3.0.1"
globals "^11.1.0"
invariant "^2.2.0"
lodash "^4.2.0"
-"@babel/types@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
+"@babel/types@7.0.0-beta.40", "@babel/types@^7.0.0-beta.40":
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.40.tgz#25c3d7aae14126abe05fcb098c65a66b6d6b8c14"
dependencies:
esutils "^2.0.2"
lodash "^4.2.0"
@@ -110,6 +127,12 @@ amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ansi-colors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
+ dependencies:
+ ansi-wrap "^0.1.0"
+
ansi-cyan@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873"
@@ -158,7 +181,13 @@ ansi-styles@^3.1.0:
dependencies:
color-convert "^1.9.0"
-ansi-wrap@0.1.0:
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
@@ -270,6 +299,10 @@ assert-plus@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+
async-foreach@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
@@ -292,7 +325,7 @@ atob@~1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773"
-autoprefixer@^7.0.0, autoprefixer@^7.1.2:
+autoprefixer@^7.1.2:
version "7.2.3"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.3.tgz#c2841e38b7940c2d0a9bbffd72c75f33637854f8"
dependencies:
@@ -303,6 +336,17 @@ autoprefixer@^7.0.0, autoprefixer@^7.1.2:
postcss "^6.0.14"
postcss-value-parser "^3.2.3"
+autoprefixer@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.1.0.tgz#374cf35be1c0e8fce97408d876f95f66f5cb4641"
+ dependencies:
+ browserslist "^3.1.1"
+ caniuse-lite "^1.0.30000810"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^6.0.19"
+ postcss-value-parser "^3.2.3"
+
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
@@ -347,14 +391,14 @@ babel-core@^6.26.0:
slash "^1.0.0"
source-map "^0.5.6"
-babel-eslint@^8.2.1:
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
+babel-eslint@^8.2.2:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b"
dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/traverse" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
+ "@babel/code-frame" "^7.0.0-beta.40"
+ "@babel/traverse" "^7.0.0-beta.40"
+ "@babel/types" "^7.0.0-beta.40"
+ babylon "^7.0.0-beta.40"
eslint-scope "~3.7.1"
eslint-visitor-keys "^1.0.0"
@@ -794,9 +838,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
lodash "^4.17.4"
to-fast-properties "^1.0.3"
-babylon@7.0.0-beta.36:
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
+babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40:
+ version "7.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a"
babylon@^6.18.0:
version "6.18.0"
@@ -902,6 +946,13 @@ browserslist@^2.1.2, browserslist@^2.10.0:
caniuse-lite "^1.0.30000780"
electron-to-chromium "^1.3.28"
+browserslist@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.1.1.tgz#d380fc048bc3a33e60fb87dc135110ebaaa6320a"
+ dependencies:
+ caniuse-lite "^1.0.30000809"
+ electron-to-chromium "^1.3.33"
+
builtin-modules@^1.0.0, builtin-modules@^1.1.0, builtin-modules@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@@ -961,6 +1012,10 @@ caniuse-lite@^1.0.30000780, caniuse-lite@^1.0.30000783:
version "1.0.30000784"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000784.tgz#129ced74e9a1280a441880b6cd2bce30ef59e6c0"
+caniuse-lite@^1.0.30000809, caniuse-lite@^1.0.30000810:
+ version "1.0.30000811"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000811.tgz#0b6e40f2efccc27bd3cb52f91ee7ca4673d77d10"
+
caseless@~0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
@@ -1001,6 +1056,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
+chalk@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
character-entities-html4@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50"
@@ -1237,6 +1300,15 @@ cosmiconfig@^3.1.0:
parse-json "^3.0.0"
require-from-string "^2.0.1"
+cosmiconfig@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
+ dependencies:
+ is-directory "^0.3.1"
+ js-yaml "^3.9.0"
+ parse-json "^4.0.0"
+ require-from-string "^2.0.1"
+
cross-spawn@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
@@ -1519,6 +1591,10 @@ electron-to-chromium@^1.3.28:
version "1.3.29"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.29.tgz#7a58236b95468c3e7660091348522d65d7736b36"
+electron-to-chromium@^1.3.33:
+ version "1.3.34"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed"
+
end-of-stream@~0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
@@ -1596,9 +1672,9 @@ eslint-module-utils@^2.1.1:
debug "^2.6.8"
pkg-dir "^1.0.0"
-eslint-plugin-import@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
+eslint-plugin-import@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169"
dependencies:
builtin-modules "^1.1.1"
contains-path "^0.1.0"
@@ -1607,7 +1683,7 @@ eslint-plugin-import@^2.8.0:
eslint-import-resolver-node "^0.3.1"
eslint-module-utils "^2.1.1"
has "^1.0.1"
- lodash.cond "^4.3.0"
+ lodash "^4.17.4"
minimatch "^3.0.3"
read-pkg-up "^2.0.0"
@@ -1626,9 +1702,9 @@ eslint-visitor-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
-eslint@^4.18.0:
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.0.tgz#ebd0ba795af6dc59aa5cee17938160af5950e051"
+eslint@^4.18.2:
+ version "4.18.2"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@@ -1665,7 +1741,7 @@ eslint@^4.18.0:
semver "^5.3.0"
strip-ansi "^4.0.0"
strip-json-comments "~2.0.1"
- table "^4.0.1"
+ table "4.0.2"
text-table "~0.2.0"
espree@^3.5.2:
@@ -1789,6 +1865,13 @@ extend-shallow@^3.0.0:
dependencies:
is-extendable "^1.0.1"
+extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
@@ -2223,7 +2306,7 @@ glogg@^1.0.0:
dependencies:
sparkles "^1.0.0"
-gonzales-pe@^4.0.3:
+gonzales-pe@^4.0.3, gonzales-pe@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2"
dependencies:
@@ -2243,13 +2326,13 @@ graceful-fs@~1.2.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
-gulp-autoprefixer@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-4.1.0.tgz#064af73cc02cadac8ff34d0bf93ffdfb94ea12aa"
+gulp-autoprefixer@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-5.0.0.tgz#8237c278a69775270a1cafe7d6f101cfcd585544"
dependencies:
- autoprefixer "^7.0.0"
+ autoprefixer "^8.0.0"
fancy-log "^1.3.2"
- plugin-error "^0.1.2"
+ plugin-error "^1.0.1"
postcss "^6.0.1"
through2 "^2.0.0"
vinyl-sourcemaps-apply "^0.2.0"
@@ -2289,12 +2372,12 @@ gulp-filter@^5.1.0:
plugin-error "^0.1.2"
streamfilter "^1.0.5"
-gulp-open@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/gulp-open/-/gulp-open-2.1.0.tgz#ac01eee898d77a7ac0812fad4f3d53d08687d41c"
+gulp-open@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gulp-open/-/gulp-open-3.0.0.tgz#5a572a99044fdc461685d0eb8f7529b34bf9a62c"
dependencies:
colors "^1.1.2"
- open "0.0.5"
+ opn "5.2.0"
plugin-log "^0.1.0"
through2 "^2.0.1"
@@ -2374,13 +2457,13 @@ gulp-svgstore@^6.1.1:
plugin-error "^0.1.2"
vinyl "^2.1.0"
-gulp-uglify-es@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulp-uglify-es/-/gulp-uglify-es-1.0.0.tgz#80b2f8e2fa7211c1706c597f08bbf620c870e545"
+gulp-uglify-es@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gulp-uglify-es/-/gulp-uglify-es-1.0.1.tgz#9f991de31c646fb37fe589086ffd3f6e2f9e20f1"
dependencies:
o-stream "^0.2.2"
- plugin-error "^0.1.2"
- uglify-es "^3.2.0"
+ plugin-error "^1.0.1"
+ uglify-es "^3.3.9"
vinyl "^2.1.0"
vinyl-sourcemaps-apply "^0.2.1"
@@ -2491,6 +2574,10 @@ has-flag@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
has-gulplog@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
@@ -2943,6 +3030,10 @@ is-word-character@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb"
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -3006,6 +3097,10 @@ jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+jsesc@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
+
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -3075,6 +3170,10 @@ known-css-properties@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084"
+known-css-properties@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.6.1.tgz#31b5123ad03d8d1a3f36bd4155459c981173478b"
+
knox@:
version "0.9.2"
resolved "https://registry.yarnpkg.com/knox/-/knox-0.9.2.tgz#3736593669e24f024fdaf723b6a1dc4afd839a71"
@@ -3247,10 +3346,6 @@ lodash.clonedeep@^4.3.2:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
-lodash.cond@^4.3.0:
- version "4.5.2"
- resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
-
lodash.defaults@^4.0.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
@@ -3878,9 +3973,11 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
-open@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"
+opn@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
+ dependencies:
+ is-wsl "^1.1.0"
optionator@^0.8.2:
version "0.8.2"
@@ -4091,6 +4188,15 @@ plugin-error@0.1.2, plugin-error@^0.1.2:
arr-union "^2.0.1"
extend-shallow "^1.1.2"
+plugin-error@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c"
+ dependencies:
+ ansi-colors "^1.0.1"
+ arr-diff "^4.0.0"
+ arr-union "^3.1.0"
+ extend-shallow "^3.0.2"
+
plugin-log@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/plugin-log/-/plugin-log-0.1.0.tgz#86049cf6ab10833398a931f3689cbaee7b5e1333"
@@ -4158,6 +4264,13 @@ postcss-sass@^0.2.0:
gonzales-pe "^4.0.3"
postcss "^6.0.6"
+postcss-sass@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.0.tgz#dc2582ee0e61541aa88bafdc5a8aebb53deaae75"
+ dependencies:
+ gonzales-pe "^4.2.3"
+ postcss "^6.0.16"
+
postcss-scss@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94"
@@ -4200,6 +4313,14 @@ postcss@^5.2.16:
source-map "^0.5.6"
supports-color "^3.2.3"
+postcss@^6.0.16, postcss@^6.0.19:
+ version "6.0.19"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555"
+ dependencies:
+ chalk "^2.3.1"
+ source-map "^0.6.1"
+ supports-color "^5.2.0"
+
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -4828,7 +4949,7 @@ source-map-url@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9"
-source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6:
+source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -5032,23 +5153,20 @@ style-search@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
-stylelint-config-prettier@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-2.0.0.tgz#0f671435294ebe4a215971855e1e576f5f227a21"
-
-stylelint-config-recommended@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.0.1.tgz#4746119ec85f5f4663c7b5107c05c13ed0e2ab0d"
+stylelint-config-prettier@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-2.1.0.tgz#395874225ceef02ea8e31c2f4073098f4505b054"
-stylelint-config-sass-guidelines@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-4.1.0.tgz#08d1d9a597704fd9945eb85422abb24f8608a170"
+stylelint-config-recommended@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858"
-stylelint-config-standard@^18.0.0:
- version "18.0.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.0.0.tgz#0d872b40fafdcddcf4188fb5b64ddb3887e8aefc"
+stylelint-config-sass-guidelines@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-5.0.0.tgz#529fc101f4a15da3c54e66efdd9d79abc01668f7"
dependencies:
- stylelint-config-recommended "^2.0.0"
+ stylelint-order "^0.8.0"
+ stylelint-scss "^2.0.0"
stylelint-order@^0.8.0:
version "0.8.0"
@@ -5058,9 +5176,17 @@ stylelint-order@^0.8.0:
postcss "^6.0.14"
postcss-sorting "^3.1.0"
-stylelint-scss@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-2.3.0.tgz#95089fa0c1cc5690be19ca80f901a4905c95dedc"
+stylelint-order@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-0.8.1.tgz#35f71af3a15954154e0e99e5646ba3d6fbe34f8d"
+ dependencies:
+ lodash "^4.17.4"
+ postcss "^6.0.14"
+ postcss-sorting "^3.1.0"
+
+stylelint-scss@^2.0.0, stylelint-scss@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-2.4.0.tgz#2d417688556d64536f435e7a6f77a40dbb89e505"
dependencies:
lodash "^4.17.4"
postcss-media-query-parser "^0.2.3"
@@ -5077,7 +5203,7 @@ stylelint-selector-bem-pattern@^2.0.0:
postcss-bem-linter "^3.0.0"
stylelint ">=3.0.2"
-stylelint@>=3.0.2, stylelint@^8.4.0:
+stylelint@>=3.0.2:
version "8.4.0"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.4.0.tgz#c2dbaeb17236917819f9206e1c0df5fddf6f83c3"
dependencies:
@@ -5121,6 +5247,51 @@ stylelint@>=3.0.2, stylelint@^8.4.0:
svg-tags "^1.0.0"
table "^4.0.1"
+stylelint@^9.1.1:
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.1.1.tgz#bfabb7eb8ea6251a4732f4b2a0468963a30d3da9"
+ dependencies:
+ autoprefixer "^8.0.0"
+ balanced-match "^1.0.0"
+ chalk "^2.0.1"
+ cosmiconfig "^4.0.0"
+ debug "^3.0.0"
+ execall "^1.0.0"
+ file-entry-cache "^2.0.0"
+ get-stdin "^5.0.1"
+ globby "^7.0.0"
+ globjoin "^0.1.4"
+ html-tags "^2.0.0"
+ ignore "^3.3.3"
+ imurmurhash "^0.1.4"
+ known-css-properties "^0.6.0"
+ lodash "^4.17.4"
+ log-symbols "^2.0.0"
+ mathml-tag-names "^2.0.1"
+ meow "^4.0.0"
+ micromatch "^2.3.11"
+ normalize-selector "^0.2.0"
+ pify "^3.0.0"
+ postcss "^6.0.16"
+ postcss-html "^0.12.0"
+ postcss-less "^1.1.0"
+ postcss-media-query-parser "^0.2.3"
+ postcss-reporter "^5.0.0"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-safe-parser "^3.0.1"
+ postcss-sass "^0.3.0"
+ postcss-scss "^1.0.2"
+ postcss-selector-parser "^3.1.0"
+ postcss-value-parser "^3.3.0"
+ resolve-from "^4.0.0"
+ signal-exit "^3.0.2"
+ specificity "^0.3.1"
+ string-width "^2.1.0"
+ style-search "^0.1.0"
+ sugarss "^1.0.0"
+ svg-tags "^1.0.0"
+ table "^4.0.1"
+
sugarss@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44"
@@ -5147,6 +5318,12 @@ supports-color@^4.0.0, supports-color@^4.4.0:
dependencies:
has-flag "^2.0.0"
+supports-color@^5.2.0, supports-color@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
+ dependencies:
+ has-flag "^3.0.0"
+
svg-tags@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
@@ -5163,7 +5340,7 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
-table@^4.0.1:
+table@4.0.2, table@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
dependencies:
@@ -5327,7 +5504,7 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-uglify-es@^3.2.0:
+uglify-es@^3.3.9:
version "3.3.9"
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
dependencies: