diff --git a/build/dev-server.js b/build/dev-server.js
index 48574214..c06192bd 100644
--- a/build/dev-server.js
+++ b/build/dev-server.js
@@ -21,6 +21,7 @@ var compiler = webpack(webpackConfig)
 
 var devMiddleware = require('webpack-dev-middleware')(compiler, {
   publicPath: webpackConfig.output.publicPath,
+  writeToDisk: true,
   stats: {
     colors: true,
     chunks: false
diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js
index d987eff1..900d824b 100644
--- a/build/webpack.base.conf.js
+++ b/build/webpack.base.conf.js
@@ -3,6 +3,7 @@ var config = require('../config')
 var utils = require('./utils')
 var projectRoot = path.resolve(__dirname, '../')
 var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin')
+var CopyPlugin = require('copy-webpack-plugin');
 
 var env = process.env.NODE_ENV
 // check env & config/index.js to decide weither to enable CSS Sourcemaps for the
@@ -93,6 +94,19 @@ module.exports = {
     new ServiceWorkerWebpackPlugin({
       entry: path.join(__dirname, '..', 'src/sw.js'),
       filename: 'sw-pleroma.js'
+    }),
+    // This copies Ruffle's WASM to a directory so that JS side can access it
+    new CopyPlugin({
+      patterns: [
+        {
+          from: "node_modules/ruffle-mirror/*",
+          to: "static/ruffle",
+          flatten: true
+        },
+      ],
+      options: {
+        concurrency: 100,
+      },
     })
   ]
 }
diff --git a/index.html b/index.html
index 3f44e1a2..ba072eda 100644
--- a/index.html
+++ b/index.html
@@ -5,7 +5,6 @@
     <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
     <!--server-generated-meta-->
     <link rel="icon" type="image/png" href="/favicon.png">
-    <script src="/static/js/ruffle.js"></script>
   </head>
   <body class="hidden">
     <noscript>To use Pleroma, please enable JavaScript.</noscript>
diff --git a/package.json b/package.json
index 8dbf2503..99301266 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,7 @@
     "phoenix": "^1.3.0",
     "portal-vue": "^2.1.4",
     "punycode.js": "^2.1.0",
+    "ruffle-mirror": "^2021.4.10",
     "v-click-outside": "^2.1.1",
     "vue": "^2.6.11",
     "vue-i18n": "^7.3.2",
@@ -57,6 +58,7 @@
     "chalk": "^1.1.3",
     "chromedriver": "^87.0.1",
     "connect-history-api-fallback": "^1.1.0",
+    "copy-webpack-plugin": "^6.4.1",
     "cross-spawn": "^4.0.2",
     "css-loader": "^0.28.0",
     "custom-event-polyfill": "^1.0.7",
@@ -111,7 +113,7 @@
     "url-loader": "^1.1.2",
     "vue-loader": "^14.0.0",
     "vue-style-loader": "^4.0.0",
-    "webpack": "^4.0.0",
+    "webpack": "^4.44.0",
     "webpack-dev-middleware": "^3.6.0",
     "webpack-hot-middleware": "^2.12.2",
     "webpack-merge": "^0.14.1"
diff --git a/src/components/flash/flash.js b/src/components/flash/flash.js
index f768ead8..e707a4c4 100644
--- a/src/components/flash/flash.js
+++ b/src/components/flash/flash.js
@@ -1,14 +1,15 @@
+import RuffleService from '../../services/ruffle_service/ruffle_service.js'
+
 const Flash = {
-  props: [
-    'src'
-  ],
-  created: function () {
+  props: [ 'src' ],
+  created () {
     this.$nextTick(function () {
-      const ruffle = window.RufflePlayer.newest()
-      const player = ruffle.createPlayer()
-      const container = this.$refs.cunt
-      container.appendChild(player)
-      player.load(this.src)
+      RuffleService.getRuffle().then((ruffle) => {
+        const player = ruffle.newest().createPlayer()
+        const container = this.$refs.cunt
+        container.appendChild(player)
+        player.load(this.src)
+      })
     })
   }
 }
diff --git a/static/js/3fcb75a862dab7eab72ad475f7480344.wasm b/static/js/3fcb75a862dab7eab72ad475f7480344.wasm
deleted file mode 100644
index c15292bd..00000000
Binary files a/static/js/3fcb75a862dab7eab72ad475f7480344.wasm and /dev/null differ
diff --git a/static/js/ruffle.js b/static/js/ruffle.js
deleted file mode 100644
index 6823c6c6..00000000
--- a/static/js/ruffle.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(()=>{var e={918:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r=n.p+"3fcb75a862dab7eab72ad475f7480344.wasm"},240:(e,t,n)=>{"use strict";function r(e,t,n){t&&e.getChannelData(0).set(t),n&&e.getChannelData(1).set(n)}n.r(t),n.d(t,{AutoPlay:()=>te,FLASH7_AND_8_MIMETYPE:()=>ce,FLASH_ACTIVEX_CLASSID:()=>ue,FLASH_MIMETYPE:()=>ae,FLASH_MOVIE_MIMETYPE:()=>le,FLASH_PLUGIN:()=>Y,FUTURESPLASH_MIMETYPE:()=>se,Letterbox:()=>ne,LogLevel:()=>ie,PublicAPI:()=>Be,RuffleEmbed:()=>me,RuffleObject:()=>ve,RufflePlayer:()=>ge,SourceAPI:()=>Ue,UnmuteOverlay:()=>re,Version:()=>Ne,VersionRange:()=>We,copyToAudioBuffer:()=>r,installPlugin:()=>X,isScriptAccessAllowed:()=>we,isSwfFilename:()=>he,loadRuffle:()=>H,lookupElement:()=>Z,pluginPolyfill:()=>je,polyfill:()=>Le,publicPath:()=>xe,registerElement:()=>ee,ruffleShadowTemplate:()=>K});const i="undefined"!=typeof AudioContext?AudioContext:webkitAudioContext;let o;const a=new Array(32).fill(void 0);function s(e){return a[e]}a.push(void 0,null,!0,!1);let c=0,l=null;function u(){return null!==l&&l.buffer===o.memory.buffer||(l=new Uint8Array(o.memory.buffer)),l}let _=new TextEncoder("utf-8");const f="function"==typeof _.encodeInto?function(e,t){return _.encodeInto(e,t)}:function(e,t){const n=_.encode(e);return t.set(n),{read:e.length,written:n.length}};function b(e,t,n){if(void 0===n){const n=_.encode(e),r=t(n.length);return u().subarray(r,r+n.length).set(n),c=n.length,r}let r=e.length,i=t(r);const o=u();let a=0;for(;a<r;a++){const t=e.charCodeAt(a);if(t>127)break;o[i+a]=t}if(a!==r){0!==a&&(e=e.slice(a)),i=n(i,r,r=a+3*e.length);const t=u().subarray(i+a,i+r);a+=f(e,t).written}return c=a,i}let d=null;function g(){return null!==d&&d.buffer===o.memory.buffer||(d=new Int32Array(o.memory.buffer)),d}let w=a.length;function h(e){const t=s(e);return function(e){e<36||(a[e]=w,w=e)}(e),t}function m(e){w===a.length&&a.push(a.length+1);const t=w;return w=a[t],a[t]=e,t}let p=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});function y(e,t){return p.decode(u().subarray(e,e+t))}function v(e){return null==e}p.decode();let x=null;function k(e){const t=typeof e;if("number"==t||"boolean"==t||null==e)return`${e}`;if("string"==t)return`"${e}"`;if("symbol"==t){const t=e.description;return null==t?"Symbol":`Symbol(${t})`}if("function"==t){const t=e.name;return"string"==typeof t&&t.length>0?`Function(${t})`:"Function"}if(Array.isArray(e)){const t=e.length;let n="[";t>0&&(n+=k(e[0]));for(let r=1;r<t;r++)n+=", "+k(e[r]);return n+="]",n}const n=/\[object ([^\]]+)\]/.exec(toString.call(e));let r;if(!(n.length>1))return toString.call(e);if(r=n[1],"Object"==r)try{return"Object("+JSON.stringify(e)+")"}catch(e){return"Object"}return e instanceof Error?`${e.name}: ${e.message}\n${e.stack}`:r}function S(e,t,n,r){const i={a:e,b:t,cnt:1,dtor:n},a=(...e)=>{i.cnt++;const t=i.a;i.a=0;try{return r(t,i.b,...e)}finally{0==--i.cnt?o.__wbindgen_export_2.get(i.dtor)(t,i.b):i.a=t}};return a.original=i,a}function E(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef4f765648aac733(e,t,n)}function C(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(e,t,m(n))}function A(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(e,t,m(n))}function I(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(e,t,m(n))}function P(e,t){o._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hbfc3deeea95df544(e,t)}function R(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(e,t,m(n))}function F(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(e,t,m(n))}function O(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(e,t,m(n))}function T(e,t,n){o._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hb9fdbc20f190ab6a(e,t,m(n))}let M=null;function j(e,t){return(null!==M&&M.buffer===o.memory.buffer||(M=new Float32Array(o.memory.buffer)),M).subarray(e/4,e/4+t)}function L(e){return function(){try{return e.apply(this,arguments)}catch(e){o.__wbindgen_exn_store(m(e))}}}let N=32;function W(e){if(1==N)throw new Error("out of js stack");return a[--N]=e,N}let B=null;function U(e,t){return u().subarray(e/1,e/1+t)}class D{static __wrap(e){const t=Object.create(D.prototype);return t.ptr=e,t}free(){const e=this.ptr;this.ptr=0,o.__wbg_ruffle_free(e)}constructor(e,t,n){try{var r=o.ruffle_new(m(e),m(t),W(n));return D.__wrap(r)}finally{a[N++]=void 0}}stream_from(e,t){try{var n=b(e,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;o.ruffle_stream_from(this.ptr,n,r,W(t))}finally{a[N++]=void 0}}load_data(e,t){try{o.ruffle_load_data(this.ptr,m(e),W(t))}finally{a[N++]=void 0}}play(){o.ruffle_play(this.ptr)}pause(){o.ruffle_pause(this.ptr)}is_playing(){return 0!==o.ruffle_is_playing(this.ptr)}destroy(){o.ruffle_destroy(this.ptr)}call_exposed_callback(e,t){var n=b(e,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c,i=function(e,t){const n=t(4*e.length),r=(null!==B&&B.buffer===o.memory.buffer||(B=new Uint32Array(o.memory.buffer)),B);for(let t=0;t<e.length;t++)r[n/4+t]=m(e[t]);return c=e.length,n}(t,o.__wbindgen_malloc),a=c;return h(o.ruffle_call_exposed_callback(this.ptr,n,r,i,a))}set_trace_observer(e){o.ruffle_set_trace_observer(this.ptr,m(e))}audio_context(){return h(o.ruffle_audio_context(this.ptr))}}const $=async function e(t){void 0===t&&(t="file:///home/runner/work/ruffle/ruffle/web/packages/core/pkg/ruffle_web.js".replace(/\.js$/,"_bg.wasm"));const a={wbg:{}};a.wbg.__wbindgen_is_function=function(e){return"function"==typeof s(e)},a.wbg.__wbindgen_json_serialize=function(e,t){const n=s(t);var r=b(JSON.stringify(void 0===n?null:n),o.__wbindgen_malloc,o.__wbindgen_realloc),i=c;g()[e/4+1]=i,g()[e/4+0]=r},a.wbg.__wbindgen_object_drop_ref=function(e){h(e)},a.wbg.__wbindgen_object_clone_ref=function(e){return m(s(e))},a.wbg.__wbindgen_cb_drop=function(e){const t=h(e).original;return 1==t.cnt--&&(t.a=0,!0)},a.wbg.__wbindgen_string_new=function(e,t){return m(y(e,t))},a.wbg.__wbg_isFullscreen_96b85640554e160d=function(e){return s(e).isFullscreen},a.wbg.__wbg_displayUnsupportedMessage_a8f81a8e054e5e91=function(e){s(e).displayUnsupportedMessage()},a.wbg.__wbg_displayMessage_c57c20204892da2b=function(e,t,n){s(e).displayMessage(y(t,n))},a.wbg.__wbg_copyToAudioBuffer_58f244be94bac1d2=function(e,t,n,i,o){r(s(e),0===t?void 0:j(t,n),0===i?void 0:j(i,o))},a.wbg.__wbg_new_df6e6ab7a65c4c4d=function(e,t){return m(new Error(y(e,t)))},a.wbg.__wbg_panic_bbc809dd04a12c60=function(e,t){s(e).panic(s(t))},a.wbg.__wbg_onCallbackAvailable_3a48fae397926c96=function(e,t,n){s(e).onCallbackAvailable(y(t,n))},a.wbg.__wbg_onFSCommand_fb2f94653f71796e=L((function(e,t,n,r,i){return s(e).onFSCommand(y(t,n),y(r,i))})),a.wbg.__wbindgen_number_new=function(e){return m(e)},a.wbg.__wbg_new_59cb74e423758ede=function(){return m(new Error)},a.wbg.__wbg_stack_558ba5917b466edd=function(e,t){var n=b(s(t).stack,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n},a.wbg.__wbg_error_4bb6c2a97407129a=function(e,t){try{console.error(y(e,t))}finally{o.__wbindgen_free(e,t)}},a.wbg.__wbindgen_is_undefined=function(e){return void 0===s(e)},a.wbg.__wbg_instanceof_WebGl2RenderingContext_9818b789249374d3=function(e){return s(e)instanceof WebGL2RenderingContext},a.wbg.__wbg_bindVertexArray_569f8b5466293fb0=function(e,t){s(e).bindVertexArray(s(t))},a.wbg.__wbg_blitFramebuffer_4b472bb45062bd6e=function(e,t,n,r,i,o,a,c,l,u,_){s(e).blitFramebuffer(t,n,r,i,o,a,c,l,u>>>0,_>>>0)},a.wbg.__wbg_createVertexArray_1f35f6d163bbae13=function(e){var t=s(e).createVertexArray();return v(t)?0:m(t)},a.wbg.__wbg_renderbufferStorageMultisample_0426ba65de4885db=function(e,t,n,r,i,o){s(e).renderbufferStorageMultisample(t>>>0,n,r>>>0,i,o)},a.wbg.__wbg_texImage2D_79c0e000ef5e1b0a=L((function(e,t,n,r,i,o,a,c,l,u,_){s(e).texImage2D(t>>>0,n,r,i,o,a,c>>>0,l>>>0,0===u?void 0:U(u,_))})),a.wbg.__wbg_bindFramebuffer_4a37c2a7678c0994=function(e,t,n){s(e).bindFramebuffer(t>>>0,s(n))},a.wbg.__wbg_bindRenderbuffer_203ad50a30ad3c0d=function(e,t,n){s(e).bindRenderbuffer(t>>>0,s(n))},a.wbg.__wbg_bindTexture_f3ab6393f75a763f=function(e,t,n){s(e).bindTexture(t>>>0,s(n))},a.wbg.__wbg_createFramebuffer_d01ac1b4f7c704e5=function(e){var t=s(e).createFramebuffer();return v(t)?0:m(t)},a.wbg.__wbg_createRenderbuffer_c008c3bb50dfff9d=function(e){var t=s(e).createRenderbuffer();return v(t)?0:m(t)},a.wbg.__wbg_createTexture_151a385cd028c893=function(e){var t=s(e).createTexture();return v(t)?0:m(t)},a.wbg.__wbg_deleteFramebuffer_acd92acda81356e9=function(e,t){s(e).deleteFramebuffer(s(t))},a.wbg.__wbg_deleteRenderbuffer_b67ff9026d2be0fd=function(e,t){s(e).deleteRenderbuffer(s(t))},a.wbg.__wbg_deleteTexture_125ab82d8330e268=function(e,t){s(e).deleteTexture(s(t))},a.wbg.__wbg_framebufferRenderbuffer_5293612146bd869a=function(e,t,n,r,i){s(e).framebufferRenderbuffer(t>>>0,n>>>0,r>>>0,s(i))},a.wbg.__wbg_framebufferTexture2D_5b8575bda5aeceeb=function(e,t,n,r,i,o){s(e).framebufferTexture2D(t>>>0,n>>>0,r>>>0,s(i),o)},a.wbg.__wbg_getError_609a7fa815fd3d84=function(e){return s(e).getError()},a.wbg.__wbg_getParameter_be1e4b3ba2c0c339=L((function(e,t){return m(s(e).getParameter(t>>>0))})),a.wbg.__wbg_texParameteri_6e7ba8c54bb639f2=function(e,t,n,r){s(e).texParameteri(t>>>0,n>>>0,r)},a.wbg.__wbg_instanceof_Window_49f532f06a9786ee=function(e){return s(e)instanceof Window},a.wbg.__wbg_document_c0366b39e4f4c89a=function(e){var t=s(e).document;return v(t)?0:m(t)},a.wbg.__wbg_location_c1e50a6e4c53d45c=function(e){return m(s(e).location)},a.wbg.__wbg_navigator_95ba9cd684cf90aa=function(e){return m(s(e).navigator)},a.wbg.__wbg_devicePixelRatio_268c49438a600d53=function(e){return s(e).devicePixelRatio},a.wbg.__wbg_performance_87e4f3b6f966469f=function(e){var t=s(e).performance;return v(t)?0:m(t)},a.wbg.__wbg_localStorage_a6fd83fc300473fc=L((function(e){var t=s(e).localStorage;return v(t)?0:m(t)})),a.wbg.__wbg_cancelAnimationFrame_60f9cf59ec1c0125=L((function(e,t){s(e).cancelAnimationFrame(t)})),a.wbg.__wbg_focus_ab7792954990fdb9=L((function(e){s(e).focus()})),a.wbg.__wbg_open_f355af0fd051a9d8=L((function(e,t,n,r,i){var o=s(e).open(y(t,n),y(r,i));return v(o)?0:m(o)})),a.wbg.__wbg_requestAnimationFrame_ef0e2294dc8b1088=L((function(e,t){return s(e).requestAnimationFrame(s(t))})),a.wbg.__wbg_fetch_f532e04b8fe49aa0=function(e,t){return m(s(e).fetch(s(t)))},a.wbg.__wbg_destination_4b8bc48ce4ebcd6c=function(e){return m(s(e).destination)},a.wbg.__wbg_sampleRate_0d2637cc084b2eaf=function(e){return s(e).sampleRate},a.wbg.__wbg_currentTime_1bc83619afbf9e72=function(e){return s(e).currentTime},a.wbg.__wbg_new_2f70ca6da1976429=L((function(){return m(new i)})),a.wbg.__wbg_suspend_ad6a97ee4bac3247=L((function(e){return m(s(e).suspend())})),a.wbg.__wbg_createBuffer_48e051aa20c4ba3e=L((function(e,t,n,r){return m(s(e).createBuffer(t>>>0,n>>>0,r))})),a.wbg.__wbg_createBufferSource_0e160528349a924b=L((function(e){return m(s(e).createBufferSource())})),a.wbg.__wbg_createChannelMerger_8e8d29d53323df91=L((function(e,t){return m(s(e).createChannelMerger(t>>>0))})),a.wbg.__wbg_createChannelSplitter_10fc5fe404818afc=L((function(e,t){return m(s(e).createChannelSplitter(t>>>0))})),a.wbg.__wbg_createGain_a6211e4c615a1141=L((function(e){return m(s(e).createGain())})),a.wbg.__wbg_createScriptProcessor_e755612398f80dd4=L((function(e,t,n,r){return m(s(e).createScriptProcessor(t>>>0,n>>>0,r>>>0))})),a.wbg.__wbg_decodeAudioData_1a1e91ec5cd60d59=L((function(e,t,n,r){return m(s(e).decodeAudioData(s(t),s(n),s(r)))})),a.wbg.__wbg_resume_6dd89ae2f9b0bef3=L((function(e){return m(s(e).resume())})),a.wbg.__wbg_setvalue_cc85088ad32e56b0=function(e,t){s(e).value=t},a.wbg.__wbg_linearRampToValueAtTime_02ce948b9b4323e0=L((function(e,t,n){return m(s(e).linearRampToValueAtTime(t,n))})),a.wbg.__wbg_setValueAtTime_788b65cf85b7ba6a=L((function(e,t,n){return m(s(e).setValueAtTime(t,n))})),a.wbg.__wbg_gain_688543a4eee1eece=function(e){return m(s(e).gain)},a.wbg.__wbg_userAgent_b9c7a338061adca8=L((function(e,t){var n=b(s(t).userAgent,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n})),a.wbg.__wbg_get_29a9ce40981b8710=L((function(e,t,n,r){var i=s(t)[y(n,r)],a=v(i)?0:b(i,o.__wbindgen_malloc,o.__wbindgen_realloc),l=c;g()[e/4+1]=l,g()[e/4+0]=a})),a.wbg.__wbg_set_13ecdf3c7967382d=L((function(e,t,n,r,i){s(e)[y(t,n)]=y(r,i)})),a.wbg.__wbg_delete_2c0adda5d0edea03=L((function(e,t,n){delete s(e)[y(t,n)]})),a.wbg.__wbg_protocol_791396029743ce88=L((function(e,t){var n=b(s(t).protocol,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n})),a.wbg.__wbg_assign_8948549eb7c584b7=L((function(e,t,n){s(e).assign(y(t,n))})),a.wbg.__wbg_baseURI_1fe61dc0a39a61ed=L((function(e,t){var n=s(t).baseURI,r=v(n)?0:b(n,o.__wbindgen_malloc,o.__wbindgen_realloc),i=c;g()[e/4+1]=i,g()[e/4+0]=r})),a.wbg.__wbg_appendChild_7c45aeccd496f2a5=L((function(e,t){return m(s(e).appendChild(s(t)))})),a.wbg.__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44=function(e){return s(e)instanceof SVGSVGElement},a.wbg.__wbg_createSVGMatrix_9088b605b3cbb935=function(e){return m(s(e).createSVGMatrix())},a.wbg.__wbg_length_da24898717a463e0=function(e){return s(e).length},a.wbg.__wbg_setProperty_46b9bd1b0fad730b=L((function(e,t,n,r,i){s(e).setProperty(y(t,n),y(r,i))})),a.wbg.__wbg_offsetX_4bd8c9fcb457cf0b=function(e){return s(e).offsetX},a.wbg.__wbg_offsetY_0dde12490e8ebfba=function(e){return s(e).offsetY},a.wbg.__wbg_button_9e74bd912190b055=function(e){return s(e).button},a.wbg.__wbg_new_0af3e1641443f13d=L((function(){return m(new Path2D)})),a.wbg.__wbg_addPath_0b9c6299797f0772=function(e,t,n){s(e).addPath(s(t),s(n))},a.wbg.__wbg_closePath_6e9529e4d6da5e83=function(e){s(e).closePath()},a.wbg.__wbg_lineTo_2157bf4d1b0ce0d3=function(e,t,n){s(e).lineTo(t,n)},a.wbg.__wbg_moveTo_fb2215902520c649=function(e,t,n){s(e).moveTo(t,n)},a.wbg.__wbg_quadraticCurveTo_9c392c57a794a2d2=function(e,t,n,r,i){s(e).quadraticCurveTo(t,n,r,i)},a.wbg.__wbg_connect_607a0c51b546a3db=L((function(e,t){return m(s(e).connect(s(t)))})),a.wbg.__wbg_connect_a4236fe1b645b8fb=L((function(e,t,n){return m(s(e).connect(s(t),n>>>0))})),a.wbg.__wbg_connect_db97a7bc9cd258c6=L((function(e,t,n,r){return m(s(e).connect(s(t),n>>>0,r>>>0))})),a.wbg.__wbg_disconnect_1f5d0443b0bca9c8=L((function(e){s(e).disconnect()})),a.wbg.__wbg_outputBuffer_1fc843f5ddfd743b=L((function(e){return m(s(e).outputBuffer)})),a.wbg.__wbg_setTransform_041d67e3d6972fd7=function(e,t){s(e).setTransform(s(t))},a.wbg.__wbg_bindVertexArrayOES_17e98f43d896f40b=function(e,t){s(e).bindVertexArrayOES(s(t))},a.wbg.__wbg_createVertexArrayOES_393e00fa6f931f59=function(e){var t=s(e).createVertexArrayOES();return v(t)?0:m(t)},a.wbg.__wbg_seta_6c309b33d9a4fb29=function(e,t){s(e).a=t},a.wbg.__wbg_setb_378147d7ba767ab1=function(e,t){s(e).b=t},a.wbg.__wbg_setc_cc36b264b7a1ae60=function(e,t){s(e).c=t},a.wbg.__wbg_setd_998c5989f5780653=function(e,t){s(e).d=t},a.wbg.__wbg_sete_42bf2f390f25e536=function(e,t){s(e).e=t},a.wbg.__wbg_setf_df5aef1469b0c50b=function(e,t){s(e).f=t},a.wbg.__wbg_deltaY_2722120e563d3160=function(e){return s(e).deltaY},a.wbg.__wbg_deltaMode_3db3c9c4bedf191d=function(e){return s(e).deltaMode},a.wbg.__wbg_setbuffer_8c396e74724eda12=function(e,t){s(e).buffer=s(t)},a.wbg.__wbg_setloop_1e141edefc26db22=function(e,t){s(e).loop=0!==t},a.wbg.__wbg_setloopStart_4162b0a533fbc0d5=function(e,t){s(e).loopStart=t},a.wbg.__wbg_setloopEnd_e81eb72ea2277d88=function(e,t){s(e).loopEnd=t},a.wbg.__wbg_setonended_f6f3e04e13c07db4=function(e,t){s(e).onended=s(t)},a.wbg.__wbg_start_f5e66921db9afaee=L((function(e){s(e).start()})),a.wbg.__wbg_start_0237410bb20c6213=L((function(e,t,n){s(e).start(t,n)})),a.wbg.__wbg_stop_5765c7cac3ec1564=L((function(e,t){s(e).stop(t)})),a.wbg.__wbg_instanceof_HtmlFormElement_26283084b0956b17=function(e){return s(e)instanceof HTMLFormElement},a.wbg.__wbg_submit_121b8e3bd960f229=L((function(e){s(e).submit()})),a.wbg.__wbg_pointerId_602db5c989b38cc0=function(e){return s(e).pointerId},a.wbg.__wbg_instanceof_Response_f52c65c389890639=function(e){return s(e)instanceof Response},a.wbg.__wbg_ok_c20643e0a45dc5a0=function(e){return s(e).ok},a.wbg.__wbg_statusText_76ce672b84096caf=function(e,t){var n=b(s(t).statusText,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n},a.wbg.__wbg_arrayBuffer_0ba17dfaad804b6f=L((function(e){return m(s(e).arrayBuffer())})),a.wbg.__wbg_key_d9b602f48baca7bc=function(e,t){var n=b(s(t).key,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n},a.wbg.__wbg_code_cbf76ad384ae1179=function(e,t){var n=b(s(t).code,o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n},a.wbg.__wbg_now_7628760b7b640632=function(e){return s(e).now()},a.wbg.__wbg_newwithstrandinit_11debb554792e043=L((function(e,t,n){return m(new Request(y(e,t),s(n)))})),a.wbg.__wbg_setonaudioprocess_66d0b1fa0dd39606=function(e,t){s(e).onaudioprocess=s(t)},a.wbg.__wbg_body_c8cb19d760637268=function(e){var t=s(e).body;return v(t)?0:m(t)},a.wbg.__wbg_createElement_99351c8bf0efac6e=L((function(e,t,n){return m(s(e).createElement(y(t,n)))})),a.wbg.__wbg_createElementNS_a7ef126eff5022c2=L((function(e,t,n,r,i){return m(s(e).createElementNS(0===t?void 0:y(t,n),y(r,i)))})),a.wbg.__wbg_setid_f33ce4e43b43f57a=function(e,t,n){s(e).id=y(t,n)},a.wbg.__wbg_clientWidth_2c84a7ebc75dd4f0=function(e){return s(e).clientWidth},a.wbg.__wbg_clientHeight_f56dfe03d1c42f3e=function(e){return s(e).clientHeight},a.wbg.__wbg_querySelector_155b00165b78a12f=L((function(e,t,n){var r=s(e).querySelector(y(t,n));return v(r)?0:m(r)})),a.wbg.__wbg_releasePointerCapture_4b78cb9c51d4a539=L((function(e,t){s(e).releasePointerCapture(t)})),a.wbg.__wbg_setAttribute_e71b9086539f06a1=L((function(e,t,n,r,i){s(e).setAttribute(y(t,n),y(r,i))})),a.wbg.__wbg_setAttributeNS_a66240d5c750d0fa=L((function(e,t,n,r,i,o,a){s(e).setAttributeNS(0===t?void 0:y(t,n),y(r,i),y(o,a))})),a.wbg.__wbg_setPointerCapture_54ee987062d42d03=L((function(e,t){s(e).setPointerCapture(t)})),a.wbg.__wbg_remove_0639495587b1aaeb=function(e){s(e).remove()},a.wbg.__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85=function(e){return s(e)instanceof WebGLRenderingContext},a.wbg.__wbg_drawingBufferWidth_fab3e20dd1ba5d4e=function(e){return s(e).drawingBufferWidth},a.wbg.__wbg_drawingBufferHeight_31bc93d4dc3a0dcc=function(e){return s(e).drawingBufferHeight},a.wbg.__wbg_bufferData_d47c8467e443121d=function(e,t,n,r,i){s(e).bufferData(t>>>0,U(n,r),i>>>0)},a.wbg.__wbg_texImage2D_a4011abffe0229fb=L((function(e,t,n,r,i,o,a,c,l,u,_){s(e).texImage2D(t>>>0,n,r,i,o,a,c>>>0,l>>>0,0===u?void 0:U(u,_))})),a.wbg.__wbg_uniform1fv_cd9d2dea0641919d=function(e,t,n,r){s(e).uniform1fv(s(t),j(n,r))},a.wbg.__wbg_uniform4fv_24ef46675c137552=function(e,t,n,r){s(e).uniform4fv(s(t),j(n,r))},a.wbg.__wbg_uniformMatrix3fv_a0a261980af4587d=function(e,t,n,r,i){s(e).uniformMatrix3fv(s(t),0!==n,j(r,i))},a.wbg.__wbg_uniformMatrix4fv_088c96db8ee28c1d=function(e,t,n,r,i){s(e).uniformMatrix4fv(s(t),0!==n,j(r,i))},a.wbg.__wbg_activeTexture_a51ec6273de88bc6=function(e,t){s(e).activeTexture(t>>>0)},a.wbg.__wbg_attachShader_0dd248f6ab98fcf2=function(e,t,n){s(e).attachShader(s(t),s(n))},a.wbg.__wbg_bindBuffer_1ceb83e9674e812a=function(e,t,n){s(e).bindBuffer(t>>>0,s(n))},a.wbg.__wbg_bindFramebuffer_d8f98d1a7f6d67d1=function(e,t,n){s(e).bindFramebuffer(t>>>0,s(n))},a.wbg.__wbg_bindRenderbuffer_1ba9206d5f319ae1=function(e,t,n){s(e).bindRenderbuffer(t>>>0,s(n))},a.wbg.__wbg_bindTexture_6121e6db3f879582=function(e,t,n){s(e).bindTexture(t>>>0,s(n))},a.wbg.__wbg_blendFunc_34a6bb31770822c5=function(e,t,n){s(e).blendFunc(t>>>0,n>>>0)},a.wbg.__wbg_clear_f6b2dd48aeed2752=function(e,t){s(e).clear(t>>>0)},a.wbg.__wbg_clearColor_89f7819aa9f80129=function(e,t,n,r,i){s(e).clearColor(t,n,r,i)},a.wbg.__wbg_colorMask_88ebee15531b14ef=function(e,t,n,r,i){s(e).colorMask(0!==t,0!==n,0!==r,0!==i)},a.wbg.__wbg_compileShader_28bdbafe4445d24b=function(e,t){s(e).compileShader(s(t))},a.wbg.__wbg_createBuffer_acedc3831832a280=function(e){var t=s(e).createBuffer();return v(t)?0:m(t)},a.wbg.__wbg_createProgram_7e2f44b7b74694d4=function(e){var t=s(e).createProgram();return v(t)?0:m(t)},a.wbg.__wbg_createShader_64c474f1d1d0c1f8=function(e,t){var n=s(e).createShader(t>>>0);return v(n)?0:m(n)},a.wbg.__wbg_createTexture_0a156dab1efc3499=function(e){var t=s(e).createTexture();return v(t)?0:m(t)},a.wbg.__wbg_disable_5b9c6f74d5efd3a5=function(e,t){s(e).disable(t>>>0)},a.wbg.__wbg_disableVertexAttribArray_ba8f39ecd28c601b=function(e,t){s(e).disableVertexAttribArray(t>>>0)},a.wbg.__wbg_drawElements_3eb5ba8a511ce0f0=function(e,t,n,r,i){s(e).drawElements(t>>>0,n,r>>>0,i)},a.wbg.__wbg_enable_87f39f6396535e1f=function(e,t){s(e).enable(t>>>0)},a.wbg.__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5=function(e,t){s(e).enableVertexAttribArray(t>>>0)},a.wbg.__wbg_getAttribLocation_ba61f837da80e249=function(e,t,n,r){return s(e).getAttribLocation(s(t),y(n,r))},a.wbg.__wbg_getExtension_c6863c255090d82f=L((function(e,t,n){var r=s(e).getExtension(y(t,n));return v(r)?0:m(r)})),a.wbg.__wbg_getParameter_ff687a6ea303e551=L((function(e,t){return m(s(e).getParameter(t>>>0))})),a.wbg.__wbg_getProgramInfoLog_aacf06c959070653=function(e,t,n){var r=s(t).getProgramInfoLog(s(n)),i=v(r)?0:b(r,o.__wbindgen_malloc,o.__wbindgen_realloc),a=c;g()[e/4+1]=a,g()[e/4+0]=i},a.wbg.__wbg_getProgramParameter_a89bf14502c109f7=function(e,t,n){return m(s(e).getProgramParameter(s(t),n>>>0))},a.wbg.__wbg_getShaderInfoLog_1eb885f2468e2429=function(e,t,n){var r=s(t).getShaderInfoLog(s(n)),i=v(r)?0:b(r,o.__wbindgen_malloc,o.__wbindgen_realloc),a=c;g()[e/4+1]=a,g()[e/4+0]=i},a.wbg.__wbg_getUniformLocation_ca853de4f2f9270d=function(e,t,n,r){var i=s(e).getUniformLocation(s(t),y(n,r));return v(i)?0:m(i)},a.wbg.__wbg_linkProgram_46a36cb158f10676=function(e,t){s(e).linkProgram(s(t))},a.wbg.__wbg_pixelStorei_31f6dc244bf4cd5b=function(e,t,n){s(e).pixelStorei(t>>>0,n)},a.wbg.__wbg_shaderSource_700ae72fca39850d=function(e,t,n,r){s(e).shaderSource(s(t),y(n,r))},a.wbg.__wbg_stencilFunc_cc85d77d2098446b=function(e,t,n,r){s(e).stencilFunc(t>>>0,n,r>>>0)},a.wbg.__wbg_stencilMask_ed2cded2c2b0b72c=function(e,t){s(e).stencilMask(t>>>0)},a.wbg.__wbg_stencilOp_1b3529546c1fdcc2=function(e,t,n,r){s(e).stencilOp(t>>>0,n>>>0,r>>>0)},a.wbg.__wbg_texParameteri_e45f3977eb998137=function(e,t,n,r){s(e).texParameteri(t>>>0,n>>>0,r)},a.wbg.__wbg_uniform1f_3eb09312a513b94a=function(e,t,n){s(e).uniform1f(s(t),n)},a.wbg.__wbg_uniform1i_e76b668973ae0655=function(e,t,n){s(e).uniform1i(s(t),n)},a.wbg.__wbg_useProgram_d63a57db0571e803=function(e,t){s(e).useProgram(s(t))},a.wbg.__wbg_vertexAttribPointer_b4b829a4f5a3778e=function(e,t,n,r,i,o,a){s(e).vertexAttribPointer(t>>>0,n,r>>>0,0!==i,o,a)},a.wbg.__wbg_viewport_54305c74f5668b33=function(e,t,n,r,i){s(e).viewport(t,n,r,i)},a.wbg.__wbg_debug_146b863607d79e9d=function(e){console.debug(s(e))},a.wbg.__wbg_error_e325755affc8634b=function(e){console.error(s(e))},a.wbg.__wbg_info_d60054f760c729cc=function(e){console.info(s(e))},a.wbg.__wbg_log_f2e13ca55da8bad3=function(e){console.log(s(e))},a.wbg.__wbg_warn_9e92ccdc67085e1b=function(e){console.warn(s(e))},a.wbg.__wbg_style_9b773f0fc441eddc=function(e){return m(s(e).style)},a.wbg.__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a=L((function(e,t){return m(new Blob(s(e),s(t)))})),a.wbg.__wbg_currentTarget_b545d0d803b3a62e=function(e){var t=s(e).currentTarget;return v(t)?0:m(t)},a.wbg.__wbg_preventDefault_9aab6c264e5df3ee=function(e){s(e).preventDefault()},a.wbg.__wbg_addEventListener_6a37bc32387cb66d=L((function(e,t,n,r){s(e).addEventListener(y(t,n),s(r))})),a.wbg.__wbg_addEventListener_a422088e686210b5=L((function(e,t,n,r,i){s(e).addEventListener(y(t,n),s(r),s(i))})),a.wbg.__wbg_addEventListener_50b4229556ab0b83=L((function(e,t,n,r,i){s(e).addEventListener(y(t,n),s(r),0!==i)})),a.wbg.__wbg_removeEventListener_70dfb387da1982ac=L((function(e,t,n,r){s(e).removeEventListener(y(t,n),s(r))})),a.wbg.__wbg_removeEventListener_4448b273b47328f8=L((function(e,t,n,r,i){s(e).removeEventListener(y(t,n),s(r),0!==i)})),a.wbg.__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3=function(e){return s(e)instanceof HTMLCanvasElement},a.wbg.__wbg_width_0efa4604d41c58c5=function(e){return s(e).width},a.wbg.__wbg_setwidth_1d0e975feecff3ef=function(e,t){s(e).width=t>>>0},a.wbg.__wbg_height_aa24e3fef658c4a8=function(e){return s(e).height},a.wbg.__wbg_setheight_7758ee3ff5c65474=function(e,t){s(e).height=t>>>0},a.wbg.__wbg_getContext_3db9399e6dc524ff=L((function(e,t,n){var r=s(e).getContext(y(t,n));return v(r)?0:m(r)})),a.wbg.__wbg_getContext_93be69215ea9dbbf=L((function(e,t,n,r){var i=s(e).getContext(y(t,n),s(r));return v(i)?0:m(i)})),a.wbg.__wbg_setsrc_ca894d724570195d=function(e,t,n){s(e).src=y(t,n)},a.wbg.__wbg_new_1f2ded01c889cd38=L((function(){return m(new Image)})),a.wbg.__wbg_newwithwidthandheight_0f3a13502ca94c49=L((function(e,t){return m(new Image(e>>>0,t>>>0))})),a.wbg.__wbg_data_55e064fddf34cf3b=function(e,t){var n=function(e,t){const n=t(1*e.length);return u().set(e,n/1),c=e.length,n}(s(t).data,o.__wbindgen_malloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n},a.wbg.__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34=function(e){return s(e)instanceof CanvasRenderingContext2D},a.wbg.__wbg_setglobalAlpha_b4134dbd884b4d37=function(e,t){s(e).globalAlpha=t},a.wbg.__wbg_setglobalCompositeOperation_557a59a0ccf673d6=L((function(e,t,n){s(e).globalCompositeOperation=y(t,n)})),a.wbg.__wbg_setstrokeStyle_7f507e0d838e3dcf=function(e,t){s(e).strokeStyle=s(t)},a.wbg.__wbg_setfillStyle_bbe97cb93eb1b55c=function(e,t){s(e).fillStyle=s(t)},a.wbg.__wbg_setfilter_df75805bea0a8415=function(e,t,n){s(e).filter=y(t,n)},a.wbg.__wbg_setlineWidth_61de9d1eb4e9f8a6=function(e,t){s(e).lineWidth=t},a.wbg.__wbg_setlineCap_bff1a8858c9f067e=function(e,t,n){s(e).lineCap=y(t,n)},a.wbg.__wbg_setlineJoin_de47815c918d7874=function(e,t,n){s(e).lineJoin=y(t,n)},a.wbg.__wbg_setmiterLimit_84b1a1dbddcd456a=function(e,t){s(e).miterLimit=t},a.wbg.__wbg_drawImage_b8dec9034bf1d116=L((function(e,t,n,r){s(e).drawImage(s(t),n,r)})),a.wbg.__wbg_drawImage_801ad094f4734689=L((function(e,t,n,r){s(e).drawImage(s(t),n,r)})),a.wbg.__wbg_fill_6c721ab8eec90f70=function(e,t){s(e).fill(s(t))},a.wbg.__wbg_stroke_e25cf47e0d9a36c3=function(e,t){s(e).stroke(s(t))},a.wbg.__wbg_createPattern_006b6402db95df36=L((function(e,t,n,r){var i=s(e).createPattern(s(t),y(n,r));return v(i)?0:m(i)})),a.wbg.__wbg_getImageData_dd3caac873bf461f=L((function(e,t,n,r,i){return m(s(e).getImageData(t,n,r,i))})),a.wbg.__wbg_clearRect_6af85454d06df5fa=function(e,t,n,r,i){s(e).clearRect(t,n,r,i)},a.wbg.__wbg_fillRect_c79d1b386c04efed=function(e,t,n,r,i){s(e).fillRect(t,n,r,i)},a.wbg.__wbg_resetTransform_f78edb82fd1f7239=L((function(e){s(e).resetTransform()})),a.wbg.__wbg_setTransform_5f5f19301b76a8d6=L((function(e,t,n,r,i,o,a){s(e).setTransform(t,n,r,i,o,a)})),a.wbg.__wbg_get_5fa3f454aa041e6e=function(e,t){return m(s(e)[t>>>0])},a.wbg.__wbg_next_373211328013f949=L((function(e){return m(s(e).next())})),a.wbg.__wbg_done_49c598117f977077=function(e){return s(e).done},a.wbg.__wbg_value_c9ae6368b110a068=function(e){return m(s(e).value)},a.wbg.__wbg_get_85e0a3b459845fe2=L((function(e,t){return m(Reflect.get(s(e),s(t)))})),a.wbg.__wbg_call_951bd0c6d815d6f1=L((function(e,t){return m(s(e).call(s(t)))})),a.wbg.__wbg_new_9dff83a08f5994f3=function(){return m(new Array)},a.wbg.__wbg_isArray_cf56c8363b1b35d9=function(e){return Array.isArray(s(e))},a.wbg.__wbg_of_3a4bb382824dd437=function(e,t){return m(Array.of(s(e),s(t)))},a.wbg.__wbg_push_3ddd8187ff2ff82d=function(e,t){return s(e).push(s(t))},a.wbg.__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57=function(e){return s(e)instanceof ArrayBuffer},a.wbg.__wbg_new_24c0ca5f23ee2dd9=function(e){return m(new ArrayBuffer(e>>>0))},a.wbg.__wbg_slice_a498e5bb17f253f3=function(e,t,n){return m(s(e).slice(t>>>0,n>>>0))},a.wbg.__wbg_values_f28e313e2260a03a=function(e){return m(s(e).values())},a.wbg.__wbg_newnoargs_7c6bd521992b4022=function(e,t){return m(new Function(y(e,t)))},a.wbg.__wbg_apply_4e68243803368d89=L((function(e,t,n){return m(s(e).apply(s(t),s(n)))})),a.wbg.__wbg_call_bf745b1758bb6693=L((function(e,t,n){return m(s(e).call(s(t),s(n)))})),a.wbg.__wbg_getTime_cf686ab22ab03a3e=function(e){return s(e).getTime()},a.wbg.__wbg_getTimezoneOffset_b9f3c4664b1a35ae=function(e){return s(e).getTimezoneOffset()},a.wbg.__wbg_new0_abd359df4aeb5b55=function(){return m(new Date)},a.wbg.__wbg_instanceof_Object_cdaa71ad2ca2f4c5=function(e){return s(e)instanceof Object},a.wbg.__wbg_entries_7144a7309b22df64=function(e){return m(Object.entries(s(e)))},a.wbg.__wbg_fromEntries_cc1186a09f1ec7f2=L((function(e){return m(Object.fromEntries(s(e)))})),a.wbg.__wbg_is_049b1aece40b5301=function(e,t){return Object.is(s(e),s(t))},a.wbg.__wbg_new_ba07d0daa0e4677e=function(){return m(new Object)},a.wbg.__wbg_resolve_6e61e640925a0db9=function(e){return m(Promise.resolve(s(e)))},a.wbg.__wbg_then_dd3785597974798a=function(e,t){return m(s(e).then(s(t)))},a.wbg.__wbg_then_0f957e0f4c3e537a=function(e,t,n){return m(s(e).then(s(t),s(n)))},a.wbg.__wbg_self_6baf3a3aa7b63415=L((function(){return m(self.self)})),a.wbg.__wbg_window_63fc4027b66c265b=L((function(){return m(window.window)})),a.wbg.__wbg_globalThis_513fb247e8e4e6d2=L((function(){return m(globalThis.globalThis)})),a.wbg.__wbg_global_b87245cd886d7113=L((function(){return m(n.g.global)})),a.wbg.__wbg_buffer_3f12a1c608c6d04e=function(e){return m(s(e).buffer)},a.wbg.__wbg_newwithbyteoffsetandlength_4c51342f87299c5a=function(e,t,n){return m(new Uint8Array(s(e),t>>>0,n>>>0))},a.wbg.__wbg_length_c645e7c02233b440=function(e){return s(e).length},a.wbg.__wbg_new_c6c0228e6d22a2f9=function(e){return m(new Uint8Array(s(e)))},a.wbg.__wbg_set_b91afac9fd216d99=function(e,t,n){s(e).set(s(t),n>>>0)},a.wbg.__wbg_fill_f49407f577541856=function(e,t,n,r){return m(s(e).fill(t,n>>>0,r>>>0))},a.wbg.__wbg_buffer_c385539cb4060297=function(e){return m(s(e).buffer)},a.wbg.__wbg_byteLength_11e6bdc2fac53a3c=function(e){return s(e).byteLength},a.wbg.__wbg_byteOffset_5db4e07752c85395=function(e){return s(e).byteOffset},a.wbg.__wbg_ownKeys_d44c25f33e28bfab=L((function(e){return m(Reflect.ownKeys(s(e)))})),a.wbg.__wbg_set_9bdd413385146137=L((function(e,t,n){return Reflect.set(s(e),s(t),s(n))})),a.wbg.__wbindgen_number_get=function(e,t){const n=s(t);var r="number"==typeof n?n:void 0;(null!==x&&x.buffer===o.memory.buffer||(x=new Float64Array(o.memory.buffer)),x)[e/8+1]=v(r)?0:r,g()[e/4+0]=!v(r)},a.wbg.__wbindgen_string_get=function(e,t){const n=s(t);var r="string"==typeof n?n:void 0,i=v(r)?0:b(r,o.__wbindgen_malloc,o.__wbindgen_realloc),a=c;g()[e/4+1]=a,g()[e/4+0]=i},a.wbg.__wbindgen_boolean_get=function(e){const t=s(e);return"boolean"==typeof t?t?1:0:2},a.wbg.__wbindgen_debug_string=function(e,t){var n=b(k(s(t)),o.__wbindgen_malloc,o.__wbindgen_realloc),r=c;g()[e/4+1]=r,g()[e/4+0]=n},a.wbg.__wbindgen_throw=function(e,t){throw new Error(y(e,t))},a.wbg.__wbindgen_rethrow=function(e){throw h(e)},a.wbg.__wbindgen_memory=function(){return m(o.memory)},a.wbg.__wbindgen_closure_wrapper1219=function(e,t,n){return m(S(e,t,509,E))},a.wbg.__wbindgen_closure_wrapper1221=function(e,t,n){return m(S(e,t,509,C))},a.wbg.__wbindgen_closure_wrapper1223=function(e,t,n){return m(S(e,t,509,A))},a.wbg.__wbindgen_closure_wrapper1225=function(e,t,n){return m(S(e,t,509,I))},a.wbg.__wbindgen_closure_wrapper1227=function(e,t,n){return m(S(e,t,509,P))},a.wbg.__wbindgen_closure_wrapper1229=function(e,t,n){return m(S(e,t,509,R))},a.wbg.__wbindgen_closure_wrapper1231=function(e,t,n){return m(S(e,t,509,F))},a.wbg.__wbindgen_closure_wrapper1233=function(e,t,n){return m(S(e,t,509,O))},a.wbg.__wbindgen_closure_wrapper1738=function(e,t,n){return m(S(e,t,829,T))},("string"==typeof t||"function"==typeof Request&&t instanceof Request||"function"==typeof URL&&t instanceof URL)&&(t=fetch(t));const{instance:l,module:_}=await async function(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t)}const n=await e.arrayBuffer();return await WebAssembly.instantiate(n,t)}{const n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}}(await t,a);return o=l.exports,e.__wbindgen_wasm_module=_,o};function V(e){const t="function"==typeof Function.prototype.toString?Function.prototype.toString():null;return"string"==typeof t&&t.indexOf("[native code]")>=0&&Function.prototype.toString.call(e).indexOf("[native code]")>=0}let q=null;function H(){return null==q&&(q=function(){return e=this,t=void 0,i=function*(){"function"==typeof Array.prototype.reduce&&V(Array.prototype.reduce)||Object.defineProperty(Array.prototype,"reduce",{value:function(...e){if(0===e.length&&window.Prototype&&window.Prototype.Version&&window.Prototype.Version<"1.6.1")return this.length>1?this:this[0];const t=e[0];if(null===this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof t)throw new TypeError(`${t} is not a function`);const n=Object(this),r=n.length>>>0;let i,o=0;if(e.length>=2)i=e[1];else{for(;o<r&&!(o in n);)o++;if(o>=r)throw new TypeError("Reduce of empty array with no initial value");i=n[o++]}for(;o<r;)o in n&&(i=t(i,n[o],o,n)),o++;return i}}),"function"==typeof Window&&V(Window)||"function"==typeof window.constructor&&V(window.constructor)&&(window.Window=window.constructor),null==window.Reflect&&(window.Reflect={}),"function"!=typeof Reflect.get&&Object.defineProperty(Reflect,"get",{value:function(e,t){return e[t]}}),"function"!=typeof Reflect.set&&Object.defineProperty(Reflect,"set",{value:function(e,t,n){e[t]=n}});const e=yield Promise.resolve().then(n.bind(n,918));return yield $(e.default),D},new((r=void 0)||(r=Promise))((function(n,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}));var e,t,r,i}()),q}class z{constructor(e){if(this.__mimetypes=[],this.__named_mimetypes={},e)for(let t=0;t<e.length;t++)this.install(e[t])}install(e){const t=this.__mimetypes.length;this.__mimetypes.push(e),this.__named_mimetypes[e.type]=e,this[e.type]=e,this[t]=e}item(e){return this.__mimetypes[e]}namedItem(e){return this.__named_mimetypes[e]}get length(){return this.__mimetypes.length}[Symbol.iterator](){return this.__mimetypes[Symbol.iterator]()}}class J extends z{constructor(e,t,n,r){super(r),this.name=e,this.description=t,this.filename=n}install(e){super.install(e)}[Symbol.iterator](){return super[Symbol.iterator]()}}class G{constructor(e){this.__plugins=[],this.__named_plugins={};for(let t=0;t<e.length;t++)this.install(e[t])}install(e){const t=this.__plugins.length;this.__plugins.push(e),this.__named_plugins[e.name]=e,this[e.name]=e,this[t]=e}item(e){return this.__plugins[e]}namedItem(e){return this.__named_plugins[e]}get length(){return this.__plugins.length}}const Y=new J("Shockwave Flash","Shockwave Flash 32.0 r0","ruffle.js",null);function X(e){"install"in navigator.plugins&&navigator.plugins.install||Object.defineProperty(navigator,"plugins",{value:new G(navigator.plugins),writable:!1}),navigator.plugins.install(e),!(e.length>0)||"install"in navigator.mimeTypes&&navigator.mimeTypes.install||Object.defineProperty(navigator,"mimeTypes",{value:new z(navigator.mimeTypes),writable:!1});const t=navigator.mimeTypes;for(let n=0;n<e.length;n+=1)t.install(e[n])}Y.install({type:"application/futuresplash",description:"Shockwave Flash",suffixes:"spl",enabledPlugin:Y}),Y.install({type:"application/x-shockwave-flash",description:"Shockwave Flash",suffixes:"swf",enabledPlugin:Y}),Y.install({type:"application/x-shockwave-flash2-preview",description:"Shockwave Flash",suffixes:"swf",enabledPlugin:Y}),Y.install({type:"application/vnd.adobe.flash-movie",description:"Shockwave Flash",suffixes:"swf",enabledPlugin:Y});const K=document.createElement("template");K.innerHTML='\n    <style>\n        :host {\n            --ruffle-blue: #37528c;\n            --ruffle-orange: #ffad33;\n\n            display: inline-block;\n            position: relative;\n            /* Default width/height; this will get overridden by user styles/attributes. */\n            width: 550px;\n            height: 400px;\n            font-family: Arial, sans-serif;\n            letter-spacing: 0.4px;\n            touch-action: none;\n            user-select: none;\n            -webkit-user-select: none;\n            -webkit-tap-highlight-color: transparent;\n        }\n        \n        /* Ruffle\'s width/height CSS interferes Safari fullscreen CSS. */\n        /* Ensure that Safari\'s fullscreen mode actually fills the screen. */\n        :host(:-webkit-full-screen) {\n            display: block;\n            width: 100% !important;\n            height: 100% !important;\n        }\n\n        /* All of these use the dimensions specified by the embed. */\n        #container,\n        #play_button,\n        #unmute_overlay,\n        #unmute_overlay .background,\n        #panic,\n        #message_overlay {\n            position: absolute;\n            top: 0;\n            bottom: 0;\n            left: 0;\n            right: 0;\n        }\n\n        #container {\n            overflow: hidden;\n        }\n\n        #container canvas {\n            width: 100%;\n            height: 100%;\n        }\n\n        #play_button,\n        #unmute_overlay {\n            cursor: pointer;\n            display: none;\n        }\n\n        #unmute_overlay .background {\n            background: black;\n            opacity: 0.7;\n        }\n\n        #play_button .icon,\n        #unmute_overlay .icon {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: 50%;\n            height: 50%;\n            max-width: 384px;\n            max-height: 384px;\n            transform: translate(-50%, -50%);\n            opacity: 0.8;\n        }\n\n        #play_button:hover .icon,\n        #unmute_overlay:hover .icon {\n            opacity: 1;\n        }\n\n        #panic {\n            font-size: 20px;\n            text-align: center;\n            /* Inverted colors from play button! */\n            background: linear-gradient(180deg, #fd3a40 0%, #fda138 100%);\n            color: white;\n            display: flex;\n            flex-flow: column;\n            justify-content: space-around;\n        }\n\n        #panic a {\n            color: var(--ruffle-blue);\n            font-weight: bold;\n        }\n\n        #panic-title {\n            font-size: xxx-large;\n            font-weight: bold;\n        }\n\n        #panic-body.details {\n            flex: 0.9;\n            margin: 0 10px;\n        }\n\n        #panic-body textarea {\n            width: 100%;\n            height: 100%;\n            resize: none;\n        }\n\n        #panic ul {\n            padding: 0;\n            display: flex;\n            list-style-type: none;\n            justify-content: space-evenly;\n        }\n\n        #message_overlay {\n            position: absolute;\n            background: var(--ruffle-blue);\n            color: var(--ruffle-orange);\n            opacity: 1;\n            z-index: 2;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            overflow: auto;\n        }\n\n        #message_overlay .message {\n            text-align: center;\n            max-height: 100%;\n            max-width: 100%;\n            padding: 5%;\n        }\n\n        #message_overlay p {\n            margin: 0.5em 0;\n        }\n\n        #message_overlay .message div {\n            display: flex;\n            justify-content: center;\n            flex-wrap: wrap;\n            column-gap: 1em;\n        }\n\n        #message_overlay a, #message_overlay button {\n            cursor: pointer;\n            background: var(--ruffle-blue);\n            color: var(--ruffle-orange);\n            border: 2px solid var(--ruffle-orange);\n            font-weight: bold;\n            font-size: 1.25em;\n            border-radius: 0.6em;\n            padding: 10px;\n            text-decoration: none;\n            margin: 2% 0;\n        }\n\n        #message_overlay a:hover, #message_overlay button:hover {\n            background: #ffffff4c;\n        }\n\n        #continue-btn {\n             cursor: pointer;\n             background: var(--ruffle-blue);\n             color: var(--ruffle-orange);\n             border: 2px solid var(--ruffle-orange);\n             font-weight: bold;\n             font-size: 20px;\n             border-radius: 20px;\n             padding: 10px;\n        }\n\n        #continue-btn:hover {\n            background: #ffffff4c;\n        }\n\n        #context-menu {\n            display: none;\n            color: black;\n            background: #fafafa;\n            border: 1px solid gray;\n            box-shadow: 0px 5px 10px -5px black;\n            position: absolute;\n            font-size: 14px;\n            text-align: left;\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        #context-menu .menu_item {\n            padding: 5px 10px;\n        }\n\n        #context-menu .active {\n            cursor: pointer;\n            color: black;\n        }\n\n        #context-menu .disabled {\n            cursor: default;\n            color: gray;\n        }\n\n        #context-menu .active:hover {\n            background: lightgray;\n        }\n\n        #context-menu .menu_separator hr {\n            border: none;\n            border-bottom: 1px solid lightgray;\n            margin: 2px;\n        }\n    </style>\n    <style id="dynamic_styles"></style>\n\n    <div id="container">\n        <div id="play_button"><div class="icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" viewBox="0 0 250 250" style="width:100%;height:100%;"><defs><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="125" y1="0" x2="125" y2="250" spreadMethod="pad"><stop offset="0%" stop-color="#FDA138"/><stop offset="100%" stop-color="#FD3A40"/></linearGradient><g id="b"><path fill="url(#a)" d="M250 125q0-52-37-88-36-37-88-37T37 37Q0 73 0 125t37 88q36 37 88 37t88-37q37-36 37-88M87 195V55l100 70-100 70z"/><path fill="#FFF" d="M87 55v140l100-70L87 55z"/></g></defs><use xlink:href="#b"/></svg></div></div>\n        <div id="unmute_overlay"><div class="background"></div><div class="icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" viewBox="0 0 512 584" style="width:100%;height:100%;scale:0.8;"><path fill="#FFF" stroke="#FFF" d="m457.941 256 47.029-47.029c9.372-9.373 9.372-24.568 0-33.941-9.373-9.373-24.568-9.373-33.941 0l-47.029 47.029-47.029-47.029c-9.373-9.373-24.568-9.373-33.941 0-9.372 9.373-9.372 24.568 0 33.941l47.029 47.029-47.029 47.029c-9.372 9.373-9.372 24.568 0 33.941 4.686 4.687 10.827 7.03 16.97 7.03s12.284-2.343 16.971-7.029l47.029-47.03 47.029 47.029c4.687 4.687 10.828 7.03 16.971 7.03s12.284-2.343 16.971-7.029c9.372-9.373 9.372-24.568 0-33.941z"/><path fill="#FFF" stroke="#FFF" d="m99 160h-55c-24.301 0-44 19.699-44 44v104c0 24.301 19.699 44 44 44h55c2.761 0 5-2.239 5-5v-182c0-2.761-2.239-5-5-5z"/><path fill="#FFF" stroke="#FFF" d="m280 56h-24c-5.269 0-10.392 1.734-14.578 4.935l-103.459 79.116c-1.237.946-1.963 2.414-1.963 3.972v223.955c0 1.557.726 3.026 1.963 3.972l103.459 79.115c4.186 3.201 9.309 4.936 14.579 4.936h23.999c13.255 0 24-10.745 24-24v-352.001c0-13.255-10.745-24-24-24z"/><text x="256" y="560" text-anchor="middle" style="font-size:60px;fill:#FFF;stroke:#FFF;">Click to unmute</text></svg></div></div>\n    </div>\n\n    <ul id="context-menu"></ul>\n';const Q={};function Z(e){const t=Q[e];return void 0!==t?{internalName:e,name:t.name,class:t.class}:null}function ee(e,t){if(void 0!==Q[e]){if(Q[e].class!==t)throw new Error("Internal naming conflict on "+e);return Q[e].name}let n=0;for(;;)try{let r=e;return n>0&&(r=r+"-"+n),window.customElements.define(r,t),Q[e]={class:t,name:r,internalName:e},r}catch(e){"NotSupportedError"===e.name&&(n+=1)}}var te,ne,re,ie;!function(e){e.On="on",e.Off="off",e.Auto="auto"}(te||(te={})),function(e){e.Off="off",e.Fullscreen="fullscreen",e.On="on"}(ne||(ne={})),function(e){e.Visible="visible",e.Hidden="hidden"}(re||(re={})),function(e){e.Error="error",e.Warn="warn",e.Info="info",e.Debug="debug",e.Trace="trace"}(ie||(ie={}));var oe=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))};const ae="application/x-shockwave-flash",se="application/futuresplash",ce="application/x-shockwave-flash2-preview",le="application/vnd.adobe.flash-movie",ue="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",_e="https://ruffle.rs",fe=/^\s*(\d+(\.\d+)?(%)?)/;var be;function de(e){if(null==e)return{};e instanceof URLSearchParams||(e=new URLSearchParams(e));const t={};for(const[n,r]of e)t[n]=r.toString();return t}!function(e){e[e.Unknown=0]="Unknown",e[e.FileProtocol=1]="FileProtocol",e[e.JavascriptConfiguration=2]="JavascriptConfiguration",e[e.JavascriptConflict=3]="JavascriptConflict",e[e.WasmCors=4]="WasmCors",e[e.WasmMimeType=5]="WasmMimeType",e[e.WasmNotFound=6]="WasmNotFound"}(be||(be={}));class ge extends HTMLElement{constructor(){return super(),this.hasContextMenu=!1,this.panicked=!1,this.config={},this.shadow=this.attachShadow({mode:"open"}),this.shadow.appendChild(K.content.cloneNode(!0)),this.dynamicStyles=this.shadow.getElementById("dynamic_styles"),this.container=this.shadow.getElementById("container"),this.playButton=this.shadow.getElementById("play_button"),this.playButton&&this.playButton.addEventListener("click",this.playButtonClicked.bind(this)),this.unmuteOverlay=this.shadow.getElementById("unmute_overlay"),this.unmuteOverlay.addEventListener("click",this.unmuteOverlayClicked.bind(this)),this.contextMenuElement=this.shadow.getElementById("context-menu"),this.addEventListener("contextmenu",this.showContextMenu.bind(this)),window.addEventListener("click",this.hideContextMenu.bind(this)),this.instance=null,this.options=null,this.onFSCommand=null,this._trace_observer=null,this.ruffleConstructor=H(),this.lastActivePlayingState=!1,this.setupPauseOnTabHidden(),this}setupPauseOnTabHidden(){document.addEventListener("visibilitychange",(()=>{this.instance&&(document.hidden&&(this.lastActivePlayingState=this.instance.is_playing(),this.instance.pause()),document.hidden||!0!==this.lastActivePlayingState||this.instance.play())}),!1)}connectedCallback(){this.updateStyles()}static get observedAttributes(){return["width","height"]}attributeChangedCallback(e,t,n){"width"!==e&&"height"!==e||this.updateStyles()}disconnectedCallback(){this.instance&&(this.instance.destroy(),this.instance=null,console.log("Ruffle instance destroyed."))}updateStyles(){if(this.dynamicStyles.sheet){if(this.dynamicStyles.sheet.rules)for(let e=0;e<this.dynamicStyles.sheet.rules.length;e++)this.dynamicStyles.sheet.deleteRule(e);const e=this.attributes.getNamedItem("width");if(null!=e){const t=ge.htmlDimensionToCssDimension(e.value);null!==t&&this.dynamicStyles.sheet.insertRule(`:host { width: ${t}; }`)}const t=this.attributes.getNamedItem("height");if(null!=t){const e=ge.htmlDimensionToCssDimension(t.value);null!==e&&this.dynamicStyles.sheet.insertRule(`:host { height: ${e}; }`)}}}isUnusedFallbackObject(){let e=this.parentNode;const t=Z("ruffle-object");if(null!==t)for(;e!=document&&null!=e;){if(e.nodeName===t.name)return!0;e=e.parentNode}return!1}ensureFreshInstance(e){var t;return oe(this,void 0,void 0,(function*(){this.instance&&(this.instance.destroy(),this.instance=null,console.log("Ruffle instance destroyed."));const n=yield this.ruffleConstructor.catch((e=>{if(console.error(`Serious error loading Ruffle: ${e}`),"file:"===window.location.protocol)e.ruffleIndexError=be.FileProtocol;else{e.ruffleIndexError=be.WasmNotFound;const t=String(e.message).toLowerCase();t.includes("mime")?e.ruffleIndexError=be.WasmMimeType:t.includes("networkerror")||t.includes("failed to fetch")?e.ruffleIndexError=be.WasmCors:t.includes("magic")||"CompileError"!==e.name&&"TypeError"!==e.name||(e.ruffleIndexError=be.JavascriptConflict)}throw this.panic(e),e}));this.instance=new n(this.container,this,e),console.log("New Ruffle instance created."),"running"!==this.audioState()&&(this.container.style.visibility="hidden",yield new Promise((e=>{window.setTimeout((()=>{e()}),200)})),this.container.style.visibility="");const r=Object.values(Object(te)).includes(e.autoplay)?e.autoplay:te.Auto,i=Object.values(Object(re)).includes(e.unmuteOverlay)?e.unmuteOverlay:re.Visible;if(r==te.On||r==te.Auto&&"running"===this.audioState()){if(this.play(),"running"!==this.audioState()){this.unmuteOverlay.style.display="block",this.unmuteOverlay.childNodes.forEach((e=>{"style"in e&&(e.style.visibility=i==re.Visible?"":"hidden")}));const e=null===(t=this.instance)||void 0===t?void 0:t.audio_context();e&&(e.onstatechange=()=>{"running"===e.state&&this.unmuteOverlayClicked(),e.onstatechange=null})}}else this.playButton.style.display="block"}))}load(e){var t,n;return oe(this,void 0,void 0,(function*(){let r="";switch(typeof e){case"string":e={url:e};break;case"object":null===e?r="Argument 0 must be a string or object":"url"in e||"data"in e?"url"in e&&"string"!=typeof e.url&&(r="`url` must be a string"):r="Argument 0 must contain a `url` or `data` key";break;default:r="Argument 0 must be a string or object"}if(r.length>0){const e=new TypeError(r);throw e.ruffleIndexError=be.JavascriptConfiguration,this.panic(e),e}if(this.isConnected&&!this.isUnusedFallbackObject())try{const r=Object.assign(Object.assign(Object.assign({},null!==(n=null===(t=window.RufflePlayer)||void 0===t?void 0:t.config)&&void 0!==n?n:{}),this.config),e);if(r.allowScriptAccess=e.allowScriptAccess,this.options=e,this.hasContextMenu=!1!==r.contextMenu,r.backgroundColor&&(this.container.style.backgroundColor=r.backgroundColor),yield this.ensureFreshInstance(r),"url"in e){console.log(`Loading SWF file ${e.url}`);try{this.swfUrl=new URL(e.url,document.location.href).href}catch(t){this.swfUrl=e.url}const t=Object.assign(Object.assign({},de(e.url.substring(e.url.indexOf("?")))),de(e.parameters));this.instance.stream_from(e.url,t)}else"data"in e&&(console.log("Loading SWF data"),this.instance.load_data(new Uint8Array(e.data),de(e.parameters)))}catch(e){throw console.error(`Serious error occurred loading SWF file: ${e}`),e}else console.warn("Ignoring attempt to play a disconnected or suspended Ruffle element")}))}playButtonClicked(){this.play()}play(){this.instance&&(this.instance.play(),this.playButton&&(this.playButton.style.display="none"))}get fullscreenEnabled(){return!(!document.fullscreenEnabled&&!document.webkitFullscreenEnabled)}get isFullscreen(){return(document.fullscreenElement||document.webkitFullscreenElement)===this}enterFullscreen(){const e={navigationUI:"hide"};this.requestFullscreen?this.requestFullscreen(e):this.webkitRequestFullscreen?this.webkitRequestFullscreen(e):this.webkitRequestFullScreen&&this.webkitRequestFullScreen(e)}exitFullscreen(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()}contextMenuItems(){const e=[];return this.fullscreenEnabled&&(this.isFullscreen?e.push({text:"Exit fullscreen",onClick:this.exitFullscreen.bind(this)}):e.push({text:"Enter fullscreen",onClick:this.enterFullscreen.bind(this)})),e.push({text:"About Ruffle (nightly 2021-04-09)",onClick(){window.open(_e,"_blank")},separator:!1}),e}showContextMenu(e){if(e.preventDefault(),!this.hasContextMenu)return;for(;this.contextMenuElement.firstChild;)this.contextMenuElement.removeChild(this.contextMenuElement.firstChild);for(const{text:e,onClick:t,separator:n}of this.contextMenuItems()){const r=document.createElement("li");if(r.className="menu_item active",r.textContent=e,r.addEventListener("click",t),this.contextMenuElement.appendChild(r),!1!==n){const e=document.createElement("li");e.className="menu_separator";const t=document.createElement("hr");e.appendChild(t),this.contextMenuElement.appendChild(e)}}this.contextMenuElement.style.left="0",this.contextMenuElement.style.top="0",this.contextMenuElement.style.display="block";const t=this.getBoundingClientRect(),n=e.clientX-t.x,r=e.clientY-t.y,i=t.width-this.contextMenuElement.clientWidth-1,o=t.height-this.contextMenuElement.clientHeight-1;this.contextMenuElement.style.left=Math.floor(Math.min(n,i))+"px",this.contextMenuElement.style.top=Math.floor(Math.min(r,o))+"px"}hideContextMenu(){this.contextMenuElement.style.display="none"}pause(){this.instance&&(this.instance.pause(),this.playButton&&(this.playButton.style.display="block"))}audioState(){if(this.instance){const e=this.instance.audio_context();return e&&e.state||"running"}return"suspended"}unmuteOverlayClicked(){if(this.instance){if("running"!==this.audioState()){const e=this.instance.audio_context();e&&e.resume()}this.unmuteOverlay&&(this.unmuteOverlay.style.display="none")}}copyElement(e){if(e){for(let t=0;t<e.attributes.length;t++){const n=e.attributes[t];if(n.specified){if("title"===n.name&&"Adobe Flash Player"===n.value)continue;try{this.setAttribute(n.name,n.value)}catch(e){console.warn(`Unable to set attribute ${n.name} on Ruffle instance`)}}}for(const t of Array.from(e.children))this.appendChild(t)}}static htmlDimensionToCssDimension(e){if(e){const t=e.match(fe);if(t){let e=t[1];return t[3]||(e+="px"),e}}return null}onCallbackAvailable(e){const t=this.instance;this[e]=(...n)=>null==t?void 0:t.call_exposed_callback(e,n)}set traceObserver(e){var t;null===(t=this.instance)||void 0===t||t.set_trace_observer(e)}panic(e){var t;if(this.panicked)return;if(this.panicked=!0,e instanceof Error&&("AbortError"===e.name||e.message.includes("AbortError")))return;const n=null!==(t=null==e?void 0:e.ruffleIndexError)&&void 0!==t?t:be.Unknown,r=Object.assign([],{stackIndex:-1});if(r.push("# Error Info\n"),e instanceof Error){if(r.push(`Error name: ${e.name}\n`),r.push(`Error message: ${e.message}\n`),e.stack){const t=r.push(`Error stack:\n\`\`\`\n${e.stack}\n\`\`\`\n`)-1;r.stackIndex=t}}else r.push(`Error: ${e}\n`);r.push("\n# Player Info\n"),r.push(this.debugPlayerInfo()),r.push("\n# Page Info\n"),r.push(`Page URL: ${document.location.href}\n`),this.swfUrl&&r.push(`SWF URL: ${this.swfUrl}\n`),r.push("\n# Browser Info\n"),r.push(`Useragent: ${window.navigator.userAgent}\n`),r.push(`OS: ${window.navigator.platform}\n`),r.push("\n# Ruffle Info\n"),r.push("Version: 0.1.0\n"),r.push("Name: nightly 2021-04-09\n"),r.push("Channel: nightly\n"),r.push("Built: 2021-04-09T00:39:28.452Z\n"),r.push("Commit: ed6fe86e31d6dbef47aebdef71a95ddfb1ca6172\n");const i=r.join(""),o=document.location.href.split(/[?#]/)[0];let a,s,c=`https://github.com/ruffle-rs/ruffle/issues/new?title=${encodeURIComponent(`Error on ${o}`)}&body=`,l=encodeURIComponent(i);switch(r.stackIndex>-1&&String(c+l).length>8195&&(r[r.stackIndex]=null,l=encodeURIComponent(r.join(""))),c+=l,n){case be.FileProtocol:a='\n                    <p>It appears you are running Ruffle on the "file:" protocol.</p>\n                    <p>This doesn\'t work as browsers block many features from working for security reasons.</p>\n                    <p>Instead, we invite you to setup a local server or either use the web demo or the desktop application.</p>\n                ',s=`\n                    <li><a target="_top" href="${_e}/demo">Web Demo</a></li>\n                    <li><a target="_top" href="https://github.com/ruffle-rs/ruffle/tags">Desktop Application</a></li>\n                `;break;case be.JavascriptConfiguration:a="\n                    <p>Ruffle has encountered a major issue due to an incorrect JavaScript configuration.</p>\n                    <p>If you are the server administrator, we invite you to check the error details to find out which parameter is at fault.</p>\n                    <p>You can also consult the Ruffle wiki for help.</p>\n                ",s='\n                    <li><a target="_top" href="https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#javascript-api">View Ruffle Wiki</a></li>\n                    <li><a href="#" id="panic-view-details">View Error Details</a></li>\n                ';break;case be.WasmNotFound:a='\n                    <p>Ruffle failed to load the required ".wasm" file component.</p>\n                    <p>If you are the server administrator, please ensure the file has correctly been uploaded.</p>\n                    <p>If the issue persists, you may need to use the "publicPath" setting: please consult the Ruffle wiki for help.</p>\n                ',s='\n                    <li><a target="_top" href="https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configuration-options">View Ruffle Wiki</a></li>\n                    <li><a href="#" id="panic-view-details">View Error Details</a></li>\n                ';break;case be.WasmMimeType:a='\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>This web server is not serving ".wasm" files with the correct MIME type.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                ',s='\n                    <li><a target="_top" href="https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configure-webassembly-mime-type">View Ruffle Wiki</a></li>\n                    <li><a href="#" id="panic-view-details">View Error Details</a></li>\n                ';break;case be.WasmCors:a='\n                    <p>Ruffle failed to load the required ".wasm" file component.</p>\n                    <p>Access to fetch has likely been blocked by CORS policy.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                ',s='\n                    <li><a target="_top" href="https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#web">View Ruffle Wiki</a></li>\n                    <li><a href="#" id="panic-view-details">View Error Details</a></li>\n                ';break;case be.JavascriptConflict:a="\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>It seems like this page uses JavaScript code that conflicts with Ruffle.</p>\n                    <p>If you are the server administrator, we invite you to try loading the file on a blank page.</p>\n                ",s=`\n                    <li><a target="_top" href="${c}">Report Bug</a></li>\n                    <li><a href="#" id="panic-view-details">View Error Details</a></li>\n                `;break;default:a="\n                    <p>Ruffle has encountered a major issue whilst trying to display this Flash content.</p>\n                    <p>This isn't supposed to happen, so we'd really appreciate if you could file a bug!</p>\n                ",s=`\n                    <li><a target="_top" href="${c}">Report Bug</a></li>\n                    <li><a href="#" id="panic-view-details">View Error Details</a></li>\n                `}this.container.innerHTML=`\n            <div id="panic">\n                <div id="panic-title">Something went wrong :(</div>\n                <div id="panic-body">${a}</div>\n                <div id="panic-footer">\n                    <ul>${s}</ul>\n                </div>\n            </div>\n        `;const u=this.container.querySelector("#panic-view-details");u&&(u.onclick=()=>{const e=this.container.querySelector("#panic-body");return e.classList.add("details"),e.innerHTML=`<textarea>${i}</textarea>`,!1}),this.instance&&(this.instance.destroy(),this.instance=null)}displayUnsupportedMessage(){const e=document.createElement("div");e.id="message_overlay",e.innerHTML='<div class="message">\n            <p>Flash Player has been removed from browsers in 2021.</p>\n            <p>This content is not yet supported by the Ruffle emulator and will likely not run as intended.</p>\n            <div>\n                <a target="_top" class="more-info-link" href="https://github.com/ruffle-rs/ruffle/wiki/Frequently-Asked-Questions-For-Users">More info</a>\n                <button id="run-anyway-btn">Run anyway</button>\n            </div>\n        </div>',this.container.prepend(e),e.querySelector("#run-anyway-btn").onclick=()=>{e.parentNode.removeChild(e)}}displayMessage(e){const t=document.createElement("div");t.id="message_overlay",t.innerHTML=`<div class="message">\n            <p>${e}</p>\n            <div>\n                <button id="continue-btn">continue</button>\n            </div>\n        </div>`,this.container.prepend(t),this.container.querySelector("#continue-btn").onclick=()=>{t.parentNode.removeChild(t)}}debugPlayerInfo(){var e,t;return`Allows script access: ${null!==(t=null===(e=this.options)||void 0===e?void 0:e.allowScriptAccess)&&void 0!==t&&t}\n`}}function we(e,t){switch(e||(e="sameDomain"),e.toLowerCase()){case"always":return!0;case"never":return!1;case"samedomain":default:try{return new URL(window.location.href).origin===new URL(t,window.location.href).origin}catch(e){return!1}}}function he(e){if(e){let t="";try{t=new URL(e,_e).pathname}catch(e){}if(t&&t.length>=4){const e=t.slice(-4).toLowerCase();if(".swf"===e||".spl"===e)return!0}}return!1}class me extends ge{constructor(){super()}connectedCallback(){var e,t,n,r;super.connectedCallback();const i=this.attributes.getNamedItem("src");if(i){const o=null!==(t=null===(e=this.attributes.getNamedItem("allowScriptAccess"))||void 0===e?void 0:e.value)&&void 0!==t?t:null;this.load({url:i.value,allowScriptAccess:we(o,i.value),parameters:null===(n=this.attributes.getNamedItem("flashvars"))||void 0===n?void 0:n.value,backgroundColor:null===(r=this.attributes.getNamedItem("bgcolor"))||void 0===r?void 0:r.value})}}get src(){var e;return null===(e=this.attributes.getNamedItem("src"))||void 0===e?void 0:e.value}set src(e){if(null!=e){const t=document.createAttribute("src");t.value=e,this.attributes.setNamedItem(t)}else this.attributes.removeNamedItem("src")}static get observedAttributes(){return["src","width","height"]}attributeChangedCallback(e,t,n){if(super.attributeChangedCallback(e,t,n),this.isConnected&&"src"===e){let e;const t=this.attributes.getNamedItem("flashvars");t&&(e=t.value);const n=this.attributes.getNamedItem("src");n&&this.load({url:n.value,parameters:e})}}static isInterdictable(e){var t;if(!e.getAttribute("src"))return!1;const n=null===(t=e.getAttribute("type"))||void 0===t?void 0:t.toLowerCase();return n===ae.toLowerCase()||n===se.toLowerCase()||n===ce.toLowerCase()||n===le.toLowerCase()||(null==n||""===n)&&he(e.getAttribute("src"))}static fromNativeEmbedElement(e){const t=ee("ruffle-embed",me),n=document.createElement(t);return n.copyElement(e),n}}function pe(e,t,n){t=t.toLowerCase();for(const n in e)if(Object.hasOwnProperty.call(e,n)&&t===n.toLowerCase())return e[n];return n}function ye(e){var t,n;const r={};for(const i of e.children)if(i instanceof HTMLParamElement){const e=null===(t=i.attributes.getNamedItem("name"))||void 0===t?void 0:t.value,o=null===(n=i.attributes.getNamedItem("value"))||void 0===n?void 0:n.value;e&&o&&(r[e]=o)}return r}class ve extends ge{constructor(){super(),this.params={}}connectedCallback(){var e;super.connectedCallback(),this.params=ye(this);let t=null;this.attributes.getNamedItem("data")?t=null===(e=this.attributes.getNamedItem("data"))||void 0===e?void 0:e.value:this.params.movie&&(t=this.params.movie);const n=pe(this.params,"allowScriptAccess",null),r=pe(this.params,"flashvars",this.getAttribute("flashvars")),i=pe(this.params,"bgcolor",this.getAttribute("bgcolor"));if(t){const e={url:t};e.allowScriptAccess=we(n,t),r&&(e.parameters=r),i&&(e.backgroundColor=i),this.load(e)}}debugPlayerInfo(){var e;let t=super.debugPlayerInfo();t+="Player type: Object\n";let n=null;return this.attributes.getNamedItem("data")?n=null===(e=this.attributes.getNamedItem("data"))||void 0===e?void 0:e.value:this.params.movie&&(n=this.params.movie),t+=`SWF URL: ${n}\n`,Object.keys(this.params).forEach((e=>{t+=`Param ${e}: ${this.params[e]}\n`})),Object.keys(this.attributes).forEach((e=>{var n;t+=`Attribute ${e}: ${null===(n=this.attributes.getNamedItem(e))||void 0===n?void 0:n.value}\n`})),t}get data(){return this.getAttribute("data")}set data(e){if(null!=e){const t=document.createAttribute("data");t.value=e,this.attributes.setNamedItem(t)}else this.attributes.removeNamedItem("data")}static isInterdictable(e){var t,n,r;if(e.getElementsByTagName("ruffle-embed").length>0)return!1;const i=null===(t=e.attributes.getNamedItem("data"))||void 0===t?void 0:t.value.toLowerCase(),o=ye(e);let a;if(i)a=he(i);else{if(!o||!o.movie)return!1;a=he(o.movie)}const s=null===(n=e.attributes.getNamedItem("classid"))||void 0===n?void 0:n.value.toLowerCase();if(s===ue.toLowerCase())return!Array.from(e.getElementsByTagName("embed")).some(me.isInterdictable);if(null!=s&&""!==s)return!1;const c=null===(r=e.attributes.getNamedItem("type"))||void 0===r?void 0:r.value.toLowerCase();return c===ae.toLowerCase()||c===se.toLowerCase()||c===ce.toLowerCase()||c===le.toLowerCase()||(null==c||""===c)&&a}static fromNativeObjectElement(e){const t=ee("ruffle-object",ve),n=document.createElement(t);for(const t of Array.from(e.getElementsByTagName("embed")))me.isInterdictable(t)&&t.remove();for(const t of Array.from(e.getElementsByTagName("object")))ve.isInterdictable(t)&&t.remove();return n.copyElement(e),n}}function xe(e,t){let n="";if(void 0!==e&&void 0!==e.publicPaths&&void 0!==e.publicPaths[t])n=e.publicPaths[t];else if(void 0!==e&&void 0!==e.publicPath)n=e.publicPath;else if(void 0!==document.currentScript&&null!==document.currentScript&&"src"in document.currentScript&&""!==document.currentScript.src)try{n=new URL(".",document.currentScript.src).href}catch(e){console.warn("Unable to get currentScript URL")}return""===n||n.endsWith("/")||(n+="/"),n}var ke,Se;let Ee;const Ce=null!==(Se=null===(ke=window.RufflePlayer)||void 0===ke?void 0:ke.config)&&void 0!==Se?Se:{},Ae=xe(Ce,"ruffle.js")+"ruffle.js";let Ie,Pe,Re,Fe;function Oe(){try{Ie=null!=Ie?Ie:document.getElementsByTagName("object"),Pe=null!=Pe?Pe:document.getElementsByTagName("embed");for(const e of Array.from(Ie))if(ve.isInterdictable(e)){const t=ve.fromNativeObjectElement(e);e.replaceWith(t)}for(const e of Array.from(Pe))if(me.isInterdictable(e)){const t=me.fromNativeEmbedElement(e);e.replaceWith(t)}}catch(e){console.error(`Serious error encountered when polyfilling native Flash elements: ${e}`)}}function Te(){Re=null!=Re?Re:document.getElementsByTagName("iframe"),Fe=null!=Fe?Fe:document.getElementsByTagName("frame"),[Re,Fe].forEach((e=>{for(let t=0;t<e.length;t++){const n=e[t];if(void 0!==n.dataset.rufflePolyfilled)continue;n.dataset.rufflePolyfilled="";const r=n.contentWindow,i=`Couldn't load Ruffle into ${n.tagName}[${n.src}]: `;try{"complete"===r.document.readyState&&Me(r,i)}catch(e){Ee||console.warn(i+e)}n.addEventListener("load",(()=>{Me(r,i)}),!1)}}))}function Me(e,t){var n,r,i,o,a;return r=this,i=void 0,a=function*(){let r;yield new Promise((e=>{window.setTimeout((()=>{e()}),100)}));try{if(r=e.document,!r)return}catch(e){return void(Ee||console.warn(t+e))}if(Ee||void 0===r.documentElement.dataset.ruffleOptout)if(Ee)e.RufflePlayer||(e.RufflePlayer={}),e.RufflePlayer.config=Object.assign(Object.assign({},Ce),null!==(n=e.RufflePlayer.config)&&void 0!==n?n:{});else if(!e.RufflePlayer){const t=r.createElement("script");t.setAttribute("src",Ae),t.onload=()=>{e.RufflePlayer={},e.RufflePlayer.config=Ce},r.head.appendChild(t)}},new((o=void 0)||(o=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o((function(e){e(r)}))).then(n,s)}c((a=a.apply(r,i||[])).next())}))}function je(){X(Y)}function Le(e){Ee=e,Oe(),Te(),new MutationObserver((function(e){e.some((e=>e.addedNodes.length>0))&&(Oe(),Te())})).observe(document,{childList:!0,subtree:!0})}class Ne{constructor(e,t,n,r,i){this.major=e,this.minor=t,this.patch=n,this.prIdent=r,this.buildIdent=i}static fromSemver(e){const t=e.split("+"),n=t[0].split("-"),r=n[0].split("."),i=parseInt(r[0],10);let o=0,a=0,s=null,c=null;return null!=r[1]&&(o=parseInt(r[1],10)),null!=r[2]&&(a=parseInt(r[2],10)),null!=n[1]&&(s=n[1].split(".")),null!=t[1]&&(c=t[1].split(".")),new Ne(i,o,a,s,c)}isCompatibleWith(e){return 0!==this.major&&this.major===e.major||0===this.major&&0===e.major&&0!==this.minor&&this.minor===e.minor||0===this.major&&0===e.major&&0===this.minor&&0===e.minor&&0!==this.patch&&this.patch===e.patch}hasPrecedenceOver(e){if(this.major>e.major)return!0;if(this.major<e.major)return!1;if(this.minor>e.minor)return!0;if(this.minor<e.minor)return!1;if(this.patch>e.patch)return!0;if(this.patch<e.patch)return!1;if(null==this.prIdent&&null!=e.prIdent)return!0;if(null!=this.prIdent&&null!=e.prIdent){const t=/^[0-9]*$/;for(let n=0;n<this.prIdent.length&&n<e.prIdent.length;n+=1){if(!t.test(this.prIdent[n])&&t.test(e.prIdent[n]))return!0;if(t.test(this.prIdent[n])&&t.test(e.prIdent[n])){if(parseInt(this.prIdent[n],10)>parseInt(e.prIdent[n],10))return!0;if(parseInt(this.prIdent[n],10)<parseInt(e.prIdent[n],10))return!1}else{if(t.test(this.prIdent[n])&&!t.test(e.prIdent[n]))return!1;if(!t.test(this.prIdent[n])&&!t.test(e.prIdent[n])){if(this.prIdent[n]>e.prIdent[n])return!0;if(this.prIdent[n]<e.prIdent[n])return!1}}}return this.prIdent.length>e.prIdent.length}return!1}isEqual(e){return this.major===e.major&&this.minor===e.minor&&this.patch===e.patch}isStableOrCompatiblePrerelease(e){return null==e.prIdent||this.major===e.major&&this.minor===e.minor&&this.patch===e.patch}}class We{constructor(e){this.requirements=e}satisfiedBy(e){for(let t=0;t<this.requirements.length;t+=1){let n=!0;for(let r=0;r<this.requirements[t].length;r+=1){const i=this.requirements[t][r].comparator,o=this.requirements[t][r].version;n=n&&o.isStableOrCompatiblePrerelease(e),""===i||"="===i?n=n&&o.isEqual(e):">"===i?n=n&&e.hasPrecedenceOver(o):">="===i?n=n&&(e.hasPrecedenceOver(o)||o.isEqual(e)):"<"===i?n=n&&o.hasPrecedenceOver(e):"<="===i?n=n&&(o.hasPrecedenceOver(e)||o.isEqual(e)):"^"===i&&(n=n&&o.isCompatibleWith(e))}if(n)return!0}return!1}static fromRequirementString(e){const t=e.split(" ");let n=[];const r=[];for(let e=0;e<t.length;e+=1)if("||"===t[e])n.length>0&&(r.push(n),n=[]);else if(t[e].length>0){const r=/[0-9]/.exec(t[e]);if(r){const i=t[e].slice(0,r.index).trim(),o=Ne.fromSemver(t[e].slice(r.index).trim());n.push({comparator:i,version:o})}}return n.length>0&&r.push(n),new We(r)}}class Be{constructor(e){this.sources={},this.config={},this.invoked=!1,this.newestName=null,this.conflict=null,null!=e&&(e instanceof Be?(this.sources=e.sources,this.config=e.config,this.invoked=e.invoked,this.conflict=e.conflict,this.newestName=e.newestName,e.superseded()):e.constructor===Object&&e.config instanceof Object?this.config=e.config:this.conflict=e),"loading"===document.readyState?window.addEventListener("DOMContentLoaded",this.init.bind(this)):window.setTimeout(this.init.bind(this),0)}get version(){return"0.1.0"}registerSource(e,t){this.sources[e]=t}newestSourceName(){let e=null,t=Ne.fromSemver("0.0.0");for(const n in this.sources)if(Object.prototype.hasOwnProperty.call(this.sources,n)){const r=Ne.fromSemver(this.sources[n].version);r.hasPrecedenceOver(t)&&(e=n,t=r)}return e}init(){if(!this.invoked){if(this.invoked=!0,this.newestName=this.newestSourceName(),null===this.newestName)throw new Error("No registered Ruffle source!");!1!==this.config.polyfills&&this.sources[this.newestName].polyfill("extension"===this.newestName)}}newest(){const e=this.newestSourceName();return null!=e?this.sources[e]:null}satisfying(e){const t=We.fromRequirementString(e);let n=null;for(const e in this.sources)if(Object.prototype.hasOwnProperty.call(this.sources,e)){const r=Ne.fromSemver(this.sources[e].version);t.satisfiedBy(r)&&(n=this.sources[e])}return n}localCompatible(){return void 0!==this.sources.local?this.satisfying("^"+this.sources.local.version):this.newest()}local(){return void 0!==this.sources.local?this.satisfying("="+this.sources.local.version):this.newest()}superseded(){this.invoked=!0}static negotiate(e,t,n){let r;return r=e instanceof Be?e:new Be(e),void 0!==t&&void 0!==n&&(r.registerSource(t,n),!1!==r.config.polyfills&&n.pluginPolyfill()),r}}class Ue{constructor(e){this.name=e}get version(){return"0.1.0"}polyfill(e){Le(e)}pluginPolyfill(){je()}createPlayer(){const e=ee("ruffle-player",ge);return document.createElement(e)}}}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="",(()=>{const{PublicAPI:e,SourceAPI:t,publicPath:r}=n(240);window.RufflePlayer=e.negotiate(window.RufflePlayer,"local",new t("local")),n.p=r(window.RufflePlayer.config,"local")})()})();
-//# sourceMappingURL=ruffle.js.map
\ No newline at end of file
diff --git a/static/js/ruffle.js.map b/static/js/ruffle.js.map
deleted file mode 100644
index 534b2bd0..00000000
--- a/static/js/ruffle.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack://ruffle-selfhosted/../core/pkg/ruffle_web_bg.wasm","webpack://ruffle-selfhosted/../core/pkg/ruffle-imports.js","webpack://ruffle-selfhosted/../core/pkg/ruffle_web.js","webpack://ruffle-selfhosted/../core/pkg/js-polyfills.js","webpack://ruffle-selfhosted/../core/pkg/load-ruffle.js","webpack://ruffle-selfhosted/../core/pkg/plugin-polyfill.js","webpack://ruffle-selfhosted/../core/pkg/shadow-template.js","webpack://ruffle-selfhosted/../core/pkg/register-element.js","webpack://ruffle-selfhosted/../core/pkg/load-options.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-player.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-embed.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-object.js","webpack://ruffle-selfhosted/../core/pkg/public-path.js","webpack://ruffle-selfhosted/../core/pkg/polyfills.js","webpack://ruffle-selfhosted/../core/pkg/version.js","webpack://ruffle-selfhosted/../core/pkg/version-range.js","webpack://ruffle-selfhosted/../core/pkg/public-api.js","webpack://ruffle-selfhosted/../core/pkg/source-api.js","webpack://ruffle-selfhosted/webpack/bootstrap","webpack://ruffle-selfhosted/webpack/runtime/define property getters","webpack://ruffle-selfhosted/webpack/runtime/global","webpack://ruffle-selfhosted/webpack/runtime/hasOwnProperty shorthand","webpack://ruffle-selfhosted/webpack/runtime/make namespace object","webpack://ruffle-selfhosted/webpack/runtime/publicPath","webpack://ruffle-selfhosted/./js/ruffle.js"],"names":["copyToAudioBuffer","audioBuffer","leftData","rightData","getChannelData","set","lAudioContext","AudioContext","webkitAudioContext","wasm","heap","Array","fill","undefined","getObject","idx","push","WASM_VECTOR_LEN","cachegetUint8Memory0","getUint8Memory0","buffer","memory","Uint8Array","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","read","length","written","passStringToWasm0","malloc","realloc","ptr","subarray","len","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","heap_next","takeObject","ret","dropObject","addHeapObject","obj","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","getStringFromWasm0","decode","isLikeNone","x","cachegetFloat64Memory0","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","makeMutClosure","arg0","arg1","dtor","f","state","a","b","cnt","real","args","__wbindgen_export_2","get","original","__wbg_adapter_32","arg2","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef4f765648aac733","__wbg_adapter_35","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15","__wbg_adapter_38","__wbg_adapter_41","__wbg_adapter_44","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hbfc3deeea95df544","__wbg_adapter_47","__wbg_adapter_50","__wbg_adapter_53","__wbg_adapter_56","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hb9fdbc20f190ab6a","cachegetFloat32Memory0","getArrayF32FromWasm0","Float32Array","handleError","apply","this","arguments","e","__wbindgen_exn_store","stack_pointer","addBorrowedObject","cachegetUint32Memory0","getArrayU8FromWasm0","Ruffle","Object","create","prototype","__wbg_ruffle_free","parent","js_player","config","ruffle_new","__wrap","movie_url","parameters","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","ruffle_stream_from","swf_data","ruffle_load_data","ruffle_play","ruffle_pause","ruffle_is_playing","ruffle_destroy","ptr1","array","Uint32Array","passArrayJsValueToWasm0","len1","ruffle_call_exposed_callback","observer","ruffle_set_trace_observer","ruffle_audio_context","async","init","input","replace","imports","wbg","__wbindgen_is_function","__wbindgen_json_serialize","__wbindgen_object_drop_ref","__wbindgen_object_clone_ref","__wbindgen_cb_drop","__wbindgen_string_new","__wbg_isFullscreen_96b85640554e160d","isFullscreen","__wbg_displayUnsupportedMessage_a8f81a8e054e5e91","displayUnsupportedMessage","__wbg_displayMessage_c57c20204892da2b","displayMessage","__wbg_copyToAudioBuffer_58f244be94bac1d2","arg3","arg4","__wbg_new_df6e6ab7a65c4c4d","__wbg_panic_bbc809dd04a12c60","panic","__wbg_onCallbackAvailable_3a48fae397926c96","onCallbackAvailable","__wbg_onFSCommand_fb2f94653f71796e","onFSCommand","__wbindgen_number_new","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbindgen_free","__wbindgen_is_undefined","__wbg_instanceof_WebGl2RenderingContext_9818b789249374d3","WebGL2RenderingContext","__wbg_bindVertexArray_569f8b5466293fb0","bindVertexArray","__wbg_blitFramebuffer_4b472bb45062bd6e","arg5","arg6","arg7","arg8","arg9","arg10","blitFramebuffer","__wbg_createVertexArray_1f35f6d163bbae13","createVertexArray","__wbg_renderbufferStorageMultisample_0426ba65de4885db","renderbufferStorageMultisample","__wbg_texImage2D_79c0e000ef5e1b0a","texImage2D","__wbg_bindFramebuffer_4a37c2a7678c0994","bindFramebuffer","__wbg_bindRenderbuffer_203ad50a30ad3c0d","bindRenderbuffer","__wbg_bindTexture_f3ab6393f75a763f","bindTexture","__wbg_createFramebuffer_d01ac1b4f7c704e5","createFramebuffer","__wbg_createRenderbuffer_c008c3bb50dfff9d","createRenderbuffer","__wbg_createTexture_151a385cd028c893","createTexture","__wbg_deleteFramebuffer_acd92acda81356e9","deleteFramebuffer","__wbg_deleteRenderbuffer_b67ff9026d2be0fd","deleteRenderbuffer","__wbg_deleteTexture_125ab82d8330e268","deleteTexture","__wbg_framebufferRenderbuffer_5293612146bd869a","framebufferRenderbuffer","__wbg_framebufferTexture2D_5b8575bda5aeceeb","framebufferTexture2D","__wbg_getError_609a7fa815fd3d84","getError","__wbg_getParameter_be1e4b3ba2c0c339","getParameter","__wbg_texParameteri_6e7ba8c54bb639f2","texParameteri","__wbg_instanceof_Window_49f532f06a9786ee","Window","__wbg_document_c0366b39e4f4c89a","document","__wbg_location_c1e50a6e4c53d45c","location","__wbg_navigator_95ba9cd684cf90aa","navigator","__wbg_devicePixelRatio_268c49438a600d53","devicePixelRatio","__wbg_performance_87e4f3b6f966469f","performance","__wbg_localStorage_a6fd83fc300473fc","localStorage","__wbg_cancelAnimationFrame_60f9cf59ec1c0125","cancelAnimationFrame","__wbg_focus_ab7792954990fdb9","focus","__wbg_open_f355af0fd051a9d8","open","__wbg_requestAnimationFrame_ef0e2294dc8b1088","requestAnimationFrame","__wbg_fetch_f532e04b8fe49aa0","fetch","__wbg_destination_4b8bc48ce4ebcd6c","destination","__wbg_sampleRate_0d2637cc084b2eaf","sampleRate","__wbg_currentTime_1bc83619afbf9e72","currentTime","__wbg_new_2f70ca6da1976429","__wbg_suspend_ad6a97ee4bac3247","suspend","__wbg_createBuffer_48e051aa20c4ba3e","createBuffer","__wbg_createBufferSource_0e160528349a924b","createBufferSource","__wbg_createChannelMerger_8e8d29d53323df91","createChannelMerger","__wbg_createChannelSplitter_10fc5fe404818afc","createChannelSplitter","__wbg_createGain_a6211e4c615a1141","createGain","__wbg_createScriptProcessor_e755612398f80dd4","createScriptProcessor","__wbg_decodeAudioData_1a1e91ec5cd60d59","decodeAudioData","__wbg_resume_6dd89ae2f9b0bef3","resume","__wbg_setvalue_cc85088ad32e56b0","value","__wbg_linearRampToValueAtTime_02ce948b9b4323e0","linearRampToValueAtTime","__wbg_setValueAtTime_788b65cf85b7ba6a","setValueAtTime","__wbg_gain_688543a4eee1eece","gain","__wbg_userAgent_b9c7a338061adca8","userAgent","__wbg_get_29a9ce40981b8710","__wbg_set_13ecdf3c7967382d","__wbg_delete_2c0adda5d0edea03","__wbg_protocol_791396029743ce88","protocol","__wbg_assign_8948549eb7c584b7","assign","__wbg_baseURI_1fe61dc0a39a61ed","baseURI","__wbg_appendChild_7c45aeccd496f2a5","appendChild","__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44","SVGSVGElement","__wbg_createSVGMatrix_9088b605b3cbb935","createSVGMatrix","__wbg_length_da24898717a463e0","__wbg_setProperty_46b9bd1b0fad730b","setProperty","__wbg_offsetX_4bd8c9fcb457cf0b","offsetX","__wbg_offsetY_0dde12490e8ebfba","offsetY","__wbg_button_9e74bd912190b055","button","__wbg_new_0af3e1641443f13d","Path2D","__wbg_addPath_0b9c6299797f0772","addPath","__wbg_closePath_6e9529e4d6da5e83","closePath","__wbg_lineTo_2157bf4d1b0ce0d3","lineTo","__wbg_moveTo_fb2215902520c649","moveTo","__wbg_quadraticCurveTo_9c392c57a794a2d2","quadraticCurveTo","__wbg_connect_607a0c51b546a3db","connect","__wbg_connect_a4236fe1b645b8fb","__wbg_connect_db97a7bc9cd258c6","__wbg_disconnect_1f5d0443b0bca9c8","disconnect","__wbg_outputBuffer_1fc843f5ddfd743b","outputBuffer","__wbg_setTransform_041d67e3d6972fd7","setTransform","__wbg_bindVertexArrayOES_17e98f43d896f40b","bindVertexArrayOES","__wbg_createVertexArrayOES_393e00fa6f931f59","createVertexArrayOES","__wbg_seta_6c309b33d9a4fb29","__wbg_setb_378147d7ba767ab1","__wbg_setc_cc36b264b7a1ae60","c","__wbg_setd_998c5989f5780653","d","__wbg_sete_42bf2f390f25e536","__wbg_setf_df5aef1469b0c50b","__wbg_deltaY_2722120e563d3160","deltaY","__wbg_deltaMode_3db3c9c4bedf191d","deltaMode","__wbg_setbuffer_8c396e74724eda12","__wbg_setloop_1e141edefc26db22","loop","__wbg_setloopStart_4162b0a533fbc0d5","loopStart","__wbg_setloopEnd_e81eb72ea2277d88","loopEnd","__wbg_setonended_f6f3e04e13c07db4","onended","__wbg_start_f5e66921db9afaee","start","__wbg_start_0237410bb20c6213","__wbg_stop_5765c7cac3ec1564","stop","__wbg_instanceof_HtmlFormElement_26283084b0956b17","HTMLFormElement","__wbg_submit_121b8e3bd960f229","submit","__wbg_pointerId_602db5c989b38cc0","pointerId","__wbg_instanceof_Response_f52c65c389890639","Response","__wbg_ok_c20643e0a45dc5a0","ok","__wbg_statusText_76ce672b84096caf","statusText","__wbg_arrayBuffer_0ba17dfaad804b6f","arrayBuffer","__wbg_key_d9b602f48baca7bc","key","__wbg_code_cbf76ad384ae1179","__wbg_now_7628760b7b640632","now","__wbg_newwithstrandinit_11debb554792e043","Request","__wbg_setonaudioprocess_66d0b1fa0dd39606","onaudioprocess","__wbg_body_c8cb19d760637268","body","__wbg_createElement_99351c8bf0efac6e","createElement","__wbg_createElementNS_a7ef126eff5022c2","createElementNS","__wbg_setid_f33ce4e43b43f57a","id","__wbg_clientWidth_2c84a7ebc75dd4f0","clientWidth","__wbg_clientHeight_f56dfe03d1c42f3e","clientHeight","__wbg_querySelector_155b00165b78a12f","querySelector","__wbg_releasePointerCapture_4b78cb9c51d4a539","releasePointerCapture","__wbg_setAttribute_e71b9086539f06a1","setAttribute","__wbg_setAttributeNS_a66240d5c750d0fa","setAttributeNS","__wbg_setPointerCapture_54ee987062d42d03","setPointerCapture","__wbg_remove_0639495587b1aaeb","remove","__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85","WebGLRenderingContext","__wbg_drawingBufferWidth_fab3e20dd1ba5d4e","drawingBufferWidth","__wbg_drawingBufferHeight_31bc93d4dc3a0dcc","drawingBufferHeight","__wbg_bufferData_d47c8467e443121d","bufferData","__wbg_texImage2D_a4011abffe0229fb","__wbg_uniform1fv_cd9d2dea0641919d","uniform1fv","__wbg_uniform4fv_24ef46675c137552","uniform4fv","__wbg_uniformMatrix3fv_a0a261980af4587d","uniformMatrix3fv","__wbg_uniformMatrix4fv_088c96db8ee28c1d","uniformMatrix4fv","__wbg_activeTexture_a51ec6273de88bc6","activeTexture","__wbg_attachShader_0dd248f6ab98fcf2","attachShader","__wbg_bindBuffer_1ceb83e9674e812a","bindBuffer","__wbg_bindFramebuffer_d8f98d1a7f6d67d1","__wbg_bindRenderbuffer_1ba9206d5f319ae1","__wbg_bindTexture_6121e6db3f879582","__wbg_blendFunc_34a6bb31770822c5","blendFunc","__wbg_clear_f6b2dd48aeed2752","clear","__wbg_clearColor_89f7819aa9f80129","clearColor","__wbg_colorMask_88ebee15531b14ef","colorMask","__wbg_compileShader_28bdbafe4445d24b","compileShader","__wbg_createBuffer_acedc3831832a280","__wbg_createProgram_7e2f44b7b74694d4","createProgram","__wbg_createShader_64c474f1d1d0c1f8","createShader","__wbg_createTexture_0a156dab1efc3499","__wbg_disable_5b9c6f74d5efd3a5","disable","__wbg_disableVertexAttribArray_ba8f39ecd28c601b","disableVertexAttribArray","__wbg_drawElements_3eb5ba8a511ce0f0","drawElements","__wbg_enable_87f39f6396535e1f","enable","__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5","enableVertexAttribArray","__wbg_getAttribLocation_ba61f837da80e249","getAttribLocation","__wbg_getExtension_c6863c255090d82f","getExtension","__wbg_getParameter_ff687a6ea303e551","__wbg_getProgramInfoLog_aacf06c959070653","getProgramInfoLog","__wbg_getProgramParameter_a89bf14502c109f7","getProgramParameter","__wbg_getShaderInfoLog_1eb885f2468e2429","getShaderInfoLog","__wbg_getUniformLocation_ca853de4f2f9270d","getUniformLocation","__wbg_linkProgram_46a36cb158f10676","linkProgram","__wbg_pixelStorei_31f6dc244bf4cd5b","pixelStorei","__wbg_shaderSource_700ae72fca39850d","shaderSource","__wbg_stencilFunc_cc85d77d2098446b","stencilFunc","__wbg_stencilMask_ed2cded2c2b0b72c","stencilMask","__wbg_stencilOp_1b3529546c1fdcc2","stencilOp","__wbg_texParameteri_e45f3977eb998137","__wbg_uniform1f_3eb09312a513b94a","uniform1f","__wbg_uniform1i_e76b668973ae0655","uniform1i","__wbg_useProgram_d63a57db0571e803","useProgram","__wbg_vertexAttribPointer_b4b829a4f5a3778e","vertexAttribPointer","__wbg_viewport_54305c74f5668b33","viewport","__wbg_debug_146b863607d79e9d","__wbg_error_e325755affc8634b","__wbg_info_d60054f760c729cc","info","__wbg_log_f2e13ca55da8bad3","log","__wbg_warn_9e92ccdc67085e1b","warn","__wbg_style_9b773f0fc441eddc","style","__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a","Blob","__wbg_currentTarget_b545d0d803b3a62e","currentTarget","__wbg_preventDefault_9aab6c264e5df3ee","preventDefault","__wbg_addEventListener_6a37bc32387cb66d","addEventListener","__wbg_addEventListener_a422088e686210b5","__wbg_addEventListener_50b4229556ab0b83","__wbg_removeEventListener_70dfb387da1982ac","removeEventListener","__wbg_removeEventListener_4448b273b47328f8","__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3","HTMLCanvasElement","__wbg_width_0efa4604d41c58c5","width","__wbg_setwidth_1d0e975feecff3ef","__wbg_height_aa24e3fef658c4a8","height","__wbg_setheight_7758ee3ff5c65474","__wbg_getContext_3db9399e6dc524ff","getContext","__wbg_getContext_93be69215ea9dbbf","__wbg_setsrc_ca894d724570195d","src","__wbg_new_1f2ded01c889cd38","Image","__wbg_newwithwidthandheight_0f3a13502ca94c49","__wbg_data_55e064fddf34cf3b","passArray8ToWasm0","data","__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34","CanvasRenderingContext2D","__wbg_setglobalAlpha_b4134dbd884b4d37","globalAlpha","__wbg_setglobalCompositeOperation_557a59a0ccf673d6","globalCompositeOperation","__wbg_setstrokeStyle_7f507e0d838e3dcf","strokeStyle","__wbg_setfillStyle_bbe97cb93eb1b55c","fillStyle","__wbg_setfilter_df75805bea0a8415","filter","__wbg_setlineWidth_61de9d1eb4e9f8a6","lineWidth","__wbg_setlineCap_bff1a8858c9f067e","lineCap","__wbg_setlineJoin_de47815c918d7874","lineJoin","__wbg_setmiterLimit_84b1a1dbddcd456a","miterLimit","__wbg_drawImage_b8dec9034bf1d116","drawImage","__wbg_drawImage_801ad094f4734689","__wbg_fill_6c721ab8eec90f70","__wbg_stroke_e25cf47e0d9a36c3","stroke","__wbg_createPattern_006b6402db95df36","createPattern","__wbg_getImageData_dd3caac873bf461f","getImageData","__wbg_clearRect_6af85454d06df5fa","clearRect","__wbg_fillRect_c79d1b386c04efed","fillRect","__wbg_resetTransform_f78edb82fd1f7239","resetTransform","__wbg_setTransform_5f5f19301b76a8d6","__wbg_get_5fa3f454aa041e6e","__wbg_next_373211328013f949","next","__wbg_done_49c598117f977077","done","__wbg_value_c9ae6368b110a068","__wbg_get_85e0a3b459845fe2","Reflect","__wbg_call_951bd0c6d815d6f1","__wbg_new_9dff83a08f5994f3","__wbg_isArray_cf56c8363b1b35d9","__wbg_of_3a4bb382824dd437","of","__wbg_push_3ddd8187ff2ff82d","__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57","ArrayBuffer","__wbg_new_24c0ca5f23ee2dd9","__wbg_slice_a498e5bb17f253f3","__wbg_values_f28e313e2260a03a","values","__wbg_newnoargs_7c6bd521992b4022","Function","__wbg_apply_4e68243803368d89","__wbg_call_bf745b1758bb6693","__wbg_getTime_cf686ab22ab03a3e","getTime","__wbg_getTimezoneOffset_b9f3c4664b1a35ae","getTimezoneOffset","__wbg_new0_abd359df4aeb5b55","Date","__wbg_instanceof_Object_cdaa71ad2ca2f4c5","__wbg_entries_7144a7309b22df64","entries","__wbg_fromEntries_cc1186a09f1ec7f2","fromEntries","__wbg_is_049b1aece40b5301","is","__wbg_new_ba07d0daa0e4677e","__wbg_resolve_6e61e640925a0db9","Promise","resolve","__wbg_then_dd3785597974798a","then","__wbg_then_0f957e0f4c3e537a","__wbg_self_6baf3a3aa7b63415","self","__wbg_window_63fc4027b66c265b","window","__wbg_globalThis_513fb247e8e4e6d2","globalThis","__wbg_global_b87245cd886d7113","g","global","__wbg_buffer_3f12a1c608c6d04e","__wbg_newwithbyteoffsetandlength_4c51342f87299c5a","__wbg_length_c645e7c02233b440","__wbg_new_c6c0228e6d22a2f9","__wbg_set_b91afac9fd216d99","__wbg_fill_f49407f577541856","__wbg_buffer_c385539cb4060297","__wbg_byteLength_11e6bdc2fac53a3c","byteLength","__wbg_byteOffset_5db4e07752c85395","byteOffset","__wbg_ownKeys_d44c25f33e28bfab","ownKeys","__wbg_set_9bdd413385146137","__wbindgen_number_get","Float64Array","__wbindgen_string_get","__wbindgen_boolean_get","v","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_rethrow","__wbindgen_memory","__wbindgen_closure_wrapper1219","__wbindgen_closure_wrapper1221","__wbindgen_closure_wrapper1223","__wbindgen_closure_wrapper1225","__wbindgen_closure_wrapper1227","__wbindgen_closure_wrapper1229","__wbindgen_closure_wrapper1231","__wbindgen_closure_wrapper1233","__wbindgen_closure_wrapper1738","URL","instance","module","WebAssembly","instantiateStreaming","headers","bytes","instantiate","Instance","load","exports","__wbindgen_wasm_module","isNativeFunction","func","indexOf","lastLoaded","loadRuffle","thisArg","_arguments","generator","reduce","defineProperty","Prototype","Version","callback","TypeError","o","k","constructor","target","ruffleWasm","default","P","reject","fulfilled","step","rejected","result","fetchRuffle","RuffleMimeTypeArray","native_mimetype_array","__mimetypes","__named_mimetypes","install","mimetype","index","Symbol","iterator","RufflePlugin","filename","mimetypes","super","RufflePluginArray","native_plugin_array","__plugins","__named_plugins","plugin","FLASH_PLUGIN","installPlugin","plugins","writable","mimeTypes","suffixes","enabledPlugin","ruffleShadowTemplate","innerHTML","privateRegistry","lookupElement","elementName","internalName","class","registerElement","elementClass","tries","externalName","customElements","define","AutoPlay","Letterbox","UnmuteOverlay","LogLevel","FLASH_MIMETYPE","FUTURESPLASH_MIMETYPE","FLASH7_AND_8_MIMETYPE","FLASH_MOVIE_MIMETYPE","FLASH_ACTIVEX_CLASSID","RUFFLE_ORIGIN","DIMENSION_REGEX","PanicError","sanitizeParameters","URLSearchParams","output","RufflePlayer","HTMLElement","hasContextMenu","panicked","shadow","attachShadow","mode","content","cloneNode","dynamicStyles","getElementById","container","playButton","playButtonClicked","bind","unmuteOverlay","unmuteOverlayClicked","contextMenuElement","showContextMenu","hideContextMenu","options","_trace_observer","ruffleConstructor","lastActivePlayingState","setupPauseOnTabHidden","hidden","is_playing","pause","play","updateStyles","_oldValue","_newValue","destroy","sheet","rules","deleteRule","widthAttr","attributes","getNamedItem","htmlDimensionToCssDimension","insertRule","heightAttr","parentNode","element","nodeName","_a","catch","ruffleIndexError","FileProtocol","WasmNotFound","String","toLowerCase","includes","WasmMimeType","WasmCors","JavascriptConflict","audioState","visibility","setTimeout","autoplay","Auto","unmuteVisibility","Visible","On","display","childNodes","forEach","node","audioContext","audio_context","onstatechange","_b","optionsError","url","JavascriptConfiguration","isConnected","isUnusedFallbackObject","allowScriptAccess","contextMenu","backgroundColor","ensureFreshInstance","swfUrl","href","_c","substring","stream_from","load_data","err","fullscreenEnabled","webkitFullscreenEnabled","fullscreenElement","webkitFullscreenElement","navigationUI","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","exitFullscreen","webkitExitFullscreen","webkitCancelFullScreen","items","text","onClick","enterFullscreen","separator","firstChild","removeChild","contextMenuItems","menuItem","textContent","menuSeparator","hr","left","top","rect","getBoundingClientRect","clientX","y","clientY","maxX","maxY","Math","floor","min","elem","attrib","specified","from","children","attribute","match","out","call_exposed_callback","set_trace_observer","errorIndex","Unknown","errorArray","stackIndex","debugPlayerInfo","platform","errorText","join","pageUrl","split","errorBody","errorFooter","issueLink","encodeURIComponent","issueBody","viewDetails","onclick","panicBody","classList","add","div","prepend","isScriptAccessAllowed","access","origin","isSwfFilename","pathname","extension","RuffleEmbed","_d","connectedCallback","srcval","attr","createAttribute","setNamedItem","removeNamedItem","oldValue","newValue","attributeChangedCallback","flashvars","getAttribute","ruffleObj","copyElement","findCaseInsensitive","defaultValue","hasOwnProperty","paramsOf","params","param","HTMLParamElement","RuffleObject","movie","keys","getElementsByTagName","isSwf","classid","some","isInterdictable","embedElem","objectElem","publicPath","source_name","path","publicPaths","currentScript","endsWith","isExtension","globalConfig","jsScriptUrl","objects","iframes","polyfillFlashInstances","ruffleObject","fromNativeObjectElement","replaceWith","ruffleEmbed","fromNativeEmbedElement","polyfillFrames","elementsList","dataset","rufflePolyfilled","elementWindow","contentWindow","errorMessage","tagName","readyState","injectRuffle","elementDocument","documentElement","ruffleOptout","script","onload","head","pluginPolyfill","polyfill","isExt","MutationObserver","mutationsList","mutation","addedNodes","observe","childList","subtree","major","minor","patch","prIdent","buildIdent","versionString","buildSplit","prSplit","versionSplit","parseInt","other","isNumeric","test","VersionRange","requirements","fver","matches","j","comparator","version","isStableOrCompatiblePrerelease","isEqual","hasPrecedenceOver","isCompatibleWith","requirement","components","trim","fromSemver","PublicAPI","prev","sources","invoked","newestName","conflict","superseded","api","newestVersion","kVersion","newestSourceName","polyfills","ver_requirement","fromRequirementString","valid","satisfiedBy","local","satisfying","newest","prevRuffle","sourceName","sourceAPI","publicAPI","registerSource","SourceAPI","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","enumerable","prop","r","toStringTag","p","negotiate"],"mappings":"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","file":"ruffle.js","sourcesContent":["export default __webpack_public_path__ + \"3fcb75a862dab7eab72ad475f7480344.wasm\";","/**\n * Functions imported from JS into Ruffle.\n *\n * @ignore\n * @internal\n */\n/**\n * Copies data into the given audio channel.\n * This is necessary because Safari does not support `AudioBuffer.copyToChannel`.\n *\n * @internal\n */\nexport function copyToAudioBuffer(audioBuffer, leftData, rightData) {\n    if (leftData) {\n        const dstBuffer = audioBuffer.getChannelData(0);\n        dstBuffer.set(leftData);\n    }\n    if (rightData) {\n        const dstBuffer = audioBuffer.getChannelData(1);\n        dstBuffer.set(rightData);\n    }\n}\n","import { copyToAudioBuffer } from './ruffle-imports.js';\n\nconst lAudioContext = (typeof AudioContext !== 'undefined' ? AudioContext : webkitAudioContext);\nlet wasm;\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n    if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n        cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n    ? function (arg, view) {\n    return cachedTextEncoder.encodeInto(arg, view);\n}\n    : function (arg, view) {\n    const buf = cachedTextEncoder.encode(arg);\n    view.set(buf);\n    return {\n        read: arg.length,\n        written: buf.length\n    };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length);\n        getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len);\n\n    const mem = getUint8Memory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3);\n        const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n        const ret = encodeString(arg, view);\n\n        offset += ret.written;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n    if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n    }\n    return cachegetInt32Memory0;\n}\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n    if (idx < 36) return;\n    heap[idx] = heap_next;\n    heap_next = idx;\n}\n\nfunction takeObject(idx) {\n    const ret = getObject(idx);\n    dropObject(idx);\n    return ret;\n}\n\nfunction addHeapObject(obj) {\n    if (heap_next === heap.length) heap.push(heap.length + 1);\n    const idx = heap_next;\n    heap_next = heap[idx];\n\n    heap[idx] = obj;\n    return idx;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n    return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nlet cachegetFloat64Memory0 = null;\nfunction getFloat64Memory0() {\n    if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {\n        cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n    }\n    return cachegetFloat64Memory0;\n}\n\nfunction debugString(val) {\n    // primitive types\n    const type = typeof val;\n    if (type == 'number' || type == 'boolean' || val == null) {\n        return  `${val}`;\n    }\n    if (type == 'string') {\n        return `\"${val}\"`;\n    }\n    if (type == 'symbol') {\n        const description = val.description;\n        if (description == null) {\n            return 'Symbol';\n        } else {\n            return `Symbol(${description})`;\n        }\n    }\n    if (type == 'function') {\n        const name = val.name;\n        if (typeof name == 'string' && name.length > 0) {\n            return `Function(${name})`;\n        } else {\n            return 'Function';\n        }\n    }\n    // objects\n    if (Array.isArray(val)) {\n        const length = val.length;\n        let debug = '[';\n        if (length > 0) {\n            debug += debugString(val[0]);\n        }\n        for(let i = 1; i < length; i++) {\n            debug += ', ' + debugString(val[i]);\n        }\n        debug += ']';\n        return debug;\n    }\n    // Test for built-in\n    const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n    let className;\n    if (builtInMatches.length > 1) {\n        className = builtInMatches[1];\n    } else {\n        // Failed to match the standard '[object ClassName]'\n        return toString.call(val);\n    }\n    if (className == 'Object') {\n        // we're a user defined class or Object\n        // JSON.stringify avoids problems with cycles, and is generally much\n        // easier than looping through ownProperties of `val`.\n        try {\n            return 'Object(' + JSON.stringify(val) + ')';\n        } catch (_) {\n            return 'Object';\n        }\n    }\n    // errors\n    if (val instanceof Error) {\n        return `${val.name}: ${val.message}\\n${val.stack}`;\n    }\n    // TODO we could test for more things here, like `Set`s and `Map`s.\n    return className;\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n    const state = { a: arg0, b: arg1, cnt: 1, dtor };\n    const real = (...args) => {\n        // First up with a closure we increment the internal reference\n        // count. This ensures that the Rust closure environment won't\n        // be deallocated while we're invoking it.\n        state.cnt++;\n        const a = state.a;\n        state.a = 0;\n        try {\n            return f(a, state.b, ...args);\n        } finally {\n            if (--state.cnt === 0) {\n                wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n\n            } else {\n                state.a = a;\n            }\n        }\n    };\n    real.original = state;\n\n    return real;\n}\nfunction __wbg_adapter_32(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef4f765648aac733(arg0, arg1, arg2);\n}\n\nfunction __wbg_adapter_35(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_38(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_41(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_44(arg0, arg1) {\n    wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hbfc3deeea95df544(arg0, arg1);\n}\n\nfunction __wbg_adapter_47(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_50(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_53(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1c9b256bef969e15(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_56(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hb9fdbc20f190ab6a(arg0, arg1, addHeapObject(arg2));\n}\n\nlet cachegetFloat32Memory0 = null;\nfunction getFloat32Memory0() {\n    if (cachegetFloat32Memory0 === null || cachegetFloat32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetFloat32Memory0 = new Float32Array(wasm.memory.buffer);\n    }\n    return cachegetFloat32Memory0;\n}\n\nfunction getArrayF32FromWasm0(ptr, len) {\n    return getFloat32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction handleError(f) {\n    return function () {\n        try {\n            return f.apply(this, arguments);\n\n        } catch (e) {\n            wasm.__wbindgen_exn_store(addHeapObject(e));\n        }\n    };\n}\n\nlet stack_pointer = 32;\n\nfunction addBorrowedObject(obj) {\n    if (stack_pointer == 1) throw new Error('out of js stack');\n    heap[--stack_pointer] = obj;\n    return stack_pointer;\n}\n\nlet cachegetUint32Memory0 = null;\nfunction getUint32Memory0() {\n    if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n    }\n    return cachegetUint32Memory0;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n    const ptr = malloc(array.length * 4);\n    const mem = getUint32Memory0();\n    for (let i = 0; i < array.length; i++) {\n        mem[ptr / 4 + i] = addHeapObject(array[i]);\n    }\n    WASM_VECTOR_LEN = array.length;\n    return ptr;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n    return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n    const ptr = malloc(arg.length * 1);\n    getUint8Memory0().set(arg, ptr / 1);\n    WASM_VECTOR_LEN = arg.length;\n    return ptr;\n}\n/**\n* An opaque handle to a `RuffleInstance` inside the pool.\n*\n* This type is exported to JS, and is used to interact with the library.\n*/\nexport class Ruffle {\n\n    static __wrap(ptr) {\n        const obj = Object.create(Ruffle.prototype);\n        obj.ptr = ptr;\n\n        return obj;\n    }\n\n    free() {\n        const ptr = this.ptr;\n        this.ptr = 0;\n\n        wasm.__wbg_ruffle_free(ptr);\n    }\n    /**\n    * @param {HTMLElement} parent\n    * @param {any} js_player\n    * @param {any} config\n    */\n    constructor(parent, js_player, config) {\n        try {\n            var ret = wasm.ruffle_new(addHeapObject(parent), addHeapObject(js_player), addBorrowedObject(config));\n            return Ruffle.__wrap(ret);\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    * Stream an arbitrary movie file from (presumably) the Internet.\n    *\n    * This method should only be called once per player.\n    * @param {string} movie_url\n    * @param {any} parameters\n    */\n    stream_from(movie_url, parameters) {\n        try {\n            var ptr0 = passStringToWasm0(movie_url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            var len0 = WASM_VECTOR_LEN;\n            wasm.ruffle_stream_from(this.ptr, ptr0, len0, addBorrowedObject(parameters));\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    * Play an arbitrary movie on this instance.\n    *\n    * This method should only be called once per player.\n    * @param {Uint8Array} swf_data\n    * @param {any} parameters\n    */\n    load_data(swf_data, parameters) {\n        try {\n            wasm.ruffle_load_data(this.ptr, addHeapObject(swf_data), addBorrowedObject(parameters));\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    */\n    play() {\n        wasm.ruffle_play(this.ptr);\n    }\n    /**\n    */\n    pause() {\n        wasm.ruffle_pause(this.ptr);\n    }\n    /**\n    * @returns {boolean}\n    */\n    is_playing() {\n        var ret = wasm.ruffle_is_playing(this.ptr);\n        return ret !== 0;\n    }\n    /**\n    */\n    destroy() {\n        wasm.ruffle_destroy(this.ptr);\n    }\n    /**\n    * @param {string} name\n    * @param {any[]} args\n    * @returns {any}\n    */\n    call_exposed_callback(name, args) {\n        var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        var ptr1 = passArrayJsValueToWasm0(args, wasm.__wbindgen_malloc);\n        var len1 = WASM_VECTOR_LEN;\n        var ret = wasm.ruffle_call_exposed_callback(this.ptr, ptr0, len0, ptr1, len1);\n        return takeObject(ret);\n    }\n    /**\n    * @param {any} observer\n    */\n    set_trace_observer(observer) {\n        wasm.ruffle_set_trace_observer(this.ptr, addHeapObject(observer));\n    }\n    /**\n    * Returns the web AudioContext used by this player.\n    * Returns `None` if the audio backend does not use Web Audio.\n    * @returns {AudioContext | undefined}\n    */\n    audio_context() {\n        var ret = wasm.ruffle_audio_context(this.ptr);\n        return takeObject(ret);\n    }\n}\n\nasync function load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n\n            } catch (e) {\n                if (module.headers.get('Content-Type') != 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n\n    } else {\n\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n\n        } else {\n            return instance;\n        }\n    }\n}\n\nasync function init(input) {\n    if (typeof input === 'undefined') {\n        input = import.meta.url.replace(/\\.js$/, '_bg.wasm');\n    }\n    const imports = {};\n    imports.wbg = {};\n    imports.wbg.__wbindgen_is_function = function(arg0) {\n        var ret = typeof(getObject(arg0)) === 'function';\n        return ret;\n    };\n    imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = JSON.stringify(obj === undefined ? null : obj);\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n        takeObject(arg0);\n    };\n    imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n        var ret = getObject(arg0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_cb_drop = function(arg0) {\n        const obj = takeObject(arg0).original;\n        if (obj.cnt-- == 1) {\n            obj.a = 0;\n            return true;\n        }\n        var ret = false;\n        return ret;\n    };\n    imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n        var ret = getStringFromWasm0(arg0, arg1);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_isFullscreen_96b85640554e160d = function(arg0) {\n        var ret = getObject(arg0).isFullscreen;\n        return ret;\n    };\n    imports.wbg.__wbg_displayUnsupportedMessage_a8f81a8e054e5e91 = function(arg0) {\n        getObject(arg0).displayUnsupportedMessage();\n    };\n    imports.wbg.__wbg_displayMessage_c57c20204892da2b = function(arg0, arg1, arg2) {\n        getObject(arg0).displayMessage(getStringFromWasm0(arg1, arg2));\n    };\n    imports.wbg.__wbg_copyToAudioBuffer_58f244be94bac1d2 = function(arg0, arg1, arg2, arg3, arg4) {\n        copyToAudioBuffer(getObject(arg0), arg1 === 0 ? undefined : getArrayF32FromWasm0(arg1, arg2), arg3 === 0 ? undefined : getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_new_df6e6ab7a65c4c4d = function(arg0, arg1) {\n        var ret = new Error(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_panic_bbc809dd04a12c60 = function(arg0, arg1) {\n        getObject(arg0).panic(getObject(arg1));\n    };\n    imports.wbg.__wbg_onCallbackAvailable_3a48fae397926c96 = function(arg0, arg1, arg2) {\n        getObject(arg0).onCallbackAvailable(getStringFromWasm0(arg1, arg2));\n    };\n    imports.wbg.__wbg_onFSCommand_fb2f94653f71796e = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).onFSCommand(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return ret;\n    });\n    imports.wbg.__wbindgen_number_new = function(arg0) {\n        var ret = arg0;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_new_59cb74e423758ede = function() {\n        var ret = new Error();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_stack_558ba5917b466edd = function(arg0, arg1) {\n        var ret = getObject(arg1).stack;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_error_4bb6c2a97407129a = function(arg0, arg1) {\n        try {\n            console.error(getStringFromWasm0(arg0, arg1));\n        } finally {\n            wasm.__wbindgen_free(arg0, arg1);\n        }\n    };\n    imports.wbg.__wbindgen_is_undefined = function(arg0) {\n        var ret = getObject(arg0) === undefined;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_WebGl2RenderingContext_9818b789249374d3 = function(arg0) {\n        var ret = getObject(arg0) instanceof WebGL2RenderingContext;\n        return ret;\n    };\n    imports.wbg.__wbg_bindVertexArray_569f8b5466293fb0 = function(arg0, arg1) {\n        getObject(arg0).bindVertexArray(getObject(arg1));\n    };\n    imports.wbg.__wbg_blitFramebuffer_4b472bb45062bd6e = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).blitFramebuffer(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 >>> 0, arg10 >>> 0);\n    };\n    imports.wbg.__wbg_createVertexArray_1f35f6d163bbae13 = function(arg0) {\n        var ret = getObject(arg0).createVertexArray();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_renderbufferStorageMultisample_0426ba65de4885db = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n        getObject(arg0).renderbufferStorageMultisample(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);\n    };\n    imports.wbg.__wbg_texImage2D_79c0e000ef5e1b0a = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));\n    });\n    imports.wbg.__wbg_bindFramebuffer_4a37c2a7678c0994 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindRenderbuffer_203ad50a30ad3c0d = function(arg0, arg1, arg2) {\n        getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindTexture_f3ab6393f75a763f = function(arg0, arg1, arg2) {\n        getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_createFramebuffer_d01ac1b4f7c704e5 = function(arg0) {\n        var ret = getObject(arg0).createFramebuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createRenderbuffer_c008c3bb50dfff9d = function(arg0) {\n        var ret = getObject(arg0).createRenderbuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createTexture_151a385cd028c893 = function(arg0) {\n        var ret = getObject(arg0).createTexture();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_deleteFramebuffer_acd92acda81356e9 = function(arg0, arg1) {\n        getObject(arg0).deleteFramebuffer(getObject(arg1));\n    };\n    imports.wbg.__wbg_deleteRenderbuffer_b67ff9026d2be0fd = function(arg0, arg1) {\n        getObject(arg0).deleteRenderbuffer(getObject(arg1));\n    };\n    imports.wbg.__wbg_deleteTexture_125ab82d8330e268 = function(arg0, arg1) {\n        getObject(arg0).deleteTexture(getObject(arg1));\n    };\n    imports.wbg.__wbg_framebufferRenderbuffer_5293612146bd869a = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));\n    };\n    imports.wbg.__wbg_framebufferTexture2D_5b8575bda5aeceeb = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n        getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5);\n    };\n    imports.wbg.__wbg_getError_609a7fa815fd3d84 = function(arg0) {\n        var ret = getObject(arg0).getError();\n        return ret;\n    };\n    imports.wbg.__wbg_getParameter_be1e4b3ba2c0c339 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).getParameter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_texParameteri_6e7ba8c54bb639f2 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n    };\n    imports.wbg.__wbg_instanceof_Window_49f532f06a9786ee = function(arg0) {\n        var ret = getObject(arg0) instanceof Window;\n        return ret;\n    };\n    imports.wbg.__wbg_document_c0366b39e4f4c89a = function(arg0) {\n        var ret = getObject(arg0).document;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_location_c1e50a6e4c53d45c = function(arg0) {\n        var ret = getObject(arg0).location;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_navigator_95ba9cd684cf90aa = function(arg0) {\n        var ret = getObject(arg0).navigator;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_devicePixelRatio_268c49438a600d53 = function(arg0) {\n        var ret = getObject(arg0).devicePixelRatio;\n        return ret;\n    };\n    imports.wbg.__wbg_performance_87e4f3b6f966469f = function(arg0) {\n        var ret = getObject(arg0).performance;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_localStorage_a6fd83fc300473fc = handleError(function(arg0) {\n        var ret = getObject(arg0).localStorage;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_cancelAnimationFrame_60f9cf59ec1c0125 = handleError(function(arg0, arg1) {\n        getObject(arg0).cancelAnimationFrame(arg1);\n    });\n    imports.wbg.__wbg_focus_ab7792954990fdb9 = handleError(function(arg0) {\n        getObject(arg0).focus();\n    });\n    imports.wbg.__wbg_open_f355af0fd051a9d8 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_requestAnimationFrame_ef0e2294dc8b1088 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n        return ret;\n    });\n    imports.wbg.__wbg_fetch_f532e04b8fe49aa0 = function(arg0, arg1) {\n        var ret = getObject(arg0).fetch(getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_destination_4b8bc48ce4ebcd6c = function(arg0) {\n        var ret = getObject(arg0).destination;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_sampleRate_0d2637cc084b2eaf = function(arg0) {\n        var ret = getObject(arg0).sampleRate;\n        return ret;\n    };\n    imports.wbg.__wbg_currentTime_1bc83619afbf9e72 = function(arg0) {\n        var ret = getObject(arg0).currentTime;\n        return ret;\n    };\n    imports.wbg.__wbg_new_2f70ca6da1976429 = handleError(function() {\n        var ret = new lAudioContext();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_suspend_ad6a97ee4bac3247 = handleError(function(arg0) {\n        var ret = getObject(arg0).suspend();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createBuffer_48e051aa20c4ba3e = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createBuffer(arg1 >>> 0, arg2 >>> 0, arg3);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createBufferSource_0e160528349a924b = handleError(function(arg0) {\n        var ret = getObject(arg0).createBufferSource();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createChannelMerger_8e8d29d53323df91 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).createChannelMerger(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createChannelSplitter_10fc5fe404818afc = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).createChannelSplitter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createGain_a6211e4c615a1141 = handleError(function(arg0) {\n        var ret = getObject(arg0).createGain();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createScriptProcessor_e755612398f80dd4 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createScriptProcessor(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_decodeAudioData_1a1e91ec5cd60d59 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).decodeAudioData(getObject(arg1), getObject(arg2), getObject(arg3));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_resume_6dd89ae2f9b0bef3 = handleError(function(arg0) {\n        var ret = getObject(arg0).resume();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setvalue_cc85088ad32e56b0 = function(arg0, arg1) {\n        getObject(arg0).value = arg1;\n    };\n    imports.wbg.__wbg_linearRampToValueAtTime_02ce948b9b4323e0 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).linearRampToValueAtTime(arg1, arg2);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setValueAtTime_788b65cf85b7ba6a = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).setValueAtTime(arg1, arg2);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_gain_688543a4eee1eece = function(arg0) {\n        var ret = getObject(arg0).gain;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_userAgent_b9c7a338061adca8 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).userAgent;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_get_29a9ce40981b8710 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg1)[getStringFromWasm0(arg2, arg3)];\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_set_13ecdf3c7967382d = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0)[getStringFromWasm0(arg1, arg2)] = getStringFromWasm0(arg3, arg4);\n    });\n    imports.wbg.__wbg_delete_2c0adda5d0edea03 = handleError(function(arg0, arg1, arg2) {\n        delete getObject(arg0)[getStringFromWasm0(arg1, arg2)];\n    });\n    imports.wbg.__wbg_protocol_791396029743ce88 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).protocol;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_assign_8948549eb7c584b7 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).assign(getStringFromWasm0(arg1, arg2));\n    });\n    imports.wbg.__wbg_baseURI_1fe61dc0a39a61ed = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).baseURI;\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_appendChild_7c45aeccd496f2a5 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).appendChild(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44 = function(arg0) {\n        var ret = getObject(arg0) instanceof SVGSVGElement;\n        return ret;\n    };\n    imports.wbg.__wbg_createSVGMatrix_9088b605b3cbb935 = function(arg0) {\n        var ret = getObject(arg0).createSVGMatrix();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_length_da24898717a463e0 = function(arg0) {\n        var ret = getObject(arg0).length;\n        return ret;\n    };\n    imports.wbg.__wbg_setProperty_46b9bd1b0fad730b = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n    });\n    imports.wbg.__wbg_offsetX_4bd8c9fcb457cf0b = function(arg0) {\n        var ret = getObject(arg0).offsetX;\n        return ret;\n    };\n    imports.wbg.__wbg_offsetY_0dde12490e8ebfba = function(arg0) {\n        var ret = getObject(arg0).offsetY;\n        return ret;\n    };\n    imports.wbg.__wbg_button_9e74bd912190b055 = function(arg0) {\n        var ret = getObject(arg0).button;\n        return ret;\n    };\n    imports.wbg.__wbg_new_0af3e1641443f13d = handleError(function() {\n        var ret = new Path2D();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_addPath_0b9c6299797f0772 = function(arg0, arg1, arg2) {\n        getObject(arg0).addPath(getObject(arg1), getObject(arg2));\n    };\n    imports.wbg.__wbg_closePath_6e9529e4d6da5e83 = function(arg0) {\n        getObject(arg0).closePath();\n    };\n    imports.wbg.__wbg_lineTo_2157bf4d1b0ce0d3 = function(arg0, arg1, arg2) {\n        getObject(arg0).lineTo(arg1, arg2);\n    };\n    imports.wbg.__wbg_moveTo_fb2215902520c649 = function(arg0, arg1, arg2) {\n        getObject(arg0).moveTo(arg1, arg2);\n    };\n    imports.wbg.__wbg_quadraticCurveTo_9c392c57a794a2d2 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).quadraticCurveTo(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_connect_607a0c51b546a3db = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).connect(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_connect_a4236fe1b645b8fb = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).connect(getObject(arg1), arg2 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_connect_db97a7bc9cd258c6 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).connect(getObject(arg1), arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_disconnect_1f5d0443b0bca9c8 = handleError(function(arg0) {\n        getObject(arg0).disconnect();\n    });\n    imports.wbg.__wbg_outputBuffer_1fc843f5ddfd743b = handleError(function(arg0) {\n        var ret = getObject(arg0).outputBuffer;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setTransform_041d67e3d6972fd7 = function(arg0, arg1) {\n        getObject(arg0).setTransform(getObject(arg1));\n    };\n    imports.wbg.__wbg_bindVertexArrayOES_17e98f43d896f40b = function(arg0, arg1) {\n        getObject(arg0).bindVertexArrayOES(getObject(arg1));\n    };\n    imports.wbg.__wbg_createVertexArrayOES_393e00fa6f931f59 = function(arg0) {\n        var ret = getObject(arg0).createVertexArrayOES();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_seta_6c309b33d9a4fb29 = function(arg0, arg1) {\n        getObject(arg0).a = arg1;\n    };\n    imports.wbg.__wbg_setb_378147d7ba767ab1 = function(arg0, arg1) {\n        getObject(arg0).b = arg1;\n    };\n    imports.wbg.__wbg_setc_cc36b264b7a1ae60 = function(arg0, arg1) {\n        getObject(arg0).c = arg1;\n    };\n    imports.wbg.__wbg_setd_998c5989f5780653 = function(arg0, arg1) {\n        getObject(arg0).d = arg1;\n    };\n    imports.wbg.__wbg_sete_42bf2f390f25e536 = function(arg0, arg1) {\n        getObject(arg0).e = arg1;\n    };\n    imports.wbg.__wbg_setf_df5aef1469b0c50b = function(arg0, arg1) {\n        getObject(arg0).f = arg1;\n    };\n    imports.wbg.__wbg_deltaY_2722120e563d3160 = function(arg0) {\n        var ret = getObject(arg0).deltaY;\n        return ret;\n    };\n    imports.wbg.__wbg_deltaMode_3db3c9c4bedf191d = function(arg0) {\n        var ret = getObject(arg0).deltaMode;\n        return ret;\n    };\n    imports.wbg.__wbg_setbuffer_8c396e74724eda12 = function(arg0, arg1) {\n        getObject(arg0).buffer = getObject(arg1);\n    };\n    imports.wbg.__wbg_setloop_1e141edefc26db22 = function(arg0, arg1) {\n        getObject(arg0).loop = arg1 !== 0;\n    };\n    imports.wbg.__wbg_setloopStart_4162b0a533fbc0d5 = function(arg0, arg1) {\n        getObject(arg0).loopStart = arg1;\n    };\n    imports.wbg.__wbg_setloopEnd_e81eb72ea2277d88 = function(arg0, arg1) {\n        getObject(arg0).loopEnd = arg1;\n    };\n    imports.wbg.__wbg_setonended_f6f3e04e13c07db4 = function(arg0, arg1) {\n        getObject(arg0).onended = getObject(arg1);\n    };\n    imports.wbg.__wbg_start_f5e66921db9afaee = handleError(function(arg0) {\n        getObject(arg0).start();\n    });\n    imports.wbg.__wbg_start_0237410bb20c6213 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).start(arg1, arg2);\n    });\n    imports.wbg.__wbg_stop_5765c7cac3ec1564 = handleError(function(arg0, arg1) {\n        getObject(arg0).stop(arg1);\n    });\n    imports.wbg.__wbg_instanceof_HtmlFormElement_26283084b0956b17 = function(arg0) {\n        var ret = getObject(arg0) instanceof HTMLFormElement;\n        return ret;\n    };\n    imports.wbg.__wbg_submit_121b8e3bd960f229 = handleError(function(arg0) {\n        getObject(arg0).submit();\n    });\n    imports.wbg.__wbg_pointerId_602db5c989b38cc0 = function(arg0) {\n        var ret = getObject(arg0).pointerId;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_Response_f52c65c389890639 = function(arg0) {\n        var ret = getObject(arg0) instanceof Response;\n        return ret;\n    };\n    imports.wbg.__wbg_ok_c20643e0a45dc5a0 = function(arg0) {\n        var ret = getObject(arg0).ok;\n        return ret;\n    };\n    imports.wbg.__wbg_statusText_76ce672b84096caf = function(arg0, arg1) {\n        var ret = getObject(arg1).statusText;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_arrayBuffer_0ba17dfaad804b6f = handleError(function(arg0) {\n        var ret = getObject(arg0).arrayBuffer();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_key_d9b602f48baca7bc = function(arg0, arg1) {\n        var ret = getObject(arg1).key;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_code_cbf76ad384ae1179 = function(arg0, arg1) {\n        var ret = getObject(arg1).code;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_now_7628760b7b640632 = function(arg0) {\n        var ret = getObject(arg0).now();\n        return ret;\n    };\n    imports.wbg.__wbg_newwithstrandinit_11debb554792e043 = handleError(function(arg0, arg1, arg2) {\n        var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setonaudioprocess_66d0b1fa0dd39606 = function(arg0, arg1) {\n        getObject(arg0).onaudioprocess = getObject(arg1);\n    };\n    imports.wbg.__wbg_body_c8cb19d760637268 = function(arg0) {\n        var ret = getObject(arg0).body;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createElement_99351c8bf0efac6e = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createElementNS_a7ef126eff5022c2 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setid_f33ce4e43b43f57a = function(arg0, arg1, arg2) {\n        getObject(arg0).id = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_clientWidth_2c84a7ebc75dd4f0 = function(arg0) {\n        var ret = getObject(arg0).clientWidth;\n        return ret;\n    };\n    imports.wbg.__wbg_clientHeight_f56dfe03d1c42f3e = function(arg0) {\n        var ret = getObject(arg0).clientHeight;\n        return ret;\n    };\n    imports.wbg.__wbg_querySelector_155b00165b78a12f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_releasePointerCapture_4b78cb9c51d4a539 = handleError(function(arg0, arg1) {\n        getObject(arg0).releasePointerCapture(arg1);\n    });\n    imports.wbg.__wbg_setAttribute_e71b9086539f06a1 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n    });\n    imports.wbg.__wbg_setAttributeNS_a66240d5c750d0fa = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).setAttributeNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4), getStringFromWasm0(arg5, arg6));\n    });\n    imports.wbg.__wbg_setPointerCapture_54ee987062d42d03 = handleError(function(arg0, arg1) {\n        getObject(arg0).setPointerCapture(arg1);\n    });\n    imports.wbg.__wbg_remove_0639495587b1aaeb = function(arg0) {\n        getObject(arg0).remove();\n    };\n    imports.wbg.__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85 = function(arg0) {\n        var ret = getObject(arg0) instanceof WebGLRenderingContext;\n        return ret;\n    };\n    imports.wbg.__wbg_drawingBufferWidth_fab3e20dd1ba5d4e = function(arg0) {\n        var ret = getObject(arg0).drawingBufferWidth;\n        return ret;\n    };\n    imports.wbg.__wbg_drawingBufferHeight_31bc93d4dc3a0dcc = function(arg0) {\n        var ret = getObject(arg0).drawingBufferHeight;\n        return ret;\n    };\n    imports.wbg.__wbg_bufferData_d47c8467e443121d = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).bufferData(arg1 >>> 0, getArrayU8FromWasm0(arg2, arg3), arg4 >>> 0);\n    };\n    imports.wbg.__wbg_texImage2D_a4011abffe0229fb = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));\n    });\n    imports.wbg.__wbg_uniform1fv_cd9d2dea0641919d = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_uniform4fv_24ef46675c137552 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_uniformMatrix3fv_a0a261980af4587d = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_uniformMatrix4fv_088c96db8ee28c1d = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_activeTexture_a51ec6273de88bc6 = function(arg0, arg1) {\n        getObject(arg0).activeTexture(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_attachShader_0dd248f6ab98fcf2 = function(arg0, arg1, arg2) {\n        getObject(arg0).attachShader(getObject(arg1), getObject(arg2));\n    };\n    imports.wbg.__wbg_bindBuffer_1ceb83e9674e812a = function(arg0, arg1, arg2) {\n        getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindFramebuffer_d8f98d1a7f6d67d1 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindRenderbuffer_1ba9206d5f319ae1 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindTexture_6121e6db3f879582 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_blendFunc_34a6bb31770822c5 = function(arg0, arg1, arg2) {\n        getObject(arg0).blendFunc(arg1 >>> 0, arg2 >>> 0);\n    };\n    imports.wbg.__wbg_clear_f6b2dd48aeed2752 = function(arg0, arg1) {\n        getObject(arg0).clear(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_clearColor_89f7819aa9f80129 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).clearColor(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_colorMask_88ebee15531b14ef = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);\n    };\n    imports.wbg.__wbg_compileShader_28bdbafe4445d24b = function(arg0, arg1) {\n        getObject(arg0).compileShader(getObject(arg1));\n    };\n    imports.wbg.__wbg_createBuffer_acedc3831832a280 = function(arg0) {\n        var ret = getObject(arg0).createBuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createProgram_7e2f44b7b74694d4 = function(arg0) {\n        var ret = getObject(arg0).createProgram();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createShader_64c474f1d1d0c1f8 = function(arg0, arg1) {\n        var ret = getObject(arg0).createShader(arg1 >>> 0);\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createTexture_0a156dab1efc3499 = function(arg0) {\n        var ret = getObject(arg0).createTexture();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_disable_5b9c6f74d5efd3a5 = function(arg0, arg1) {\n        getObject(arg0).disable(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_disableVertexAttribArray_ba8f39ecd28c601b = function(arg0, arg1) {\n        getObject(arg0).disableVertexAttribArray(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_drawElements_3eb5ba8a511ce0f0 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);\n    };\n    imports.wbg.__wbg_enable_87f39f6396535e1f = function(arg0, arg1) {\n        getObject(arg0).enable(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5 = function(arg0, arg1) {\n        getObject(arg0).enableVertexAttribArray(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_getAttribLocation_ba61f837da80e249 = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return ret;\n    };\n    imports.wbg.__wbg_getExtension_c6863c255090d82f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getParameter_ff687a6ea303e551 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).getParameter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getProgramInfoLog_aacf06c959070653 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg1).getProgramInfoLog(getObject(arg2));\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_getProgramParameter_a89bf14502c109f7 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_getShaderInfoLog_1eb885f2468e2429 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg1).getShaderInfoLog(getObject(arg2));\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_getUniformLocation_ca853de4f2f9270d = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_linkProgram_46a36cb158f10676 = function(arg0, arg1) {\n        getObject(arg0).linkProgram(getObject(arg1));\n    };\n    imports.wbg.__wbg_pixelStorei_31f6dc244bf4cd5b = function(arg0, arg1, arg2) {\n        getObject(arg0).pixelStorei(arg1 >>> 0, arg2);\n    };\n    imports.wbg.__wbg_shaderSource_700ae72fca39850d = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_stencilFunc_cc85d77d2098446b = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).stencilFunc(arg1 >>> 0, arg2, arg3 >>> 0);\n    };\n    imports.wbg.__wbg_stencilMask_ed2cded2c2b0b72c = function(arg0, arg1) {\n        getObject(arg0).stencilMask(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_stencilOp_1b3529546c1fdcc2 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).stencilOp(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n    };\n    imports.wbg.__wbg_texParameteri_e45f3977eb998137 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n    };\n    imports.wbg.__wbg_uniform1f_3eb09312a513b94a = function(arg0, arg1, arg2) {\n        getObject(arg0).uniform1f(getObject(arg1), arg2);\n    };\n    imports.wbg.__wbg_uniform1i_e76b668973ae0655 = function(arg0, arg1, arg2) {\n        getObject(arg0).uniform1i(getObject(arg1), arg2);\n    };\n    imports.wbg.__wbg_useProgram_d63a57db0571e803 = function(arg0, arg1) {\n        getObject(arg0).useProgram(getObject(arg1));\n    };\n    imports.wbg.__wbg_vertexAttribPointer_b4b829a4f5a3778e = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);\n    };\n    imports.wbg.__wbg_viewport_54305c74f5668b33 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).viewport(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_debug_146b863607d79e9d = function(arg0) {\n        console.debug(getObject(arg0));\n    };\n    imports.wbg.__wbg_error_e325755affc8634b = function(arg0) {\n        console.error(getObject(arg0));\n    };\n    imports.wbg.__wbg_info_d60054f760c729cc = function(arg0) {\n        console.info(getObject(arg0));\n    };\n    imports.wbg.__wbg_log_f2e13ca55da8bad3 = function(arg0) {\n        console.log(getObject(arg0));\n    };\n    imports.wbg.__wbg_warn_9e92ccdc67085e1b = function(arg0) {\n        console.warn(getObject(arg0));\n    };\n    imports.wbg.__wbg_style_9b773f0fc441eddc = function(arg0) {\n        var ret = getObject(arg0).style;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a = handleError(function(arg0, arg1) {\n        var ret = new Blob(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_currentTarget_b545d0d803b3a62e = function(arg0) {\n        var ret = getObject(arg0).currentTarget;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_preventDefault_9aab6c264e5df3ee = function(arg0) {\n        getObject(arg0).preventDefault();\n    };\n    imports.wbg.__wbg_addEventListener_6a37bc32387cb66d = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n    });\n    imports.wbg.__wbg_addEventListener_a422088e686210b5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));\n    });\n    imports.wbg.__wbg_addEventListener_50b4229556ab0b83 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n    });\n    imports.wbg.__wbg_removeEventListener_70dfb387da1982ac = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n    });\n    imports.wbg.__wbg_removeEventListener_4448b273b47328f8 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n    });\n    imports.wbg.__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3 = function(arg0) {\n        var ret = getObject(arg0) instanceof HTMLCanvasElement;\n        return ret;\n    };\n    imports.wbg.__wbg_width_0efa4604d41c58c5 = function(arg0) {\n        var ret = getObject(arg0).width;\n        return ret;\n    };\n    imports.wbg.__wbg_setwidth_1d0e975feecff3ef = function(arg0, arg1) {\n        getObject(arg0).width = arg1 >>> 0;\n    };\n    imports.wbg.__wbg_height_aa24e3fef658c4a8 = function(arg0) {\n        var ret = getObject(arg0).height;\n        return ret;\n    };\n    imports.wbg.__wbg_setheight_7758ee3ff5c65474 = function(arg0, arg1) {\n        getObject(arg0).height = arg1 >>> 0;\n    };\n    imports.wbg.__wbg_getContext_3db9399e6dc524ff = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getContext_93be69215ea9dbbf = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2), getObject(arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setsrc_ca894d724570195d = function(arg0, arg1, arg2) {\n        getObject(arg0).src = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_new_1f2ded01c889cd38 = handleError(function() {\n        var ret = new Image();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_newwithwidthandheight_0f3a13502ca94c49 = handleError(function(arg0, arg1) {\n        var ret = new Image(arg0 >>> 0, arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_data_55e064fddf34cf3b = function(arg0, arg1) {\n        var ret = getObject(arg1).data;\n        var ptr0 = passArray8ToWasm0(ret, wasm.__wbindgen_malloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34 = function(arg0) {\n        var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n        return ret;\n    };\n    imports.wbg.__wbg_setglobalAlpha_b4134dbd884b4d37 = function(arg0, arg1) {\n        getObject(arg0).globalAlpha = arg1;\n    };\n    imports.wbg.__wbg_setglobalCompositeOperation_557a59a0ccf673d6 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).globalCompositeOperation = getStringFromWasm0(arg1, arg2);\n    });\n    imports.wbg.__wbg_setstrokeStyle_7f507e0d838e3dcf = function(arg0, arg1) {\n        getObject(arg0).strokeStyle = getObject(arg1);\n    };\n    imports.wbg.__wbg_setfillStyle_bbe97cb93eb1b55c = function(arg0, arg1) {\n        getObject(arg0).fillStyle = getObject(arg1);\n    };\n    imports.wbg.__wbg_setfilter_df75805bea0a8415 = function(arg0, arg1, arg2) {\n        getObject(arg0).filter = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setlineWidth_61de9d1eb4e9f8a6 = function(arg0, arg1) {\n        getObject(arg0).lineWidth = arg1;\n    };\n    imports.wbg.__wbg_setlineCap_bff1a8858c9f067e = function(arg0, arg1, arg2) {\n        getObject(arg0).lineCap = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setlineJoin_de47815c918d7874 = function(arg0, arg1, arg2) {\n        getObject(arg0).lineJoin = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setmiterLimit_84b1a1dbddcd456a = function(arg0, arg1) {\n        getObject(arg0).miterLimit = arg1;\n    };\n    imports.wbg.__wbg_drawImage_b8dec9034bf1d116 = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n    });\n    imports.wbg.__wbg_drawImage_801ad094f4734689 = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n    });\n    imports.wbg.__wbg_fill_6c721ab8eec90f70 = function(arg0, arg1) {\n        getObject(arg0).fill(getObject(arg1));\n    };\n    imports.wbg.__wbg_stroke_e25cf47e0d9a36c3 = function(arg0, arg1) {\n        getObject(arg0).stroke(getObject(arg1));\n    };\n    imports.wbg.__wbg_createPattern_006b6402db95df36 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createPattern(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getImageData_dd3caac873bf461f = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).getImageData(arg1, arg2, arg3, arg4);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_clearRect_6af85454d06df5fa = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).clearRect(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_fillRect_c79d1b386c04efed = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_resetTransform_f78edb82fd1f7239 = handleError(function(arg0) {\n        getObject(arg0).resetTransform();\n    });\n    imports.wbg.__wbg_setTransform_5f5f19301b76a8d6 = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).setTransform(arg1, arg2, arg3, arg4, arg5, arg6);\n    });\n    imports.wbg.__wbg_get_5fa3f454aa041e6e = function(arg0, arg1) {\n        var ret = getObject(arg0)[arg1 >>> 0];\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_next_373211328013f949 = handleError(function(arg0) {\n        var ret = getObject(arg0).next();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_done_49c598117f977077 = function(arg0) {\n        var ret = getObject(arg0).done;\n        return ret;\n    };\n    imports.wbg.__wbg_value_c9ae6368b110a068 = function(arg0) {\n        var ret = getObject(arg0).value;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_get_85e0a3b459845fe2 = handleError(function(arg0, arg1) {\n        var ret = Reflect.get(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_call_951bd0c6d815d6f1 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).call(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_new_9dff83a08f5994f3 = function() {\n        var ret = new Array();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_isArray_cf56c8363b1b35d9 = function(arg0) {\n        var ret = Array.isArray(getObject(arg0));\n        return ret;\n    };\n    imports.wbg.__wbg_of_3a4bb382824dd437 = function(arg0, arg1) {\n        var ret = Array.of(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_push_3ddd8187ff2ff82d = function(arg0, arg1) {\n        var ret = getObject(arg0).push(getObject(arg1));\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57 = function(arg0) {\n        var ret = getObject(arg0) instanceof ArrayBuffer;\n        return ret;\n    };\n    imports.wbg.__wbg_new_24c0ca5f23ee2dd9 = function(arg0) {\n        var ret = new ArrayBuffer(arg0 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_slice_a498e5bb17f253f3 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).slice(arg1 >>> 0, arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_values_f28e313e2260a03a = function(arg0) {\n        var ret = getObject(arg0).values();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newnoargs_7c6bd521992b4022 = function(arg0, arg1) {\n        var ret = new Function(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_apply_4e68243803368d89 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).apply(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_call_bf745b1758bb6693 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getTime_cf686ab22ab03a3e = function(arg0) {\n        var ret = getObject(arg0).getTime();\n        return ret;\n    };\n    imports.wbg.__wbg_getTimezoneOffset_b9f3c4664b1a35ae = function(arg0) {\n        var ret = getObject(arg0).getTimezoneOffset();\n        return ret;\n    };\n    imports.wbg.__wbg_new0_abd359df4aeb5b55 = function() {\n        var ret = new Date();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_instanceof_Object_cdaa71ad2ca2f4c5 = function(arg0) {\n        var ret = getObject(arg0) instanceof Object;\n        return ret;\n    };\n    imports.wbg.__wbg_entries_7144a7309b22df64 = function(arg0) {\n        var ret = Object.entries(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_fromEntries_cc1186a09f1ec7f2 = handleError(function(arg0) {\n        var ret = Object.fromEntries(getObject(arg0));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_is_049b1aece40b5301 = function(arg0, arg1) {\n        var ret = Object.is(getObject(arg0), getObject(arg1));\n        return ret;\n    };\n    imports.wbg.__wbg_new_ba07d0daa0e4677e = function() {\n        var ret = new Object();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_resolve_6e61e640925a0db9 = function(arg0) {\n        var ret = Promise.resolve(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_then_dd3785597974798a = function(arg0, arg1) {\n        var ret = getObject(arg0).then(getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_then_0f957e0f4c3e537a = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_self_6baf3a3aa7b63415 = handleError(function() {\n        var ret = self.self;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_window_63fc4027b66c265b = handleError(function() {\n        var ret = window.window;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_globalThis_513fb247e8e4e6d2 = handleError(function() {\n        var ret = globalThis.globalThis;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_global_b87245cd886d7113 = handleError(function() {\n        var ret = global.global;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_buffer_3f12a1c608c6d04e = function(arg0) {\n        var ret = getObject(arg0).buffer;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newwithbyteoffsetandlength_4c51342f87299c5a = function(arg0, arg1, arg2) {\n        var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_length_c645e7c02233b440 = function(arg0) {\n        var ret = getObject(arg0).length;\n        return ret;\n    };\n    imports.wbg.__wbg_new_c6c0228e6d22a2f9 = function(arg0) {\n        var ret = new Uint8Array(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_set_b91afac9fd216d99 = function(arg0, arg1, arg2) {\n        getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n    };\n    imports.wbg.__wbg_fill_f49407f577541856 = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).fill(arg1, arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_buffer_c385539cb4060297 = function(arg0) {\n        var ret = getObject(arg0).buffer;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_byteLength_11e6bdc2fac53a3c = function(arg0) {\n        var ret = getObject(arg0).byteLength;\n        return ret;\n    };\n    imports.wbg.__wbg_byteOffset_5db4e07752c85395 = function(arg0) {\n        var ret = getObject(arg0).byteOffset;\n        return ret;\n    };\n    imports.wbg.__wbg_ownKeys_d44c25f33e28bfab = handleError(function(arg0) {\n        var ret = Reflect.ownKeys(getObject(arg0));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_set_9bdd413385146137 = handleError(function(arg0, arg1, arg2) {\n        var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n        return ret;\n    });\n    imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = typeof(obj) === 'number' ? obj : undefined;\n        getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n        getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n    };\n    imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = typeof(obj) === 'string' ? obj : undefined;\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_boolean_get = function(arg0) {\n        const v = getObject(arg0);\n        var ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n        return ret;\n    };\n    imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n        var ret = debugString(getObject(arg1));\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n        throw new Error(getStringFromWasm0(arg0, arg1));\n    };\n    imports.wbg.__wbindgen_rethrow = function(arg0) {\n        throw takeObject(arg0);\n    };\n    imports.wbg.__wbindgen_memory = function() {\n        var ret = wasm.memory;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1219 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_32);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1221 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_35);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1223 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_38);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1225 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_41);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1227 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_44);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1229 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_47);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1231 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_50);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1233 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 509, __wbg_adapter_53);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1738 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 829, __wbg_adapter_56);\n        return addHeapObject(ret);\n    };\n\n    if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {\n        input = fetch(input);\n    }\n\n    const { instance, module } = await load(await input, imports);\n\n    wasm = instance.exports;\n    init.__wbindgen_wasm_module = module;\n\n    return wasm;\n}\n\nexport default init;\n\n","/* eslint @typescript-eslint/no-explicit-any: \"off\" */\n/* eslint @typescript-eslint/ban-types: \"off\" */\n/**\n * Polyfills the `Array.prototype.reduce` method.\n *\n * Production steps of ECMA-262, Edition 5, 15.4.4.21\n * Reference: https://es5.github.io/#x15.4.4.21\n * https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n *\n */\nfunction polyfillArrayPrototypeReduce() {\n    Object.defineProperty(Array.prototype, \"reduce\", {\n        value: function (...args) {\n            if (args.length === 0 &&\n                window.Prototype &&\n                window.Prototype.Version &&\n                window.Prototype.Version < \"1.6.1\") {\n                // Off-spec: compatibility with prototype.js\n                return this.length > 1 ? this : this[0];\n            }\n            const callback = args[0];\n            if (this === null) {\n                throw new TypeError(\"Array.prototype.reduce called on null or undefined\");\n            }\n            if (typeof callback !== \"function\") {\n                throw new TypeError(`${callback} is not a function`);\n            }\n            const o = Object(this);\n            const len = o.length >>> 0;\n            let k = 0;\n            let value;\n            if (args.length >= 2) {\n                value = args[1];\n            }\n            else {\n                while (k < len && !(k in o)) {\n                    k++;\n                }\n                if (k >= len) {\n                    throw new TypeError(\"Reduce of empty array with no initial value\");\n                }\n                value = o[k++];\n            }\n            while (k < len) {\n                if (k in o) {\n                    value = callback(value, o[k], k, o);\n                }\n                k++;\n            }\n            return value;\n        },\n    });\n}\n/**\n * Polyfills the `Window` function.\n *\n */\nfunction polyfillWindow() {\n    if (typeof window.constructor !== \"function\" ||\n        !isNativeFunction(window.constructor)) {\n        // Don't polyfill `Window` if `window.constructor` has been overridden.\n        return;\n    }\n    // @ts-expect-error: `Function not assignable to { new (): Window; prototype: Window; }`\n    window.Window = window.constructor;\n}\n/**\n * Polyfills the `Reflect` object and members.\n *\n * Currently it's a minimal implementation with only `get` and `set`\n * just enough for wasm-bindgen's stdlib to not crash on pages I've found.\n *\n */\nfunction tryPolyfillReflect() {\n    if (window.Reflect == undefined) {\n        // @ts-expect-error: {} indeed doesn't implement Reflect's interface.\n        window.Reflect = {};\n    }\n    if (typeof Reflect.get !== \"function\") {\n        Object.defineProperty(Reflect, \"get\", {\n            value: function (target, key) {\n                return target[key];\n            },\n        });\n    }\n    if (typeof Reflect.set !== \"function\") {\n        Object.defineProperty(Reflect, \"set\", {\n            value: function (target, key, value) {\n                target[key] = value;\n            },\n        });\n    }\n}\n/**\n * Determines whether a function is native or not.\n *\n * @param func The function to test.\n * @returns True if the function hasn't been overridden.\n */\nfunction isNativeFunction(func) {\n    const val = typeof Function.prototype.toString === \"function\"\n        ? Function.prototype.toString()\n        : null;\n    if (typeof val === \"string\" && val.indexOf(\"[native code]\") >= 0) {\n        return (Function.prototype.toString.call(func).indexOf(\"[native code]\") >= 0);\n    }\n    return false;\n}\n/**\n * Checks and applies the polyfills to the current window, if needed.\n *\n */\nexport function setPolyfillsOnLoad() {\n    if (typeof Array.prototype.reduce !== \"function\" ||\n        !isNativeFunction(Array.prototype.reduce)) {\n        // Some external libraries override the `Array.prototype.reduce` method in a way\n        // that causes Webpack to crash (#1507, #1865), so we need to override it again.\n        polyfillArrayPrototypeReduce();\n    }\n    if (typeof Window !== \"function\" || !isNativeFunction(Window)) {\n        // Overriding the native `Window` function causes issues in wasm-bindgen, as a\n        // code like `window instanceof Window` will no longer work.\n        polyfillWindow();\n    }\n    // Some pages override native `Reflect` with a new object without some properties,\n    // which causes issues for wasm-bindgen's stdlib implementation.\n    tryPolyfillReflect();\n}\n","/* eslint @typescript-eslint/no-explicit-any: \"off\" */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\n/**\n * Conditional ruffle loader\n */\nimport init, { Ruffle } from \"../pkg/ruffle_web\";\nimport { setPolyfillsOnLoad } from \"./js-polyfills\";\n/**\n * Load ruffle from an automatically-detected location.\n *\n * This function returns a new instance of Ruffle and downloads it every time.\n * You should not use it directly; this module will memoize the resource\n * download.\n *\n * @returns A ruffle constructor that may be used to create new Ruffle\n * instances.\n */\nfunction fetchRuffle() {\n    return __awaiter(this, void 0, void 0, function* () {\n        // Apply some pure JavaScript polyfills to prevent conflicts with external\n        // libraries, if needed.\n        setPolyfillsOnLoad();\n        // wasm files are set to use file-loader,\n        // so this package will resolve to the URL of the wasm file.\n        const ruffleWasm = yield import(\n        /* webpackMode: \"eager\" */\n        \"../pkg/ruffle_web_bg.wasm\");\n        yield init(ruffleWasm.default);\n        return Ruffle;\n    });\n}\nlet lastLoaded = null;\n/**\n * Obtain an instance of `Ruffle`.\n *\n * This function returns a promise which yields `Ruffle` asynchronously.\n *\n * @returns A ruffle constructor that may be used to create new Ruffle\n * instances.\n */\nexport function loadRuffle() {\n    if (lastLoaded == null) {\n        lastLoaded = fetchRuffle();\n    }\n    return lastLoaded;\n}\n","/**\n * Replacement object for `MimeTypeArray` that lets us install new fake mime\n * types.\n *\n * Unlike plugins we can at least enumerate mime types in Firefox, so we don't\n * lose data.\n *\n * We also expose a method called `install` which adds a new plugin. This is\n * used to falsify Flash detection. If the existing `navigator.mimeTypes` has an\n * `install` method, you should not use `RuffleMimeTypeArray` as some other\n * plugin emulator is already present.\n */\nclass RuffleMimeTypeArray {\n    constructor(native_mimetype_array) {\n        this.__mimetypes = [];\n        this.__named_mimetypes = {};\n        if (native_mimetype_array) {\n            for (let i = 0; i < native_mimetype_array.length; i++) {\n                this.install(native_mimetype_array[i]);\n            }\n        }\n    }\n    /**\n     * Install a MIME Type into the array.\n     *\n     * @param mimetype The mimetype to install\n     */\n    install(mimetype) {\n        const id = this.__mimetypes.length;\n        this.__mimetypes.push(mimetype);\n        this.__named_mimetypes[mimetype.type] = mimetype;\n        this[mimetype.type] = mimetype;\n        this[id] = mimetype;\n    }\n    item(index) {\n        return this.__mimetypes[index];\n    }\n    namedItem(name) {\n        return this.__named_mimetypes[name];\n    }\n    get length() {\n        return this.__mimetypes.length;\n    }\n    [Symbol.iterator]() {\n        return this.__mimetypes[Symbol.iterator]();\n    }\n}\n/**\n * Equivalent object to `Plugin` that allows us to falsify plugins.\n */\nclass RufflePlugin extends RuffleMimeTypeArray {\n    constructor(name, description, filename, mimetypes) {\n        super(mimetypes);\n        this.name = name;\n        this.description = description;\n        this.filename = filename;\n    }\n    install(mimetype) {\n        super.install(mimetype);\n    }\n    [Symbol.iterator]() {\n        return super[Symbol.iterator]();\n    }\n}\n/**\n * Replacement object for `PluginArray` that lets us install new fake plugins.\n *\n * This object needs to wrap the native plugin array, since the user might have\n * actual plugins installed. Firefox doesn't let us enumerate the array, though,\n * which has some consequences. Namely, we can't actually perfectly wrap the\n * native plugin array, at least unless there's some secret \"unresolved object\n * property name handler\" that I've never known before in JS...\n *\n * We can still wrap `namedItem` perfectly at least.\n *\n * We also expose a method called `install` which adds a new plugin. This is\n * used to falsify Flash detection. If the existing `navigator.plugins` has an\n * `install` method, you should not use `RufflePluginArray` as some other plugin\n * emulator is already present.\n */\nclass RufflePluginArray {\n    constructor(native_plugin_array) {\n        this.__plugins = [];\n        this.__named_plugins = {};\n        for (let i = 0; i < native_plugin_array.length; i++) {\n            this.install(native_plugin_array[i]);\n        }\n    }\n    install(plugin) {\n        const id = this.__plugins.length;\n        this.__plugins.push(plugin);\n        this.__named_plugins[plugin.name] = plugin;\n        this[plugin.name] = plugin;\n        this[id] = plugin;\n    }\n    item(index) {\n        return this.__plugins[index];\n    }\n    namedItem(name) {\n        return this.__named_plugins[name];\n    }\n    get length() {\n        return this.__plugins.length;\n    }\n}\n/**\n * A fake plugin designed to trigger Flash detection scripts.\n */\nexport const FLASH_PLUGIN = new RufflePlugin(\"Shockwave Flash\", \"Shockwave Flash 32.0 r0\", \"ruffle.js\", null);\nFLASH_PLUGIN.install({\n    type: \"application/futuresplash\",\n    description: \"Shockwave Flash\",\n    suffixes: \"spl\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/x-shockwave-flash\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/x-shockwave-flash2-preview\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/vnd.adobe.flash-movie\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\n/**\n * Install a fake plugin such that detectors will see it in `navigator.plugins`.\n *\n * This function takes care to check if the existing implementation of\n * `navigator.plugins` already accepts fake plugin entries. If so, it will use\n * that version of the plugin array. This allows the plugin polyfill to compose\n * across multiple plugin emulators with the first emulator's polyfill winning.\n *\n * @param plugin The plugin to install\n */\nexport function installPlugin(plugin) {\n    if (!(\"install\" in navigator.plugins) || !navigator.plugins[\"install\"]) {\n        Object.defineProperty(navigator, \"plugins\", {\n            value: new RufflePluginArray(navigator.plugins),\n            writable: false,\n        });\n    }\n    const plugins = navigator.plugins;\n    plugins.install(plugin);\n    if (plugin.length > 0 &&\n        (!(\"install\" in navigator.mimeTypes) || !navigator.mimeTypes[\"install\"])) {\n        Object.defineProperty(navigator, \"mimeTypes\", {\n            value: new RuffleMimeTypeArray(navigator.mimeTypes),\n            writable: false,\n        });\n    }\n    const mimeTypes = navigator.mimeTypes;\n    for (let i = 0; i < plugin.length; i += 1) {\n        mimeTypes.install(plugin[i]);\n    }\n}\n","/**\n * The shadow template which is used to fill the actual Ruffle player element\n * on the page.\n */\nexport const ruffleShadowTemplate = document.createElement(\"template\");\nruffleShadowTemplate.innerHTML = `\n    <style>\n        :host {\n            --ruffle-blue: #37528c;\n            --ruffle-orange: #ffad33;\n\n            display: inline-block;\n            position: relative;\n            /* Default width/height; this will get overridden by user styles/attributes. */\n            width: 550px;\n            height: 400px;\n            font-family: Arial, sans-serif;\n            letter-spacing: 0.4px;\n            touch-action: none;\n            user-select: none;\n            -webkit-user-select: none;\n            -webkit-tap-highlight-color: transparent;\n        }\n        \n        /* Ruffle's width/height CSS interferes Safari fullscreen CSS. */\n        /* Ensure that Safari's fullscreen mode actually fills the screen. */\n        :host(:-webkit-full-screen) {\n            display: block;\n            width: 100% !important;\n            height: 100% !important;\n        }\n\n        /* All of these use the dimensions specified by the embed. */\n        #container,\n        #play_button,\n        #unmute_overlay,\n        #unmute_overlay .background,\n        #panic,\n        #message_overlay {\n            position: absolute;\n            top: 0;\n            bottom: 0;\n            left: 0;\n            right: 0;\n        }\n\n        #container {\n            overflow: hidden;\n        }\n\n        #container canvas {\n            width: 100%;\n            height: 100%;\n        }\n\n        #play_button,\n        #unmute_overlay {\n            cursor: pointer;\n            display: none;\n        }\n\n        #unmute_overlay .background {\n            background: black;\n            opacity: 0.7;\n        }\n\n        #play_button .icon,\n        #unmute_overlay .icon {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: 50%;\n            height: 50%;\n            max-width: 384px;\n            max-height: 384px;\n            transform: translate(-50%, -50%);\n            opacity: 0.8;\n        }\n\n        #play_button:hover .icon,\n        #unmute_overlay:hover .icon {\n            opacity: 1;\n        }\n\n        #panic {\n            font-size: 20px;\n            text-align: center;\n            /* Inverted colors from play button! */\n            background: linear-gradient(180deg, #fd3a40 0%, #fda138 100%);\n            color: white;\n            display: flex;\n            flex-flow: column;\n            justify-content: space-around;\n        }\n\n        #panic a {\n            color: var(--ruffle-blue);\n            font-weight: bold;\n        }\n\n        #panic-title {\n            font-size: xxx-large;\n            font-weight: bold;\n        }\n\n        #panic-body.details {\n            flex: 0.9;\n            margin: 0 10px;\n        }\n\n        #panic-body textarea {\n            width: 100%;\n            height: 100%;\n            resize: none;\n        }\n\n        #panic ul {\n            padding: 0;\n            display: flex;\n            list-style-type: none;\n            justify-content: space-evenly;\n        }\n\n        #message_overlay {\n            position: absolute;\n            background: var(--ruffle-blue);\n            color: var(--ruffle-orange);\n            opacity: 1;\n            z-index: 2;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            overflow: auto;\n        }\n\n        #message_overlay .message {\n            text-align: center;\n            max-height: 100%;\n            max-width: 100%;\n            padding: 5%;\n        }\n\n        #message_overlay p {\n            margin: 0.5em 0;\n        }\n\n        #message_overlay .message div {\n            display: flex;\n            justify-content: center;\n            flex-wrap: wrap;\n            column-gap: 1em;\n        }\n\n        #message_overlay a, #message_overlay button {\n            cursor: pointer;\n            background: var(--ruffle-blue);\n            color: var(--ruffle-orange);\n            border: 2px solid var(--ruffle-orange);\n            font-weight: bold;\n            font-size: 1.25em;\n            border-radius: 0.6em;\n            padding: 10px;\n            text-decoration: none;\n            margin: 2% 0;\n        }\n\n        #message_overlay a:hover, #message_overlay button:hover {\n            background: #ffffff4c;\n        }\n\n        #continue-btn {\n             cursor: pointer;\n             background: var(--ruffle-blue);\n             color: var(--ruffle-orange);\n             border: 2px solid var(--ruffle-orange);\n             font-weight: bold;\n             font-size: 20px;\n             border-radius: 20px;\n             padding: 10px;\n        }\n\n        #continue-btn:hover {\n            background: #ffffff4c;\n        }\n\n        #context-menu {\n            display: none;\n            color: black;\n            background: #fafafa;\n            border: 1px solid gray;\n            box-shadow: 0px 5px 10px -5px black;\n            position: absolute;\n            font-size: 14px;\n            text-align: left;\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        #context-menu .menu_item {\n            padding: 5px 10px;\n        }\n\n        #context-menu .active {\n            cursor: pointer;\n            color: black;\n        }\n\n        #context-menu .disabled {\n            cursor: default;\n            color: gray;\n        }\n\n        #context-menu .active:hover {\n            background: lightgray;\n        }\n\n        #context-menu .menu_separator hr {\n            border: none;\n            border-bottom: 1px solid lightgray;\n            margin: 2px;\n        }\n    </style>\n    <style id=\"dynamic_styles\"></style>\n\n    <div id=\"container\">\n        <div id=\"play_button\"><div class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 250 250\" style=\"width:100%;height:100%;\"><defs><linearGradient id=\"a\" gradientUnits=\"userSpaceOnUse\" x1=\"125\" y1=\"0\" x2=\"125\" y2=\"250\" spreadMethod=\"pad\"><stop offset=\"0%\" stop-color=\"#FDA138\"/><stop offset=\"100%\" stop-color=\"#FD3A40\"/></linearGradient><g id=\"b\"><path fill=\"url(#a)\" d=\"M250 125q0-52-37-88-36-37-88-37T37 37Q0 73 0 125t37 88q36 37 88 37t88-37q37-36 37-88M87 195V55l100 70-100 70z\"/><path fill=\"#FFF\" d=\"M87 55v140l100-70L87 55z\"/></g></defs><use xlink:href=\"#b\"/></svg></div></div>\n        <div id=\"unmute_overlay\"><div class=\"background\"></div><div class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 512 584\" style=\"width:100%;height:100%;scale:0.8;\"><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m457.941 256 47.029-47.029c9.372-9.373 9.372-24.568 0-33.941-9.373-9.373-24.568-9.373-33.941 0l-47.029 47.029-47.029-47.029c-9.373-9.373-24.568-9.373-33.941 0-9.372 9.373-9.372 24.568 0 33.941l47.029 47.029-47.029 47.029c-9.372 9.373-9.372 24.568 0 33.941 4.686 4.687 10.827 7.03 16.97 7.03s12.284-2.343 16.971-7.029l47.029-47.03 47.029 47.029c4.687 4.687 10.828 7.03 16.971 7.03s12.284-2.343 16.971-7.029c9.372-9.373 9.372-24.568 0-33.941z\"/><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m99 160h-55c-24.301 0-44 19.699-44 44v104c0 24.301 19.699 44 44 44h55c2.761 0 5-2.239 5-5v-182c0-2.761-2.239-5-5-5z\"/><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m280 56h-24c-5.269 0-10.392 1.734-14.578 4.935l-103.459 79.116c-1.237.946-1.963 2.414-1.963 3.972v223.955c0 1.557.726 3.026 1.963 3.972l103.459 79.115c4.186 3.201 9.309 4.936 14.579 4.936h23.999c13.255 0 24-10.745 24-24v-352.001c0-13.255-10.745-24-24-24z\"/><text x=\"256\" y=\"560\" text-anchor=\"middle\" style=\"font-size:60px;fill:#FFF;stroke:#FFF;\">Click to unmute</text></svg></div></div>\n    </div>\n\n    <ul id=\"context-menu\"></ul>\n`;\n","/**\n * A mapping between internal element IDs and DOM element IDs.\n */\nconst privateRegistry = {};\n/**\n * Lookup a previously registered custom element.\n *\n * The returned object will have `name`, `class`, and `internal_name`\n * properties listing the external name, implementing class, and internal name\n * respectively.\n *\n * @param elementName The internal element name, previously used to\n * register the element with the private registry.\n *\n * @returns The element data in the registry, or null if there is\n * no such element name registered.\n */\nexport function lookupElement(elementName) {\n    const data = privateRegistry[elementName];\n    if (data !== undefined) {\n        return {\n            internalName: elementName,\n            name: data.name,\n            class: data.class,\n        };\n    }\n    else {\n        return null;\n    }\n}\n/**\n * Register a custom element.\n *\n * This function is designed to be tolerant of naming conflicts. If\n * registration fails, we modify the name, and try again. As a result, this\n * function returns the real element name to use.\n *\n * Calling this function multiple times will *not* register multiple elements.\n * We store a private registry mapping internal element names to DOM names.\n * Thus, the proper way to use this function is to call it every time you are\n * about to work with custom element names.\n *\n * @param elementName The internal name of the element.\n * @param elementClass The class of the element.\n *\n * You must call this function with the same class every time.\n *\n * @returns The actual element name.\n * @throws Throws an error if two different elements were registered with the\n * same internal name.\n */\nexport function registerElement(elementName, elementClass) {\n    if (privateRegistry[elementName] !== undefined) {\n        if (privateRegistry[elementName].class !== elementClass) {\n            throw new Error(\"Internal naming conflict on \" + elementName);\n        }\n        else {\n            return privateRegistry[elementName].name;\n        }\n    }\n    let tries = 0;\n    while (true) {\n        try {\n            let externalName = elementName;\n            if (tries > 0) {\n                externalName = externalName + \"-\" + tries;\n            }\n            window.customElements.define(externalName, elementClass);\n            privateRegistry[elementName] = {\n                class: elementClass,\n                name: externalName,\n                internalName: elementName,\n            };\n            return externalName;\n        }\n        catch (e) {\n            if (e.name === \"NotSupportedError\") {\n                tries += 1;\n            }\n        }\n    }\n}\n","export var AutoPlay;\n(function (AutoPlay) {\n    /**\n     * The player should automatically play the movie as soon as it is loaded.\n     *\n     * If the browser does not support automatic audio, the movie will begin\n     * muted.\n     */\n    AutoPlay[\"On\"] = \"on\";\n    /**\n     * The player should not attempt to automatically play the movie.\n     *\n     * This will leave it to the user or API to actually play when appropriate.\n     */\n    AutoPlay[\"Off\"] = \"off\";\n    /**\n     * The player should automatically play the movie as soon as it is deemed\n     * \"appropriate\" to do so.\n     *\n     * The exact behaviour depends on the browser, but commonly requires some\n     * form of user interaction on the page in order to allow auto playing videos\n     * with sound.\n     */\n    AutoPlay[\"Auto\"] = \"auto\";\n})(AutoPlay || (AutoPlay = {}));\n/**\n * Controls whether the content is letterboxed or pillarboxed when the\n * player's aspect ratio does not match the movie's aspect ratio.\n *\n * When letterboxed, black bars will be rendered around the exterior\n * margins of the content.\n */\nexport var Letterbox;\n(function (Letterbox) {\n    /**\n     * The content will never be letterboxed.\n     */\n    Letterbox[\"Off\"] = \"off\";\n    /**\n     * The content will only be letterboxed if the content is running fullscreen.\n     */\n    Letterbox[\"Fullscreen\"] = \"fullscreen\";\n    /**\n     * The content will always be letterboxed.\n     */\n    Letterbox[\"On\"] = \"on\";\n})(Letterbox || (Letterbox = {}));\n/**\n * When the player is muted, this controls whether or not Ruffle will show a\n * \"click to unmute\" overlay on top of the movie.\n */\nexport var UnmuteOverlay;\n(function (UnmuteOverlay) {\n    /**\n     * Show an overlay explaining that the movie is muted.\n     */\n    UnmuteOverlay[\"Visible\"] = \"visible\";\n    /**\n     * Don't show an overlay and pretend that everything is fine.\n     */\n    UnmuteOverlay[\"Hidden\"] = \"hidden\";\n})(UnmuteOverlay || (UnmuteOverlay = {}));\n/**\n * Console logging level.\n */\nexport var LogLevel;\n(function (LogLevel) {\n    LogLevel[\"Error\"] = \"error\";\n    LogLevel[\"Warn\"] = \"warn\";\n    LogLevel[\"Info\"] = \"info\";\n    LogLevel[\"Debug\"] = \"debug\";\n    LogLevel[\"Trace\"] = \"trace\";\n})(LogLevel || (LogLevel = {}));\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { loadRuffle } from \"./load-ruffle\";\nimport { ruffleShadowTemplate } from \"./shadow-template\";\nimport { lookupElement } from \"./register-element\";\nimport { AutoPlay, UnmuteOverlay, } from \"./load-options\";\nexport const FLASH_MIMETYPE = \"application/x-shockwave-flash\";\nexport const FUTURESPLASH_MIMETYPE = \"application/futuresplash\";\nexport const FLASH7_AND_8_MIMETYPE = \"application/x-shockwave-flash2-preview\";\nexport const FLASH_MOVIE_MIMETYPE = \"application/vnd.adobe.flash-movie\";\nexport const FLASH_ACTIVEX_CLASSID = \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\";\nconst RUFFLE_ORIGIN = \"https://ruffle.rs\";\nconst DIMENSION_REGEX = /^\\s*(\\d+(\\.\\d+)?(%)?)/;\nvar PanicError;\n(function (PanicError) {\n    PanicError[PanicError[\"Unknown\"] = 0] = \"Unknown\";\n    PanicError[PanicError[\"FileProtocol\"] = 1] = \"FileProtocol\";\n    PanicError[PanicError[\"JavascriptConfiguration\"] = 2] = \"JavascriptConfiguration\";\n    PanicError[PanicError[\"JavascriptConflict\"] = 3] = \"JavascriptConflict\";\n    PanicError[PanicError[\"WasmCors\"] = 4] = \"WasmCors\";\n    PanicError[PanicError[\"WasmMimeType\"] = 5] = \"WasmMimeType\";\n    PanicError[PanicError[\"WasmNotFound\"] = 6] = \"WasmNotFound\";\n})(PanicError || (PanicError = {}));\n/**\n * Converts arbitrary input to an easy to use record object.\n *\n * @param parameters Parameters to sanitize\n * @returns A sanitized map of param name to param value\n */\nfunction sanitizeParameters(parameters) {\n    if (parameters === null || parameters === undefined) {\n        return {};\n    }\n    if (!(parameters instanceof URLSearchParams)) {\n        parameters = new URLSearchParams(parameters);\n    }\n    const output = {};\n    for (const [key, value] of parameters) {\n        // Every value must be type of string\n        output[key] = value.toString();\n    }\n    return output;\n}\n/**\n * The ruffle player element that should be inserted onto the page.\n *\n * This element will represent the rendered and intractable flash movie.\n */\nexport class RufflePlayer extends HTMLElement {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     */\n    constructor() {\n        super();\n        this.hasContextMenu = false;\n        this.panicked = false;\n        /**\n         * Any configuration that should apply to this specific player.\n         * This will be defaulted with any global configuration.\n         */\n        this.config = {};\n        this.shadow = this.attachShadow({ mode: \"open\" });\n        this.shadow.appendChild(ruffleShadowTemplate.content.cloneNode(true));\n        this.dynamicStyles = (this.shadow.getElementById(\"dynamic_styles\"));\n        this.container = this.shadow.getElementById(\"container\");\n        this.playButton = this.shadow.getElementById(\"play_button\");\n        if (this.playButton) {\n            this.playButton.addEventListener(\"click\", this.playButtonClicked.bind(this));\n        }\n        this.unmuteOverlay = this.shadow.getElementById(\"unmute_overlay\");\n        this.unmuteOverlay.addEventListener(\"click\", this.unmuteOverlayClicked.bind(this));\n        this.contextMenuElement = this.shadow.getElementById(\"context-menu\");\n        this.addEventListener(\"contextmenu\", this.showContextMenu.bind(this));\n        window.addEventListener(\"click\", this.hideContextMenu.bind(this));\n        this.instance = null;\n        this.options = null;\n        this.onFSCommand = null;\n        this._trace_observer = null;\n        this.ruffleConstructor = loadRuffle();\n        this.lastActivePlayingState = false;\n        this.setupPauseOnTabHidden();\n        return this;\n    }\n    /**\n     * Setup event listener to detect when tab is not active to pause instance playback.\n     * this.instance.play() is called when the tab becomes visible only if the\n     * the instance was not paused before tab became hidden.\n     *\n     * See:\n     *      https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\n     * @ignore\n     * @internal\n     */\n    setupPauseOnTabHidden() {\n        document.addEventListener(\"visibilitychange\", () => {\n            if (!this.instance)\n                return;\n            // Tab just changed to be inactive. Record whether instance was playing.\n            if (document.hidden) {\n                this.lastActivePlayingState = this.instance.is_playing();\n                this.instance.pause();\n            }\n            // Play only if instance was playing originally.\n            if (!document.hidden && this.lastActivePlayingState === true) {\n                this.instance.play();\n            }\n        }, false);\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        this.updateStyles();\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    static get observedAttributes() {\n        return [\"width\", \"height\"];\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    attributeChangedCallback(name, _oldValue, _newValue) {\n        if (name === \"width\" || name === \"height\") {\n            this.updateStyles();\n        }\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    disconnectedCallback() {\n        if (this.instance) {\n            this.instance.destroy();\n            this.instance = null;\n            console.log(\"Ruffle instance destroyed.\");\n        }\n    }\n    /**\n     * Updates the internal shadow DOM to reflect any set attributes from\n     * this element.\n     *\n     * @protected\n     */\n    updateStyles() {\n        if (this.dynamicStyles.sheet) {\n            if (this.dynamicStyles.sheet.rules) {\n                for (let i = 0; i < this.dynamicStyles.sheet.rules.length; i++) {\n                    this.dynamicStyles.sheet.deleteRule(i);\n                }\n            }\n            const widthAttr = this.attributes.getNamedItem(\"width\");\n            if (widthAttr !== undefined && widthAttr !== null) {\n                const width = RufflePlayer.htmlDimensionToCssDimension(widthAttr.value);\n                if (width !== null) {\n                    this.dynamicStyles.sheet.insertRule(`:host { width: ${width}; }`);\n                }\n            }\n            const heightAttr = this.attributes.getNamedItem(\"height\");\n            if (heightAttr !== undefined && heightAttr !== null) {\n                const height = RufflePlayer.htmlDimensionToCssDimension(heightAttr.value);\n                if (height !== null) {\n                    this.dynamicStyles.sheet.insertRule(`:host { height: ${height}; }`);\n                }\n            }\n        }\n    }\n    /**\n     * Determine if this element is the fallback content of another Ruffle\n     * player.\n     *\n     * This heuristic assumes Ruffle objects will never use their fallback\n     * content. If this changes, then this code also needs to change.\n     *\n     * @private\n     */\n    isUnusedFallbackObject() {\n        let parent = this.parentNode;\n        const element = lookupElement(\"ruffle-object\");\n        if (element !== null) {\n            while (parent != document && parent != null) {\n                if (parent.nodeName === element.name) {\n                    return true;\n                }\n                parent = parent.parentNode;\n            }\n        }\n        return false;\n    }\n    /**\n     * Ensure a fresh Ruffle instance is ready on this player before continuing.\n     *\n     * @throws Any exceptions generated by loading Ruffle Core will be logged\n     * and passed on.\n     *\n     * @private\n     */\n    ensureFreshInstance(config) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function* () {\n            if (this.instance) {\n                this.instance.destroy();\n                this.instance = null;\n                console.log(\"Ruffle instance destroyed.\");\n            }\n            const ruffleConstructor = yield this.ruffleConstructor.catch((e) => {\n                console.error(`Serious error loading Ruffle: ${e}`);\n                // Serious duck typing. In error conditions, let's not make assumptions.\n                if (window.location.protocol === \"file:\") {\n                    e.ruffleIndexError = PanicError.FileProtocol;\n                }\n                else {\n                    e.ruffleIndexError = PanicError.WasmNotFound;\n                    const message = String(e.message).toLowerCase();\n                    if (message.includes(\"mime\")) {\n                        e.ruffleIndexError = PanicError.WasmMimeType;\n                    }\n                    else if (message.includes(\"networkerror\") ||\n                        message.includes(\"failed to fetch\")) {\n                        e.ruffleIndexError = PanicError.WasmCors;\n                    }\n                    else if (!message.includes(\"magic\") &&\n                        (e.name === \"CompileError\" || e.name === \"TypeError\")) {\n                        e.ruffleIndexError = PanicError.JavascriptConflict;\n                    }\n                }\n                this.panic(e);\n                throw e;\n            });\n            this.instance = new ruffleConstructor(this.container, this, config);\n            console.log(\"New Ruffle instance created.\");\n            // In Firefox, AudioContext.state is always \"suspended\" when the object has just been created.\n            // It may change by itself to \"running\" some milliseconds later. So we need to wait a little\n            // bit before checking if autoplay is supported and applying the instance config.\n            if (this.audioState() !== \"running\") {\n                this.container.style.visibility = \"hidden\";\n                yield new Promise((resolve) => {\n                    window.setTimeout(() => {\n                        resolve();\n                    }, 200);\n                });\n                this.container.style.visibility = \"\";\n            }\n            const autoplay = Object.values(Object(AutoPlay)).includes(config.autoplay)\n                ? config.autoplay\n                : AutoPlay.Auto;\n            const unmuteVisibility = Object.values(Object(UnmuteOverlay)).includes(config.unmuteOverlay)\n                ? config.unmuteOverlay\n                : UnmuteOverlay.Visible;\n            if (autoplay == AutoPlay.On ||\n                (autoplay == AutoPlay.Auto && this.audioState() === \"running\")) {\n                this.play();\n                if (this.audioState() !== \"running\") {\n                    this.unmuteOverlay.style.display = \"block\";\n                    // We need to mark each child as hidden or visible, as we want an overlay even if it's \"hidden\".\n                    // We need to undo this later if the config changed back to visible, but we already hid them.\n                    this.unmuteOverlay.childNodes.forEach((node) => {\n                        if (\"style\" in node) {\n                            const style = node.style;\n                            style.visibility =\n                                unmuteVisibility == UnmuteOverlay.Visible\n                                    ? \"\"\n                                    : \"hidden\";\n                        }\n                    });\n                    const audioContext = (_a = this.instance) === null || _a === void 0 ? void 0 : _a.audio_context();\n                    if (audioContext) {\n                        audioContext.onstatechange = () => {\n                            if (audioContext.state === \"running\") {\n                                this.unmuteOverlayClicked();\n                            }\n                            audioContext.onstatechange = null;\n                        };\n                    }\n                }\n            }\n            else {\n                this.playButton.style.display = \"block\";\n            }\n        });\n    }\n    /**\n     * Loads a specified movie into this player.\n     *\n     * This will replace any existing movie that may be playing.\n     *\n     * @param options One of the following:\n     * - A URL, passed as a string, which will load a URL with default options.\n     * - A [[URLLoadOptions]] object, to load a URL with options.\n     * - A [[DataLoadOptions]] object, to load data with options.\n     *\n     * The options will be defaulted by the [[config]] field, which itself\n     * is defaulted by a global `window.RufflePlayer.config`.\n     */\n    load(options) {\n        var _a, _b;\n        return __awaiter(this, void 0, void 0, function* () {\n            let optionsError = \"\";\n            switch (typeof options) {\n                case \"string\":\n                    options = { url: options };\n                    break;\n                case \"object\":\n                    if (options === null) {\n                        optionsError = \"Argument 0 must be a string or object\";\n                    }\n                    else if (!(\"url\" in options) && !(\"data\" in options)) {\n                        optionsError =\n                            \"Argument 0 must contain a `url` or `data` key\";\n                    }\n                    else if (\"url\" in options &&\n                        typeof options.url !== \"string\") {\n                        optionsError = \"`url` must be a string\";\n                    }\n                    break;\n                default:\n                    optionsError = \"Argument 0 must be a string or object\";\n                    break;\n            }\n            if (optionsError.length > 0) {\n                const error = new TypeError(optionsError);\n                error.ruffleIndexError = PanicError.JavascriptConfiguration;\n                this.panic(error);\n                throw error;\n            }\n            if (!this.isConnected || this.isUnusedFallbackObject()) {\n                console.warn(\"Ignoring attempt to play a disconnected or suspended Ruffle element\");\n                return;\n            }\n            try {\n                const config = Object.assign(Object.assign(Object.assign({}, ((_b = (_a = window.RufflePlayer) === null || _a === void 0 ? void 0 : _a.config) !== null && _b !== void 0 ? _b : {})), this.config), options);\n                // `allowScriptAccess` can only be set in `options`.\n                config.allowScriptAccess = options.allowScriptAccess;\n                this.options = options;\n                this.hasContextMenu = config.contextMenu !== false;\n                // Pre-emptively set background color of container while Ruffle/SWF loads.\n                if (config.backgroundColor) {\n                    this.container.style.backgroundColor = config.backgroundColor;\n                }\n                yield this.ensureFreshInstance(config);\n                if (\"url\" in options) {\n                    console.log(`Loading SWF file ${options.url}`);\n                    try {\n                        this.swfUrl = new URL(options.url, document.location.href).href;\n                    }\n                    catch (_c) {\n                        this.swfUrl = options.url;\n                    }\n                    const parameters = Object.assign(Object.assign({}, sanitizeParameters(options.url.substring(options.url.indexOf(\"?\")))), sanitizeParameters(options.parameters));\n                    this.instance.stream_from(options.url, parameters);\n                }\n                else if (\"data\" in options) {\n                    console.log(\"Loading SWF data\");\n                    this.instance.load_data(new Uint8Array(options.data), sanitizeParameters(options.parameters));\n                }\n            }\n            catch (err) {\n                console.error(`Serious error occurred loading SWF file: ${err}`);\n                throw err;\n            }\n        });\n    }\n    playButtonClicked() {\n        this.play();\n    }\n    /**\n     * Plays or resumes the movie.\n     */\n    play() {\n        if (this.instance) {\n            this.instance.play();\n            if (this.playButton) {\n                this.playButton.style.display = \"none\";\n            }\n        }\n    }\n    /**\n     * Checks if this player is allowed to be fullscreen by the browser.\n     *\n     * @returns True if you may call [[enterFullscreen]].\n     */\n    get fullscreenEnabled() {\n        return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled);\n    }\n    /**\n     * Checks if this player is currently fullscreen inside the browser.\n     *\n     * @returns True if it is fullscreen.\n     */\n    get isFullscreen() {\n        return ((document.fullscreenElement || document.webkitFullscreenElement) ===\n            this);\n    }\n    /**\n     * Requests the browser to make this player fullscreen.\n     *\n     * This is not guaranteed to succeed, please check [[fullscreenEnabled]] first.\n     */\n    enterFullscreen() {\n        const options = {\n            navigationUI: \"hide\",\n        };\n        if (this.requestFullscreen) {\n            this.requestFullscreen(options);\n        }\n        else if (this.webkitRequestFullscreen) {\n            this.webkitRequestFullscreen(options);\n        }\n        else if (this.webkitRequestFullScreen) {\n            this.webkitRequestFullScreen(options);\n        }\n    }\n    /**\n     * Requests the browser to no longer make this player fullscreen.\n     */\n    exitFullscreen() {\n        if (document.exitFullscreen) {\n            document.exitFullscreen();\n        }\n        else if (document.webkitExitFullscreen) {\n            document.webkitExitFullscreen();\n        }\n        else if (document.webkitCancelFullScreen) {\n            document.webkitCancelFullScreen();\n        }\n    }\n    contextMenuItems() {\n        const items = [];\n        if (this.fullscreenEnabled) {\n            if (this.isFullscreen) {\n                items.push({\n                    text: \"Exit fullscreen\",\n                    onClick: this.exitFullscreen.bind(this),\n                });\n            }\n            else {\n                items.push({\n                    text: \"Enter fullscreen\",\n                    onClick: this.enterFullscreen.bind(this),\n                });\n            }\n        }\n        items.push({\n            text: `About Ruffle (nightly 2021-04-09)`,\n            onClick() {\n                window.open(RUFFLE_ORIGIN, \"_blank\");\n            },\n            separator: false,\n        });\n        return items;\n    }\n    showContextMenu(e) {\n        e.preventDefault();\n        if (!this.hasContextMenu) {\n            return;\n        }\n        // Clear all context menu items.\n        while (this.contextMenuElement.firstChild) {\n            this.contextMenuElement.removeChild(this.contextMenuElement.firstChild);\n        }\n        // Populate context menu items.\n        for (const { text, onClick, separator } of this.contextMenuItems()) {\n            const menuItem = document.createElement(\"li\");\n            menuItem.className = \"menu_item active\";\n            menuItem.textContent = text;\n            menuItem.addEventListener(\"click\", onClick);\n            this.contextMenuElement.appendChild(menuItem);\n            if (separator !== false) {\n                const menuSeparator = document.createElement(\"li\");\n                menuSeparator.className = \"menu_separator\";\n                const hr = document.createElement(\"hr\");\n                menuSeparator.appendChild(hr);\n                this.contextMenuElement.appendChild(menuSeparator);\n            }\n        }\n        // Place a context menu in the top-left corner, so\n        // its `clientWidth` and `clientHeight` are not clamped.\n        this.contextMenuElement.style.left = \"0\";\n        this.contextMenuElement.style.top = \"0\";\n        this.contextMenuElement.style.display = \"block\";\n        const rect = this.getBoundingClientRect();\n        const x = e.clientX - rect.x;\n        const y = e.clientY - rect.y;\n        const maxX = rect.width - this.contextMenuElement.clientWidth - 1;\n        const maxY = rect.height - this.contextMenuElement.clientHeight - 1;\n        this.contextMenuElement.style.left =\n            Math.floor(Math.min(x, maxX)) + \"px\";\n        this.contextMenuElement.style.top =\n            Math.floor(Math.min(y, maxY)) + \"px\";\n    }\n    hideContextMenu() {\n        this.contextMenuElement.style.display = \"none\";\n    }\n    /**\n     * Pauses this player.\n     *\n     * No more frames, scripts or sounds will be executed.\n     * This movie will be considered inactive and will not wake up until resumed.\n     */\n    pause() {\n        if (this.instance) {\n            this.instance.pause();\n            if (this.playButton) {\n                this.playButton.style.display = \"block\";\n            }\n        }\n    }\n    audioState() {\n        if (this.instance) {\n            const audioContext = this.instance.audio_context();\n            return (audioContext && audioContext.state) || \"running\";\n        }\n        return \"suspended\";\n    }\n    unmuteOverlayClicked() {\n        if (this.instance) {\n            if (this.audioState() !== \"running\") {\n                const audioContext = this.instance.audio_context();\n                if (audioContext) {\n                    audioContext.resume();\n                }\n            }\n            if (this.unmuteOverlay) {\n                this.unmuteOverlay.style.display = \"none\";\n            }\n        }\n    }\n    /**\n     * Copies attributes and children from another element to this player element.\n     * Used by the polyfill elements, RuffleObject and RuffleEmbed.\n     *\n     * @param elem The element to copy all attributes from.\n     *\n     * @protected\n     */\n    copyElement(elem) {\n        if (elem) {\n            for (let i = 0; i < elem.attributes.length; i++) {\n                const attrib = elem.attributes[i];\n                if (attrib.specified) {\n                    // Issue 468: Chrome \"Click to Active Flash\" box stomps on title attribute\n                    if (attrib.name === \"title\" &&\n                        attrib.value === \"Adobe Flash Player\") {\n                        continue;\n                    }\n                    try {\n                        this.setAttribute(attrib.name, attrib.value);\n                    }\n                    catch (err) {\n                        // The embed may have invalid attributes, so handle these gracefully.\n                        console.warn(`Unable to set attribute ${attrib.name} on Ruffle instance`);\n                    }\n                }\n            }\n            for (const node of Array.from(elem.children)) {\n                this.appendChild(node);\n            }\n        }\n    }\n    /**\n     * Converts a dimension attribute on an HTML embed/object element to a valid CSS dimension.\n     * HTML element dimensions are unitless, but can also be percentages.\n     * Add a 'px' unit unless the value is a percentage.\n     * Returns null if this is not a valid dimension.\n     *\n     * @param attribute The attribute to convert\n     *\n     * @private\n     */\n    static htmlDimensionToCssDimension(attribute) {\n        if (attribute) {\n            const match = attribute.match(DIMENSION_REGEX);\n            if (match) {\n                let out = match[1];\n                if (!match[3]) {\n                    // Unitless -- add px for CSS.\n                    out += \"px\";\n                }\n                return out;\n            }\n        }\n        return null;\n    }\n    /**\n     * When a movie presents a new callback through `ExternalInterface.addCallback`,\n     * we are informed so that we can expose the method on any relevant DOM element.\n     *\n     * This should only be called by Ruffle itself and not by users.\n     *\n     * @param name The name of the callback that is now available.\n     *\n     * @internal\n     * @ignore\n     */\n    onCallbackAvailable(name) {\n        const instance = this.instance;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this[name] = (...args) => {\n            return instance === null || instance === void 0 ? void 0 : instance.call_exposed_callback(name, args);\n        };\n    }\n    /**\n     * Sets a trace observer on this flash player.\n     *\n     * The observer will be called, as a function, for each message that the playing movie will \"trace\" (output).\n     *\n     * @param observer The observer that will be called for each trace.\n     */\n    set traceObserver(observer) {\n        var _a;\n        (_a = this.instance) === null || _a === void 0 ? void 0 : _a.set_trace_observer(observer);\n    }\n    /**\n     * Panics this specific player, forcefully destroying all resources and displays an error message to the user.\n     *\n     * This should be called when something went absolutely, incredibly and disastrously wrong and there is no chance\n     * of recovery.\n     *\n     * Ruffle will attempt to isolate all damage to this specific player instance, but no guarantees can be made if there\n     * was a core issue which triggered the panic. If Ruffle is unable to isolate the cause to a specific player, then\n     * all players will panic and Ruffle will become \"poisoned\" - no more players will run on this page until it is\n     * reloaded fresh.\n     *\n     * @param error The error, if any, that triggered this panic.\n     */\n    panic(error) {\n        var _a;\n        if (this.panicked) {\n            // Only show the first major error, not any repeats - they aren't as important\n            return;\n        }\n        this.panicked = true;\n        if (error instanceof Error &&\n            (error.name === \"AbortError\" ||\n                error.message.includes(\"AbortError\"))) {\n            // Firefox: Don't display the panic screen if the user leaves the page while something is still loading\n            return;\n        }\n        const errorIndex = (_a = error === null || error === void 0 ? void 0 : error.ruffleIndexError) !== null && _a !== void 0 ? _a : PanicError.Unknown;\n        const errorArray = Object.assign([], {\n            stackIndex: -1,\n        });\n        errorArray.push(\"# Error Info\\n\");\n        if (error instanceof Error) {\n            errorArray.push(`Error name: ${error.name}\\n`);\n            errorArray.push(`Error message: ${error.message}\\n`);\n            if (error.stack) {\n                const stackIndex = errorArray.push(`Error stack:\\n\\`\\`\\`\\n${error.stack}\\n\\`\\`\\`\\n`) - 1;\n                errorArray.stackIndex = stackIndex;\n            }\n        }\n        else {\n            errorArray.push(`Error: ${error}\\n`);\n        }\n        errorArray.push(\"\\n# Player Info\\n\");\n        errorArray.push(this.debugPlayerInfo());\n        errorArray.push(\"\\n# Page Info\\n\");\n        errorArray.push(`Page URL: ${document.location.href}\\n`);\n        if (this.swfUrl)\n            errorArray.push(`SWF URL: ${this.swfUrl}\\n`);\n        errorArray.push(\"\\n# Browser Info\\n\");\n        errorArray.push(`Useragent: ${window.navigator.userAgent}\\n`);\n        errorArray.push(`OS: ${window.navigator.platform}\\n`);\n        errorArray.push(\"\\n# Ruffle Info\\n\");\n        errorArray.push(`Version: 0.1.0\\n`);\n        errorArray.push(`Name: nightly 2021-04-09\\n`);\n        errorArray.push(`Channel: nightly\\n`);\n        errorArray.push(`Built: 2021-04-09T00:39:28.452Z\\n`);\n        errorArray.push(`Commit: ed6fe86e31d6dbef47aebdef71a95ddfb1ca6172\\n`);\n        const errorText = errorArray.join(\"\");\n        // Remove query params for the issue title.\n        const pageUrl = document.location.href.split(/[?#]/)[0];\n        const issueTitle = `Error on ${pageUrl}`;\n        let issueLink = `https://github.com/ruffle-rs/ruffle/issues/new?title=${encodeURIComponent(issueTitle)}&body=`;\n        let issueBody = encodeURIComponent(errorText);\n        if (errorArray.stackIndex > -1 &&\n            String(issueLink + issueBody).length > 8195) {\n            // Strip the stack error from the array when the produced URL is way too long.\n            // This should prevent \"414 Request-URI Too Large\" errors on Github.\n            errorArray[errorArray.stackIndex] = null;\n            issueBody = encodeURIComponent(errorArray.join(\"\"));\n        }\n        issueLink += issueBody;\n        // Clears out any existing content (ie play button or canvas) and replaces it with the error screen\n        let errorBody, errorFooter;\n        switch (errorIndex) {\n            case PanicError.FileProtocol:\n                // General error: Running on the `file:` protocol\n                errorBody = `\n                    <p>It appears you are running Ruffle on the \"file:\" protocol.</p>\n                    <p>This doesn't work as browsers block many features from working for security reasons.</p>\n                    <p>Instead, we invite you to setup a local server or either use the web demo or the desktop application.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${RUFFLE_ORIGIN}/demo\">Web Demo</a></li>\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/tags\">Desktop Application</a></li>\n                `;\n                break;\n            case PanicError.JavascriptConfiguration:\n                // General error: Incorrect JavaScript configuration\n                errorBody = `\n                    <p>Ruffle has encountered a major issue due to an incorrect JavaScript configuration.</p>\n                    <p>If you are the server administrator, we invite you to check the error details to find out which parameter is at fault.</p>\n                    <p>You can also consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#javascript-api\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmNotFound:\n                // Self hosted: Cannot load `.wasm` file - file not found\n                errorBody = `\n                    <p>Ruffle failed to load the required \".wasm\" file component.</p>\n                    <p>If you are the server administrator, please ensure the file has correctly been uploaded.</p>\n                    <p>If the issue persists, you may need to use the \"publicPath\" setting: please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configuration-options\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmMimeType:\n                // Self hosted: Cannot load `.wasm` file - incorrect MIME type\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>This web server is not serving \".wasm\" files with the correct MIME type.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configure-webassembly-mime-type\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmCors:\n                // Self hosted: Cannot load `.wasm` file - CORS issues\n                errorBody = `\n                    <p>Ruffle failed to load the required \".wasm\" file component.</p>\n                    <p>Access to fetch has likely been blocked by CORS policy.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#web\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.JavascriptConflict:\n                // Self hosted: Cannot load `.wasm` file - a native object / function is overriden\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>It seems like this page uses JavaScript code that conflicts with Ruffle.</p>\n                    <p>If you are the server administrator, we invite you to try loading the file on a blank page.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${issueLink}\">Report Bug</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            default:\n                // Unknown error\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to display this Flash content.</p>\n                    <p>This isn't supposed to happen, so we'd really appreciate if you could file a bug!</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${issueLink}\">Report Bug</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n        }\n        this.container.innerHTML = `\n            <div id=\"panic\">\n                <div id=\"panic-title\">Something went wrong :(</div>\n                <div id=\"panic-body\">${errorBody}</div>\n                <div id=\"panic-footer\">\n                    <ul>${errorFooter}</ul>\n                </div>\n            </div>\n        `;\n        const viewDetails = (this.container.querySelector(\"#panic-view-details\"));\n        if (viewDetails) {\n            viewDetails.onclick = () => {\n                const panicBody = (this.container.querySelector(\"#panic-body\"));\n                panicBody.classList.add(\"details\");\n                panicBody.innerHTML = `<textarea>${errorText}</textarea>`;\n                return false;\n            };\n        }\n        // Do this last, just in case it causes any cascading issues.\n        if (this.instance) {\n            this.instance.destroy();\n            this.instance = null;\n        }\n    }\n    displayUnsupportedMessage() {\n        const div = document.createElement(\"div\");\n        div.id = \"message_overlay\";\n        // TODO: Change link to https://ruffle.rs/faq or similar\n        // TODO: Pause content until message is dismissed\n        div.innerHTML = `<div class=\"message\">\n            <p>Flash Player has been removed from browsers in 2021.</p>\n            <p>This content is not yet supported by the Ruffle emulator and will likely not run as intended.</p>\n            <div>\n                <a target=\"_top\" class=\"more-info-link\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Frequently-Asked-Questions-For-Users\">More info</a>\n                <button id=\"run-anyway-btn\">Run anyway</button>\n            </div>\n        </div>`;\n        this.container.prepend(div);\n        const button = div.querySelector(\"#run-anyway-btn\");\n        button.onclick = () => {\n            div.parentNode.removeChild(div);\n        };\n    }\n    displayMessage(message) {\n        // Show a dismissible message in front of the player\n        const div = document.createElement(\"div\");\n        div.id = \"message_overlay\";\n        div.innerHTML = `<div class=\"message\">\n            <p>${message}</p>\n            <div>\n                <button id=\"continue-btn\">continue</button>\n            </div>\n        </div>`;\n        this.container.prepend(div);\n        (this.container.querySelector(\"#continue-btn\")).onclick = () => {\n            div.parentNode.removeChild(div);\n        };\n    }\n    debugPlayerInfo() {\n        var _a, _b;\n        return `Allows script access: ${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.allowScriptAccess) !== null && _b !== void 0 ? _b : false}\\n`;\n    }\n}\n/**\n * Returns whether a SWF file can call JavaScript code in the surrounding HTML file.\n *\n * @param access The value of the `allowScriptAccess` attribute.\n * @param url The URL of the SWF file.\n * @returns True if script access is allowed.\n */\nexport function isScriptAccessAllowed(access, url) {\n    if (!access) {\n        access = \"sameDomain\";\n    }\n    switch (access.toLowerCase()) {\n        case \"always\":\n            return true;\n        case \"never\":\n            return false;\n        case \"samedomain\":\n        default:\n            try {\n                return (new URL(window.location.href).origin ===\n                    new URL(url, window.location.href).origin);\n            }\n            catch (_a) {\n                return false;\n            }\n    }\n}\n/**\n * Returns whether the given filename ends in a known flash extension.\n *\n * @param filename The filename to test.\n * @returns True if the filename is a flash movie (swf or spl).\n */\nexport function isSwfFilename(filename) {\n    if (filename) {\n        let pathname = \"\";\n        try {\n            // A base URL is required if `filename` is a relative URL, but we don't need to detect the real URL origin.\n            pathname = new URL(filename, RUFFLE_ORIGIN).pathname;\n        }\n        catch (err) {\n            // Some invalid filenames, like `///`, could raise a TypeError. Let's fail silently in this situation.\n        }\n        if (pathname && pathname.length >= 4) {\n            const extension = pathname.slice(-4).toLowerCase();\n            if (extension === \".swf\" || extension === \".spl\") {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n","import { FLASH_MIMETYPE, FUTURESPLASH_MIMETYPE, FLASH7_AND_8_MIMETYPE, FLASH_MOVIE_MIMETYPE, isScriptAccessAllowed, isSwfFilename, RufflePlayer, } from \"./ruffle-player\";\nimport { registerElement } from \"./register-element\";\n/**\n * A polyfill html element.\n *\n * This specific class tries to polyfill existing `<embed>` tags,\n * and should not be used. Prefer [[RufflePlayer]] instead.\n *\n * @internal\n */\nexport class RuffleEmbed extends RufflePlayer {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     *\n     * This specific class tries to polyfill existing `<embed>` tags,\n     * and should not be used. Prefer [[RufflePlayer]] instead.\n     */\n    constructor() {\n        super();\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        var _a, _b, _c, _d;\n        super.connectedCallback();\n        const src = this.attributes.getNamedItem(\"src\");\n        if (src) {\n            const allowScriptAccess = (_b = (_a = this.attributes.getNamedItem(\"allowScriptAccess\")) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;\n            // Kick off the SWF download.\n            this.load({\n                url: src.value,\n                allowScriptAccess: isScriptAccessAllowed(allowScriptAccess, src.value),\n                parameters: (_c = this.attributes.getNamedItem(\"flashvars\")) === null || _c === void 0 ? void 0 : _c.value,\n                backgroundColor: (_d = this.attributes.getNamedItem(\"bgcolor\")) === null || _d === void 0 ? void 0 : _d.value,\n            });\n        }\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    get src() {\n        var _a;\n        return (_a = this.attributes.getNamedItem(\"src\")) === null || _a === void 0 ? void 0 : _a.value;\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    set src(srcval) {\n        if (srcval != undefined) {\n            const attr = document.createAttribute(\"src\");\n            attr.value = srcval;\n            this.attributes.setNamedItem(attr);\n        }\n        else {\n            this.attributes.removeNamedItem(\"src\");\n        }\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    static get observedAttributes() {\n        return [\"src\", \"width\", \"height\"];\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    attributeChangedCallback(name, oldValue, newValue) {\n        super.attributeChangedCallback(name, oldValue, newValue);\n        if (this.isConnected && name === \"src\") {\n            let parameters;\n            const flashvars = this.attributes.getNamedItem(\"flashvars\");\n            if (flashvars) {\n                parameters = flashvars.value;\n            }\n            const src = this.attributes.getNamedItem(\"src\");\n            if (src) {\n                this.load({ url: src.value, parameters });\n            }\n        }\n    }\n    /**\n     * Checks if the given element may be polyfilled with this one.\n     *\n     * @param elem Element to check.\n     * @returns True if the element looks like a flash embed.\n     */\n    static isInterdictable(elem) {\n        var _a;\n        if (!elem.getAttribute(\"src\")) {\n            return false;\n        }\n        const type = (_a = elem.getAttribute(\"type\")) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n        if (type === FLASH_MIMETYPE.toLowerCase() ||\n            type === FUTURESPLASH_MIMETYPE.toLowerCase() ||\n            type === FLASH7_AND_8_MIMETYPE.toLowerCase() ||\n            type === FLASH_MOVIE_MIMETYPE.toLowerCase()) {\n            return true;\n        }\n        else if (type == null || type === \"\") {\n            return isSwfFilename(elem.getAttribute(\"src\"));\n        }\n        return false;\n    }\n    /**\n     * Creates a RuffleEmbed that will polyfill and replace the given element.\n     *\n     * @param elem Element to replace.\n     * @returns Created RuffleEmbed.\n     */\n    static fromNativeEmbedElement(elem) {\n        const externalName = registerElement(\"ruffle-embed\", RuffleEmbed);\n        const ruffleObj = document.createElement(externalName);\n        ruffleObj.copyElement(elem);\n        return ruffleObj;\n    }\n}\n","import { FLASH_MIMETYPE, FUTURESPLASH_MIMETYPE, FLASH7_AND_8_MIMETYPE, FLASH_MOVIE_MIMETYPE, FLASH_ACTIVEX_CLASSID, isScriptAccessAllowed, isSwfFilename, RufflePlayer, } from \"./ruffle-player\";\nimport { registerElement } from \"./register-element\";\nimport { RuffleEmbed } from \"./ruffle-embed\";\n/**\n * Find and return the first value in obj with the given key.\n * Many Flash params were case insensitive, so we use this when checking for them.\n *\n * @param obj Object to check\n * @param key Key to find\n * @param defaultValue Value if not found\n * @returns Value if found, else [[defaultValue]]\n */\nfunction findCaseInsensitive(obj, key, defaultValue) {\n    key = key.toLowerCase();\n    for (const k in obj) {\n        if (Object.hasOwnProperty.call(obj, k) && key === k.toLowerCase()) {\n            return obj[k];\n        }\n    }\n    return defaultValue;\n}\n/**\n * Returns all flash params ([[HTMLParamElement]]) that are for the given object.\n *\n * @param elem Element to check.\n * @returns A record of every parameter.\n */\nfunction paramsOf(elem) {\n    var _a, _b;\n    const params = {};\n    for (const param of elem.children) {\n        if (param instanceof HTMLParamElement) {\n            const key = (_a = param.attributes.getNamedItem(\"name\")) === null || _a === void 0 ? void 0 : _a.value;\n            const value = (_b = param.attributes.getNamedItem(\"value\")) === null || _b === void 0 ? void 0 : _b.value;\n            if (key && value) {\n                params[key] = value;\n            }\n        }\n    }\n    return params;\n}\n/**\n * A polyfill html element.\n *\n * This specific class tries to polyfill existing `<object>` tags,\n * and should not be used. Prefer [[RufflePlayer]] instead.\n *\n * @internal\n */\nexport class RuffleObject extends RufflePlayer {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     *\n     * This specific class tries to polyfill existing `<object>` tags,\n     * and should not be used. Prefer [[RufflePlayer]] instead.\n     */\n    constructor() {\n        super();\n        this.params = {};\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        var _a;\n        super.connectedCallback();\n        this.params = paramsOf(this);\n        let url = null;\n        if (this.attributes.getNamedItem(\"data\")) {\n            url = (_a = this.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value;\n        }\n        else if (this.params.movie) {\n            url = this.params.movie;\n        }\n        const allowScriptAccess = findCaseInsensitive(this.params, \"allowScriptAccess\", null);\n        const parameters = findCaseInsensitive(this.params, \"flashvars\", this.getAttribute(\"flashvars\"));\n        const backgroundColor = findCaseInsensitive(this.params, \"bgcolor\", this.getAttribute(\"bgcolor\"));\n        if (url) {\n            const options = { url };\n            options.allowScriptAccess = isScriptAccessAllowed(allowScriptAccess, url);\n            if (parameters) {\n                options.parameters = parameters;\n            }\n            if (backgroundColor) {\n                options.backgroundColor = backgroundColor;\n            }\n            // Kick off the SWF download.\n            this.load(options);\n        }\n    }\n    debugPlayerInfo() {\n        var _a;\n        let errorText = super.debugPlayerInfo();\n        errorText += \"Player type: Object\\n\";\n        let url = null;\n        if (this.attributes.getNamedItem(\"data\")) {\n            url = (_a = this.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value;\n        }\n        else if (this.params.movie) {\n            url = this.params.movie;\n        }\n        errorText += `SWF URL: ${url}\\n`;\n        Object.keys(this.params).forEach((key) => {\n            errorText += `Param ${key}: ${this.params[key]}\\n`;\n        });\n        Object.keys(this.attributes).forEach((key) => {\n            var _a;\n            errorText += `Attribute ${key}: ${(_a = this.attributes.getNamedItem(key)) === null || _a === void 0 ? void 0 : _a.value}\\n`;\n        });\n        return errorText;\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    get data() {\n        return this.getAttribute(\"data\");\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    set data(href) {\n        if (href != undefined) {\n            const attr = document.createAttribute(\"data\");\n            attr.value = href;\n            this.attributes.setNamedItem(attr);\n        }\n        else {\n            this.attributes.removeNamedItem(\"data\");\n        }\n    }\n    /**\n     * Checks if the given element may be polyfilled with this one.\n     *\n     * @param elem Element to check.\n     * @returns True if the element looks like a flash object.\n     */\n    static isInterdictable(elem) {\n        var _a, _b, _c;\n        // Don't polyfill if there's already a <ruffle-embed> inside the <object>.\n        if (elem.getElementsByTagName(\"ruffle-embed\").length > 0) {\n            return false;\n        }\n        // Don't polyfill if no movie specified.\n        const data = (_a = elem.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value.toLowerCase();\n        const params = paramsOf(elem);\n        let isSwf;\n        // Check for SWF file.\n        if (data) {\n            isSwf = isSwfFilename(data);\n        }\n        else if (params && params.movie) {\n            isSwf = isSwfFilename(params.movie);\n        }\n        else {\n            // Don't polyfill when no file is specified.\n            return false;\n        }\n        // Check ActiveX class ID.\n        const classid = (_b = elem.attributes\n            .getNamedItem(\"classid\")) === null || _b === void 0 ? void 0 : _b.value.toLowerCase();\n        if (classid === FLASH_ACTIVEX_CLASSID.toLowerCase()) {\n            // classid is an old-IE style embed that would not work on modern browsers.\n            // Often there will be an <embed> inside the <object> that would take precedence.\n            // Only polyfill this <object> if it doesn't contain a polyfillable <embed>.\n            return !Array.from(elem.getElementsByTagName(\"embed\")).some(RuffleEmbed.isInterdictable);\n        }\n        else if (classid != null && classid !== \"\") {\n            // Non-Flash classid.\n            return false;\n        }\n        // Check for MIME type.\n        const type = (_c = elem.attributes.getNamedItem(\"type\")) === null || _c === void 0 ? void 0 : _c.value.toLowerCase();\n        if (type === FLASH_MIMETYPE.toLowerCase() ||\n            type === FUTURESPLASH_MIMETYPE.toLowerCase() ||\n            type === FLASH7_AND_8_MIMETYPE.toLowerCase() ||\n            type === FLASH_MOVIE_MIMETYPE.toLowerCase()) {\n            return true;\n        }\n        else if (type != null && type !== \"\") {\n            return false;\n        }\n        // If no MIME/class type is specified, polyfill if movie is an SWF file.\n        return isSwf;\n    }\n    /**\n     * Creates a RuffleObject that will polyfill and replace the given element.\n     *\n     * @param elem Element to replace.\n     * @returns Created RuffleObject.\n     */\n    static fromNativeObjectElement(elem) {\n        const externalName = registerElement(\"ruffle-object\", RuffleObject);\n        const ruffleObj = (document.createElement(externalName));\n        // Avoid copying embeds-inside-objects to avoid double polyfilling.\n        for (const embedElem of Array.from(elem.getElementsByTagName(\"embed\"))) {\n            if (RuffleEmbed.isInterdictable(embedElem)) {\n                embedElem.remove();\n            }\n        }\n        // Avoid copying objects-inside-objects to avoid double polyfilling.\n        // This may happen when Internet Explorer's conditional comments are used.\n        for (const objectElem of Array.from(elem.getElementsByTagName(\"object\"))) {\n            if (RuffleObject.isInterdictable(objectElem)) {\n                objectElem.remove();\n            }\n        }\n        ruffleObj.copyElement(elem);\n        return ruffleObj;\n    }\n}\n","/**\n * Attempt to discover the public path of the current Ruffle source. This can\n * be used to configure Webpack.\n *\n * We have several points of configuration for how the Ruffle public path can\n * be determined:\n *\n * 1. The public path can be specified on a per-source basis using the\n * RufflePlayer config, for example:\n * `window.RufflePlayer.config.publicPaths.local = \"/dist/\";`\n * 2. A global public path can be specified for all sources, also in config.\n * `window.RufflePlayer.config.publicPath = \"/dist/\";`\n * 3. If there is absolutely no configuration that yields a public path then we\n * return the parent path of where this script is hosted, which should be\n * the correct default in most cases.\n *\n * @param config The `window.RufflePlayer.config` object.\n * @param source_name The name of the source.\n * @returns The public path for the given source.\n */\nexport function publicPath(config, source_name) {\n    let path = \"\";\n    if (config !== undefined &&\n        config.publicPaths !== undefined &&\n        config.publicPaths[source_name] !== undefined) {\n        path = config.publicPaths[source_name];\n    }\n    else if (config !== undefined && config.publicPath !== undefined) {\n        path = config.publicPath;\n    }\n    else if (document.currentScript !== undefined &&\n        document.currentScript !== null &&\n        \"src\" in document.currentScript &&\n        document.currentScript.src !== \"\") {\n        // Default to the directory where this script resides.\n        try {\n            path = new URL(\".\", document.currentScript.src).href;\n        }\n        catch (e) {\n            console.warn(\"Unable to get currentScript URL\");\n        }\n    }\n    // Webpack expects the paths to end with a /.\n    if (path !== \"\" && !path.endsWith(\"/\")) {\n        path += \"/\";\n    }\n    return path;\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar _a, _b;\nimport { RuffleObject } from \"./ruffle-object\";\nimport { RuffleEmbed } from \"./ruffle-embed\";\nimport { installPlugin, FLASH_PLUGIN } from \"./plugin-polyfill\";\nimport { publicPath } from \"./public-path\";\nlet isExtension;\nconst globalConfig = (_b = (_a = window.RufflePlayer) === null || _a === void 0 ? void 0 : _a.config) !== null && _b !== void 0 ? _b : {};\nconst jsScriptUrl = publicPath(globalConfig, \"ruffle.js\") + \"ruffle.js\";\n/**\n * Polyfill native Flash elements with Ruffle equivalents.\n *\n * This polyfill isn't fool-proof: If there's a chance site JavaScript has\n * access to a pre-polyfill element, then this will break horribly. We can\n * keep native objects out of the DOM, and thus out of JavaScript's grubby\n * little hands, but only if we load first.\n */\nlet objects;\nlet embeds;\n/**\n *\n */\nfunction polyfillFlashInstances() {\n    try {\n        // Create live collections to track embed tags.\n        objects = objects !== null && objects !== void 0 ? objects : document.getElementsByTagName(\"object\");\n        embeds = embeds !== null && embeds !== void 0 ? embeds : document.getElementsByTagName(\"embed\");\n        // Replace <object> first, because <object> often wraps <embed>.\n        for (const elem of Array.from(objects)) {\n            if (RuffleObject.isInterdictable(elem)) {\n                const ruffleObject = RuffleObject.fromNativeObjectElement(elem);\n                elem.replaceWith(ruffleObject);\n            }\n        }\n        for (const elem of Array.from(embeds)) {\n            if (RuffleEmbed.isInterdictable(elem)) {\n                const ruffleEmbed = RuffleEmbed.fromNativeEmbedElement(elem);\n                elem.replaceWith(ruffleEmbed);\n            }\n        }\n    }\n    catch (err) {\n        console.error(`Serious error encountered when polyfilling native Flash elements: ${err}`);\n    }\n}\n/**\n * Inject Ruffle into <iframe> and <frame> elements.\n *\n * This polyfill isn't fool-proof either: On self-hosted builds, it may\n * not work due to browsers CORS policy or be loaded too late for some\n * libraries like SWFObject. These should be less of a problem on the\n * web extension. This polyfill should, however, do the trick in most\n * cases, but users should be aware of its natural limits.\n */\nlet iframes;\nlet frames;\n/**\n *\n */\nfunction polyfillFrames() {\n    // Create live collections to track embed tags.\n    iframes = iframes !== null && iframes !== void 0 ? iframes : document.getElementsByTagName(\"iframe\");\n    frames = frames !== null && frames !== void 0 ? frames : document.getElementsByTagName(\"frame\");\n    [iframes, frames].forEach((elementsList) => {\n        for (let i = 0; i < elementsList.length; i++) {\n            const element = elementsList[i];\n            if (element.dataset.rufflePolyfilled !== undefined) {\n                // Don't re-polyfill elements with the \"data-ruffle-polyfilled\" attribute.\n                continue;\n            }\n            element.dataset.rufflePolyfilled = \"\";\n            const elementWindow = element.contentWindow;\n            // Cross origin requests may reach an exception, so let's prepare for this eventuality.\n            const errorMessage = `Couldn't load Ruffle into ${element.tagName}[${element.src}]: `;\n            try {\n                if (elementWindow.document.readyState === \"complete\") {\n                    injectRuffle(elementWindow, errorMessage);\n                }\n            }\n            catch (err) {\n                if (!isExtension) {\n                    // The web extension should be able to load Ruffle into cross origin frames\n                    // because it has \"all_frames\" set to true in its manifest.json: RufflePlayer\n                    // config won't be injected but it's not worth showing an error.\n                    console.warn(errorMessage + err);\n                }\n            }\n            // Attach listener to the element to handle frame navigation.\n            element.addEventListener(\"load\", () => {\n                injectRuffle(elementWindow, errorMessage);\n            }, false);\n        }\n    });\n}\n/**\n * @param elementWindow The (i)frame's window object.\n * @param errorMessage The message to log when Ruffle cannot access the (i)frame's document.\n */\nfunction injectRuffle(elementWindow, errorMessage) {\n    var _a;\n    return __awaiter(this, void 0, void 0, function* () {\n        // The document is supposed to be completely loaded when this function is run.\n        // As Chrome may be unable to access the document properties, we have to delay the execution a little bit.\n        yield new Promise((resolve) => {\n            window.setTimeout(() => {\n                resolve();\n            }, 100);\n        });\n        let elementDocument;\n        try {\n            elementDocument = elementWindow.document;\n            if (!elementDocument) {\n                // Don't polyfill if the window has no document: the element may have been removed from the parent window.\n                return;\n            }\n        }\n        catch (err) {\n            if (!isExtension) {\n                console.warn(errorMessage + err);\n            }\n            return;\n        }\n        if (!isExtension &&\n            elementDocument.documentElement.dataset.ruffleOptout !== undefined) {\n            // Don't polyfill elements with the \"data-ruffle-optout\" attribute.\n            return;\n        }\n        if (!isExtension) {\n            if (!elementWindow.RufflePlayer) {\n                const script = elementDocument.createElement(\"script\");\n                script.setAttribute(\"src\", jsScriptUrl);\n                script.onload = () => {\n                    // Inject parent configuration once the script is loaded, preventing it from being ignored.\n                    elementWindow.RufflePlayer = {};\n                    elementWindow.RufflePlayer.config = globalConfig;\n                };\n                elementDocument.head.appendChild(script);\n            }\n        }\n        else {\n            if (!elementWindow.RufflePlayer) {\n                elementWindow.RufflePlayer = {};\n            }\n            // Merge parent window and frame configurations, will likely be applied too late though.\n            elementWindow.RufflePlayer.config = Object.assign(Object.assign({}, globalConfig), ((_a = elementWindow.RufflePlayer.config) !== null && _a !== void 0 ? _a : {}));\n        }\n    });\n}\n/**\n * Listen for changes to the DOM.\n *\n */\nfunction initMutationObserver() {\n    const observer = new MutationObserver(function (mutationsList) {\n        // If any nodes were added, re-run the polyfill to detect any new instances.\n        const nodesAdded = mutationsList.some((mutation) => mutation.addedNodes.length > 0);\n        if (nodesAdded) {\n            polyfillFlashInstances();\n            polyfillFrames();\n        }\n    });\n    observer.observe(document, { childList: true, subtree: true });\n}\n/**\n * Polyfills the detection of Flash plugins in the browser.\n */\nexport function pluginPolyfill() {\n    installPlugin(FLASH_PLUGIN);\n}\n/**\n * Polyfills legacy Flash content on the page.\n *\n * @param isExt Whether or not Ruffle is running as a browser's extension.\n */\nexport function polyfill(isExt) {\n    isExtension = isExt;\n    polyfillFlashInstances();\n    polyfillFrames();\n    initMutationObserver();\n}\n","/**\n * A representation of a semver 2 compliant version string\n */\nexport class Version {\n    /**\n     * Construct a Version from specific components.\n     *\n     * If you wish to parse a string into a Version then please use [[fromSemver]].\n     *\n     * @param major The major version component.\n     * @param minor The minor version component.\n     * @param patch The patch version component.\n     * @param prIdent A list of pre-release identifiers, if any\n     * @param buildIdent A list of build identifiers, if any\n     */\n    constructor(major, minor, patch, prIdent, buildIdent) {\n        this.major = major;\n        this.minor = minor;\n        this.patch = patch;\n        this.prIdent = prIdent;\n        this.buildIdent = buildIdent;\n    }\n    /**\n     * Construct a version from a semver 2 compliant string.\n     *\n     * This function is intended for use with semver 2 compliant strings.\n     * Malformed strings may still parse correctly, but this result is not\n     * guaranteed.\n     *\n     * @param versionString A semver 2.0.0 compliant version string\n     * @returns A version object\n     */\n    static fromSemver(versionString) {\n        const buildSplit = versionString.split(\"+\"), prSplit = buildSplit[0].split(\"-\"), versionSplit = prSplit[0].split(\".\");\n        const major = parseInt(versionSplit[0], 10);\n        let minor = 0;\n        let patch = 0;\n        let prIdent = null;\n        let buildIdent = null;\n        if (versionSplit[1] != undefined) {\n            minor = parseInt(versionSplit[1], 10);\n        }\n        if (versionSplit[2] != undefined) {\n            patch = parseInt(versionSplit[2], 10);\n        }\n        if (prSplit[1] != undefined) {\n            prIdent = prSplit[1].split(\".\");\n        }\n        if (buildSplit[1] != undefined) {\n            buildIdent = buildSplit[1].split(\".\");\n        }\n        return new Version(major, minor, patch, prIdent, buildIdent);\n    }\n    /**\n     * Returns true if a given version is compatible with this one.\n     *\n     * Compatibility is defined as having the same nonzero major version\n     * number, or if both major versions are zero, the same nonzero minor\n     * version number, or if both minor versions are zero, the same nonzero\n     * patch version number.\n     *\n     * This implements the ^ operator in npm's semver package, with the\n     * exception of the prerelease exclusion rule.\n     *\n     * @param other The other version to test against\n     * @returns True if compatible\n     */\n    isCompatibleWith(other) {\n        return ((this.major !== 0 && this.major === other.major) ||\n            (this.major === 0 &&\n                other.major === 0 &&\n                this.minor !== 0 &&\n                this.minor === other.minor) ||\n            (this.major === 0 &&\n                other.major === 0 &&\n                this.minor === 0 &&\n                other.minor === 0 &&\n                this.patch !== 0 &&\n                this.patch === other.patch));\n    }\n    /**\n     * Returns true if this version has precedence over (is newer than) another\n     * version.\n     *\n     * Precedence is defined as in the Semver 2 spec. This implements the >\n     * operator in npm's semver package, with the exception of the prerelease\n     * exclusion rule.\n     *\n     * @param other The other version to test against\n     * @returns True if this version has precedence over the other one\n     */\n    hasPrecedenceOver(other) {\n        if (this.major > other.major) {\n            return true;\n        }\n        else if (this.major < other.major) {\n            return false;\n        }\n        if (this.minor > other.minor) {\n            return true;\n        }\n        else if (this.minor < other.minor) {\n            return false;\n        }\n        if (this.patch > other.patch) {\n            return true;\n        }\n        else if (this.patch < other.patch) {\n            return false;\n        }\n        if (this.prIdent == null && other.prIdent != null) {\n            return true;\n        }\n        else if (this.prIdent != null && other.prIdent != null) {\n            const isNumeric = /^[0-9]*$/;\n            for (let i = 0; i < this.prIdent.length && i < other.prIdent.length; i += 1) {\n                if (!isNumeric.test(this.prIdent[i]) &&\n                    isNumeric.test(other.prIdent[i])) {\n                    return true;\n                }\n                else if (isNumeric.test(this.prIdent[i]) &&\n                    isNumeric.test(other.prIdent[i])) {\n                    if (parseInt(this.prIdent[i], 10) >\n                        parseInt(other.prIdent[i], 10)) {\n                        return true;\n                    }\n                    else if (parseInt(this.prIdent[i], 10) <\n                        parseInt(other.prIdent[i], 10)) {\n                        return false;\n                    }\n                }\n                else if (isNumeric.test(this.prIdent[i]) &&\n                    !isNumeric.test(other.prIdent[i])) {\n                    return false;\n                }\n                else if (!isNumeric.test(this.prIdent[i]) &&\n                    !isNumeric.test(other.prIdent[i])) {\n                    if (this.prIdent[i] > other.prIdent[i]) {\n                        return true;\n                    }\n                    else if (this.prIdent[i] < other.prIdent[i]) {\n                        return false;\n                    }\n                }\n            }\n            return this.prIdent.length > other.prIdent.length;\n        }\n        return false;\n    }\n    /**\n     * Tests if a given version is equivalent to this one.\n     *\n     * Build and prerelease tags are ignored.\n     *\n     * @param other The other version to test against\n     * @returns True if the given version is equivalent\n     */\n    isEqual(other) {\n        return (this.major === other.major &&\n            this.minor === other.minor &&\n            this.patch === other.patch);\n    }\n    /**\n     * Tests if a given version is stable or a compatible prerelease for this\n     * version.\n     *\n     * This implements the prerelease exclusion rule of NPM semver: a\n     * prerelease version can only pass this check if the major/minor/patch\n     * components of both versions are the same. Otherwise, the prerelease\n     * version always fails.\n     *\n     * @param other The other version to test against\n     * @returns True if the given version is either stable, or a\n     * prerelease in the same series as this one.\n     */\n    isStableOrCompatiblePrerelease(other) {\n        if (other.prIdent == null) {\n            return true;\n        }\n        else {\n            return (this.major === other.major &&\n                this.minor === other.minor &&\n                this.patch === other.patch);\n        }\n    }\n}\n","import { Version } from \"./version\";\n/**\n * Represents a set of version requirements.\n */\nexport class VersionRange {\n    /**\n     * Constructs a range of versions as specified by the given requirements.\n     *\n     * If you wish to construct this object from a string representation,\n     * then use [[fromRequirementString]].\n     *\n     * @param requirements Requirements to set this range by\n     */\n    constructor(requirements) {\n        this.requirements = requirements;\n    }\n    /**\n     * Determine if a given version satisfies this range.\n     *\n     * @param fver A version object to test against.\n     * @returns Whether or not the given version matches this range\n     */\n    satisfiedBy(fver) {\n        for (let i = 0; i < this.requirements.length; i += 1) {\n            let matches = true;\n            for (let j = 0; j < this.requirements[i].length; j += 1) {\n                const comparator = this.requirements[i][j].comparator;\n                const version = this.requirements[i][j].version;\n                matches =\n                    matches && version.isStableOrCompatiblePrerelease(fver);\n                if (comparator === \"\" || comparator === \"=\") {\n                    matches = matches && version.isEqual(fver);\n                }\n                else if (comparator === \">\") {\n                    matches = matches && fver.hasPrecedenceOver(version);\n                }\n                else if (comparator === \">=\") {\n                    matches =\n                        matches &&\n                            (fver.hasPrecedenceOver(version) ||\n                                version.isEqual(fver));\n                }\n                else if (comparator === \"<\") {\n                    matches = matches && version.hasPrecedenceOver(fver);\n                }\n                else if (comparator === \"<=\") {\n                    matches =\n                        matches &&\n                            (version.hasPrecedenceOver(fver) ||\n                                version.isEqual(fver));\n                }\n                else if (comparator === \"^\") {\n                    matches = matches && version.isCompatibleWith(fver);\n                }\n            }\n            if (matches) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Parse a requirement string into a version range.\n     *\n     * @param requirement The version requirements, consisting of a\n     * series of space-separated strings, each one being a semver version\n     * optionally prefixed by a comparator or a separator.\n     *\n     * Valid comparators are:\n     * - `\"\"` or `\"=\"`: Precisely this version\n     * - `\">`\": A version newer than this one\n     * - `\">`=\": A version newer or equal to this one\n     * - `\"<\"`: A version older than this one\n     * - `\"<=\"`: A version older or equal to this one\n     * - `\"^\"`: A version that is compatible with this one\n     *\n     * A separator is `\"||`\" which splits the requirement string into\n     * left OR right.\n     *\n     * @returns A version range object.\n     */\n    static fromRequirementString(requirement) {\n        const components = requirement.split(\" \");\n        let set = [];\n        const requirements = [];\n        for (let i = 0; i < components.length; i += 1) {\n            if (components[i] === \"||\") {\n                if (set.length > 0) {\n                    requirements.push(set);\n                    set = [];\n                }\n            }\n            else if (components[i].length > 0) {\n                const match = /[0-9]/.exec(components[i]);\n                if (match) {\n                    const comparator = components[i]\n                        .slice(0, match.index)\n                        .trim();\n                    const version = Version.fromSemver(components[i].slice(match.index).trim());\n                    set.push({ comparator, version });\n                }\n            }\n        }\n        if (set.length > 0) {\n            requirements.push(set);\n        }\n        return new VersionRange(requirements);\n    }\n}\n","import { Version } from \"./version\";\nimport { VersionRange } from \"./version-range\";\n/**\n * Represents the Ruffle public API.\n *\n * The public API exists primarily to allow multiple installs of Ruffle on a\n * page (e.g. an extension install and a local one) to cooperate. In an ideal\n * situation, all Ruffle sources on the page install themselves into a single\n * public API, and then the public API picks the newest version by default.\n *\n * This API *is* versioned, in case we need to upgrade it. However, it must be\n * backwards- and forwards-compatible with all known sources.\n */\nexport class PublicAPI {\n    /**\n     * Construct the Ruffle public API.\n     *\n     * Do not use this function to negotiate a public API. Instead, use\n     * `public_api` to register your Ruffle source with an existing public API\n     * if it exists.\n     *\n     * Constructing a Public API will also trigger it to initialize Ruffle once\n     * the page loads, if the API has not already been superseded.\n     *\n     * @param prev What used to be in the public API slot.\n     *\n     * This is used to upgrade from a prior version of the public API, or from\n     * a user-defined configuration object placed in the public API slot.\n     *\n     * @protected\n     */\n    constructor(prev) {\n        this.sources = {};\n        this.config = {};\n        this.invoked = false;\n        this.newestName = null;\n        this.conflict = null;\n        if (prev !== undefined && prev !== null) {\n            if (prev instanceof PublicAPI) {\n                /// We're upgrading from a previous API to a new one.\n                this.sources = prev.sources;\n                this.config = prev.config;\n                this.invoked = prev.invoked;\n                this.conflict = prev.conflict;\n                this.newestName = prev.newestName;\n                prev.superseded();\n            }\n            else if (prev.constructor === Object &&\n                prev.config instanceof Object) {\n                /// We're the first, install user configuration\n                this.config = prev.config;\n            }\n            else {\n                /// We're the first, but conflicting with someone else.\n                this.conflict = prev;\n            }\n        }\n        if (document.readyState === \"loading\") {\n            window.addEventListener(\"DOMContentLoaded\", this.init.bind(this));\n        }\n        else {\n            window.setTimeout(this.init.bind(this), 0);\n        }\n    }\n    /**\n     * The version of the public API.\n     *\n     * This is *not* the version of Ruffle itself.\n     *\n     * This allows a page with an old version of the Public API to be upgraded\n     * to a new version of the API. The public API is intended to be changed\n     * very infrequently, if at all, but this provides an escape mechanism for\n     * newer Ruffle sources to upgrade older installations.\n     *\n     * @returns The version of this public API.\n     */\n    get version() {\n        return \"0.1.0\";\n    }\n    /**\n     * Register a given source with the Ruffle Public API.\n     *\n     * @param name The name of the source.\n     * @param api The public API object. This must conform to the shape\n     * of `SourceAPI`.\n     */\n    registerSource(name, api) {\n        this.sources[name] = api;\n    }\n    /**\n     * Determine the name of the newest registered source in the Public API.\n     *\n     * @returns The name of the source, or `null` if no source\n     * has yet to be registered.\n     */\n    newestSourceName() {\n        let newestName = null, newestVersion = Version.fromSemver(\"0.0.0\");\n        for (const k in this.sources) {\n            if (Object.prototype.hasOwnProperty.call(this.sources, k)) {\n                const kVersion = Version.fromSemver(this.sources[k].version);\n                if (kVersion.hasPrecedenceOver(newestVersion)) {\n                    newestName = k;\n                    newestVersion = kVersion;\n                }\n            }\n        }\n        return newestName;\n    }\n    /**\n     * Negotiate and start Ruffle.\n     *\n     * This function reads the config parameter to determine which polyfills\n     * should be enabled. If the configuration parameter is missing, then we\n     * use a built-in set of defaults sufficient to fool sites with static\n     * content and weak plugin detection.\n     */\n    init() {\n        if (!this.invoked) {\n            this.invoked = true;\n            this.newestName = this.newestSourceName();\n            if (this.newestName === null) {\n                throw new Error(\"No registered Ruffle source!\");\n            }\n            const polyfills = this.config.polyfills;\n            if (polyfills !== false) {\n                this.sources[this.newestName].polyfill(this.newestName === \"extension\");\n            }\n        }\n    }\n    /**\n     * Look up the newest Ruffle source and return it's API.\n     *\n     * @returns An instance of the Source API.\n     */\n    newest() {\n        const name = this.newestSourceName();\n        return name != null ? this.sources[name] : null;\n    }\n    /**\n     * Look up a specific Ruffle version (or any version satisfying a given set\n     * of requirements) and return it's API.\n     *\n     * @param ver_requirement A set of semantic version requirement\n     * strings that the player version must satisfy.\n     *\n     * @returns An instance of the Source API, if one or more\n     * sources satisfied the requirement.\n     */\n    satisfying(ver_requirement) {\n        const requirement = VersionRange.fromRequirementString(ver_requirement);\n        let valid = null;\n        for (const k in this.sources) {\n            if (Object.prototype.hasOwnProperty.call(this.sources, k)) {\n                const version = Version.fromSemver(this.sources[k].version);\n                if (requirement.satisfiedBy(version)) {\n                    valid = this.sources[k];\n                }\n            }\n        }\n        return valid;\n    }\n    /**\n     * Look up the newest Ruffle version compatible with the `local` source, if\n     * it's installed. Otherwise, use the latest version.\n     *\n     * @returns An instance of the Source API\n     */\n    localCompatible() {\n        if (this.sources.local !== undefined) {\n            return this.satisfying(\"^\" + this.sources.local.version);\n        }\n        else {\n            return this.newest();\n        }\n    }\n    /**\n     * Look up the newest Ruffle version with the exact same version as the\n     * `local` source, if it's installed. Otherwise, use the latest version.\n     *\n     * @returns An instance of the Source API\n     */\n    local() {\n        if (this.sources.local !== undefined) {\n            return this.satisfying(\"=\" + this.sources.local.version);\n        }\n        else {\n            return this.newest();\n        }\n    }\n    /**\n     * Indicates that this version of the public API has been superseded by a\n     * newer version.\n     *\n     * This should only be called by a newer version of the Public API.\n     * Identical versions of the Public API should not supersede older versions\n     * of that same API.\n     *\n     * Unfortunately, we can't disable polyfills after-the-fact, so this\n     * only lets you disable the init event...\n     *\n     * @protected\n     */\n    superseded() {\n        this.invoked = true;\n    }\n    /**\n     * Join a source into the public API, if it doesn't already exist.\n     *\n     * @param prevRuffle The previous iteration of the Ruffle API.\n     *\n     * The `prevRuffle` param lists the previous object in the RufflePlayer\n     * slot. We perform some checks to see if this is a Ruffle public API or a\n     * conflicting object. If this is conflicting, then a new public API will\n     * be constructed (see the constructor information for what happens to\n     * `prevRuffle`).\n     *\n     * Note that Public API upgrades are deliberately not enabled in this\n     * version of Ruffle, since there is no Public API to upgrade from.\n     *\n     * @param sourceName The name of this particular\n     * Ruffle source.\n     *\n     * @param sourceAPI The Ruffle source to add.\n     *\n     * If both parameters are provided they will be used to define a new Ruffle\n     * source to register with the public API.\n     *\n     * @returns The Ruffle Public API.\n     */\n    static negotiate(prevRuffle, sourceName, sourceAPI) {\n        let publicAPI;\n        if (prevRuffle instanceof PublicAPI) {\n            publicAPI = prevRuffle;\n        }\n        else {\n            publicAPI = new PublicAPI(prevRuffle);\n        }\n        if (sourceName !== undefined && sourceAPI !== undefined) {\n            publicAPI.registerSource(sourceName, sourceAPI);\n            // Install the faux plugin detection immediately.\n            // This is necessary because scripts such as SWFObject check for the\n            // Flash Player immediately when they load.\n            // TODO: Maybe there's a better place for this.\n            const polyfills = publicAPI.config.polyfills;\n            if (polyfills !== false) {\n                sourceAPI.pluginPolyfill();\n            }\n        }\n        return publicAPI;\n    }\n}\n","import { pluginPolyfill, polyfill } from \"./polyfills\";\nimport { registerElement } from \"./register-element\";\nimport { RufflePlayer } from \"./ruffle-player\";\n/**\n * Represents this particular version of Ruffle.\n *\n * Multiple APIs can be instantiated from different sources; e.g. an \"extension\"\n * version, versus a \"local\" version. This expresses to the Public API\n * negotiator (see [[PublicAPI]]) what this particular version of Ruffle is and\n * how to control it.\n */\nexport class SourceAPI {\n    /**\n     * Construct a Source API.\n     *\n     * @param name The name of this particular source.\n     */\n    constructor(name) {\n        this.name = name;\n    }\n    /**\n     * The version of this particular API.\n     *\n     * This is returned as a string in a semver compatible format.\n     *\n     * @returns The version of this Ruffle source\n     */\n    get version() {\n        return \"0.1.0\";\n    }\n    /**\n     * Start up the polyfills.\n     *\n     * Do not run polyfills for more than one Ruffle source at a time.\n     *\n     * @param isExt Whether or not Ruffle is running as a browser's extension.\n     */\n    polyfill(isExt) {\n        polyfill(isExt);\n    }\n    /**\n     * Polyfill the plugin detection.\n     *\n     * This needs to run before any plugin detection script does.\n     */\n    pluginPolyfill() {\n        pluginPolyfill();\n    }\n    /**\n     * Create a Ruffle player element using this particular version of Ruffle.\n     *\n     * @returns The player element. This is a DOM element that may be inserted\n     * into the current page as you wish.\n     */\n    createPlayer() {\n        const name = registerElement(\"ruffle-player\", RufflePlayer);\n        return document.createElement(name);\n    }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"\";","const { PublicAPI, SourceAPI, publicPath } = require(\"ruffle-core\");\n\nwindow.RufflePlayer = PublicAPI.negotiate(\n    window.RufflePlayer,\n    \"local\",\n    new SourceAPI(\"local\")\n);\n__webpack_public_path__ = publicPath(window.RufflePlayer.config, \"local\");\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 80c09312..23cc895b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -936,6 +936,14 @@
     "@nodelib/fs.scandir" "2.1.3"
     fastq "^1.6.0"
 
+"@npmcli/move-file@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
+  integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
+  dependencies:
+    mkdirp "^1.0.4"
+    rimraf "^3.0.2"
+
 "@stylelint/postcss-css-in-js@^0.37.1":
   version "0.37.2"
   resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
@@ -961,6 +969,11 @@
   resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
   integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
 
+"@types/json-schema@^7.0.6":
+  version "7.0.7"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+  integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
 "@types/minimist@^1.2.0":
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
@@ -1022,132 +1035,149 @@
     dom-event-types "^1.0.0"
     lodash "^4.17.4"
 
-"@webassemblyjs/ast@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+"@webassemblyjs/ast@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+  integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
   dependencies:
-    "@webassemblyjs/helper-module-context" "1.8.5"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
-    "@webassemblyjs/wast-parser" "1.8.5"
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
 
-"@webassemblyjs/floating-point-hex-parser@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+  integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
 
-"@webassemblyjs/helper-api-error@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+"@webassemblyjs/helper-api-error@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+  integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
 
-"@webassemblyjs/helper-buffer@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+"@webassemblyjs/helper-buffer@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+  integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
 
-"@webassemblyjs/helper-code-frame@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+"@webassemblyjs/helper-code-frame@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+  integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
   dependencies:
-    "@webassemblyjs/wast-printer" "1.8.5"
+    "@webassemblyjs/wast-printer" "1.9.0"
 
-"@webassemblyjs/helper-fsm@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+"@webassemblyjs/helper-fsm@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+  integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
 
-"@webassemblyjs/helper-module-context@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+"@webassemblyjs/helper-module-context@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+  integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    mamacro "^0.0.3"
+    "@webassemblyjs/ast" "1.9.0"
 
-"@webassemblyjs/helper-wasm-bytecode@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+  integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
 
-"@webassemblyjs/helper-wasm-section@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+"@webassemblyjs/helper-wasm-section@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+  integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/helper-buffer" "1.8.5"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
-    "@webassemblyjs/wasm-gen" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
 
-"@webassemblyjs/ieee754@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+"@webassemblyjs/ieee754@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+  integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
   dependencies:
     "@xtuc/ieee754" "^1.2.0"
 
-"@webassemblyjs/leb128@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+"@webassemblyjs/leb128@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+  integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
   dependencies:
     "@xtuc/long" "4.2.2"
 
-"@webassemblyjs/utf8@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+"@webassemblyjs/utf8@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+  integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
 
-"@webassemblyjs/wasm-edit@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+"@webassemblyjs/wasm-edit@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+  integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/helper-buffer" "1.8.5"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
-    "@webassemblyjs/helper-wasm-section" "1.8.5"
-    "@webassemblyjs/wasm-gen" "1.8.5"
-    "@webassemblyjs/wasm-opt" "1.8.5"
-    "@webassemblyjs/wasm-parser" "1.8.5"
-    "@webassemblyjs/wast-printer" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/helper-wasm-section" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-opt" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    "@webassemblyjs/wast-printer" "1.9.0"
 
-"@webassemblyjs/wasm-gen@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+"@webassemblyjs/wasm-gen@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+  integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
-    "@webassemblyjs/ieee754" "1.8.5"
-    "@webassemblyjs/leb128" "1.8.5"
-    "@webassemblyjs/utf8" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
 
-"@webassemblyjs/wasm-opt@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+"@webassemblyjs/wasm-opt@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+  integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/helper-buffer" "1.8.5"
-    "@webassemblyjs/wasm-gen" "1.8.5"
-    "@webassemblyjs/wasm-parser" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
 
-"@webassemblyjs/wasm-parser@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+"@webassemblyjs/wasm-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+  integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/helper-api-error" "1.8.5"
-    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
-    "@webassemblyjs/ieee754" "1.8.5"
-    "@webassemblyjs/leb128" "1.8.5"
-    "@webassemblyjs/utf8" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
 
-"@webassemblyjs/wast-parser@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+"@webassemblyjs/wast-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+  integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/floating-point-hex-parser" "1.8.5"
-    "@webassemblyjs/helper-api-error" "1.8.5"
-    "@webassemblyjs/helper-code-frame" "1.8.5"
-    "@webassemblyjs/helper-fsm" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-code-frame" "1.9.0"
+    "@webassemblyjs/helper-fsm" "1.9.0"
     "@xtuc/long" "4.2.2"
 
-"@webassemblyjs/wast-printer@1.8.5":
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+"@webassemblyjs/wast-printer@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+  integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/wast-parser" "1.8.5"
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
     "@xtuc/long" "4.2.2"
 
 "@xtuc/ieee754@^1.2.0":
@@ -1176,18 +1206,19 @@ accepts@~1.3.5:
     mime-types "~2.1.18"
     negotiator "0.6.1"
 
-acorn-dynamic-import@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
-
 acorn-jsx@^5.0.0:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
 
-acorn@^6.0.2, acorn@^6.0.5, acorn@^6.0.7:
+acorn@^6.0.2, acorn@^6.0.7:
   version "6.1.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
 
+acorn@^6.4.1:
+  version "6.4.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
 after@0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
@@ -1222,6 +1253,11 @@ ajv-keywords@^3.1.0:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d"
 
+ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
 ajv@^6.1.0, ajv@^6.9.1:
   version "6.10.0"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
@@ -1241,6 +1277,16 @@ ajv@^6.10.2:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
 alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -1307,6 +1353,14 @@ anymatch@^2.0.0:
     micromatch "^3.1.4"
     normalize-path "^2.1.1"
 
+anymatch@~3.1.1:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
 aproba@^1.0.3, aproba@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
@@ -1691,6 +1745,11 @@ binary-extensions@^1.0.0:
   version "1.12.0"
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
 
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
 blob@0.0.5:
   version "0.0.5"
   resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
@@ -1699,9 +1758,10 @@ bluebird@^3.1.1, bluebird@^3.3.0:
   version "3.5.3"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
 
-bluebird@^3.5.3:
-  version "3.5.4"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
+bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
 
 bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
   version "4.11.8"
@@ -1767,7 +1827,7 @@ braces@^2.3.1, braces@^2.3.2:
     split-string "^3.0.2"
     to-regex "^3.0.1"
 
-braces@^3.0.1:
+braces@^3.0.1, braces@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
   integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@@ -1909,25 +1969,50 @@ bytes@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
 
-cacache@^11.3.2:
-  version "11.3.2"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa"
+cacache@^12.0.2:
+  version "12.0.4"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+  integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
   dependencies:
-    bluebird "^3.5.3"
+    bluebird "^3.5.5"
     chownr "^1.1.1"
     figgy-pudding "^3.5.1"
-    glob "^7.1.3"
+    glob "^7.1.4"
     graceful-fs "^4.1.15"
+    infer-owner "^1.0.3"
     lru-cache "^5.1.1"
     mississippi "^3.0.0"
     mkdirp "^0.5.1"
     move-concurrently "^1.0.1"
     promise-inflight "^1.0.1"
-    rimraf "^2.6.2"
+    rimraf "^2.6.3"
     ssri "^6.0.1"
     unique-filename "^1.1.1"
     y18n "^4.0.0"
 
+cacache@^15.0.5:
+  version "15.0.6"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099"
+  integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==
+  dependencies:
+    "@npmcli/move-file" "^1.0.1"
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    glob "^7.1.4"
+    infer-owner "^1.0.4"
+    lru-cache "^6.0.0"
+    minipass "^3.1.1"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.2"
+    mkdirp "^1.0.3"
+    p-map "^4.0.0"
+    promise-inflight "^1.0.1"
+    rimraf "^3.0.2"
+    ssri "^8.0.1"
+    tar "^6.0.2"
+    unique-filename "^1.1.1"
+
 cache-base@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -2117,7 +2202,7 @@ chardet@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
 
-chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3:
+chokidar@^2.0.0, chokidar@^2.0.3:
   version "2.1.6"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
   dependencies:
@@ -2135,19 +2220,57 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3:
   optionalDependencies:
     fsevents "^1.2.7"
 
+chokidar@^2.1.8:
+  version "2.1.8"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+  integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+  dependencies:
+    anymatch "^2.0.0"
+    async-each "^1.0.1"
+    braces "^2.3.2"
+    glob-parent "^3.1.0"
+    inherits "^2.0.3"
+    is-binary-path "^1.0.0"
+    is-glob "^4.0.0"
+    normalize-path "^3.0.0"
+    path-is-absolute "^1.0.0"
+    readdirp "^2.2.1"
+    upath "^1.1.1"
+  optionalDependencies:
+    fsevents "^1.2.7"
+
+chokidar@^3.4.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
+  integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
+  dependencies:
+    anymatch "~3.1.1"
+    braces "~3.0.2"
+    glob-parent "~5.1.0"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.5.0"
+  optionalDependencies:
+    fsevents "~2.3.1"
+
 chownr@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
 
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
 chromatism@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/chromatism/-/chromatism-3.0.0.tgz#a7249d353c1e4f3577e444ac41171c4e2e624b12"
 
-chrome-trace-event@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
-  dependencies:
-    tslib "^1.9.0"
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
 
 chromedriver@^87.0.1:
   version "87.0.4"
@@ -2350,9 +2473,10 @@ commander@2.9.0:
   dependencies:
     graceful-readlink ">= 1.0.0"
 
-commander@^2.19.0:
-  version "2.19.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
 commondir@^1.0.1:
   version "1.0.1"
@@ -2464,6 +2588,23 @@ copy-descriptor@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
 
+copy-webpack-plugin@^6.4.1:
+  version "6.4.1"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz#138cd9b436dbca0a6d071720d5414848992ec47e"
+  integrity sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==
+  dependencies:
+    cacache "^15.0.5"
+    fast-glob "^3.2.4"
+    find-cache-dir "^3.3.1"
+    glob-parent "^5.1.1"
+    globby "^11.0.1"
+    loader-utils "^2.0.0"
+    normalize-path "^3.0.0"
+    p-limit "^3.0.2"
+    schema-utils "^3.0.0"
+    serialize-javascript "^5.0.1"
+    webpack-sources "^1.4.3"
+
 core-js-compat@^3.4.7:
   version "3.4.8"
   resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.8.tgz#f72e6a4ed76437ea710928f44615f926a81607d5"
@@ -3053,6 +3194,11 @@ emojis-list@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
 
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
 encodeurl@~1.0.1, encodeurl@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@@ -3100,12 +3246,13 @@ engine.io@~3.2.0:
     engine.io-parser "~2.1.0"
     ws "~3.3.1"
 
-enhanced-resolve@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+enhanced-resolve@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
+  integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
   dependencies:
     graceful-fs "^4.1.2"
-    memory-fs "^0.4.0"
+    memory-fs "^0.5.0"
     tapable "^1.0.0"
 
 ent@~2.2.0:
@@ -3572,6 +3719,18 @@ fast-glob@^3.1.1:
     micromatch "^4.0.2"
     picomatch "^2.2.1"
 
+fast-glob@^3.2.4:
+  version "3.2.5"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+  integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.0"
+    merge2 "^1.3.0"
+    micromatch "^4.0.2"
+    picomatch "^2.2.1"
+
 fast-json-stable-stringify@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
@@ -3687,7 +3846,7 @@ find-cache-dir@^0.1.1:
     mkdirp "^0.5.1"
     pkg-dir "^1.0.0"
 
-find-cache-dir@^2.0.0:
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
   dependencies:
@@ -3695,6 +3854,15 @@ find-cache-dir@^2.0.0:
     make-dir "^2.0.0"
     pkg-dir "^3.0.0"
 
+find-cache-dir@^3.3.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
+  integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^3.0.2"
+    pkg-dir "^4.1.0"
+
 find-up@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@@ -3714,7 +3882,7 @@ find-up@^3.0.0:
   dependencies:
     locate-path "^3.0.0"
 
-find-up@^4.1.0:
+find-up@^4.0.0, find-up@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
   integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -3799,6 +3967,13 @@ fs-minipass@^1.2.5:
   dependencies:
     minipass "^2.2.1"
 
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
 fs-write-stream-atomic@^1.0.8:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
@@ -3819,6 +3994,11 @@ fsevents@^1.2.7:
     nan "^2.12.1"
     node-pre-gyp "^0.12.0"
 
+fsevents@~2.3.1:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
 ftp@~0.3.10:
   version "0.3.10"
   resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
@@ -3920,6 +4100,13 @@ glob-parent@^5.1.0:
   dependencies:
     is-glob "^4.0.1"
 
+glob-parent@^5.1.1, glob-parent@~5.1.0:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
 glob@7.0.5:
   version "7.0.5"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
@@ -3974,6 +4161,18 @@ glob@^7.1.2:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
+glob@^7.1.4:
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
 global-modules@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -4404,6 +4603,11 @@ indexof@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
 
+infer-owner@^1.0.3, infer-owner@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+  integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
 inflight@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -4526,6 +4730,13 @@ is-binary-path@^1.0.0:
   dependencies:
     binary-extensions "^1.0.0"
 
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
 is-buffer@^1.1.5:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -4647,7 +4858,7 @@ is-glob@^3.1.0:
   dependencies:
     is-extglob "^2.1.0"
 
-is-glob@^4.0.0, is-glob@^4.0.1:
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
   dependencies:
@@ -5130,9 +5341,10 @@ loader-fs-cache@^1.0.0:
     find-cache-dir "^0.1.1"
     mkdirp "0.5.1"
 
-loader-runner@^2.3.0:
+loader-runner@^2.4.0:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+  integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
 
 loader-utils@^0.2.16, loader-utils@^0.2.3:
   version "0.2.17"
@@ -5151,6 +5363,24 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
     emojis-list "^2.0.0"
     json5 "^1.0.1"
 
+loader-utils@^1.2.3:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+  integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+  integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
 localforage@^1.5.0:
   version "1.7.3"
   resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.7.3.tgz#0082b3ca9734679e1bd534995bdd3b24cf10f204"
@@ -5504,6 +5734,13 @@ lru-cache@^5.1.1:
   dependencies:
     yallist "^3.0.2"
 
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
 lru-cache@~2.6.5:
   version "2.6.5"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5"
@@ -5515,9 +5752,12 @@ make-dir@^2.0.0, make-dir@^2.1.0:
     pify "^4.0.1"
     semver "^5.6.0"
 
-mamacro@^0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+make-dir@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+  dependencies:
+    semver "^6.0.0"
 
 map-age-cleaner@^0.1.1:
   version "0.1.3"
@@ -5596,13 +5836,21 @@ mem@^4.0.0:
     mimic-fn "^1.0.0"
     p-is-promise "^2.0.0"
 
-memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
+memory-fs@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
   dependencies:
     errno "^0.1.3"
     readable-stream "^2.0.1"
 
+memory-fs@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+  integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
 meow@^3.3.0:
   version "3.7.0"
   resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
@@ -5668,7 +5916,7 @@ micromatch@^2.3.11:
     parse-glob "^3.0.4"
     regex-cache "^0.4.2"
 
-micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8:
+micromatch@^3.1.10, micromatch@^3.1.4:
   version "3.1.10"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
   dependencies:
@@ -5788,6 +6036,27 @@ minimist@^1.2.5:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
 minipass@^2.2.1, minipass@^2.3.4:
   version "2.3.5"
   resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
@@ -5795,12 +6064,27 @@ minipass@^2.2.1, minipass@^2.3.4:
     safe-buffer "^5.1.2"
     yallist "^3.0.0"
 
+minipass@^3.0.0, minipass@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+  integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
+  dependencies:
+    yallist "^4.0.0"
+
 minizlib@^1.1.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
   dependencies:
     minipass "^2.2.1"
 
+minizlib@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
 mississippi@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
@@ -5823,13 +6107,20 @@ mixin-deep@^1.2.0:
     for-in "^1.0.2"
     is-extendable "^1.0.1"
 
-mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
   dependencies:
     minimist "0.0.8"
 
-mkdirp@^1.0.4:
+mkdirp@^0.5.3:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+  dependencies:
+    minimist "^1.2.5"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
   integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@@ -5951,6 +6242,11 @@ neo-async@^2.5.0:
   version "2.6.1"
   resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
 
+neo-async@^2.6.1:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
 netmask@~1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
@@ -5980,9 +6276,10 @@ no-case@^2.2.0:
   dependencies:
     lower-case "^1.1.1"
 
-node-libs-browser@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77"
+node-libs-browser@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+  integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
   dependencies:
     assert "^1.1.1"
     browserify-zlib "^0.2.0"
@@ -5994,7 +6291,7 @@ node-libs-browser@^2.0.0:
     events "^3.0.0"
     https-browserify "^1.0.0"
     os-browserify "^0.3.0"
-    path-browserify "0.0.0"
+    path-browserify "0.0.1"
     process "^0.11.10"
     punycode "^1.2.4"
     querystring-es3 "^0.2.0"
@@ -6006,7 +6303,7 @@ node-libs-browser@^2.0.0:
     tty-browserify "0.0.0"
     url "^0.11.0"
     util "^0.11.0"
-    vm-browserify "0.0.4"
+    vm-browserify "^1.0.1"
 
 node-modules-regexp@^1.0.0:
   version "1.0.0"
@@ -6085,7 +6382,7 @@ normalize-path@^2.0.1, normalize-path@^2.1.1:
   dependencies:
     remove-trailing-separator "^1.0.1"
 
-normalize-path@^3.0.0:
+normalize-path@^3.0.0, normalize-path@~3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
 
@@ -6321,6 +6618,13 @@ p-limit@^2.2.0:
   dependencies:
     p-try "^2.0.0"
 
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+  dependencies:
+    yocto-queue "^0.1.0"
+
 p-locate@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
@@ -6486,9 +6790,10 @@ pascalcase@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
 
-path-browserify@0.0.0:
-  version "0.0.0"
-  resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+path-browserify@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+  integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
 
 path-dirname@^1.0.0:
   version "1.0.2"
@@ -6572,6 +6877,11 @@ phoenix@^1.3.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/phoenix/-/phoenix-1.4.0.tgz#9cec8dbd8cbc59ecd2147bc09ca8ceb56b860d75"
 
+picomatch@^2.0.4:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
+  integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
+
 picomatch@^2.0.5, picomatch@^2.2.1:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
@@ -6620,6 +6930,13 @@ pkg-dir@^3.0.0:
   dependencies:
     find-up "^3.0.0"
 
+pkg-dir@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
 pngjs@^3.3.0:
   version "3.3.3"
   resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.3.tgz#85173703bde3edac8998757b96e5821d0966a21b"
@@ -7196,9 +7513,10 @@ randomatic@^3.0.0:
     kind-of "^6.0.0"
     math-random "^1.0.1"
 
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
   dependencies:
     safe-buffer "^5.1.0"
 
@@ -7335,6 +7653,13 @@ readdirp@^2.2.1:
     micromatch "^3.1.10"
     readable-stream "^2.0.2"
 
+readdirp@~3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+  integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
+  dependencies:
+    picomatch "^2.2.1"
+
 rechoir@^0.6.2:
   version "0.6.2"
   resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
@@ -7630,12 +7955,19 @@ rfdc@^1.1.2:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
 
-rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2:
+rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1:
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
   dependencies:
     glob "^7.1.3"
 
+rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
 rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -7650,6 +7982,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
     hash-base "^3.0.0"
     inherits "^2.0.1"
 
+ruffle-mirror@^2021.4.10:
+  version "2021.4.11"
+  resolved "https://registry.yarnpkg.com/ruffle-mirror/-/ruffle-mirror-2021.4.11.tgz#039940e0a68e6849259dbef6b54fb877ac4373e7"
+  integrity sha512-a3N2OkPCJauiHBloHoZgCn/mSUlybyb9Ps4ikPGgHUy8iXPy6qMqh62imvNDU07tBJc5Y0c5mRHBFJRgpMgEpA==
+
 run-async@^2.2.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
@@ -7725,6 +8062,15 @@ schema-utils@^1.0.0:
     ajv-errors "^1.0.0"
     ajv-keywords "^3.1.0"
 
+schema-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+  integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
+  dependencies:
+    "@types/json-schema" "^7.0.6"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
 selenium-server@2.53.1:
   version "2.53.1"
   resolved "https://registry.yarnpkg.com/selenium-server/-/selenium-server-2.53.1.tgz#d681528812f3c2e0531a6b7e613e23bb02cce8a6"
@@ -7742,7 +8088,7 @@ semver@^5.5.1:
   version "5.7.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
 
-semver@^6.3.0:
+semver@^6.0.0, semver@^6.3.0:
   version "6.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -7769,9 +8115,19 @@ send@0.16.2:
     range-parser "~1.2.0"
     statuses "~1.4.0"
 
-serialize-javascript@^1.7.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
+serialize-javascript@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+  integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+  dependencies:
+    randombytes "^2.1.0"
+
+serialize-javascript@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
+  integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
+  dependencies:
+    randombytes "^2.1.0"
 
 serve-static@1.13.2:
   version "1.13.2"
@@ -8011,9 +8367,10 @@ source-map-support@^0.5.16:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
 
-source-map-support@~0.5.10:
-  version "0.5.12"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
+source-map-support@~0.5.12:
+  version "0.5.19"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+  integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
   dependencies:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
@@ -8079,6 +8436,13 @@ ssri@^6.0.1:
   dependencies:
     figgy-pudding "^3.5.1"
 
+ssri@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
+  integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
+  dependencies:
+    minipass "^3.1.1"
+
 state-toggle@^1.0.0:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
@@ -8423,7 +8787,7 @@ table@^5.4.6:
     slice-ansi "^2.1.0"
     string-width "^3.0.0"
 
-tapable@^1.0.0, tapable@^1.1.0:
+tapable@^1.0.0, tapable@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
 
@@ -8439,6 +8803,18 @@ tar@^4:
     safe-buffer "^5.1.2"
     yallist "^3.0.2"
 
+tar@^6.0.2:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
+  integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^3.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
 tcp-port-used@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.1.tgz#46061078e2d38c73979a2c2c12b5a674e6689d70"
@@ -8446,27 +8822,29 @@ tcp-port-used@^1.0.1:
     debug "4.1.0"
     is2 "2.0.1"
 
-terser-webpack-plugin@^1.1.0:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.4.tgz#56f87540c28dd5265753431009388f473b5abba3"
+terser-webpack-plugin@^1.4.3:
+  version "1.4.5"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+  integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
   dependencies:
-    cacache "^11.3.2"
-    find-cache-dir "^2.0.0"
+    cacache "^12.0.2"
+    find-cache-dir "^2.1.0"
     is-wsl "^1.1.0"
     schema-utils "^1.0.0"
-    serialize-javascript "^1.7.0"
+    serialize-javascript "^4.0.0"
     source-map "^0.6.1"
-    terser "^3.17.0"
-    webpack-sources "^1.3.0"
+    terser "^4.1.2"
+    webpack-sources "^1.4.0"
     worker-farm "^1.7.0"
 
-terser@^3.17.0:
-  version "3.17.0"
-  resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
+terser@^4.1.2:
+  version "4.8.0"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+  integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
   dependencies:
-    commander "^2.19.0"
+    commander "^2.20.0"
     source-map "~0.6.1"
-    source-map-support "~0.5.10"
+    source-map-support "~0.5.12"
 
 text-encoding@0.6.4:
   version "0.6.4"
@@ -8913,11 +9291,10 @@ vfile@^4.0.0:
     unist-util-stringify-position "^2.0.0"
     vfile-message "^2.0.0"
 
-vm-browserify@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
-  dependencies:
-    indexof "0.0.1"
+vm-browserify@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+  integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
 
 void-elements@^2.0.0:
   version "2.0.1"
@@ -8996,13 +9373,23 @@ vuex@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.0.1.tgz#e761352ebe0af537d4bb755a9b9dc4be3df7efd2"
 
-watchpack@^1.5.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+watchpack-chokidar2@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
+  integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
+  dependencies:
+    chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+  version "1.7.5"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
+  integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
   dependencies:
-    chokidar "^2.0.2"
     graceful-fs "^4.1.2"
     neo-async "^2.5.0"
+  optionalDependencies:
+    chokidar "^3.4.1"
+    watchpack-chokidar2 "^2.0.1"
 
 webpack-dev-middleware@^3.2.0, webpack-dev-middleware@^3.6.0:
   version "3.7.0"
@@ -9038,41 +9425,49 @@ webpack-merge@^0.14.1:
     lodash.isplainobject "^3.2.0"
     lodash.merge "^3.3.2"
 
-webpack-sources@^1.1.0, webpack-sources@^1.3.0:
+webpack-sources@^1.1.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
   dependencies:
     source-list-map "^2.0.0"
     source-map "~0.6.1"
 
-webpack@^4.0.0:
-  version "4.32.1"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.32.1.tgz#afe0cc7dd2b196e5a58f8d1d385311cfbb5d68c0"
+webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+  integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
   dependencies:
-    "@webassemblyjs/ast" "1.8.5"
-    "@webassemblyjs/helper-module-context" "1.8.5"
-    "@webassemblyjs/wasm-edit" "1.8.5"
-    "@webassemblyjs/wasm-parser" "1.8.5"
-    acorn "^6.0.5"
-    acorn-dynamic-import "^4.0.0"
-    ajv "^6.1.0"
-    ajv-keywords "^3.1.0"
-    chrome-trace-event "^1.0.0"
-    enhanced-resolve "^4.1.0"
-    eslint-scope "^4.0.0"
+    source-list-map "^2.0.0"
+    source-map "~0.6.1"
+
+webpack@^4.44.0:
+  version "4.46.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542"
+  integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/wasm-edit" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    acorn "^6.4.1"
+    ajv "^6.10.2"
+    ajv-keywords "^3.4.1"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^4.5.0"
+    eslint-scope "^4.0.3"
     json-parse-better-errors "^1.0.2"
-    loader-runner "^2.3.0"
-    loader-utils "^1.1.0"
-    memory-fs "~0.4.1"
-    micromatch "^3.1.8"
-    mkdirp "~0.5.0"
-    neo-async "^2.5.0"
-    node-libs-browser "^2.0.0"
+    loader-runner "^2.4.0"
+    loader-utils "^1.2.3"
+    memory-fs "^0.4.1"
+    micromatch "^3.1.10"
+    mkdirp "^0.5.3"
+    neo-async "^2.6.1"
+    node-libs-browser "^2.2.1"
     schema-utils "^1.0.0"
-    tapable "^1.1.0"
-    terser-webpack-plugin "^1.1.0"
-    watchpack "^1.5.0"
-    webpack-sources "^1.3.0"
+    tapable "^1.1.3"
+    terser-webpack-plugin "^1.4.3"
+    watchpack "^1.7.4"
+    webpack-sources "^1.4.1"
 
 whet.extend@~0.9.9:
   version "0.9.9"
@@ -9176,6 +9571,11 @@ yallist@^3.0.0, yallist@^3.0.2:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
 
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
 yaml@^1.7.2:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
@@ -9224,3 +9624,8 @@ yauzl@^2.10.0:
 yeast@0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==