From f915fee74970c262e2c1167e353e88a98a09a9c7 Mon Sep 17 00:00:00 2001 From: BinBashBanana <51469593+BinBashBanana@users.noreply.github.com> Date: Thu, 1 Jan 2026 00:23:46 -0800 Subject: [PATCH] Emscripten bugfixes/nits --- Makefile.emscripten | 83 +++++-- audio/drivers/rwebaudio.c | 4 +- command.c | 4 +- config.def.h | 2 +- emscripten/closure_externs.js | 219 ++++++++++++++++++ emscripten/closure_post.js | 3 + emscripten/{pre.js => extern_pre.js} | 0 emscripten/library_platform_emscripten.js | 66 ++++-- emscripten/library_rwebcam.js | 8 +- frontend/drivers/platform_emscripten.c | 75 +++++- frontend/drivers/platform_emscripten.h | 9 +- gfx/drivers/gl2.c | 8 + .../modern_pipeline_xmb_ribbon.glsl.vert.h | 34 +-- input/drivers_joypad/rwebpad_joypad.c | 2 +- menu/menu_driver.c | 10 +- menu/menu_driver.h | 7 + menu/menu_setting.c | 7 + pkg/emscripten/README.md | 154 +++++++++--- pkg/emscripten/libretro-thread/core_list.js | 76 +++--- pkg/emscripten/libretro-thread/libretro.js | 117 +++++----- pkg/emscripten/libretro/browserfs.min.js | 23 +- pkg/emscripten/libretro/core_list.js | 76 +++--- pkg/emscripten/libretro/libretro.js | 136 ++++++----- retroarch.c | 29 ++- runloop.c | 10 +- 25 files changed, 842 insertions(+), 320 deletions(-) create mode 100644 emscripten/closure_externs.js create mode 100644 emscripten/closure_post.js rename emscripten/{pre.js => extern_pre.js} (100%) diff --git a/Makefile.emscripten b/Makefile.emscripten index 8446a1e9640c..fb74177eed80 100644 --- a/Makefile.emscripten +++ b/Makefile.emscripten @@ -12,7 +12,7 @@ TARGET_BASE := $(subst .js,,$(TARGET)) OS = Emscripten OBJ := DEFINES := -DRARCH_INTERNAL -DHAVE_MAIN -DEMSCRIPTEN -DEFINES += -DHAVE_FILTERS_BUILTIN -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORE_INFO +DEFINES += -DHAVE_FILTERS_BUILTIN -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORE_INFO -DHAVE_STB_VORBIS HAVE_STATESTREAM ?= 1 HAVE_PATCH = 1 @@ -26,7 +26,8 @@ HAVE_UPDATE_ASSETS = 1 HAVE_ONLINE_UPDATER = 1 HAVE_GLSL = 1 HAVE_SCREENSHOTS = 1 -HAVE_REWIND = 1 +HAVE_REWIND ?= 1 +HAVE_RUNAHEAD ?= 1 HAVE_AUDIOMIXER = 1 HAVE_CC_RESAMPLER ?= 1 HAVE_EGL ?= 0 @@ -51,7 +52,7 @@ HAVE_CHEATS = 1 HAVE_IBXM = 1 HAVE_CORE_INFO_CACHE = 1 HAVE_7ZIP = 1 -HAVE_BSV_MOVIE = 1 +HAVE_BSV_MOVIE ?= 1 HAVE_CHD ?= 0 HAVE_NETPLAYDISCOVERY ?= 0 @@ -65,39 +66,55 @@ HAVE_AUDIOWORKLET ?= 0 # doesn't work on PROXY_TO_PTHREAD HAVE_RWEBAUDIO ?= 1 -# requires ASYNC or PROXY_TO_PTHREAD +# requires ASYNC or PROXY_TO_PTHREAD. Prefer another driver. HAVE_AL ?= 0 # whether the browser thread is allowed to block to wait for audio to play, not CPU usage-friendly! # currently this variable is only used by rwebaudio and audioworklet; openal will never busywait. ALLOW_AUDIO_BUSYWAIT ?= 0 -# minimal asyncify; better performance than full asyncify, -# but sleeping on the main thread is only possible in some places. +# asyncify: enable fibers and sleeping on the browser thread, +# this has a noticeable impact on compile time, output wasm size, and speed. +# see https://emscripten.org/docs/porting/asyncify.html for more info +ASYNC ?= 0 + +# minimal asyncify: better performance than full asyncify, +# but sleeping on the browser thread is only possible in some places. MIN_ASYNC ?= 0 -# runs RetroArch on a pthread instead of the browser thread; requires HAVE_THREADS +# JSPI: experimental asyncify alternative, see https://webassembly.org/features/ +# currently (emscripten 4.0.15) this requires a patched emscripten toolchain. +JSPI ?= 0 + +# runs RetroArch on a pthread instead of the browser thread; implies HAVE_THREADS PROXY_TO_PTHREAD ?= 0 # recommended FS when using HAVE_THREADS HAVE_WASMFS ?= 0 -# enables OPFS (origin private file system) and FETCHFS, requires PROXY_TO_PTHREAD +# enables OPFS (origin private file system) and FETCHFS, requires PROXY_TO_PTHREAD or JSPI HAVE_EXTRA_WASMFS ?= 0 +# use the closure compiler to further minify output JS +CLOSURE_COMPILER ?= 0 + # enable javascript filesystem tracking, incompatible with HAVE_WASMFS FS_DEBUG ?= 0 # help diagnose GL problems (can cause issues in normal operation) GL_DEBUG ?= 0 -# does nothing on its own, but automatically selected by some other options -WASM_WORKERS = 0 +# enable runtime assertions (always enabled in debug builds) +# please use this when testing new emscripten-specific features! +ASSERTIONS ?= 0 -HAVE_OPENGLES ?= 1 +# enable GLES 3.0 (WebGL 2). +# if left disabled, GLES 2.0 (WebGL 1) will be used. HAVE_OPENGLES3 ?= 0 -ASYNC ?= 0 +# does nothing on its own, but automatically selected by some other options +WASM_WORKERS = 0 + LTO ?= 0 PTHREAD_POOL_SIZE ?= 4 @@ -136,7 +153,10 @@ ifeq ($(HAVE_EXTRA_WASMFS), 1) DEFINES += -DHAVE_EXTRA_WASMFS override HAVE_WASMFS = 1 ifeq ($(PROXY_TO_PTHREAD), 0) - $(error ERROR: HAVE_EXTRA_WASMFS requires PROXY_TO_PTHREAD) + # note: currently HAVE_EXTRA_WASMFS+JSPI requires ASSERTIONS to be turned off + ifeq ($(JSPI), 0) + $(error ERROR: HAVE_EXTRA_WASMFS requires PROXY_TO_PTHREAD or JSPI) + endif endif endif @@ -154,6 +174,7 @@ ifeq ($(PROXY_TO_PTHREAD), 1) override STACK_SIZE = 4194304 else ifeq ($(HAVE_AL), 1) override ASYNC = 1 + override MIN_ASYNC = 0 endif ifeq ($(HAVE_SDL2), 1) @@ -167,7 +188,7 @@ LDFLAGS := -L. --no-heap-copy -s STACK_SIZE=$(STACK_SIZE) -s INITIAL_MEMORY=$(IN -s MODULARIZE=1 -s EXPORT_ES6=1 -s EXPORT_NAME="libretro_$(subst -,_,$(LIBRETRO))" \ -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0 \ -s ENVIRONMENT=web,worker -s WASM_BIGINT=1 \ - --extern-pre-js emscripten/pre.js \ + --extern-pre-js emscripten/extern_pre.js \ --js-library emscripten/library_rwebcam.js \ --js-library emscripten/library_platform_emscripten.js @@ -181,7 +202,6 @@ endif ifeq ($(GL_DEBUG), 1) LDFLAGS += -s GL_ASSERTIONS=1 -s GL_DEBUG=1 - DEFINES += -DHAVE_GL_DEBUG_ES=1 endif ifeq ($(FS_DEBUG), 1) @@ -211,6 +231,7 @@ ifeq ($(HAVE_AL), 1) endif ifeq ($(PROXY_TO_PTHREAD), 1) +else ifeq ($(JSPI), 1) else ifeq ($(ASYNC), 1) else DEFINES += -DEMSCRIPTEN_AUDIO_EXTERNAL_BLOCK @@ -245,18 +266,26 @@ ifeq ($(WASM_WORKERS), 1) LDFLAGS += -s WASM_WORKERS=1 endif -ifeq ($(ASYNC), 1) - DEFINES += -DEMSCRIPTEN_ASYNCIFY -DEMSCRIPTEN_FULL_ASYNCIFY - LDFLAGS += -s ASYNCIFY=1 -s ASYNCIFY_STACK_SIZE=8192 - ifeq ($(DEBUG), 1) - #LDFLAGS += -s ASYNCIFY_DEBUG=1 # broken? - endif +ifeq ($(JSPI), 1) + CFLAGS += -fwasm-exceptions + DEFINES += -DEMSCRIPTEN_ASYNCIFY -DEMSCRIPTEN_FULL_ASYNCIFY -DEMSCRIPTEN_JSPI + LDFLAGS += -s JSPI=1 -fwasm-exceptions else ifeq ($(MIN_ASYNC), 1) DEFINES += -DEMSCRIPTEN_ASYNCIFY -DEMSCRIPTEN_MIN_ASYNCIFY LDFLAGS += -s ASYNCIFY=1 -s ASYNCIFY_STACK_SIZE=8192 -s ASYNCIFY_IGNORE_INDIRECT=1 -s ASYNCIFY_ADD='$(ASYNCIFY_ADD)' -s ASYNCIFY_REMOVE='$(ASYNCIFY_REMOVE)' ifeq ($(DEBUG), 1) LDFLAGS += -s ASYNCIFY_ADVISE #-s ASYNCIFY_DEBUG=1 endif +else ifeq ($(ASYNC), 1) + DEFINES += -DEMSCRIPTEN_ASYNCIFY -DEMSCRIPTEN_FULL_ASYNCIFY + LDFLAGS += -s ASYNCIFY=1 -s ASYNCIFY_STACK_SIZE=8192 + ifeq ($(DEBUG), 1) + #LDFLAGS += -s ASYNCIFY_DEBUG=1 # broken? + endif +endif + +ifeq ($(CLOSURE_COMPILER), 1) + LDFLAGS += --closure 1 --closure-args=--externs=emscripten/closure_externs.js --post-js emscripten/closure_post.js endif include Makefile.common @@ -281,9 +310,15 @@ ifneq ($(V), 1) endif ifeq ($(DEBUG), 1) - LDFLAGS += -O0 -g -gsource-map -s SAFE_HEAP=2 -s STACK_OVERFLOW_CHECK=2 -s ASSERTIONS=1 + LDFLAGS += -O0 -g -gsource-map -s STACK_OVERFLOW_CHECK=2 # -O0 in cflags gives "too many locals" errors CFLAGS += -O1 -g -gsource-map + override ASSERTIONS = 1 + # "WASM_WORKERS is not currently compatible with `-fsanitize` tools" + ifeq ($(WASM_WORKERS), 0) + CFLAGS += -fsanitize=undefined + LDFLAGS += -fsanitize=undefined + endif else LDFLAGS += -O3 # WARNING: some optimizations can break some cores (ex: LTO breaks tyrquake) @@ -293,6 +328,10 @@ else CFLAGS += -O3 endif +ifneq ($(ASSERTIONS), 0) + LDFLAGS += -s ASSERTIONS=$(ASSERTIONS) +endif + CFLAGS += -Wall -I. -Ilibretro-common/include -Ideps/7zip -std=gnu99 RARCH_OBJ := $(addprefix $(OBJDIR)/,$(OBJ)) diff --git a/audio/drivers/rwebaudio.c b/audio/drivers/rwebaudio.c index 82f8f34360f6..c4033b7f18b2 100644 --- a/audio/drivers/rwebaudio.c +++ b/audio/drivers/rwebaudio.c @@ -91,8 +91,8 @@ static void *rwebaudio_init(const char *device, unsigned rate, unsigned latency, rwebaudio_static_data = rwebaudio; *new_rate = RWebAudioSampleRate(); rwebaudio->tmpbuf_frames = RWEBAUDIO_BUFFER_SIZE_MS * *new_rate / 1000; - rwebaudio->tmpbuf_left = memalign(sizeof(float), rwebaudio->tmpbuf_frames * sizeof(float)); - rwebaudio->tmpbuf_right = memalign(sizeof(float), rwebaudio->tmpbuf_frames * sizeof(float)); + rwebaudio->tmpbuf_left = memalign(16, rwebaudio->tmpbuf_frames * sizeof(float)); + rwebaudio->tmpbuf_right = memalign(16, rwebaudio->tmpbuf_frames * sizeof(float)); RARCH_LOG("[RWebAudio] Device rate: %d Hz.\n", *new_rate); RARCH_LOG("[RWebAudio] Buffer size: %lu bytes.\n", RWebAudioBufferSizeFrames() * 2 * sizeof(float)); return rwebaudio; diff --git a/command.c b/command.c index 791d51054701..1439ad47d8cf 100644 --- a/command.c +++ b/command.c @@ -1927,8 +1927,10 @@ bool command_set_shader(command_t *cmd, const char *arg) { enum rarch_shader_type type = video_shader_parse_type(arg); settings_t *settings = config_get_ptr(); + bool apply_new_shader = !string_is_empty(arg); - if (!string_is_empty(arg)) + configuration_set_bool(settings, settings->bools.video_shader_enable, apply_new_shader); + if (apply_new_shader) { gfx_ctx_flags_t flags; flags.flags = 0; diff --git a/config.def.h b/config.def.h index 3cfed0e0a102..1b8f83814efd 100644 --- a/config.def.h +++ b/config.def.h @@ -868,7 +868,7 @@ #define DEFAULT_MENU_FOOTER_OPACITY 1.000f #define DEFAULT_MENU_HEADER_OPACITY 1.000f -#if defined(HAVE_OPENGLES2) || (defined(__MACH__) && defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED < 101200)) +#if (defined(HAVE_OPENGLES2) && !defined(EMSCRIPTEN)) || (defined(__MACH__) && defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED < 101200)) #define DEFAULT_MENU_SHADER_PIPELINE 1 #else #define DEFAULT_MENU_SHADER_PIPELINE 2 diff --git a/emscripten/closure_externs.js b/emscripten/closure_externs.js new file mode 100644 index 000000000000..51037a977339 --- /dev/null +++ b/emscripten/closure_externs.js @@ -0,0 +1,219 @@ +// Prevents the closure compiler from minifying certain property names. +// I don't know of a better way to do this without modifying emscripten libraries. +// Note that this isn't inserted into compiled JS file; it only instructs the closure compiler. + +// FS methods +Object.prototype.FSNode={}; +Object.prototype.FSStream={}; +Object.prototype.absolutePath={}; +Object.prototype.analyzePath={}; +Object.prototype.chdir={}; +Object.prototype.checkOpExists={}; +Object.prototype.chmod={}; +Object.prototype.chown={}; +Object.prototype.close={}; +Object.prototype.closeStream={}; +Object.prototype.create={}; +Object.prototype.createDataFile={}; +Object.prototype.createDefaultDevices={}; +Object.prototype.createDefaultDirectories={}; +Object.prototype.createDevice={}; +Object.prototype.createFile={}; +Object.prototype.createFolder={}; +Object.prototype.createLazyFile={}; +Object.prototype.createLink={}; +Object.prototype.createNode={}; +Object.prototype.createPath={}; +Object.prototype.createPreloadedFile={}; +Object.prototype.createSpecialDirectories={}; +Object.prototype.createStandardStreams={}; +Object.prototype.createStream={}; +Object.prototype.cwd={}; +Object.prototype.destroyNode={}; +Object.prototype.doChmod={}; +Object.prototype.doChown={}; +Object.prototype.doSetAttr={}; +Object.prototype.doTruncate={}; +Object.prototype.dupStream={}; +Object.prototype.fchmod={}; +Object.prototype.fchown={}; +Object.prototype.findObject={}; +Object.prototype.flagsToPermissionString={}; +Object.prototype.forceLoadFile={}; +Object.prototype.fstat={}; +Object.prototype.ftruncate={}; +Object.prototype.getDevice={}; +Object.prototype.getMounts={}; +Object.prototype.getPath={}; +Object.prototype.getStream={}; +Object.prototype.getStreamChecked={}; +Object.prototype.hashAddNode={}; +Object.prototype.hashName={}; +Object.prototype.hashRemoveNode={}; +Object.prototype.init={}; +Object.prototype.ioctl={}; +Object.prototype.isBlkdev={}; +Object.prototype.isChrdev={}; +Object.prototype.isClosed={}; +Object.prototype.isDir={}; +Object.prototype.isFIFO={}; +Object.prototype.isFile={}; +Object.prototype.isLink={}; +Object.prototype.isMountpoint={}; +Object.prototype.isRoot={}; +Object.prototype.isSocket={}; +Object.prototype.joinPath={}; +Object.prototype.lchmod={}; +Object.prototype.lchown={}; +Object.prototype.llseek={}; +Object.prototype.lookup={}; +Object.prototype.lookupNode={}; +Object.prototype.lookupPath={}; +Object.prototype.lstat={}; +Object.prototype.major={}; +Object.prototype.makedev={}; +Object.prototype.mayCreate={}; +Object.prototype.mayDelete={}; +Object.prototype.mayLookup={}; +Object.prototype.mayOpen={}; +Object.prototype.minor={}; +Object.prototype.mkdev={}; +Object.prototype.mkdir={}; +Object.prototype.mkdirTree={}; +Object.prototype.mknod={}; +Object.prototype.mmap={}; +Object.prototype.mmapAlloc={}; +Object.prototype.mount={}; +Object.prototype.msync={}; +Object.prototype.nextfd={}; +Object.prototype.nodePermissions={}; +Object.prototype.open={}; +Object.prototype.preloadFile={}; +Object.prototype.quit={}; +Object.prototype.read={}; +Object.prototype.readFile={}; +Object.prototype.readdir={}; +Object.prototype.readlink={}; +Object.prototype.registerDevice={}; +Object.prototype.rename={}; +Object.prototype.rmdir={}; +Object.prototype.standardizePath={}; +Object.prototype.stat={}; +Object.prototype.statfs={}; +Object.prototype.statfsNode={}; +Object.prototype.statfsStream={}; +Object.prototype.staticInit={}; +Object.prototype.symlink={}; +Object.prototype.syncfs={}; +Object.prototype.truncate={}; +Object.prototype.unlink={}; +Object.prototype.unmount={}; +Object.prototype.utime={}; +Object.prototype.write={}; +Object.prototype.writeFile={}; + +// FS properties +Object.prototype.MAX_OPEN_FDS={}; +Object.prototype.chrdev_stream_ops={}; +Object.prototype.currentPath={}; +Object.prototype.devices={}; +Object.prototype.filesystems={}; +Object.prototype.ignorePermissions={}; +Object.prototype.initialized={}; +Object.prototype.mounts={}; +Object.prototype.nameTable={}; +Object.prototype.nextInode={}; +Object.prototype.readFiles={}; +Object.prototype.root={}; +Object.prototype.streams={}; +Object.prototype.syncFSRequests={}; +Object.prototype.trackingDelegate={}; + +// FS.analyzePath() object +Object.prototype.error={}; +Object.prototype.exists={}; +Object.prototype.isRoot={}; +Object.prototype.name={}; +Object.prototype.object={}; +Object.prototype.parentExists={}; +Object.prototype.parentObject={}; +Object.prototype.parentPath={}; +Object.prototype.path={}; + +// FS.lookupPath() object +Object.prototype.node={}; +Object.prototype.path={}; + +// FS.FSNode / FS.FSStream +Object.prototype.atime={}; +Object.prototype.ctime={}; +Object.prototype.id={}; +Object.prototype.mode={}; +Object.prototype.mount={}; +Object.prototype.mounted={}; +Object.prototype.mtime={}; +Object.prototype.name={}; +Object.prototype.node_ops={}; +Object.prototype.parent={}; +Object.prototype.rdev={}; +Object.prototype.readMode={}; +Object.prototype.stream_ops={}; +Object.prototype.writeMode={}; + +Object.prototype.isDevice={}; +Object.prototype.isFolder={}; +Object.prototype.read={}; +Object.prototype.write={}; + +Object.prototype.contents={}; +Object.prototype.name_next={}; + +Object.prototype.dev={}; +Object.prototype.ino={}; +Object.prototype.nlink={}; +Object.prototype.uid={}; +Object.prototype.gid={}; +Object.prototype.size={}; +Object.prototype.blksize={}; +Object.prototype.blocks={}; +Object.prototype.timestamp={}; + +Object.prototype.mountpoint={}; +Object.prototype.mounts={}; +Object.prototype.opts={}; +Object.prototype.root={}; +Object.prototype.type={}; + +Object.prototype.nfd={}; +Object.prototype.flags={}; +Object.prototype.position={}; + +Object.prototype.getattr={}; +Object.prototype.setattr={}; + +// PATH methods +Object.prototype.basename={}; +Object.prototype.dirname={}; +Object.prototype.isAbs={}; +Object.prototype.join={}; +Object.prototype.join2={}; +Object.prototype.normalize={}; +Object.prototype.normalizeArray={}; +Object.prototype.splitPath={}; + +// ErrnoError properties +Object.prototype.errno={}; +Object.prototype.message={}; +Object.prototype.name={}; +Object.prototype.node={}; + +// Avoid emscripten bug with ASSERTIONS=0 FS_DEBUG=1 +/** + * @suppress {duplicate} + */ +function dbg(){} + +// RWebPad rumble +Object.prototype.vibrationActuator={}; +Object.prototype.playEffect={}; +Object.prototype.reset={}; diff --git a/emscripten/closure_post.js b/emscripten/closure_post.js new file mode 100644 index 000000000000..f00dc17e2285 --- /dev/null +++ b/emscripten/closure_post.js @@ -0,0 +1,3 @@ +// Export FS.ErrnoError, though it can still be renamed internally. +// This is used a lot internally so we save a bit of code size by doing this instead of declaring an extern. +FS["ErrnoError"] = FS.ErrnoError; diff --git a/emscripten/pre.js b/emscripten/extern_pre.js similarity index 100% rename from emscripten/pre.js rename to emscripten/extern_pre.js diff --git a/emscripten/library_platform_emscripten.js b/emscripten/library_platform_emscripten.js index 73ff84645269..79c69fd9868f 100644 --- a/emscripten/library_platform_emscripten.js +++ b/emscripten/library_platform_emscripten.js @@ -8,10 +8,16 @@ var LibraryPlatformEmscripten = { observer: null, memoryUsageTimeout: null, sentinelPromise: null, + wakeLockRequested: 0, command_queue: [], command_reply_queue: [] }, + PlatformEmscriptenKeepThreadAlive: function() { + // keeps the thread alive until exited explicitly + {{{ runtimeKeepalivePush() }}} + }, + $PlatformEmscriptenOnWindowResize: function() { RPE.observer.unobserve(Module.canvas); RPE.observer.observe(Module.canvas); @@ -26,24 +32,26 @@ var LibraryPlatformEmscripten = { return; } RPE.observer = new ResizeObserver(function(e) { - var width, height; var entry = e.find(i => i.target == Module.canvas); if (!entry) return; if (entry.devicePixelContentBoxSize) { - width = entry.devicePixelContentBoxSize[0].inlineSize; - height = entry.devicePixelContentBoxSize[0].blockSize; + RPE.canvasWidth = entry.devicePixelContentBoxSize[0].inlineSize; + RPE.canvasHeight = entry.devicePixelContentBoxSize[0].blockSize; } else { - width = Math.round(entry.contentRect.width * window.devicePixelRatio); - height = Math.round(entry.contentRect.height * window.devicePixelRatio); + RPE.canvasWidth = Math.round(entry.contentRect.width * window.devicePixelRatio); + RPE.canvasHeight = Math.round(entry.contentRect.height * window.devicePixelRatio); } - RPE.canvasWidth = width; - RPE.canvasHeight = height; // doubles are too big to pass as an argument to exported functions {{{ makeSetValue("dpr", "0", "window.devicePixelRatio", "double") }}}; - _platform_emscripten_update_canvas_dimensions_cb(width, height, dpr); + _platform_emscripten_update_canvas_dimensions_cb(RPE.canvasWidth, RPE.canvasHeight, dpr); }); RPE.observer.observe(Module.canvas); window.addEventListener("resize", PlatformEmscriptenOnWindowResize, false); + // first frame: this might be off by 1, but it will be corrected afterward + RPE.canvasWidth = Math.round(Module.canvas.clientWidth * window.devicePixelRatio); + RPE.canvasHeight = Math.round(Module.canvas.clientHeight * window.devicePixelRatio); + {{{ makeSetValue("dpr", "0", "window.devicePixelRatio", "double") }}}; + _platform_emscripten_update_canvas_dimensions_cb(RPE.canvasWidth, RPE.canvasHeight, dpr); }, $PlatformEmscriptenOnCanvasPointerDown: function() { @@ -61,9 +69,10 @@ var LibraryPlatformEmscripten = { Module.canvas.addEventListener("contextmenu", PlatformEmscriptenOnCanvasContextMenu, false); }, - $PlatformEmscriptenOnVisibilityChange__deps: ["platform_emscripten_update_window_hidden_cb"], + $PlatformEmscriptenOnVisibilityChange__deps: ["platform_emscripten_update_window_hidden_cb", "$PlatformEmscriptenRefreshWakeLock"], $PlatformEmscriptenOnVisibilityChange: function() { _platform_emscripten_update_window_hidden_cb(document.visibilityState == "hidden"); + if (document.visibilityState != "hidden") PlatformEmscriptenRefreshWakeLock(); }, PlatformEmscriptenWatchWindowVisibility__deps: ["$PlatformEmscriptenOnVisibilityChange"], @@ -125,7 +134,6 @@ var LibraryPlatformEmscripten = { }, PlatformEmscriptenGLContextEventInit__deps: ["$PlatformEmscriptenOnGLContextLost", "$PlatformEmscriptenOnGLContextRestored"], - PlatformEmscriptenGLContextEventInit__proxy: "sync", PlatformEmscriptenGLContextEventInit: function() { Module.canvas.addEventListener("webglcontextlost", PlatformEmscriptenOnGLContextLost); Module.canvas.addEventListener("webglcontextrestored", PlatformEmscriptenOnGLContextRestored); @@ -158,10 +166,32 @@ var LibraryPlatformEmscripten = { PlatformEmscriptenDoSetCanvasSize(width, height); }, + $PlatformEmscriptenRefreshWakeLock: async function() { + // wake lock is lost when the window is hidden, and must be requested again + if (RPE.wakeLockRequested && navigator?.wakeLock?.request) { + if (RPE.sentinelPromise) { + try { + var sentinel = await RPE.sentinelPromise; + if (!sentinel.released) return; + } catch (e) {} + } + try { + RPE.sentinelPromise = navigator.wakeLock.request("screen"); + RPE.sentinelPromise.catch(function() { + RPE.sentinelPromise = null; + }); + } catch (e) {} + } + }, + $PlatformEmscriptenDoSetWakeLock: async function(state) { - if (state && !RPE.sentinelPromise && navigator?.wakeLock?.request) { + RPE.wakeLockRequested = state; + if (state && !RPE.sentinelPromise && document.visibilityState != "hidden" && navigator?.wakeLock?.request) { try { RPE.sentinelPromise = navigator.wakeLock.request("screen"); + RPE.sentinelPromise.catch(function() { + RPE.sentinelPromise = null; + }); } catch (e) {} } else if (!state && RPE.sentinelPromise) { try { @@ -178,12 +208,16 @@ var LibraryPlatformEmscripten = { PlatformEmscriptenDoSetWakeLock(state); }, - PlatformEmscriptenGetSystemInfo: function() { + PlatformEmscriptenGetSystemInfo: function(browserPtr, osPtr) { + var browser = 0; + var os = 0; var userAgent = navigator?.userAgent?.toLowerCase?.(); - if (!userAgent) return 0; - var browser = 1 + ["chrom", "firefox", "safari"].findIndex(i => userAgent.includes(i)); - var os = 1 + [/windows/, /linux|cros|android/, /iphone|ipad/, /mac os/].findIndex(i => i.test(userAgent)); - return browser | (os << 16); + if (userAgent) { + browser = 1 + ["chrom", "firefox", "safari"].findIndex(i => userAgent.includes(i)); + os = 1 + [/windows/, /linux|cros|android/, /iphone|ipad/, /mac os/].findIndex(i => i.test(userAgent)); + } + {{{ makeSetValue("browserPtr", "0", "browser", "u32") }}}; + {{{ makeSetValue("osPtr", "0", "os", "u32") }}}; }, $EmscriptenSendCommand__deps: ["platform_emscripten_command_raise_flag"], diff --git a/emscripten/library_rwebcam.js b/emscripten/library_rwebcam.js index 14042505e331..44bc8ab33313 100644 --- a/emscripten/library_rwebcam.js +++ b/emscripten/library_rwebcam.js @@ -11,7 +11,7 @@ var LibraryRWebCam = { $RWebCamReady: function(c) { try { - /* try to start video it was paused */ + /* try to start video if it was paused */ if (RWC.contexts[c].videoElement.paused) RWC.contexts[c].videoElement.play(); } catch (e) {} return RWC.contexts[c].cameraRunning && !RWC.contexts[c].videoElement.paused && RWC.contexts[c].videoElement.videoWidth != 0 && RWC.contexts[c].videoElement.videoHeight != 0; @@ -77,7 +77,7 @@ var LibraryRWebCam = { var videoOpts = true; if (RWC.contexts[c].idealWidth && RWC.contexts[c].idealHeight) { /* save us some cropping/scaling, only honored by some browsers */ - videoOpts = {width: RWC.contexts[c].idealWidth, height: RWC.contexts[c].idealHeight, aspectRatio: RWC.contexts[c].idealWidth / RWC.contexts[c].idealHeight}; + videoOpts = {width: RWC.contexts[c].idealWidth, height: RWC.contexts[c].idealHeight, aspectRatio: RWC.contexts[c].idealWidth / RWC.contexts[c].idealHeight, resizeMode: "crop-and-scale"}; } navigator.mediaDevices.getUserMedia({audio: false, video: videoOpts}).then(function(stream) { @@ -257,13 +257,13 @@ var LibraryRWebCam = { if (RWC.contexts[c].proxied) Module.ctx.texImage2D(Module.ctx.TEXTURE_2D, 0, Module.ctx.RGBA, RWC.contexts[c].width, RWC.contexts[c].height, 0, Module.ctx.RGBA, Module.ctx.UNSIGNED_BYTE, imageSrcGL); else - Module.ctx.texImage2D(Module.ctx.TEXTURE_2D, 0, Module.ctx.RGB, Module.ctx.RGB, Module.ctx.UNSIGNED_BYTE, imageSrcGL); + Module.ctx.texImage2D(Module.ctx.TEXTURE_2D, 0, Module.ctx.RGBA, Module.ctx.RGBA, Module.ctx.UNSIGNED_BYTE, imageSrcGL); RWC.contexts[c].glFirstFrame = false; } else { if (RWC.contexts[c].proxied) Module.ctx.texSubImage2D(Module.ctx.TEXTURE_2D, 0, 0, 0, RWC.contexts[c].width, RWC.contexts[c].height, Module.ctx.RGBA, Module.ctx.UNSIGNED_BYTE, imageSrcGL); else - Module.ctx.texSubImage2D(Module.ctx.TEXTURE_2D, 0, 0, 0, Module.ctx.RGB, Module.ctx.UNSIGNED_BYTE, imageSrcGL); + Module.ctx.texSubImage2D(Module.ctx.TEXTURE_2D, 0, 0, 0, Module.ctx.RGBA, Module.ctx.UNSIGNED_BYTE, imageSrcGL); } _glBindTexture(0x0DE1 /* GL_TEXTURE_2D */, prev); diff --git a/frontend/drivers/platform_emscripten.c b/frontend/drivers/platform_emscripten.c index d54fbcf6fd77..93beba25cb6c 100644 --- a/frontend/drivers/platform_emscripten.c +++ b/frontend/drivers/platform_emscripten.c @@ -54,6 +54,7 @@ #include "../../tasks/tasks_internal.h" #include "../../cheat_manager.h" #include "../../audio/audio_driver.h" +#include "../../gfx/common/gl_common.h" #ifdef HAVE_EXTRA_WASMFS #include @@ -75,6 +76,7 @@ void emscripten_mainloop(void); /* javascript library functions */ +void PlatformEmscriptenKeepThreadAlive(void); void PlatformEmscriptenWatchCanvasSizeAndDpr(double *dpr); void PlatformEmscriptenCanvasListenersInit(void); void PlatformEmscriptenWatchWindowVisibility(void); @@ -84,7 +86,7 @@ void PlatformEmscriptenWatchFullscreen(void); void PlatformEmscriptenGLContextEventInit(void); void PlatformEmscriptenSetCanvasSize(int width, int height); void PlatformEmscriptenSetWakeLock(bool state); -uint32_t PlatformEmscriptenGetSystemInfo(void); +void PlatformEmscriptenGetSystemInfo(unsigned *browser, unsigned *os); void PlatformEmscriptenFree(void); typedef struct @@ -101,6 +103,8 @@ typedef struct enum platform_emscripten_browser browser; enum platform_emscripten_os os; enum frontend_fork fork_mode; + int main_loop_blockers; + int deferred_sleep_ms; int raf_interval; int canvas_width; int canvas_height; @@ -437,7 +441,19 @@ bool platform_emscripten_is_window_hidden(void) bool platform_emscripten_should_drop_iter(void) { - return (emscripten_platform_data->gl_context_lost || (emscripten_platform_data->window_hidden && emscripten_platform_data->raf_interval)); +#if defined(PROXY_TO_PTHREAD) || defined(EMSCRIPTEN_ASYNCIFY) + /* If possible, sleep while hidden to mimimize CPU usage. */ + if (emscripten_platform_data->window_hidden) + retro_sleep(100); +#endif + return emscripten_platform_data->window_hidden || emscripten_platform_data->gl_context_lost; +} + +static void platform_emscripten_pop_main_loop_blocker(void) +{ + emscripten_platform_data->main_loop_blockers--; + if (emscripten_platform_data->main_loop_blockers < 0) + emscripten_platform_data->main_loop_blockers = 0; } #ifdef PROXY_TO_PTHREAD @@ -450,13 +466,18 @@ static void set_raf_interval(void *data) void platform_emscripten_wait_for_frame(void) { if (emscripten_platform_data->raf_interval) + { + /* Firefox needs glFinish explicitly called here. */ + gl_finish(); emscripten_condvar_waitinf(&emscripten_platform_data->raf_cond, &emscripten_platform_data->raf_lock); + } } #else void platform_emscripten_enter_fake_block(int ms) { + emscripten_platform_data->main_loop_blockers++; if (ms == 0) emscripten_set_main_loop_timing(EM_TIMING_SETIMMEDIATE, 0); else @@ -465,14 +486,46 @@ void platform_emscripten_enter_fake_block(int ms) void platform_emscripten_exit_fake_block(void) { - command_event(CMD_EVENT_VIDEO_SET_BLOCKING_STATE, NULL); + platform_emscripten_pop_main_loop_blocker(); + platform_emscripten_set_main_loop_interval(emscripten_platform_data->raf_interval); } #endif +void platform_emscripten_deferred_sleep(int ms) +{ + if (emscripten_platform_data->deferred_sleep_ms == 0 && ms > 0) + emscripten_platform_data->main_loop_blockers++; + else if (emscripten_platform_data->deferred_sleep_ms > 0 && ms < 0 && emscripten_platform_data->deferred_sleep_ms <= -ms) + platform_emscripten_pop_main_loop_blocker(); + + emscripten_platform_data->deferred_sleep_ms += ms; + + if (emscripten_platform_data->deferred_sleep_ms > 0) + { + emscripten_set_main_loop_timing(EM_TIMING_SETTIMEOUT, emscripten_platform_data->deferred_sleep_ms); + } else { + emscripten_platform_data->deferred_sleep_ms = 0; + platform_emscripten_set_main_loop_interval(emscripten_platform_data->raf_interval); + } +} + +bool platform_emscripten_finish_deferred_sleep(void) +{ + if (!emscripten_platform_data->deferred_sleep_ms) + return false; + + emscripten_platform_data->deferred_sleep_ms = 0; + platform_emscripten_pop_main_loop_blocker(); + platform_emscripten_set_main_loop_interval(emscripten_platform_data->raf_interval); + return true; +} + void platform_emscripten_set_main_loop_interval(int interval) { emscripten_platform_data->raf_interval = interval; + if (emscripten_platform_data->main_loop_blockers > 0) + return; #ifdef PROXY_TO_PTHREAD if (interval != 0) platform_emscripten_run_on_browser_thread_sync(set_raf_interval, (void *)interval); @@ -715,8 +768,8 @@ static void frontend_emscripten_exec_browser(void *path) Module.canvas.replaceWith(newCanvas); Module.canvas = newCanvas; #endif - if (typeof Module.retroArchExit == "function") - setTimeout(Module.retroArchExit, 0, $0 && UTF8ToString($0), $1 && UTF8ToString($1)); + if (typeof Module["retroArchExit"] == "function") + setTimeout(Module["retroArchExit"], 0, $0 && UTF8ToString($0), $1 && UTF8ToString($1)); else out("[INFO] Exiting, but Module.retroArchExit was not provided"); }, core, content); @@ -889,12 +942,14 @@ static int thread_main(int argc, char *argv[]) PlatformEmscriptenGLContextEventInit(); emscripten_set_main_loop(emscripten_mainloop, 0, 0); + emscripten_pause_main_loop(); #ifdef PROXY_TO_PTHREAD emscripten_set_main_loop_timing(EM_TIMING_SETIMMEDIATE, 0); #else emscripten_set_main_loop_timing(EM_TIMING_RAF, 1); #endif rarch_main(argc, argv, NULL); + emscripten_resume_main_loop(); return 0; } @@ -908,6 +963,7 @@ static void *main_pthread(void* arg) { emscripten_set_thread_name(pthread_self(), "Application main thread"); emscripten_platform_data->program_thread_id = pthread_self(); + PlatformEmscriptenKeepThreadAlive(); thread_main(_main_argc, _main_argv); return NULL; } @@ -921,7 +977,7 @@ static void raf_signaler(void) int main(int argc, char *argv[]) { int ret = 0; - uint32_t system_info; + unsigned host_browser, host_os; #ifdef PROXY_TO_PTHREAD pthread_attr_t attr; pthread_t thread; @@ -929,9 +985,9 @@ int main(int argc, char *argv[]) /* this never gets freed */ emscripten_platform_data = (emscripten_platform_data_t *)calloc(1, sizeof(emscripten_platform_data_t)); - system_info = PlatformEmscriptenGetSystemInfo(); - emscripten_platform_data->browser = system_info & 0xFFFF; - emscripten_platform_data->os = system_info >> 16; + PlatformEmscriptenGetSystemInfo(&host_browser, &host_os); + emscripten_platform_data->browser = host_browser; + emscripten_platform_data->os = host_os; emscripten_platform_data->enable_set_canvas_size = !!getenv("ENABLE_SET_CANVAS_SIZE"); emscripten_platform_data->disable_detect_enter_fullscreen = !!getenv("DISABLE_DETECT_ENTER_FULLSCREEN"); @@ -968,6 +1024,7 @@ int main(int argc, char *argv[]) } }); + PlatformEmscriptenKeepThreadAlive(); PlatformEmscriptenWatchCanvasSizeAndDpr(&emscripten_platform_data->device_pixel_ratio_temp); PlatformEmscriptenCanvasListenersInit(); PlatformEmscriptenWatchWindowVisibility(); diff --git a/frontend/drivers/platform_emscripten.h b/frontend/drivers/platform_emscripten.h index ae2204f57b43..b2758cbd8944 100644 --- a/frontend/drivers/platform_emscripten.h +++ b/frontend/drivers/platform_emscripten.h @@ -119,7 +119,7 @@ bool platform_emscripten_is_window_hidden(void); /** * Whether the frame should be dropped. - * Currently returns true if the window is hidden and vsync is on. + * Currently returns true if the window is hidden or the GL context is lost. * * @return True if the frame should be dropped. */ @@ -146,6 +146,13 @@ void platform_emscripten_enter_fake_block(int ms); */ void platform_emscripten_exit_fake_block(void); +/** + * Sleep before the next frame. + * + * @param ms Milliseconds to sleep. + */ +void platform_emscripten_deferred_sleep(int ms); + /** * Set the vsync interval for the main loop. * diff --git a/gfx/drivers/gl2.c b/gfx/drivers/gl2.c index ce2e5c613eaf..f3dde1972023 100644 --- a/gfx/drivers/gl2.c +++ b/gfx/drivers/gl2.c @@ -3557,6 +3557,14 @@ static bool gl2_frame(void *data, const void *frame, frame_count, &gl->tex_info, &feedback_info, video_scale_integer); +#ifdef EMSCRIPTEN + /* Workaround for a chromium-specific bug */ + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); + glClear(GL_COLOR_BUFFER_BIT); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); +#endif + /* Set prev textures. */ gl2_renderchain_bind_prev_texture(gl, chain, &gl->tex_info); diff --git a/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h b/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h index a722e8c620f8..d8d4521f0228 100644 --- a/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h +++ b/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h @@ -22,21 +22,29 @@ static const char *stock_vertex_xmb_ribbon_modern = GLSL_STANDARD_DERIVATIVES( mix( iqhash(n+170.0), iqhash(n+171.0),f.x),f.y),f.z); } - float height(vec3 pos ) - { - const float twoPi = 2.0 * 3.14159; - float k = twoPi / 20.0; - float omega = twoPi / 15.0; - float y = sin( k * pos.x - omega * time ); - y += noise( vec3(0.27) * vec3( 0.4 * pos.x, 3.0, 2.0 * pos.z - 0.5 * time ) ); - return y; - } + float xmb_noise2( vec3 x ) + { + return cos(x.z*4.0)*cos(x.z+time/10.0+x.x); + } void main() { - vec3 pos = VertexCoord; - pos.y = height( pos ); - gl_Position = vec4(pos, 1.0); - fragVertexEc =pos; + vec3 v = vec3(VertexCoord.x, 0.0, VertexCoord.y); + vec3 v2 = v; + vec3 v3 = v; + + v.y = xmb_noise2(v2)/8.0; + + v3.x = v3.x + time/5.0; + v3.x = v3.x / 4.0; + + v3.z = v3.z + time/10.0; + v3.y = v3.y + time/100.0; + + v.z = v.z + noise(v3*7.0)/15.0; + v.y = v.y + noise(v3*7.0)/15.0 + cos(v.x*2.0-time/2.0)/5.0 - 0.3; + + gl_Position = vec4(v, 1.0); + fragVertexEc = gl_Position.xyz; } ); diff --git a/input/drivers_joypad/rwebpad_joypad.c b/input/drivers_joypad/rwebpad_joypad.c index 9d967182d966..f215d66b2439 100644 --- a/input/drivers_joypad/rwebpad_joypad.c +++ b/input/drivers_joypad/rwebpad_joypad.c @@ -214,7 +214,7 @@ static void rwebpad_joypad_update_rumble(unsigned port) { EM_ASM({ try { - JSEvents?.lastGamepadState?.[$0]?.vibrationActuator?.playEffect?.("dual-rumble", {startDelay: 0, duration: 200, strongMagnitude: $1 / 65536, weakMagnitude: $2 / 65536}); + JSEvents?.lastGamepadState?.[$0]?.vibrationActuator?.playEffect?.("dual-rumble", {"startDelay": 0, "duration": 200, "strongMagnitude": $1 / 65535, "weakMagnitude": $2 / 65535}); } catch (e) {} }, port, rwebpad_joypad_data->rumble[port].strong, rwebpad_joypad_data->rumble[port].weak); } diff --git a/menu/menu_driver.c b/menu/menu_driver.c index cca0ff7dff5a..6ec5ec16336b 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -648,8 +648,9 @@ size_t menu_display_timedate(gfx_display_ctx_datetime_t *datetime, struct menu_state *menu_st = &menu_driver_state; /* Trigger an update, if required */ - if (menu_st->current_time_us - menu_st->datetime_last_time_us >= - DATETIME_CHECK_INTERVAL) + if ( menu_st->current_time_us - menu_st->datetime_last_time_us >= + DATETIME_CHECK_INTERVAL + || menu_st->datetime_last_time_us == 0) { time_t time_; struct tm tm_; @@ -1022,8 +1023,9 @@ size_t menu_display_powerstate(gfx_display_ctx_powerstate_t *powerstate, enum frontend_powerstate state = FRONTEND_POWERSTATE_NONE; /* Trigger an update, if required */ - if (menu_st->current_time_us - menu_st->powerstate_last_time_us >= - POWERSTATE_CHECK_INTERVAL) + if ( menu_st->current_time_us - menu_st->powerstate_last_time_us >= + POWERSTATE_CHECK_INTERVAL + || menu_st->powerstate_last_time_us == 0) { menu_st->powerstate_last_time_us = menu_st->current_time_us; task_push_get_powerstate(); diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 21d958babd25..042eb67c66ae 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -58,7 +58,14 @@ RETRO_BEGIN_DECLS #define SCROLL_INDEX_SIZE (2 * (26 + 2) + 1) +#ifdef EMSCRIPTEN +/* This task reads a variable that is set asynchronously, so the first check might fail. + * Check more often because it is cheap and to avoid a long period of missing power info. */ +#define POWERSTATE_CHECK_INTERVAL 1000000 +#else #define POWERSTATE_CHECK_INTERVAL (30 * 1000000) +#endif + #define DATETIME_CHECK_INTERVAL 1000000 #define MENU_DRAW_ENTRY_DELAY 30 diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 832a4c11d9ed..cff0223367ab 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -9030,6 +9030,13 @@ static void general_write_handler(rarch_setting_t *setting) NULL, menu_st->userdata); } break; + case MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE: + { + video_driver_state_t *video_st = video_state_get_ptr(); + video_st->current_video->suppress_screensaver(video_st->data, + settings->bools.ui_suspend_screensaver_enable); + } + break; default: /* Special cases */ diff --git a/pkg/emscripten/README.md b/pkg/emscripten/README.md index 57c7b20e3809..9e4dfa993748 100644 --- a/pkg/emscripten/README.md +++ b/pkg/emscripten/README.md @@ -1,22 +1,28 @@ # RetroArch Web Player -The RetroArch Web Player is RetroArch compiled through [Emscripten](https://emscripten.org/). The following outlines how to compile RetroArch using Emscripten, and running it in your browser. +The RetroArch Web Player is RetroArch compiled through [Emscripten](https://emscripten.org/). +The following outlines how to compile RetroArch using Emscripten, and running it in your browser. -## Compiling the Single-Threaded Player +## Compiling the single-threaded player -To compile RetroArch with Emscripten, you'll first have to [download and install the Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html) at 3.1.46: +To compile RetroArch with Emscripten, you'll first have to +[download and install the Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html) at 3.1.46: ``` git clone https://github.com/emscripten-core/emsdk.git cd emsdk ./emsdk install 3.1.46 ./emsdk activate 3.1.46 -source emsdk_env.sh +. emsdk_env.sh ``` -Other later versions of emsdk will function and may be needed, but in general emscripten is in a constant state of development and you may run into other problems by not pinning to 3.1.46. This is currently the version [https://web.libretro.com/](https://web.libretro.com/) is built against. +Other later versions of emsdk will function and may be needed, +but in general emscripten is in a constant state of development and you may run into other problems by not pinning to 3.1.46. +This is currently the version [web.libretro.com](https://web.libretro.com/) is built against. -After emsdk is installed you will need to build an emulator core, move that output into Retroarch, and use helper scripts to produce web ready assets, in this example we will be building [https://github.com/libretro/libretro-fceumm](https://github.com/libretro/libretro-fceumm): +After emsdk is installed you will need to build a libretro core, copy its static library (.bc or .a file) into Retroarch, +and use helper scripts to produce web ready assets. +In this example we will be building [fceumm](https://github.com/libretro/libretro-fceumm): ``` mkdir ~/retroarch @@ -24,37 +30,48 @@ cd ~/retroarch git clone https://github.com/libretro/libretro-fceumm.git cd libretro-fceumm emmake make -f Makefile.libretro platform=emscripten + git clone https://github.com/libretro/RetroArch.git ~/retroarch/RetroArch cp ~/retroarch/libretro-fceumm/fceumm_libretro_emscripten.bc ~/retroarch/RetroArch/libretro_emscripten.bc + cd ~/retroarch emmake make -f Makefile.emscripten LIBRETRO=fceumm -j all -cp fceumm_libretro.{js,wasm} pkg/emscripten/libretro +cp fceumm_libretro.* pkg/emscripten/libretro ``` -## Dependencies +### Dependencies -The emscripten build in the retroarch tree does not contain the necessary web assets for a complete RetroArch installation. You'll need the asset package from the latest emscripten nightly build ( https://buildbot.libretro.com/nightly/emscripten/ ); take its `assets/` folder and put it into `pkg/emscripten/libretro`. This `assets/` folder should contain a `frontend/` directory and a `cores/` directory. +The emscripten build in the retroarch tree does not contain the necessary web assets for a complete RetroArch installation. +You'll need the asset package from the latest emscripten nightly build (https://buildbot.libretro.com/nightly/emscripten/) +Take its `assets` folder and put it into `pkg/emscripten/libretro`. +This `assets` folder should contain a `frontend` directory and a `cores` directory. -If you're building your own frontend asset bundle (i.e. modifying `frontend/bundle/`), you'll need to turn the bundle into zipped partfiles. Open a terminal in `assets/frontend/` and `zip -r9 bundle.zip bundle && cd .. && split -b 30M bundle.zip bundle.zip.` (this should work on Mac and Linux, please file a PR with instructions for Windows). +If you're building your own frontend asset bundle (i.e. modifying `assets/frontend/bundle`), you'll need to turn the bundle into zipped partfiles. +Open a terminal in `assets/frontend` and run `zip -r9 bundle.zip bundle && split -b 30M bundle.zip bundle.zip.` +(This should work on Mac and Linux, please file a PR with instructions for Windows). If you want to add more built-in core content files to `assets/cores`, you need to re-run the indexer script: 1. `chmod +x indexer` 2. run the indexer script (you need coffeescript installed) from a terminal opened at `assets/cores`: `../../indexer > .index-xhr` -## Usage +### Usage -You need a web server. Nginx, apache, node's http-server, and python's http.server are all known to work. +You need a web server. Nginx, apache, node's http-server, and python's http.server are all known to work. -Point your webserver to the `pkg/emscripten/libretro/` directory or unzipped nightly build (or move those files to somewhere your webserver can reach them), and everything should Just Work. +Point your web server to the `pkg/emscripten/libretro` directory or unzipped nightly build +(or move those files to somewhere your web server can reach them), and everything should just work. -# Threaded emulators +## Threaded cores -Some emulators can be compiled with `pthreads` support to increase performance. You will need to compile the core and frontend with special flags to support this and also serve the content from an HTTPS endpoint with specific headers. +Some cores can be compiled with threading support to improve performance. (Some cores require threads.) +You will need to compile the core and frontend with special flags to support this and also serve the content +from an HTTPS endpoint with specific headers. -## Compiling the code (Threaded) +### Compiling the core (threaded) -In this example we will be building [melonDS](https://github.com/libretro/melonDS) with pthreads support. We assume you allready have emsdk setup and are familiar with the build process. +In this example we will be building [melonDS](https://github.com/libretro/melonDS) with pthreads support. +We assume you allready have emsdk setup and are familiar with the build process. First clone the repo: @@ -83,11 +100,12 @@ emmake make -f Makefile platform=emscripten cp melonds_libretro_emscripten.bc ~/retroarch/RetroArch/libretro_emscripten.bc ``` -Now build the frontend with the pthreads env variable: +Now build the frontend with the threads enabled: ``` cd ~/retroarch/RetroArch -emmake make -f Makefile.emscripten LIBRETRO=melonds HAVE_THREADS=1 && cp melonds_libretro.* pkg/emscripten/libretro +emmake make -f Makefile.emscripten LIBRETRO=melonds HAVE_THREADS=1 -j all +cp melonds_libretro.* pkg/emscripten/libretro ``` Your resulting output will be located in: @@ -97,9 +115,11 @@ Your resulting output will be located in: ~/retroarch/RetroArch/pkg/emscripten/libretro/melonds_libretro.wasm ``` -## Setting up your webserver (Threaded) +### Setting up your web server (threaded) -To support multithreaded builds, you will need to serve the content from an HTTPS endpoint with a valid SSL certificate. This is a security limitation imposed by the browser. Along with that you will need to set content control policies with special headers in your server: +To support multithreaded builds, you will need to serve the content from an HTTPS endpoint with a valid SSL certificate. +This is a security limitation imposed by web browsers. +Along with that you will need to set content control policies with special headers in your server: In Nodejs with express: @@ -129,19 +149,24 @@ http-server . -S \ --header "Cross-Origin-Resource-Policy: same-origin" ``` -# Compiling the Multi-Threaded Frontend +If your hosting provider does not allow you to set custom response headers, +client-side service workers such as [coi-serviceworker](https://github.com/gzuidhof/coi-serviceworker) can be used instead. -To compile the multi-threaded RetroArch frontend with Emscripten and make use of wasmfs and other features, you'll first have to [download and install the Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html). Currently, we need the "top of tree" or latest version of Emscripten: +## Compiling the frontend with PROXY_TO_PTHREAD + +To compile RetroArch with PROXY_TO_PTHREAD to make use of OPFS and other features, +you'll first have to [download and install the Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html). +Currently, we need at least version 4.0.15: ``` git clone https://github.com/emscripten-core/emsdk.git cd emsdk -./emsdk install tot -./emsdk activate tot -source emsdk_env.sh +./emsdk install 4.0.15 +./emsdk activate 4.0.15 +. emsdk_env.sh ``` -After emsdk is installed you will need to build an emulator core, move that output into Retroarch, and use helper scripts to produce web ready assets, in this example we will be building [https://github.com/libretro/libretro-fceumm](https://github.com/libretro/libretro-fceumm): +The steps for compiling a libretro core are the same as normal, the only difference being the compile settings in RetroArch: ``` mkdir ~/retroarch @@ -149,18 +174,81 @@ cd ~/retroarch git clone https://github.com/libretro/libretro-fceumm.git cd libretro-fceumm emmake make -f Makefile.libretro platform=emscripten + git clone https://github.com/libretro/RetroArch.git ~/retroarch/RetroArch cp ~/retroarch/libretro-fceumm/fceumm_libretro_emscripten.bc ~/retroarch/RetroArch/libretro_emscripten.bc cd ~/retroarch -emmake make -f Makefile.emscripten LIBRETRO=fceumm PROXY_TO_PTHREAD=1 HAVE_WASMFS=1 -j all -cp fceumm_libretro.{js,wasm} pkg/emscripten/libretro-thread +emmake make -f Makefile.emscripten LIBRETRO=fceumm PROXY_TO_PTHREAD=1 HAVE_EXTRA_WASMFS=1 HAVE_AUDIOWORKLET=1 HAVE_RWEBAUDIO=0 -j all +cp fceumm_libretro.* pkg/emscripten/libretro-thread ``` -## Dependencies +### Dependencies + +The emscripten build in the retroarch tree does not contain the necessary web assets for a complete RetroArch installation. +While it supports the regular desktop asset and content downloaders, we also provide a small bundle of UI assets for first launch. +You can obtain these files from the nightly Emscripten build on the buildbot, or make them yourself by running +`zip -r9 bundle-minimal.zip assets/ozone assets/pkg assets/sounds info` +(essentially, just the `assets/ozone`, `assets/pkg`, `assets/sounds`, and `info` folders from the regular asset package). + +### Usage + +Hosting the threaded web build is the same as for the multi-threaded cores above; SSL and proper CORS headers are required. + +## Compile-time settings + +Here is a non-exhaustive list of compile-time settings (makefile variables). + +`HAVE_THREADS` (default: 0): Enables threads. Requires special headers detailed above to enable shared memory. + +`PROXY_TO_PTHREAD` (default: 0): Runs RetroArch on a pthread instead of the browser thread; implies `HAVE_THREADS`. + +`HAVE_OPENGLES3` (default: 0): Enables GLES 3.0 (WebGL 2). If left disabled, GLES 2.0 (WebGL 1) will be used. + +`CLOSURE_COMPILER` (default: 0): Runs the closure compiler on the output JS file, typically reducing its size by around 50%. + +`ASSERTIONS` (default: 0): Enables runtime assertions (always enabled in debug builds). Please use this when testing new emscripten-specific features! + +### Audio settings + +`HAVE_AUDIOWORKLET` (default: 0): Enables the AudioWorklet audio driver. Requires `HAVE_THREADS`. + +`HAVE_RWEBAUDIO` (default: 1): Enables the RWebAudio audio driver. Currently incompatible with `PROXY_TO_PTHREAD`. + +`HAVE_AL` (default: 0): Enables the OpenAL audio driver. Requires `ASYNC` or `PROXY_TO_PTHREAD`. Prefer another driver. + +`ALLOW_AUDIO_BUSYWAIT` (default: 0): Deprecated; not recommended to use this. + +### Async settings + +`ASYNC` (default: 0): Enables asyncify, which enables sleeping on the browser thread and fibers. +This has a noticeable impact on compile time, output wasm size, and speed. See https://emscripten.org/docs/porting/asyncify.html for more info. + +`MIN_ASYNC` (default: 0): Better performance than full asyncify, but sleeping on the browser thread is only possible in some places. + +`JSPI` (default: 0): Enables JSPI, an experimental asyncify alternative. Currently (emscripten 4.0.15) this requires a patched emscripten toolchain. +Cores should be compiled with `-fwasm-exceptions`. + +### Filesystem settings + +`HAVE_WASMFS` (default: 0): Enables WasmFS, which is recommended when using `HAVE_THREADS`. + +`HAVE_EXTRA_WASMFS` (default: 0): Enables OPFS (origin private file system) and FETCHFS, requires `PROXY_TO_PTHREAD` or `JSPI`. + +`FS_DEBUG` (default: 0): Enables javascript filesystem tracking; currently incompatible with `HAVE_WASMFS`. + +## Development + +Most of the emscripten frontend code is contained in `frontend/drivers/platform_emscripten.c`. +`frontend/drivers/platform_emscripten.h` provides and documents several helper functions that are used across the input (rwebinput), +audio (rwebaudio/audioworklet), and video context drivers (emscripten webgl/egl). -The emscripten build in the retroarch tree does not contain the necessary web assets for a complete RetroArch installation. While it supports the regular desktop asset and content downloaders, we also provide a small bundle of UI assets for first launch. You can obtain these files from the nightly Emscripten build on the buildbot, or make them yourself by `zip -r9 bundle-minimal.zip bundle` (essentially, just the `assets/ozone`, `assets/pkg`, and `assets/sounds` folders from the regular asset package). +When testing emscripten-specific changes, please use `ASSERTIONS=1` to provide better error checking. -## Usage +## TODO -Hosting the threaded web build is the same as for the multi-threaded emulators above; SSL and proper CORS headers are required. +- Improve the "Development" section above +- Netplay +- Microphone driver (rwebaudio/audioworklet) +- Crash handling +- Async command interface? diff --git a/pkg/emscripten/libretro-thread/core_list.js b/pkg/emscripten/libretro-thread/core_list.js index 9e3b53d7207c..00529108250a 100644 --- a/pkg/emscripten/libretro-thread/core_list.js +++ b/pkg/emscripten/libretro-thread/core_list.js @@ -1,52 +1,56 @@ const libretroCores = { "2048": "2048", + "DoubleCherryGB": "Nintendo - Game Boy / Color (DoubleCherryGB)", "anarch": "Anarch", "ardens": "Arduboy (Ardens)", "arduous": "Arduboy (Arduous)", - "bk": "Elektronika - BK-0010/BK-0011 (BK)", + "bk": "Elektronika - BK-0010/BK-0011(M)", "chailove": "ChaiLove", + "clownmdemu": "Sega - MD/CD (ClownMDEmu)", "craft": "Minecraft (Craft)", "dice": "Arcade (DICE)", - "DoubleCherryGB": "Nintendo - Game Boy / Color (DoubleCherryGB)", "ecwolf": "Wolfenstein 3D (ECWolf)", + "fbalpha2012_cps1": "Arcade (FB Alpha 2012 CPS-1)", + "fbalpha2012_cps2": "Arcade (FB Alpha 2012 CPS-2)", "fbalpha2012": "Arcade (FB Alpha 2012)", - "fbalpha2012_cps1": "Arcade (FB Alpha 2012 CPS1)", - "fbalpha2012_cps2": "Arcade (FB Alpha 2012 CPS2)", - "fbalpha2012_neogeo": "Arcade (FB Alpha 2012 NeoGeo)", + "fbalpha2012_neogeo": "Arcade (FB Alpha 2012 Neo Geo)", + "fbneo": "Arcade (FinalBurn Neo)", "fceumm": "Nintendo - NES / Famicom (FCEUmm)", - "freechaf": "Fairchild ChannelF (FreeChaF)", - "galaksija": "Galaksija", + "freechaf": "Fairchild - ChannelF (FreeChaF)", + "galaksija": "Elektronika Inženjering - Galaksija (Galaksija)", + "gam4980": "GAM4980", "gambatte": "Nintendo - Game Boy / Color (Gambatte)", - "gme": "Game Music Emu", - "gearboy": "Nintendo - Game Boy / Color (GearBoy)", - "gearcoleco": "Coleco - ColecoVision (GearColeco)", - "gearsystem": "Sega - MS/GG/SG-1000 (GearSystem)", + "gearboy": "Nintendo - Game Boy / Color (Gearboy)", + "gearcoleco": "Coleco - ColecoVision (Gearcoleco)", + "geargrafx": "NEC - PC Engine / SuperGrafx / CD (Geargrafx)", + "gearsystem": "Sega - MS/GG/SG-1000 (Gearsystem)", "genesis_plus_gx": "Sega - MS/GG/MD/CD (Genesis Plus GX)", "genesis_plus_gx_wide": "Sega - MS/GG/MD/CD (Genesis Plus GX Wide)", + "gme": "Game Music Emu", "gong": "Gong", "gw": "Handheld Electronic (GW)", "handy": "Atari - Lynx (Handy)", "jaxe": "CHIP-8/S-CHIP/XO-CHIP (JAXE)", "jumpnbump": "Jump 'n Bump", - "lowresnx": "LowResNX", + "lowresnx": "LowRes NX", "lutro": "Lua Engine (Lutro)", "m2000": "Philips - P2000T (M2000)", - "mame2000": "Arcade - MAME 2000", - "mame2003": "Arcade - MAME 2003", - "mame2003_plus": "Arcade - MAME 2003-Plus", + "mame2000": "Arcade (MAME 2000)", + "mame2003": "Arcade (MAME 2003)", + "mame2003_plus": "Arcade (MAME 2003-Plus)", "mednafen_lynx": "Atari - Lynx (Beetle Lynx)", - "mednafen_ngp": "SNK - Neo Geo Pocket / Color (Beetle Neo Geo Pop)", - "mednafen_pce_fast": "NEC - PC Engine / CD (Beetle PC Engine Fast)", + "mednafen_ngp": "SNK - Neo Geo Pocket / Color (Beetle NeoPop)", + "mednafen_pce_fast": "NEC - PC Engine / CD (Beetle PCE FAST)", "mednafen_vb": "Nintendo - Virtual Boy (Beetle VB)", - "mednafen_wswan": "Bandai - WonderSwan/Color (Beetle WonderSwan)", + "mednafen_wswan": "Bandai - WonderSwan/Color (Beetle Wonderswan)", "mgba": "Nintendo - Game Boy Advance (mGBA)", - "minivmac": "Mac II (MiniVmac)", - "mu": "Palm OS(Mu)", - "mrboom": "Bomberman (Mr.Boom)", + "minivmac": "Mac II (minivmac)", + "mrboom": "Mr.Boom (Bomberman)", + "mu": "Palm OS (Mu)", "neocd": "SNK - Neo Geo CD (NeoCD)", "nestopia": "Nintendo - NES / Famicom (Nestopia)", "numero": "Texas Instruments TI-83 (Numero)", - "nxengine": "Cave Story (NX Engine)", + "nxengine": "Cave Story (NXEngine)", "o2em": "Magnavox - Odyssey2 / Philips Videopac+ (O2EM)", "opera": "The 3DO Company - 3DO (Opera)", "pcsx_rearmed": "Sony - PlayStation (PCSX ReARMed)", @@ -61,32 +65,28 @@ const libretroCores = { "snes9x2005": "Nintendo - SNES / SFC (Snes9x 2005)", "snes9x2010": "Nintendo - SNES / SFC (Snes9x 2010)", "snes9x": "Nintendo - SNES / SFC (Snes9x)", - "squirreljme": "Java ME (SquirrelJME)", - "tamalibretro": "Bandai - Tamagothci P1 (TamaLIBretro)", + "tamalibretro": "Bandai - Tamagotchi P1 (TamaLIBretro)", "tgbdual": "Nintendo - Game Boy / Color (TGB Dual)", - "theodore": "Theodore (Thomson TO8/TO9)", + "theodore": "Thomson - MO/TO (Theodore)", "tic80": "TIC-80", "tyrquake": "Quake (TyrQuake)", - "uw8": "MicroW8 (UW8)", + "uw8": "MicroW8", "uzem": "Uzebox (Uzem)", - "vaporspec": "Vaporspec", + "vaporspec": "VaporSpec", "vba_next": "Nintendo - Game Boy Advance (VBA Next)", - "vecx": "GCE - Vectrex (Vecx)", + "vecx": "GCE - Vectrex (vecx)", + "vice_x128": "Commodore - C128 (VICE x128)", "vice_x64": "Commodore - C64 (VICE x64, fast)", "vice_x64sc": "Commodore - C64 (VICE x64sc, accurate)", - "vice_x128": "Commodore - C128 (VICE x128)", - "vice_xcbm2": "Commodore - CBM-II 6x0/7x0 (VICE xcbm2)", - "vice_xcbm5x0": "Commodore - CBM-II 5x0 (xcbm5x0)", "vice_xpet": "Commodore - PET (VICE xpet)", "vice_xplus4": "Commodore - PLUS/4 (VICE xplus4)", - "vice_xscpu64": "Commodore - C64 SuperCPU (VICE xscpu4)", + "vice_xscpu64": "Commodore - C64 SuperCPU (VICE xscpu64)", "vice_xvic": "Commodore - VIC-20 (VICE xvic)", - "virtualxt": "VirtualXT", + "vitaquake2-rogue": "Quake II - Ground Zero (vitaQuake 2 [Rogue])", + "vitaquake2-xatrix": "Quake II - The Reckoning (vitaQuake 2 [Xatrix])", + "vitaquake2-zaero": "Quake II - Zaero (vitaQuake 2 [Zaero])", "vitaquake2": "Quake II (vitaQuake 2)", - "vitaquake2-rogue": "Quake II - Ground Zero (vitaQuake2 (rogue))", - "vitaquake2-xatrix": "Quake II - The Reckoning (vitaQuake2 (xatrix))", - "vitaquake2-zaero": "Quake II - Zaero (vitaQuake2 (zaero))", - "wasm4": "WASM4", - "x1": "Sharp X1 (X Millenium)", + "wasm4": "WASM-4", + "x1": "Sharp X1 (X Millennium)", "xrick": "Rick Dangerous (XRick)" }; diff --git a/pkg/emscripten/libretro-thread/libretro.js b/pkg/emscripten/libretro-thread/libretro.js index 066b4b884e4a..f622a8be6097 100644 --- a/pkg/emscripten/libretro-thread/libretro.js +++ b/pkg/emscripten/libretro-thread/libretro.js @@ -186,9 +186,6 @@ const ModuleBase = { if (path.endsWith(".js")) return typeof this.mainScriptUrlOrBlob == "string" ? this.mainScriptUrlOrBlob : URL.createObjectURL(this.mainScriptUrlOrBlob); return path; }, - onRuntimeInitialized: function() { - appInitialized(); - }, print: function(text) { console.log("stdout:", text); }, @@ -342,40 +339,11 @@ function startRetroArch() { // subsequent relaunches will start automatically ModuleBase.noInitialRun = false; - ModuleBase.onRuntimeInitialized = null; retroArchRunning = true; Module.callMain(Module.arguments); } -// called when the emscripten module has loaded -async function appInitialized() { - console.log("WASM runtime initialized"); - await fsLoadPromise; - console.log("FS initialized"); - - // ensure the current core exists even if it's not in the core list - await FS.writeFile("/retroarch/cores/" + currentCore + "_libretro.core", new Uint8Array()); - setProgress("main"); - setProgressText("main"); - icnRun.classList.remove("fa-spinner", "fa-spin"); - icnRun.classList.add("fa-play"); - - if (autoStart) { - startRetroArch(); - } else { - // Make the Preview image clickable to start RetroArch. - webplayerPreview.classList.add("loaded"); - webplayerPreview.addEventListener("click", function() { - startRetroArch(); - }); - btnRun.classList.remove("disabled"); - btnRun.addEventListener("click", function() { - startRetroArch(); - }); - } -} - async function downloadScript(src) { let resp = await fetch(src); if (resp.status >= 400) throw "HTTP " + resp.status; @@ -383,52 +351,63 @@ async function downloadScript(src) { return blob; } -function loadCoreFallback(currentCore) { +async function loadCoreFallback(currentCore) { URL.revokeObjectURL(ModuleBase.mainScriptUrlOrBlob); if (currentCore == defaultCore) { - alert("Error: could not load default core!"); + console.error("Error: couldn't load default core!"); + alert("Error: couldn't load default core!"); return; } - loadCore(defaultCore); + await loadCore(defaultCore); } -function loadCoreFromUrl(url, core, args) { +async function loadCoreFromUrl(url, core, args) { ModuleBase.arguments = args || ["-v", "--menu"]; ModuleBase.preRun = [modulePreRun]; ModuleBase.mainScriptUrlOrBlob = url; ModuleBase.canvas = canvas; ModuleBase.corePath = "/home/web_user/retroarch/cores/" + core + "_libretro.core"; - import(url).then(script => { - script.default(Object.assign({}, ModuleBase)).then(mod => { - Module = mod; - }).catch(err => { + try { + let script = await import(url); + try { + Module = await script.default(Object.assign({}, ModuleBase)); + } catch (err) { console.error("Couldn't instantiate module", err); - loadCoreFallback(core); + await loadCoreFallback(core); throw err; - }); - }).catch(err => { + } + } catch (err) { console.error("Couldn't load script", err); - loadCoreFallback(core); + await loadCoreFallback(core); throw err; - }); + } } -function loadCore(core, args) { +async function loadCore(core, args) { // Make the core the selected core in the UI. - const coreTitle = libretroCores[core]; - if (coreTitle) coreSelectorCurrent.textContent = coreTitle; + let coreTitle = libretroCores[core]; + if (!coreTitle) { + try { + const coreInfoFile = await FS.readFile("/retroarch/info/" + core + "_libretro.info"); + coreTitle = new TextDecoder().decode(coreInfoFile).split("\n").find(i => i.startsWith("display_name = ")).slice(16, -1); + } catch (e) {} + } + coreSelectorCurrent.textContent = coreTitle || core; + const fileExt = (core == "retroarch") ? ".js" : "_libretro.js"; - downloadScript("./" + core + fileExt).then(blob => { - loadCoreFromUrl(URL.createObjectURL(blob), core, args); - }).catch(err => { + let blob; + try { + blob = await downloadScript("./" + core + fileExt); + } catch (err) { console.error("Couldn't download script", err); - loadCoreFallback(core); + await loadCoreFallback(core); throw err; - }); + } + await loadCoreFromUrl(URL.createObjectURL(blob), core, args); } // exit/exitspawn hook -function relaunch(core, content) { +async function relaunch(core, content) { // get the new canvas element canvas = Module.canvas; @@ -448,11 +427,11 @@ function relaunch(core, content) { // don't download the core again when restarting if (core == ModuleBase.corePath) { - loadCoreFromUrl(ModuleBase.mainScriptUrlOrBlob, currentCore, ["-v", content]); + await loadCoreFromUrl(ModuleBase.mainScriptUrlOrBlob, currentCore, ["-v", content]); } else { localStorage.setItem("core", currentCore); URL.revokeObjectURL(ModuleBase.mainScriptUrlOrBlob); - loadCore(currentCore, ["-v", content]); + await loadCore(currentCore, ["-v", content]); } } @@ -533,5 +512,29 @@ document.addEventListener("DOMContentLoaded", async function() { // Find which core to load. currentCore = localStorage.getItem("core") || defaultCore; - loadCore(currentCore); + await loadCore(currentCore); + console.log("WASM runtime initialized"); + await fsLoadPromise; + console.log("FS initialized"); + + // ensure the current core exists even if it's not in the core list + await FS.writeFile("/retroarch/cores/" + currentCore + "_libretro.core", new Uint8Array()); + setProgress("main"); + setProgressText("main"); + icnRun.classList.remove("fa-spinner", "fa-spin"); + icnRun.classList.add("fa-play"); + + if (autoStart) { + startRetroArch(); + } else { + // Make the Preview image clickable to start RetroArch. + webplayerPreview.classList.add("loaded"); + webplayerPreview.addEventListener("click", function() { + startRetroArch(); + }); + btnRun.classList.remove("disabled"); + btnRun.addEventListener("click", function() { + startRetroArch(); + }); + } }); diff --git a/pkg/emscripten/libretro/browserfs.min.js b/pkg/emscripten/libretro/browserfs.min.js index 181710b74a2a..673df5ef93a3 100644 --- a/pkg/emscripten/libretro/browserfs.min.js +++ b/pkg/emscripten/libretro/browserfs.min.js @@ -1,10 +1,15 @@ -!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.BrowserFS=a()}}(function(){var a;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g-1&&a%1==0&&a<=Bb}function q(a){return null!=a&&p(Ab(a))&&!f(a)}function r(){}function s(a){return function(){if(null!==a){var b=a;a=null,b.apply(this,arguments)}}}function t(a){return Cb&&a[Cb]&&a[Cb]()}function u(a){return Db(Object(a))}function v(a,b){return null!=a&&(Fb.call(a,b)||"object"==typeof a&&b in a&&null===u(a))}function w(a){return Gb(Object(a))}function x(a,b){for(var c=-1,d=Array(a);++c-1&&a%1==0&&a0&&(c=b.apply(this,arguments)),a<=1&&(b=void 0),c}}function O(a){return N(2,a)}function P(a,b,c){function d(a){a?c(a):++f===g&&c(null)}c=O(c||r);var e=0,f=0,g=a.length;for(0===g&&c(null);e1?e(n,d):e(d)}}function i(){for(var a,b=0;u.length;)a=u.pop(),b++,V(j(a),function(a){0===--v[a]&&u.push(a)});if(b!==m)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}function j(b){var c=[];return X(a,function(a,d){Mb(a)&&Z(a,b,0)>=0&&c.push(d)}),c}"function"==typeof b&&(c=b,b=null),c=s(c||r);var k=E(a),m=k.length;if(!m)return c(null);b||(b=m);var n={},o=0,p=!1,q={},t=[],u=[],v={};X(a,function(b,c){if(!Mb(b))return d(c,[b]),void u.push(c);var e=b.slice(0,b.length-1),g=e.length;return 0===g?(d(c,b),void u.push(c)):(v[c]=g,void V(e,function(h){if(!a[h])throw new Error("async.auto task `"+c+"` has a non-existent dependency in "+e.join(", "));f(h,function(){g--,0===g&&d(c,b)})}))}),i(),e()}function _(a,b){for(var c=-1,d=a?a.length:0,e=Array(d);++ce?0:e+b),c=c>e?e:c,c<0&&(c+=e),e=b>c?0:c-b>>>0,b>>>=0;for(var f=Array(e);++d=d?a:da(a,b,c)}function fa(a,b){for(var c=a.length;c--&&Z(b,a[c],0)>-1;);return c}function ga(a,b){for(var c=-1,d=a.length;++c-1;);return c}function ha(a){return a.match(zc)}function ia(a){return null==a?"":ca(a)}function ja(a,b,c){if(a=ia(a),a&&(c||void 0===b))return a.replace(Ac,"");if(!a||!(b=ca(b)))return a;var d=ha(a),e=ha(b),f=ga(d,e),g=fa(d,e)+1;return ea(d,f,g).join("")}function ka(a){return a=a.toString().replace(Ec,""),a=a.match(Bc)[2].replace(" ",""),a=a?a.split(Cc):[],a=a.map(function(a){return ja(a.replace(Dc,""))})}function la(a,b){var c={};X(a,function(a,b){function d(b,c){var d=_(e,function(a){return b[a]});d.push(c),a.apply(null,d)}var e;if(Mb(a))e=aa(a),a=e.pop(),c[b]=e.concat(e.length>0?d:a);else if(1===a.length)c[b]=a;else{if(e=ka(a),0===a.length&&0===e.length)throw new Error("autoInject task functions require explicit parameters.");e.pop(),c[b]=e.concat(d)}}),$(c,b)}function ma(a){setTimeout(a,0)}function na(a){return l(function(b,c){a(function(){b.apply(null,c)})})}function oa(){this.head=this.tail=null,this.length=0}function pa(a,b){a.length=1,a.head=a.tail=b}function qa(a,b,c){function d(a,b,c){if(null!=c&&"function"!=typeof c)throw new Error("task callback must be a function");return h.started=!0,Mb(a)||(a=[a]),0===a.length&&h.idle()?Hc(function(){h.drain()}):(V(a,function(a){var d={data:a,callback:c||r};b?h._tasks.unshift(d):h._tasks.push(d)}),void Hc(h.process))}function e(a){return l(function(b){f-=1,V(a,function(a){V(g,function(b,c){if(b===a)return g.splice(c,1),!1}),a.callback.apply(a,b),null!=b[0]&&h.error(b[0],a.data)}),f<=h.concurrency-h.buffer&&h.unsaturated(),h.idle()&&h.drain(),h.process()})}if(null==b)b=1;else if(0===b)throw new Error("Concurrency must not be zero");var f=0,g=[],h={_tasks:new oa,concurrency:b,payload:c,saturated:r,unsaturated:r,buffer:b/4,empty:r,drain:r,error:r,started:!1,paused:!1,push:function(a,b){d(a,!1,b)},kill:function(){h.drain=r,h._tasks.empty()},unshift:function(a,b){d(a,!0,b)},process:function(){for(;!h.paused&&f3?(g=g||r,a(d,e,i,h)):(g=f,g=g||r,f=e,a(d,i,h))}}function xa(a,b){return b}function ya(a){return l(function(b,c){b.apply(null,c.concat([l(function(b,c){"object"==typeof console&&(b?console.error&&console.error(b):console[a]&&V(c,function(b){console[a](b)}))})]))})}function za(a,b,c){function d(b,d){return b?c(b):d?void a(e):c(null)}c=J(c||r);var e=l(function(a,e){return a?c(a):(e.push(d),void b.apply(this,e))});d(null,!0)}function Aa(a,b,c){c=J(c||r);var d=l(function(e,f){return e?c(e):b.apply(this,f)?a(d):void c.apply(null,[null].concat(f))});a(d)}function Ba(a,b,c){Aa(a,function(){return!b.apply(this,arguments)},c)}function Ca(a,b,c){function d(b){return b?c(b):void a(e)}function e(a,e){return a?c(a):e?void b(d):c(null)}c=J(c||r),a(e)}function Da(a){return function(b,c,d){return a(b,d)}}function Ea(a,b,c){Q(a,Da(b),c)}function Fa(a,b,c,d){K(b)(a,Da(c),d)}function Ga(a){return m(function(b,c){var d=!0;b.push(function(){var a=arguments;d?Hc(function(){c.apply(null,a)}):c.apply(null,a)}),a.apply(this,b),d=!1})}function Ha(a){return!a}function Ia(a,b,c,d){d=s(d||r);var e=[];a(b,function(a,b,d){c(a,function(c,f){c?d(c):(f&&e.push({index:b,value:a}),d())})},function(a){a?d(a):d(null,_(e.sort(function(a,b){return a.index-b.index}),o("value")))})}function Ja(a,b){function c(a){return a?d(a):void e(c)}var d=J(b||r),e=Ga(a);c()}function Ka(a,b,c,d){d=s(d||r);var e={};L(a,b,function(a,b,d){c(a,b,function(a,c){return a?d(a):(e[b]=c,void d())})},function(a){d(a,e)})}function La(a,b){return b in a}function Ma(a,b){var c=Object.create(null),d=Object.create(null);b=b||va;var e=m(function(e,f){var g=b.apply(null,e);La(c,g)?Hc(function(){f.apply(null,c[g])}):La(d,g)?d[g].push(f):(d[g]=[f],a.apply(null,e.concat([l(function(a){c[g]=a;var b=d[g];delete d[g];for(var e=0,f=b.length;e=e.priority;)e=e.next;V(a,function(a){var f={data:a,priority:b,callback:d};e?c._tasks.insertBefore(e,f):c._tasks.push(f)}),Hc(c.process)},delete c.unshift,c}function Sa(a,b){return b=s(b||r),Mb(a)?a.length?void V(a,function(a){a(b)}):b():b(new TypeError("First argument to race must be an array of functions"))}function Ta(a,b,c,d){var e=cd.call(a).reverse();sa(e,b,c,d)}function Ua(a){return m(function(b,c){return b.push(l(function(a,b){if(a)c(null,{error:a});else{var d=null;1===b.length?d=b[0]:b.length>1&&(d=b),c(null,{value:d})}})),a.apply(this,b)})}function Va(a,b,c,d){Ia(a,b,function(a,b){c(a,function(a,c){a?b(a):b(null,!c)})},d)}function Wa(a){var b;return Mb(a)?b=_(a,Ua):(b={},X(a,function(a,c){b[c]=Ua.call(this,a)})),b}function Xa(a){return function(){return a}}function Ya(a,b,c){function d(a,b){if("object"==typeof b)a.times=+b.times||f,a.intervalFunc="function"==typeof b.interval?b.interval:Xa(+b.interval||g);else{if("number"!=typeof b&&"string"!=typeof b)throw new Error("Invalid arguments for async.retry");a.times=+b||f}}function e(){b(function(a){a&&i++d?1:0}Vb(a,function(a,c){b(a,function(b,d){return b?c(b):void c(null,{value:a,criteria:d})})},function(a,b){return a?c(a):void c(null,_(b.sort(d),o("value")))})}function ab(a,b,c){function d(){h||(f.apply(null,arguments),clearTimeout(g))}function e(){var b=a.name||"anonymous",d=new Error('Callback function "'+b+'" timed out.');d.code="ETIMEDOUT",c&&(d.info=c),h=!0,f(d)}var f,g,h=!1;return m(function(c,h){f=h,g=setTimeout(e,b),a.apply(null,c.concat(d))})}function bb(a,b,c,d){for(var e=-1,f=kd(jd((b-a)/(c||1)),0),g=Array(f);f--;)g[d?f:++e]=a,a+=c;return g}function cb(a,b,c,d){Xb(bb(0,a,1),b,c,d)}function db(a,b,c,d){3===arguments.length&&(d=c,c=b,b=Mb(a)?[]:{}),d=s(d||r),Q(a,function(a,d,e){c(b,a,d,e)},function(a){d(a,b)})}function eb(a){return function(){return(a.unmemoized||a).apply(null,arguments)}}function fb(a,b,c){if(c=J(c||r),!a())return c(null);var d=l(function(e,f){return e?c(e):a()?b(d):void c.apply(null,[null].concat(f))});b(d)}function gb(a,b,c){fb(function(){return!a.apply(this,arguments)},b,c)}function hb(a,b){function c(e){if(d===a.length)return b.apply(null,[null].concat(e));var f=J(l(function(a,d){return a?b.apply(null,[a].concat(d)):void c(d)}));e.push(f);var g=a[d++];g.apply(null,e)}if(b=s(b||r),!Mb(a))return b(new Error("First argument to waterfall must be an array of functions"));if(!a.length)return b();var d=0;c([])}var ib,jb="[object Function]",kb="[object GeneratorFunction]",lb=Object.prototype,mb=lb.toString,nb="[object Symbol]",ob=Object.prototype,pb=ob.toString,qb=NaN,rb=/^\s+|\s+$/g,sb=/^[-+]0x[0-9a-f]+$/i,tb=/^0b[01]+$/i,ub=/^0o[0-7]+$/i,vb=parseInt,wb=1/0,xb=1.7976931348623157e308,yb="Expected a function",zb=Math.max,Ab=o("length"),Bb=9007199254740991,Cb="function"==typeof Symbol&&Symbol.iterator,Db=Object.getPrototypeOf,Eb=Object.prototype,Fb=Eb.hasOwnProperty,Gb=Object.keys,Hb="[object Arguments]",Ib=Object.prototype,Jb=Ib.hasOwnProperty,Kb=Ib.toString,Lb=Ib.propertyIsEnumerable,Mb=Array.isArray,Nb="[object String]",Ob=Object.prototype,Pb=Ob.toString,Qb=9007199254740991,Rb=/^(?:0|[1-9]\d*)$/,Sb=Object.prototype,Tb="Expected a function",Ub=M(L,1/0),Vb=R(S),Wb=n(Vb),Xb=T(S),Yb=M(Xb,1),Zb=n(Yb),$b=l(function(a,b){return l(function(c){return a.apply(null,b.concat(c))})}),_b=W(),ac=ba("object"==typeof e&&e),bc=ba("object"==typeof self&&self),cc=ba("object"==typeof this&&this),dc=ac||bc||cc||Function("return this")(),ec=dc.Symbol,fc=1/0,gc=ec?ec.prototype:void 0,hc=gc?gc.toString:void 0,ic="\\ud800-\\udfff",jc="\\u0300-\\u036f\\ufe20-\\ufe23",kc="\\u20d0-\\u20f0",lc="\\ufe0e\\ufe0f",mc="["+ic+"]",nc="["+jc+kc+"]",oc="\\ud83c[\\udffb-\\udfff]",pc="(?:"+nc+"|"+oc+")",qc="[^"+ic+"]",rc="(?:\\ud83c[\\udde6-\\uddff]){2}",sc="[\\ud800-\\udbff][\\udc00-\\udfff]",tc="\\u200d",uc=pc+"?",vc="["+lc+"]?",wc="(?:"+tc+"(?:"+[qc,rc,sc].join("|")+")"+vc+uc+")*",xc=vc+uc+wc,yc="(?:"+[qc+nc+"?",nc,rc,sc,mc].join("|")+")",zc=RegExp(oc+"(?="+oc+")|"+yc+xc,"g"),Ac=/^\s+|\s+$/g,Bc=/^(function)?\s*[^\(]*\(\s*([^\)]*)\)/m,Cc=/,/,Dc=/(=.+)?(\s*)$/,Ec=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,Fc="function"==typeof setImmediate&&setImmediate,Gc="object"==typeof b&&"function"==typeof b.nextTick;ib=Fc?setImmediate:Gc?b.nextTick:ma;var Hc=na(ib);oa.prototype.removeLink=function(a){return a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev,a.prev=a.next=null,this.length-=1,a},oa.prototype.empty=oa,oa.prototype.insertAfter=function(a,b){b.prev=a,b.next=a.next,a.next?a.next.prev=b:this.tail=b,a.next=b,this.length+=1},oa.prototype.insertBefore=function(a,b){b.prev=a.prev,b.next=a,a.prev?a.prev.next=b:this.head=b,a.prev=b,this.length+=1},oa.prototype.unshift=function(a){this.head?this.insertBefore(this.head,a):pa(this,a)},oa.prototype.push=function(a){this.tail?this.insertAfter(this.tail,a):pa(this,a)},oa.prototype.shift=function(){return this.head&&this.removeLink(this.head)},oa.prototype.pop=function(){return this.tail&&this.removeLink(this.tail)};var Ic,Jc=M(L,1),Kc=l(function(a){return l(function(b){var c=this,d=b[b.length-1];"function"==typeof d?b.pop():d=r,sa(a,b,function(a,b,d){b.apply(c,a.concat([l(function(a,b){d(a,b)})]))},function(a,b){d.apply(c,[a].concat(b))})})}),Lc=l(function(a){return Kc.apply(null,a.reverse())}),Mc=R(ta),Nc=ua(ta),Oc=l(function(a){var b=[null].concat(a);return m(function(a,c){return c.apply(this,b)})}),Pc=wa(Q,va,xa),Qc=wa(L,va,xa),Rc=wa(Jc,va,xa),Sc=ya("dir"),Tc=M(Fa,1),Uc=wa(Q,Ha,Ha),Vc=wa(L,Ha,Ha),Wc=M(Vc,1),Xc=R(Ia),Yc=T(Ia),Zc=M(Yc,1),$c=ya("log"),_c=M(Ka,1/0),ad=M(Ka,1);Ic=Gc?b.nextTick:Fc?setImmediate:ma;var bd=na(Ic),cd=Array.prototype.slice,dd=R(Va),ed=T(Va),fd=M(ed,1),gd=wa(Q,Boolean,va),hd=wa(L,Boolean,va),id=M(hd,1),jd=Math.ceil,kd=Math.max,ld=M(cb,1/0),md=M(cb,1),nd={applyEach:Wb,applyEachSeries:Zb,apply:$b,asyncify:U,auto:$,autoInject:la,cargo:ra,compose:Lc,concat:Mc,concatSeries:Nc,constant:Oc,detect:Pc,detectLimit:Qc,detectSeries:Rc,dir:Sc,doDuring:za,doUntil:Ba,doWhilst:Aa,during:Ca,each:Ea,eachLimit:Fa,eachOf:Q,eachOfLimit:L,eachOfSeries:Jc,eachSeries:Tc,ensureAsync:Ga,every:Uc,everyLimit:Vc,everySeries:Wc,filter:Xc,filterLimit:Yc,filterSeries:Zc,forever:Ja,log:$c,map:Vb,mapLimit:Xb,mapSeries:Yb,mapValues:_c,mapValuesLimit:Ka,mapValuesSeries:ad,memoize:Ma,nextTick:bd,parallel:Oa,parallelLimit:Pa,priorityQueue:Ra,queue:Qa,race:Sa,reduce:sa,reduceRight:Ta,reflect:Ua,reflectAll:Wa,reject:dd,rejectLimit:ed,rejectSeries:fd,retry:Ya,retryable:Za,seq:Kc,series:$a,setImmediate:Hc,some:gd,someLimit:hd,someSeries:id,sortBy:_a,timeout:ab,times:ld,timesLimit:cb,timesSeries:md,transform:db,unmemoize:eb,until:gb,waterfall:hb,whilst:fb,all:Uc,any:gd,forEach:Ea,forEachSeries:Tc,forEachLimit:Fa,forEachOf:Q,forEachOfSeries:Jc,forEachOfLimit:L,inject:sa,foldl:sa,foldr:Ta,select:Xc,selectLimit:Yc,selectSeries:Zc,wrapSync:U};a.default=nd,a.applyEach=Wb,a.applyEachSeries=Zb,a.apply=$b,a.asyncify=U,a.auto=$,a.autoInject=la,a.cargo=ra,a.compose=Lc,a.concat=Mc,a.concatSeries=Nc,a.constant=Oc,a.detect=Pc,a.detectLimit=Qc,a.detectSeries=Rc,a.dir=Sc,a.doDuring=za,a.doUntil=Ba,a.doWhilst=Aa,a.during=Ca,a.each=Ea,a.eachLimit=Fa,a.eachOf=Q,a.eachOfLimit=L,a.eachOfSeries=Jc,a.eachSeries=Tc,a.ensureAsync=Ga,a.every=Uc,a.everyLimit=Vc,a.everySeries=Wc,a.filter=Xc,a.filterLimit=Yc,a.filterSeries=Zc,a.forever=Ja,a.log=$c,a.map=Vb,a.mapLimit=Xb,a.mapSeries=Yb,a.mapValues=_c,a.mapValuesLimit=Ka,a.mapValuesSeries=ad,a.memoize=Ma,a.nextTick=bd,a.parallel=Oa,a.parallelLimit=Pa,a.priorityQueue=Ra,a.queue=Qa,a.race=Sa,a.reduce=sa,a.reduceRight=Ta,a.reflect=Ua,a.reflectAll=Wa,a.reject=dd,a.rejectLimit=ed,a.rejectSeries=fd,a.retry=Ya,a.retryable=Za,a.seq=Kc,a.series=$a,a.setImmediate=Hc,a.some=gd,a.someLimit=hd,a.someSeries=id,a.sortBy=_a,a.timeout=ab,a.times=ld,a.timesLimit=cb,a.timesSeries=md,a.transform=db,a.unmemoize=eb,a.until=gb,a.waterfall=hb,a.whilst=fb,a.all=Uc,a.allLimit=Vc,a.allSeries=Wc,a.any=gd,a.anyLimit=hd,a.anySeries=id,a.find=Pc,a.findLimit=Qc,a.findSeries=Rc,a.forEach=Ea,a.forEachSeries=Tc,a.forEachLimit=Fa,a.forEachOf=Q,a.forEachOfSeries=Jc,a.forEachOfLimit=L,a.inject=sa,a.foldl=sa,a.foldr=Ta,a.select=Xc,a.selectLimit=Yc,a.selectSeries=Zc,a.wrapSync=U})}).call(this,b("bfs-process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"bfs-process":11}],2:[function(a,b,c){"use strict";function d(a,b,c,d,e,f){if(b>e||ba.length)throw new RangeError("index out of range")}function e(a,b,c,d){if(c+d>a.length)throw new RangeError("index out of range")}function f(a,b,c){if(a+b>c)throw new RangeError("index out of range")}var g=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},h=a("./buffer_core"),i=a("./buffer_core_array"),j=a("./buffer_core_arraybuffer"),k=a("./buffer_core_imagedata"),l=a("./string_util"),m=a("./util"),n=[j,k,i],o=function(){var a,b;for(a=0;a>>0)throw new RangeError("Buffer size must be a uint32.");this.length=b,this.data=new o(b)}else if(m.isArrayBufferView(b))this.data=new j(b),this.length=b.byteLength;else if(m.isArrayBuffer(b))this.data=new j(b),this.length=b.byteLength;else if(b instanceof a){var i=b;this.data=new o(b.length),this.length=b.length,i.copy(this)}else if(Array.isArray(b)||null!=b&&"object"==typeof b&&"number"==typeof b[0]){for(this.data=new o(b.length),e=0;ethis.length||c<0)throw new RangeError("Invalid offset.");var f=l.FindUtil(e);return d=d+c>this.length?this.length-c:d,c+=this.offset,f.str2byte(b,0===c&&d===this.length?this:new a(this.data,c,d+c))},a.prototype.toString=function(b,c,d){if(void 0===b&&(b="utf8"),void 0===c&&(c=0),void 0===d&&(d=this.length),!(c<=d))throw new Error("Invalid start/end positions: "+c+" - "+d);if(c===d)return"";d>this.length&&(d=this.length);var e=l.FindUtil(b);return e.byte2str(0===c&&d===this.length?this:new a(this.data,c+this.offset,d+this.offset))},a.prototype.toJSON=function(){for(var a=this.length,b=new Array(a),c=0;cd?" ... ":"")+">"},a.prototype.toArrayBuffer=function(){var b=this.getBufferCore();if(b instanceof j){var c=b.getDataView(),d=c.buffer;return 0===this.offset&&0===c.byteOffset&&c.byteLength===d.byteLength&&this.length===c.byteLength?d:d.slice(this.offset+c.byteOffset,this.length)}var d=new ArrayBuffer(this.length),e=new a(d);return this.copy(e,0,0,this.length),d},a.prototype.toUint8Array=function(){var b=this.getBufferCore();if(b instanceof j){var c=b.getDataView(),d=c.buffer,e=this.offset+c.byteOffset,f=this.length;return new Uint8Array(d).subarray(e,e+f)}var d=new ArrayBuffer(this.length),g=new a(d);return this.copy(g,0,0,this.length),new Uint8Array(d)},a.prototype.indexOf=function(b,c){void 0===c&&(c=0);var d;if("string"==typeof b)d=new a(b,"utf8");else if(a.isBuffer(b))d=b;else{if("number"!=typeof b)throw new TypeError("indexOf only operates on strings, buffers, and numbers.");d=new a([b])}c>2147483647?c=2147483647:c<-2147483648&&(c=-2147483648),c>>=0,c<0&&(c=this.length+c,c<0&&(c=0));var e=0,f=d.length,g=this.length;if(0===f)return-1;for(;e=this.length||c>b.length)return 0;var f=Math.min(e-d,b.length-c,this.length-d);if(b instanceof a&&this.data instanceof j){var g=b.getBufferCore();if(g instanceof j)return this.data.copyTo(g,c+b.offset,d+this.offset,d+f+this.offset)}for(var h=0;h>=0,c>>=0,b<0&&(b+=this.length,b<0&&(b=0)),c<0&&(c+=this.length,c<0&&(c=0)),c>this.length&&(c=this.length),b>c&&(b=c),b<0||c<0||b>this.length||c>this.length)throw new Error("Invalid slice indices.");return new a(this.data,b+this.offset,c+this.offset)},a.prototype.sliceCopy=function(b,c){if(void 0===b&&(b=0),void 0===c&&(c=this.length),b<0&&(b+=this.length,b<0&&(b=0)),c<0&&(c+=this.length,c<0&&(c=0)),c>this.length&&(c=this.length),b>c&&(b=c),b<0||c<0||b>=this.length||c>this.length)throw new Error("Invalid slice indices.");return new a(this.data.copy(b+this.offset,c+this.offset))},a.prototype.fill=function(b,c,d){void 0===c&&(c=0),void 0===d&&(d=this.length);if(c>>=0,d>>=0,c<0||d>this.length)throw new RangeError("out of range index");if(d<=c)return this;if("string"!=typeof b)b>>>=0;else if(1===b.length){var e=b.charCodeAt(0);e<256&&(b=e)}if("number"==typeof b)c+=this.offset,d+=this.offset,this.data.fill(b,c,d);else if(b.length>0){for(var f=a.byteLength(b,"utf8"),g=d-f;c>>=0,b>>>=0,c||f(a,b,this.length),a+=this.offset;var d=0;switch(b){case 1:return this.data.readUInt8(a);case 2:return this.data.readUInt16LE(a);case 3:return this.data.readUInt8(a)|this.data.readUInt16LE(a+1)<<8;case 4:return this.data.readUInt32LE(a);case 6:d+=131072*(this.data.readUInt8(a+5)<<23);case 5:return d+=512*(this.data.readUInt8(a+4)<<23),d+this.data.readUInt32LE(a);default:throw new Error("Invalid byteLength: "+b)}},a.prototype.readUIntBE=function(a,b,c){void 0===c&&(c=!1),a>>>=0,b>>>=0,c||f(a,b,this.length),a+=this.offset;var d=0;switch(b){case 1:return this.data.readUInt8(a);case 2:return this.data.readUInt16BE(a);case 3:return this.data.readUInt8(a+2)|this.data.readUInt16BE(a)<<8;case 4:return this.data.readUInt32BE(a);case 6:d+=131072*(this.data.readUInt8(a)<<23),a++;case 5:return d+=512*(this.data.readUInt8(a)<<23),d+this.data.readUInt32BE(a+1);default:throw new Error("Invalid byteLength: "+b)}},a.prototype.readIntLE=function(a,b,c){switch(void 0===c&&(c=!1),a>>>=0,b>>>=0,c||f(a,b,this.length),a+=this.offset,b){case 1:return this.data.readInt8(a);case 2:return this.data.readInt16LE(a);case 3:return this.data.readUInt8(a)|this.data.readInt16LE(a+1)<<8;case 4:return this.data.readInt32LE(a);case 6:return 131072*(this.data.readInt8(a+5)<<23)+this.readUIntLE(a-this.offset,5,c);case 5:return 512*(this.data.readInt8(a+4)<<23)+this.data.readUInt32LE(a);default:throw new Error("Invalid byteLength: "+b)}},a.prototype.readIntBE=function(a,b,c){switch(void 0===c&&(c=!1),a>>>=0,b>>>=0,c||f(a,b,this.length),a+=this.offset,b){case 1:return this.data.readInt8(a);case 2:return this.data.readInt16BE(a);case 3:return this.data.readUInt8(a+2)|this.data.readInt16BE(a)<<8;case 4:return this.data.readInt32BE(a);case 6:return 131072*(this.data.readInt8(a)<<23)+this.readUIntBE(a-this.offset+1,5,c);case 5:return 512*(this.data.readInt8(a)<<23)+this.data.readUInt32BE(a+1);default:throw new Error("Invalid byteLength: "+b)}},a.prototype.readUInt8=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,1,this.length),a+=this.offset,this.data.readUInt8(a)},a.prototype.readUInt16LE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,2,this.length),a+=this.offset,this.data.readUInt16LE(a)},a.prototype.readUInt16BE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,2,this.length),a+=this.offset,this.data.readUInt16BE(a)},a.prototype.readUInt32LE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,4,this.length),a+=this.offset,this.data.readUInt32LE(a)},a.prototype.readUInt32BE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,4,this.length),a+=this.offset,this.data.readUInt32BE(a)},a.prototype.readInt8=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,1,this.length),a+=this.offset,this.data.readInt8(a)},a.prototype.readInt16LE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,2,this.length),a+=this.offset,this.data.readInt16LE(a)},a.prototype.readInt16BE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,2,this.length),a+=this.offset,this.data.readInt16BE(a)},a.prototype.readInt32LE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,4,this.length),a+=this.offset,this.data.readInt32LE(a)},a.prototype.readInt32BE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,4,this.length),a+=this.offset,this.data.readInt32BE(a)},a.prototype.readFloatLE=function(a,b){return void 0===b&&(b=!1),a>>>=0, -b||f(a,4,this.length),a+=this.offset,this.data.readFloatLE(a)},a.prototype.readFloatBE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,4,this.length),a+=this.offset,this.data.readFloatBE(a)},a.prototype.readDoubleLE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,8,this.length),a+=this.offset,this.data.readDoubleLE(a)},a.prototype.readDoubleBE=function(a,b){return void 0===b&&(b=!1),a>>>=0,b||f(a,8,this.length),a+=this.offset,this.data.readDoubleBE(a)},a.prototype.writeUIntLE=function(a,b,c,e){void 0===e&&(e=!1),b>>>=0,e||d(this,a,b,c,r[c],0);var f=b+c;switch(b+=this.offset,c){case 1:this.data.writeUInt8(b,a);break;case 2:this.data.writeUInt16LE(b,a);break;case 3:this.data.writeUInt8(b,255&a),this.data.writeUInt16LE(b+1,a>>8);break;case 4:this.data.writeUInt32LE(b,a);break;case 6:this.data.writeUInt8(b,255&a),a=Math.floor(a/256),b++;case 5:this.data.writeUInt8(b,255&a),a=Math.floor(a/256),this.data.writeUInt32LE(b+1,a);break;default:throw new Error("Invalid byteLength: "+c)}return f},a.prototype.writeUIntBE=function(a,b,c,e){void 0===e&&(e=!1),b>>>=0,e||d(this,a,b,c,r[c],0);var f=b+c;switch(b+=this.offset,c){case 1:this.data.writeUInt8(b,a);break;case 2:this.data.writeUInt16BE(b,a);break;case 3:this.data.writeUInt8(b+2,255&a),this.data.writeUInt16BE(b,a>>8);break;case 4:this.data.writeUInt32BE(b,a);break;case 6:this.data.writeUInt8(b+5,255&a),a=Math.floor(a/256);case 5:this.data.writeUInt8(b+4,255&a),a=Math.floor(a/256),this.data.writeUInt32BE(b,a);break;default:throw new Error("Invalid byteLength: "+c)}return f},a.prototype.writeIntLE=function(a,b,c,e){void 0===e&&(e=!1),b>>>=0,e||d(this,a,b,c,p[c],q[c]);var f=b+c;switch(b+=this.offset,c){case 1:this.data.writeInt8(b,a);break;case 2:this.data.writeInt16LE(b,a);break;case 3:this.data.writeUInt8(b,255&a),this.data.writeInt16LE(b+1,a>>8);break;case 4:this.data.writeInt32LE(b,a);break;case 6:this.data.writeUInt8(b,255&a),a=Math.floor(a/256),b++;case 5:this.data.writeUInt8(b,255&a),a=Math.floor(a/256),this.data.writeInt32LE(b+1,a);break;default:throw new Error("Invalid byteLength: "+c)}return f},a.prototype.writeIntBE=function(a,b,c,e){void 0===e&&(e=!1),b>>>=0,e||d(this,a,b,c,p[c],q[c]);var f=b+c;switch(b+=this.offset,c){case 1:this.data.writeInt8(b,a);break;case 2:this.data.writeInt16BE(b,a);break;case 3:this.data.writeUInt8(b+2,255&a),this.data.writeInt16BE(b,a>>8);break;case 4:this.data.writeInt32BE(b,a);break;case 6:this.data.writeUInt8(b+5,255&a),a=Math.floor(a/256);case 5:this.data.writeUInt8(b+4,255&a),a=Math.floor(a/256),this.data.writeInt32BE(b,a);break;default:throw new Error("Invalid byteLength: "+c)}return f},a.prototype.writeUInt8=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,1,255,0),this.data.writeUInt8(b+this.offset,a),b+1},a.prototype.writeUInt16LE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,2,65535,0),this.data.writeUInt16LE(b+this.offset,a),b+2},a.prototype.writeUInt16BE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,2,65535,0),this.data.writeUInt16BE(b+this.offset,a),b+2},a.prototype.writeUInt32LE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,4,4294967295,0),this.data.writeUInt32LE(b+this.offset,a),b+4},a.prototype.writeUInt32BE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,4,4294967295,0),this.data.writeUInt32BE(b+this.offset,a),b+4},a.prototype.writeInt8=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,1,127,-128),this.data.writeInt8(b+this.offset,a),b+1},a.prototype.writeInt16LE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,2,32767,-32768),this.data.writeInt16LE(b+this.offset,a),b+2},a.prototype.writeInt16BE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,2,32767,-32768),this.data.writeInt16BE(b+this.offset,a),b+2},a.prototype.writeInt32LE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,4,2147483647,-2147483648),this.data.writeInt32LE(b+this.offset,a),b+4},a.prototype.writeInt32BE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||d(this,a,b,4,2147483647,-2147483648),this.data.writeInt32BE(b+this.offset,a),b+4},a.prototype.writeFloatLE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||e(this,a,b,4),this.data.writeFloatLE(b+this.offset,a),b+4},a.prototype.writeFloatBE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||e(this,a,b,4),this.data.writeFloatBE(b+this.offset,a),b+4},a.prototype.writeDoubleLE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||e(this,a,b,8),this.data.writeDoubleLE(b+this.offset,a),b+8},a.prototype.writeDoubleBE=function(a,b,c){return void 0===c&&(c=!1),b>>>=0,c||e(this,a,b,8),this.data.writeDoubleBE(b+this.offset,a),b+8},a.isEncoding=function(a){try{l.FindUtil(a)}catch(a){return!1}return!0},a.compare=function(a,b){if(a===b)return 0;var c,d,e,f=a.length,g=b.length,h=Math.min(f,g);for(c=0;ce?1:-1;return f===g?0:f>g?1:-1},a.isBuffer=function(b){return b instanceof a},a.byteLength=function(a,b){void 0===b&&(b="utf8");var c;try{c=l.FindUtil(b)}catch(a){c=l.FindUtil("utf8")}return"string"!=typeof a&&(a=""+a),c.byteLength(a)},a.concat=function(b,c){var d;if(0===b.length||0===c)return new a(0);if(void 0===c){c=0;for(var e=0;e>>24)},a.prototype.writeInt16LE=function(a,b){this.writeUInt8(a,255&b),this.writeUInt8(a+1,b>>>8&255|(2147483648&b)>>>24)},a.prototype.writeInt16BE=function(a,b){this.writeUInt8(a+1,255&b),this.writeUInt8(a,b>>>8&255|(2147483648&b)>>>24)},a.prototype.writeInt32LE=function(a,b){this.writeUInt8(a,255&b),this.writeUInt8(a+1,b>>>8&255),this.writeUInt8(a+2,b>>>16&255),this.writeUInt8(a+3,b>>>24&255)},a.prototype.writeInt32BE=function(a,b){this.writeUInt8(a+3,255&b),this.writeUInt8(a+2,b>>>8&255),this.writeUInt8(a+1,b>>>16&255),this.writeUInt8(a,b>>>24&255)},a.prototype.writeUInt8=function(a,b){throw new Error("BufferCore implementations should implement writeUInt8.")},a.prototype.writeUInt16LE=function(a,b){this.writeUInt8(a,255&b),this.writeUInt8(a+1,b>>8&255)},a.prototype.writeUInt16BE=function(a,b){this.writeUInt8(a+1,255&b),this.writeUInt8(a,b>>8&255)},a.prototype.writeUInt32LE=function(a,b){this.writeInt32LE(a,0|b)},a.prototype.writeUInt32BE=function(a,b){this.writeInt32BE(a,0|b)},a.prototype.writeFloatLE=function(a,b){this.writeInt32LE(a,this.float2intbits(b))},a.prototype.writeFloatBE=function(a,b){this.writeInt32BE(a,this.float2intbits(b))},a.prototype.writeDoubleLE=function(a,b){var c=this.double2longbits(b);this.writeInt32LE(a,c[0]),this.writeInt32LE(a+4,c[1])},a.prototype.writeDoubleBE=function(a,b){var c=this.double2longbits(b);this.writeInt32BE(a+4,c[0]),this.writeInt32BE(a,c[1])},a.prototype.readInt8=function(a){var b=this.readUInt8(a);return 128&b?4294967168|b:b},a.prototype.readInt16LE=function(a){var b=this.readUInt16LE(a);return 32768&b?4294934528|b:b},a.prototype.readInt16BE=function(a){var b=this.readUInt16BE(a);return 32768&b?4294934528|b:b},a.prototype.readInt32LE=function(a){return 0|this.readUInt32LE(a)},a.prototype.readInt32BE=function(a){return 0|this.readUInt32BE(a)},a.prototype.readUInt8=function(a){throw new Error("BufferCore implementations should implement readUInt8.")},a.prototype.readUInt16LE=function(a){return this.readUInt8(a+1)<<8|this.readUInt8(a)},a.prototype.readUInt16BE=function(a){return this.readUInt8(a)<<8|this.readUInt8(a+1)},a.prototype.readUInt32LE=function(a){return(this.readUInt8(a+3)<<24|this.readUInt8(a+2)<<16|this.readUInt8(a+1)<<8|this.readUInt8(a))>>>0},a.prototype.readUInt32BE=function(a){return(this.readUInt8(a)<<24|this.readUInt8(a+1)<<16|this.readUInt8(a+2)<<8|this.readUInt8(a+3))>>>0},a.prototype.readFloatLE=function(a){return this.intbits2float(this.readInt32LE(a))},a.prototype.readFloatBE=function(a){return this.intbits2float(this.readInt32BE(a))},a.prototype.readDoubleLE=function(a){return this.longbits2double(this.readInt32LE(a+4),this.readInt32LE(a))},a.prototype.readDoubleBE=function(a){return this.longbits2double(this.readInt32BE(a),this.readInt32BE(a+4))},a.prototype.copy=function(a,b){throw new Error("BufferCore implementations should implement copy.")},a.prototype.fill=function(a,b,c){for(var d=b;d=1.401298464324817e-45?(b=0,c=Math.round(a/Math.pow(2,-126)*Math.pow(2,23)),d<<31|b<<23|c):(b=Math.floor(Math.log(a)/Math.LN2),c=Math.round((a/Math.pow(2,b)-1)*Math.pow(2,23)),d<<31|b+127<<23|c))},a.prototype.double2longbits=function(a){var b,c,d,e;return 0===a?[0,0]:a===Number.POSITIVE_INFINITY?[0,2146435072]:a===Number.NEGATIVE_INFINITY?[0,-1048576]:isNaN(a)?[0,2146959360]:(e=a<0?1<<31:0,a=Math.abs(a),a<=2.225073858507201e-308&&a>=5e-324?(b=0,d=a/Math.pow(2,-1022)*Math.pow(2,52)):(b=Math.floor(Math.log(a)/Math.LN2),a>>31,h=(2139095040&a)>>>23,i=8388607&a;return b=0===h?Math.pow(-1,c)*i*Math.pow(2,-149):Math.pow(-1,c)*(1+i*Math.pow(2,-23))*Math.pow(2,h-127),(bd)&&(b=NaN),b},a.prototype.longbits2double=function(a,b){var c=(2147483648&a)>>>31,d=(2146435072&a)>>>20,e=(1048575&a)*Math.pow(2,32)+b;return 0===d&&0===e?0:2047===d?0===e?1===c?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY:NaN:0===d?Math.pow(-1,c)*e*Math.pow(2,-1074):Math.pow(-1,c)*(1+e*Math.pow(2,-52))*Math.pow(2,d-1023)},a}();c.BufferCoreCommon=i},{}],4:[function(a,b,c){"use strict";var d=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},e=a("./buffer_core"),f=[4294967040,4294902015,4278255615,16777215],g=function(a){function b(b){a.call(this),this.length=b,this.buff=new Array(Math.ceil(b/4));for(var c=this.buff.length,d=0;d>2,d=3&a;this.buff[c]=this.buff[c]&f[d],this.buff[c]=this.buff[c]|b<<(d<<3)},b.prototype.readUInt8=function(a){var b=a>>2,c=3&a;return this.buff[b]>>(c<<3)&255},b.prototype.copy=function(a,c){for(var d=new b(c-a),e=a;ec.length?c.length:b.length,e=0;e127){var g=a.extendedChars.indexOf(b.charAt(e));g>-1&&(f=g+128)}c.writeUInt8(f,e)}return d},a.byte2str=function(b){for(var c=new Array(b.length),d=0;d127?c[d]=a.extendedChars[e-128]:c[d]=String.fromCharCode(e)}return c.join("")},a.byteLength=function(a){return a.length},a.extendedChars=["Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å","É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","ø","£","Ø","×","ƒ","á","í","ó","ú","ñ","Ñ","ª","º","¿","®","¬","½","¼","¡","«","»","_","_","_","¦","¦","Á","Â","À","©","¦","¦","+","+","¢","¥","+","+","-","-","+","-","+","ã","Ã","+","+","-","-","¦","-","+","¤","ð","Ð","Ê","Ë","È","i","Í","Î","Ï","+","+","_","_","¦","Ì","_","Ó","ß","Ô","Ò","õ","Õ","µ","þ","Þ","Ú","Û","Ù","ý","Ý","¯","´","­","±","_","¾","¶","§","÷","¸","°","¨","·","¹","³","²","_"," "],a}();c.__esModule=!0,c.default=d},{}],8:[function(a,b,c){"use strict";function d(a){var b,c=a.length,d=(c-1>>13)+1,e=new Array(d);for(b=0;b=c||d>=f)break;var h=a.charCodeAt(d);if(56320<=h&&h<=57343){var i=(1023&g|1024)<<10|1023&h;b.writeUInt8(i>>18|240,e++),b.writeUInt8(i>>12&63|128,e++),b.writeUInt8(i>>6&63|128,e++),b.writeUInt8(63&i|128,e++),d++}else b.writeUInt8(239,e++),b.writeUInt8(191,e++),b.writeUInt8(189,e++)}else if(56320<=g&&g<=57343)b.writeUInt8(239,e++),b.writeUInt8(191,e++),b.writeUInt8(189,e++);else if(g<128)b.writeUInt8(g,e++);else if(g<2048){if(e+1>=c)break;b.writeUInt8(g>>6|192,e++),b.writeUInt8(63&g|128,e++)}else if(g<65536){if(e+2>=c)break;b.writeUInt8(g>>12|224,e++),b.writeUInt8(g>>6&63|128,e++),b.writeUInt8(63&g|128,e++)}}return e},a.byte2str=function(a){for(var b=[],c=0;c>4)|55296),b.push((15&f)<<6|63&a.readUInt8(c++)|56320)}}}return d(b)},a.byteLength=function(a){for(var b=a.length,c=a.length-1;c>=0;c--){var d=a.charCodeAt(c);d>127&&d<=2047?b++:d>2047&&d<=65535&&(b+=2),d>=56320&&d<=57343&&c--}return b},a}();c.UTF8=h;var i=function(){function a(){}return a.str2byte=function(a,b){for(var c=a.length>b.length?b.length:a.length,d=0;db.length?b.length:a.length,d=0;d>2,i=(3&e)<<4|f>>4,j=(15&f)<<2|g>>6,k=63&g;isNaN(f)?j=k=64:isNaN(g)&&(k=64),c=c+a.num2b64[h]+a.num2b64[i]+a.num2b64[j]+a.num2b64[k]}return c},a.str2byte=function(b,c){var d=c.length,e="",f=0;b=b.replace(/[^A-Za-z0-9\+\/\=\-\_]/g,"");for(var g=0;f>4,m=(15&i)<<4|j>>2,n=(3&j)<<6|k;if(c.writeUInt8(l,g++),g===d)break;if(64!==j&&(e+=c.writeUInt8(m,g++)),g===d)break;if(64!==k&&(e+=c.writeUInt8(n,g++)),g===d)break}return g},a.byteLength=function(a){return Math.floor(6*a.replace(/[^A-Za-z0-9\+\/\-\_]/g,"").length/8)},a.b64chars=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/","="],a.num2b64=function(){for(var b=new Array(a.b64chars.length),c=0;cb.length&&(c=b.length%2===1?(b.length-1)/2:b.length/2);for(var d=0;d>1;c>b.length&&(c=b.length);for(var d=0;d>4;c[d++]=this.num2hex[g],c[d++]=this.num2hex[f]}return c.join("")},a.byteLength=function(a){return a.length>>1},a.HEXCHARS="0123456789abcdef",a.num2hex=function(){for(var b=new Array(a.HEXCHARS.length),c=0;cc.length&&(d=c.length);var e=0,f=0,g=f+d,h=b.charCodeAt(e++);0!==h&&(c.writeUInt8(255&h,0),f=1);for(var i=f;i>8,i),g-i>=2&&c.writeUInt16BE(j,i)}return d},a.byte2str=function(a){var b=a.length;if(0===b)return"";var c,e=(b>>1)+1,f=new Array(e),g=0;for(1===(1&b)?f[0]=256|a.readUInt8(g++):f[0]=0,c=1;cb.length?b.length:a.length,d=0;d0&&".."!==e[0])?e.pop():e.push(g))}if(!c&&e.length<2)switch(e.length){case 1:""===e[0]&&e.unshift(".");break;default:e.push(".")}return a=e.join(b.sep),c&&a.charAt(0)!==b.sep&&(a=b.sep+a),a},b.join=function(){for(var a=[],c=0;c1&&h.charAt(h.length-1)===b.sep)return h.substr(0,h.length-1);if(h.charAt(0)!==b.sep){"."!==h.charAt(0)||1!==h.length&&h.charAt(1)!==b.sep||(h=1===h.length?"":h.substr(2));var i=a.cwd();h=""!==h?this.normalize(i+("/"!==i?b.sep:"")+h):i}return h},b.relative=function(a,c){var d;a=b.resolve(a),c=b.resolve(c);var e=a.split(b.sep),f=c.split(b.sep);f.shift(),e.shift();var g=0,h=[];for(d=0;de.length&&(g=e.length);var j="";for(d=0;d1&&j.charAt(j.length-1)===b.sep&&(j=j.substr(0,j.length-1)),j},b.dirname=function(a){a=b._removeDuplicateSeps(a);var c=a.charAt(0)===b.sep,d=a.split(b.sep);return""===d.pop()&&d.length>0&&d.pop(),d.length>1||1===d.length&&!c?d.join(b.sep):c?b.sep:"."},b.basename=function(a,c){if(void 0===c&&(c=""),""===a)return a;a=b.normalize(a);var d=a.split(b.sep),e=d[d.length-1];if(""===e&&d.length>1)return d[d.length-2];if(c.length>0){var f=e.substr(e.length-c.length);if(f===c)return e.substr(0,e.length-c.length)}return e},b.extname=function(a){a=b.normalize(a);var c=a.split(b.sep);if(a=c.pop(),""===a&&c.length>0&&(a=c.pop()),".."===a)return"";var d=a.lastIndexOf(".");return d===-1||0===d?"":a.substr(d)},b.isAbsolute=function(a){return a.length>0&&a.charAt(0)===b.sep},b._makeLong=function(a){return a},b.parse=function(a){var b=c(a);return{root:b[0],dir:b[0]+b[1].slice(0,-1),base:b[2],ext:b[3],name:b[2].slice(0,b[2].length-b[3].length)}},b.format=function(a){if(null===a||"object"!=typeof a)throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof a);var c=a.root||"";if("string"!=typeof c)throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof a.root);var d=a.dir?a.dir+b.sep:"",e=a.base||"";return d+e},b._removeDuplicateSeps=function(a){return a=a.replace(this._replaceRegex,this.sep)},b.sep="/",b._replaceRegex=new RegExp("//+","g"),b.delimiter=":",b.posix=b,b.win32=b,b}();b.exports=e}).call(this,a("bfs-process"))},{"bfs-process":11}],11:[function(a,b,c){"use strict";function d(a){g[a]||("function"==typeof f[a]?g[a]=function(){return f[a].apply(f,arguments)}:g[a]=f[a])}var e=a("./process"),f=new e,g={};for(var h in f)d(h);g.initializeTTYs=function(){null===f.stdin&&(f.initializeTTYs(),g.stdin=f.stdin,g.stdout=f.stdout,g.stderr=f.stderr)},f.nextTick(function(){g.initializeTTYs()}),b.exports=g},{"./process":12}],12:[function(a,b,c){(function(c){"use strict";var d=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},e=a("events"),f=null,g=function(){function a(a,b){this.fun=a,this.array=b}return a.prototype.run=function(){this.fun.apply(null,this.array)},a}(),h=function(){function a(){this._queue=[],this._draining=!1,this._currentQueue=null,this._queueIndex=-1}return a.prototype.push=function(a){var b=this;1!==this._queue.push(a)||this._draining||setTimeout(function(){return b._drainQueue()},0)},a.prototype._cleanUpNextTick=function(){this._draining=!1,this._currentQueue&&this._currentQueue.length?this._queue=this._currentQueue.concat(this._queue):this._queueIndex=-1,this._queue.length&&this._drainQueue()},a.prototype._drainQueue=function(){var a=this;if(!this._draining){var b=setTimeout(function(){return a._cleanUpNextTick()});this._draining=!0;for(var c=this._queue.length;c;){for(this._currentQueue=this._queue,this._queue=[];++this._queueIndex0&&(this._waitingForWrites=this.push(this._bufferedWrites.shift()),this._waitingForWrites););},b}(e.Duplex);b.exports=f}).call(this,a("bfs-buffer").Buffer)},{"bfs-buffer":2,stream:34}],14:[function(a,b,c){},{}],15:[function(a,b,c){(function(b){"use strict";var d=a("buffer"),e=d.Buffer,f=d.SlowBuffer,g=d.kMaxLength||2147483647;c.alloc=function(a,b,c){if("function"==typeof e.alloc)return e.alloc(a,b,c);if("number"==typeof c)throw new TypeError("encoding must not be number");if("number"!=typeof a)throw new TypeError("size must be a number");if(a>g)throw new RangeError("size is too large");var d=c,f=b;void 0===f&&(d=void 0,f=0);var h=new e(a);if("string"==typeof f)for(var i=new e(f,d),j=i.length,k=-1;++kg)throw new RangeError("size is too large");return new e(a)},c.from=function(a,c,d){if("function"==typeof e.from&&(!b.Uint8Array||Uint8Array.from!==e.from))return e.from(a,c,d);if("number"==typeof a)throw new TypeError('"value" argument must not be a number');if("string"==typeof a)return new e(a,c);if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer){var f=c;if(1===arguments.length)return new e(a);"undefined"==typeof f&&(f=0);var g=d;if("undefined"==typeof g&&(g=a.byteLength-f),f>=a.byteLength)throw new RangeError("'offset' is out of bounds");if(g>a.byteLength-f)throw new RangeError("'length' is out of bounds");return new e(a.slice(f,f+g))}if(e.isBuffer(a)){var h=new e(a.length);return a.copy(h,0,0,a.length),h}if(a){if(Array.isArray(a)||"undefined"!=typeof ArrayBuffer&&a.buffer instanceof ArrayBuffer||"length"in a)return new e(a);if("Buffer"===a.type&&Array.isArray(a.data))return new e(a.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},c.allocUnsafeSlow=function(a){if("function"==typeof e.allocUnsafeSlow)return e.allocUnsafeSlow(a);if("number"!=typeof a)throw new TypeError("size must be a number");if(a>=g)throw new RangeError("size is too large");return new f(a)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{buffer:2}],16:[function(a,b,c){(function(a){function b(a){return Array.isArray?Array.isArray(a):"[object Array]"===q(a)}function d(a){return"boolean"==typeof a}function e(a){return null===a}function f(a){return null==a}function g(a){return"number"==typeof a}function h(a){return"string"==typeof a}function i(a){return"symbol"==typeof a}function j(a){return void 0===a}function k(a){return"[object RegExp]"===q(a)}function l(a){return"object"==typeof a&&null!==a}function m(a){return"[object Date]"===q(a)}function n(a){return"[object Error]"===q(a)||a instanceof Error}function o(a){return"function"==typeof a}function p(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function q(a){return Object.prototype.toString.call(a)}c.isArray=b,c.isBoolean=d,c.isNull=e,c.isNullOrUndefined=f,c.isNumber=g,c.isString=h,c.isSymbol=i,c.isUndefined=j,c.isRegExp=k,c.isObject=l,c.isDate=m,c.isError=n,c.isFunction=o,c.isPrimitive=p,c.isBuffer=a.isBuffer}).call(this,{isBuffer:a("../../is-buffer/index.js")})},{"../../is-buffer/index.js":19}],17:[function(a,b,c){function d(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function e(a){return"function"==typeof a}function f(a){return"number"==typeof a}function g(a){return"object"==typeof a&&null!==a}function h(a){return void 0===a}b.exports=d,d.EventEmitter=d,d.prototype._events=void 0,d.prototype._maxListeners=void 0,d.defaultMaxListeners=10,d.prototype.setMaxListeners=function(a){if(!f(a)||a<0||isNaN(a))throw TypeError("n must be a positive number");return this._maxListeners=a,this},d.prototype.emit=function(a){var b,c,d,f,i,j;if(this._events||(this._events={}),"error"===a&&(!this._events.error||g(this._events.error)&&!this._events.error.length)){if(b=arguments[1],b instanceof Error)throw b;var k=new Error('Uncaught, unspecified "error" event. ('+b+")");throw k.context=b,k}if(c=this._events[a],h(c))return!1;if(e(c))switch(arguments.length){case 1:c.call(this);break;case 2:c.call(this,arguments[1]);break;case 3:c.call(this,arguments[1],arguments[2]);break;default:f=Array.prototype.slice.call(arguments,1),c.apply(this,f)}else if(g(c))for(f=Array.prototype.slice.call(arguments,1),j=c.slice(),d=j.length,i=0;i0&&this._events[a].length>c&&(this._events[a].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[a].length),"function"==typeof console.trace&&console.trace())),this},d.prototype.on=d.prototype.addListener,d.prototype.once=function(a,b){function c(){this.removeListener(a,c),d||(d=!0,b.apply(this,arguments))}if(!e(b))throw TypeError("listener must be a function");var d=!1;return c.listener=b,this.on(a,c),this},d.prototype.removeListener=function(a,b){var c,d,f,h;if(!e(b))throw TypeError("listener must be a function");if(!this._events||!this._events[a])return this;if(c=this._events[a],f=c.length,d=-1,c===b||e(c.listener)&&c.listener===b)delete this._events[a],this._events.removeListener&&this.emit("removeListener",a,b);else if(g(c)){for(h=f;h-- >0;)if(c[h]===b||c[h].listener&&c[h].listener===b){d=h;break}if(d<0)return this;1===c.length?(c.length=0,delete this._events[a]):c.splice(d,1),this._events.removeListener&&this.emit("removeListener",a,b)}return this},d.prototype.removeAllListeners=function(a){var b,c;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[a]&&delete this._events[a],this;if(0===arguments.length){for(b in this._events)"removeListener"!==b&&this.removeAllListeners(b);return this.removeAllListeners("removeListener"),this._events={},this}if(c=this._events[a],e(c))this.removeListener(a,c);else if(c)for(;c.length;)this.removeListener(a,c[c.length-1]);return delete this._events[a],this},d.prototype.listeners=function(a){var b;return b=this._events&&this._events[a]?e(this._events[a])?[this._events[a]]:this._events[a].slice():[]},d.prototype.listenerCount=function(a){if(this._events){var b=this._events[a];if(e(b))return 1;if(b)return b.length}return 0},d.listenerCount=function(a,b){return a.listenerCount(b)}},{}],18:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:b.exports=function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],19:[function(a,b,c){function d(a){return!!a.constructor&&"function"==typeof a.constructor.isBuffer&&a.constructor.isBuffer(a)}function e(a){return"function"==typeof a.readFloatLE&&"function"==typeof a.slice&&d(a.slice(0,0))}b.exports=function(a){return null!=a&&(d(a)||e(a)||!!a._isBuffer)}},{}],20:[function(b,c,d){(function(e){!function(b){if("object"==typeof d&&"undefined"!=typeof c)c.exports=b();else if("function"==typeof a&&a.amd)a([],b);else{var f;f="undefined"!=typeof window?window:"undefined"!=typeof e?e:"undefined"!=typeof self?self:this,f.pako=b()}}(function(){return function a(c,d,e){function f(h,i){if(!d[h]){if(!c[h]){var j="function"==typeof b&&b;if(!i&&j)return j(h,!0);if(g)return g(h,!0);var k=new Error("Cannot find module '"+h+"'");throw k.code="MODULE_NOT_FOUND",k}var l=d[h]={exports:{}};c[h][0].call(l.exports,function(a){var b=c[h][1][a];return f(b?b:a)},l,l.exports,a,c,d,e)}return d[h].exports}for(var g="function"==typeof b&&b,h=0;h=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;h[254]=h[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;c4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&c1?j[e++]=65533:f<65536?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+h[a[c]]>b?c:b}},{"./common":1}],3:[function(a,b,c){"use strict";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],4:[function(a,b,c){"use strict";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;h>>8^e[255&(a^b[h])];return a^-1}var f=d();b.exports=e},{}],6:[function(a,b,c){"use strict";function d(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=d},{}],7:[function(a,b,c){"use strict";var d=30,e=12;b.exports=function(a,b){var c,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;c=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=c.dmax,l=c.wsize,m=c.whave,n=c.wnext,o=c.window,p=c.hold,q=c.bits,r=c.lencode,s=c.distcode,t=(1<>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<>>=w,q-=w),q<15&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<k){a.msg="invalid distance too far back",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg="invalid distance too far back",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,w2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(f>3,f-=x,q-=x<<3,p&=(1<>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,b<0?(c=0,b=-b):(c=(b>>4)+1,b<48&&(b&=15)),b&&(b<8||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;b<144;)a.lens[b++]=8;for(;b<256;)a.lens[b++]=9;for(;b<280;)a.lens[b++]=7;for(;b<288;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;b<32;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=ma;break}if((15&m)!==K){a.msg="unknown compression method",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=ma;break}c.dmax=1<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&q>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ja;break}for(;n<3;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg="invalid block type",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;n<32;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;n<14;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.have>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;n>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;n>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;n>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg="invalid literal/length code",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;n>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;n>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;n<32;){if(0===i)break a;i--,m|=e[g++]<=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;F0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;Df||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":1}],10:[function(a,b,c){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(a,b,c){"use strict";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}],"/lib/inflate.js":[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a("./zlib/inflate"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/constants"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=a("./zlib/gzheader"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,"string"==typeof a?m.input=i.binstring2buf(a):"[object ArrayBuffer]"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l="string"==typeof p?i.string2buf(p):"[object ArrayBuffer]"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0!==m.avail_out&&c!==j.Z_STREAM_END&&(0!==m.avail_in||d!==j.Z_FINISH&&d!==j.Z_SYNC_FLUSH)||("string"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out)))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d!==j.Z_SYNC_FLUSH||(this.onEnd(j.Z_OK),m.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],21:[function(a,b,c){(function(a){"use strict";function c(b,c,d,e){if("function"!=typeof b)throw new TypeError('"callback" argument must be a function');var f,g,h=arguments.length;switch(h){case 0:case 1:return a.nextTick(b);case 2:return a.nextTick(function(){b.call(null,c)});case 3:return a.nextTick(function(){b.call(null,c,d)});case 4:return a.nextTick(function(){b.call(null,c,d,e)});default: -for(f=new Array(h-1),g=0;g0)if(b.ended&&!e){var g=new Error("stream.push() after EOF");a.emit("error",g)}else if(b.endEmitted&&e){var i=new Error("stream.unshift() after end event");a.emit("error",i)}else{var j;!b.decoder||e||d||(c=b.decoder.write(c),j=!b.objectMode&&0===c.length),e||(b.reading=!1),j||(b.flowing&&0===b.length&&!b.sync?(a.emit("data",c),a.read(0)):(b.length+=b.objectMode?1:c.length,e?b.buffer.unshift(c):b.buffer.push(c),b.needReadable&&m(a))),o(a,b)}else e||(b.reading=!1);return h(b)}function h(a){return!a.ended&&(a.needReadable||a.length=P?a=P:(a--,a|=a>>>1,a|=a>>>2,a|=a>>>4,a|=a>>>8,a|=a>>>16,a++),a}function j(a,b){return a<=0||0===b.length&&b.ended?0:b.objectMode?1:a!==a?b.flowing&&b.length?b.buffer.head.data.length:b.length:(a>b.highWaterMark&&(b.highWaterMark=i(a)),a<=b.length?a:b.ended?b.length:(b.needReadable=!0,0))}function k(a,b){var c=null;return H.isBuffer(b)||"string"==typeof b||null===b||void 0===b||a.objectMode||(c=new TypeError("Invalid non-string/buffer chunk")),c}function l(a,b){if(!b.ended){if(b.decoder){var c=b.decoder.end();c&&c.length&&(b.buffer.push(c),b.length+=b.objectMode?1:c.length)}b.ended=!0,m(a)}}function m(a){var b=a._readableState;b.needReadable=!1,b.emittedReadable||(L("emitReadable",b.flowing),b.emittedReadable=!0,b.sync?D(n,a):n(a))}function n(a){L("emit readable"),a.emit("readable"),u(a)}function o(a,b){b.readingMore||(b.readingMore=!0,D(p,a,b))}function p(a,b){for(var c=b.length;!b.reading&&!b.flowing&&!b.ended&&b.length=b.length?(c=b.decoder?b.buffer.join(""):1===b.buffer.length?b.buffer.head.data:b.buffer.concat(b.length),b.buffer.clear()):c=w(a,b.buffer,b.decoder),c}function w(a,b,c){var d;return af.length?f.length:a;if(e+=g===f.length?f:f.slice(0,a),a-=g,0===a){g===f.length?(++d,c.next?b.head=c.next:b.head=b.tail=null):(b.head=c,c.data=f.slice(g));break}++d}return b.length-=d,e}function y(a,b){var c=I.allocUnsafe(a),d=b.head,e=1;for(d.data.copy(c),a-=d.data.length;d=d.next;){var f=d.data,g=a>f.length?f.length:a;if(f.copy(c,c.length-a,0,g),a-=g,0===a){g===f.length?(++e,d.next?b.head=d.next:b.head=b.tail=null):(b.head=d,d.data=f.slice(g));break}++e}return b.length-=e,c}function z(a){var b=a._readableState;if(b.length>0)throw new Error('"endReadable()" called on non-empty stream');b.endEmitted||(b.ended=!0,D(A,b,a))}function A(a,b){a.endEmitted||0!==a.length||(a.endEmitted=!0,b.readable=!1,b.emit("end"))}function B(a,b){for(var c=0,d=a.length;c=b.highWaterMark||b.ended))return L("read: emitReadable",b.length,b.ended),0===b.length&&b.ended?z(this):m(this),null;if(a=j(a,b),0===a&&b.ended)return 0===b.length&&z(this),null;var d=b.needReadable;L("need readable",d),(0===b.length||b.length-a0?v(a,b):null,null===e?(b.needReadable=!0,a=0):b.length-=a,0===b.length&&(b.ended||(b.needReadable=!0),c!==a&&b.ended&&z(this)),null!==e&&this.emit("data",e),e},f.prototype._read=function(a){this.emit("error",new Error("not implemented"))},f.prototype.pipe=function(a,b){function e(a){L("onunpipe"),a===m&&g()}function f(){L("onend"),a.end()}function g(){L("cleanup"),a.removeListener("close",j),a.removeListener("finish",k),a.removeListener("drain",r),a.removeListener("error",i),a.removeListener("unpipe",e),m.removeListener("end",f),m.removeListener("end",g),m.removeListener("data",h),s=!0,!n.awaitDrain||a._writableState&&!a._writableState.needDrain||r()}function h(b){L("ondata"),t=!1;var c=a.write(b);!1!==c||t||((1===n.pipesCount&&n.pipes===a||n.pipesCount>1&&C(n.pipes,a)!==-1)&&!s&&(L("false write response, pause",m._readableState.awaitDrain),m._readableState.awaitDrain++,t=!0),m.pause())}function i(b){L("onerror",b),l(),a.removeListener("error",i),0===G(a,"error")&&a.emit("error",b)}function j(){a.removeListener("finish",k),l()}function k(){L("onfinish"),a.removeListener("close",j),l()}function l(){L("unpipe"),m.unpipe(a)}var m=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=a;break;case 1:n.pipes=[n.pipes,a];break;default:n.pipes.push(a)}n.pipesCount+=1,L("pipe count=%d opts=%j",n.pipesCount,b);var o=(!b||b.end!==!1)&&a!==c.stdout&&a!==c.stderr,p=o?f:g;n.endEmitted?D(p):m.once("end",p),a.on("unpipe",e);var r=q(m);a.on("drain",r);var s=!1,t=!1;return m.on("data",h),d(a,"error",i),a.once("close",j),a.once("finish",k),a.emit("pipe",m),n.flowing||(L("pipe resume"),m.resume()),a},f.prototype.unpipe=function(a){var b=this._readableState;if(0===b.pipesCount)return this;if(1===b.pipesCount)return a&&a!==b.pipes?this:(a||(a=b.pipes),b.pipes=null,b.pipesCount=0,b.flowing=!1,a&&a.emit("unpipe",this),this);if(!a){var c=b.pipes,d=b.pipesCount;b.pipes=null,b.pipesCount=0,b.flowing=!1;for(var e=0;e-1?setImmediate:x;g.WritableState=f;var z=a("core-util-is");z.inherits=a("inherits");var A,B={deprecate:a("util-deprecate")};!function(){try{A=a("stream")}catch(a){}finally{A||(A=a("events").EventEmitter)}}();var C=a("buffer").Buffer,D=a("buffer-shims");z.inherits(g,A);var E;f.prototype.getBuffer=function(){for(var a=this.bufferedRequest,b=[];a;)b.push(a),a=a.next;return b},function(){try{Object.defineProperty(f.prototype,"buffer",{get:B.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(a){}}();var E;g.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},g.prototype.write=function(a,b,c){var e=this._writableState,f=!1;return"function"==typeof b&&(c=b,b=null),C.isBuffer(a)?b="buffer":b||(b=e.defaultEncoding),"function"!=typeof c&&(c=d),e.ended?h(this,c):i(this,e,a,c)&&(e.pendingcb++,f=k(this,e,a,b,c)),f},g.prototype.cork=function(){var a=this._writableState;a.corked++},g.prototype.uncork=function(){var a=this._writableState;a.corked&&(a.corked--,a.writing||a.corked||a.finished||a.bufferProcessing||!a.bufferedRequest||r(this,a))},g.prototype.setDefaultEncoding=function(a){if("string"==typeof a&&(a=a.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((a+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+a);return this._writableState.defaultEncoding=a,this},g.prototype._write=function(a,b,c){c(new Error("not implemented"))},g.prototype._writev=null,g.prototype.end=function(a,b,c){var d=this._writableState;"function"==typeof a?(c=a,a=null,b=null):"function"==typeof b&&(c=b,b=null),null!==a&&void 0!==a&&this.write(a,b),d.corked&&(d.corked=1,this.uncork()),d.ending||d.finished||v(this,d,c)}}).call(this,a("bfs-process"))},{"./_stream_duplex":23,"bfs-process":11,buffer:2,"buffer-shims":15,"core-util-is":16,events:17,inherits:18,"process-nextick-args":21,"util-deprecate":36}],28:[function(a,b,c){"use strict";function d(){this.head=null,this.tail=null,this.length=0}var e=(a("buffer").Buffer,a("buffer-shims"));b.exports=d,d.prototype.push=function(a){var b={data:a,next:null};this.length>0?this.tail.next=b:this.head=b,this.tail=b,++this.length},d.prototype.unshift=function(a){var b={data:a,next:this.head};0===this.length&&(this.tail=b),this.head=b,++this.length},d.prototype.shift=function(){if(0!==this.length){var a=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,a}},d.prototype.clear=function(){this.head=this.tail=null,this.length=0},d.prototype.join=function(a){if(0===this.length)return"";for(var b=this.head,c=""+b.data;b=b.next;)c+=a+b.data;return c},d.prototype.concat=function(a){if(0===this.length)return e.alloc(0);if(1===this.length)return this.head.data;for(var b=e.allocUnsafe(a>>>0),c=this.head,d=0;c;)c.data.copy(b,d),d+=c.data.length,c=c.next;return b}},{buffer:2,"buffer-shims":15}],29:[function(a,b,c){var d={}.toString;b.exports=Array.isArray||function(a){return"[object Array]"==d.call(a)}},{}],30:[function(a,b,c){b.exports=a("./lib/_stream_passthrough.js")},{"./lib/_stream_passthrough.js":24}],31:[function(a,b,c){(function(d){var e=function(){try{return a("stream")}catch(a){}}();c=b.exports=a("./lib/_stream_readable.js"),c.Stream=e||c,c.Readable=c,c.Writable=a("./lib/_stream_writable.js"),c.Duplex=a("./lib/_stream_duplex.js"),c.Transform=a("./lib/_stream_transform.js"),c.PassThrough=a("./lib/_stream_passthrough.js"),!d.browser&&"disable"===d.env.READABLE_STREAM&&e&&(b.exports=e)}).call(this,a("bfs-process"))},{"./lib/_stream_duplex.js":23,"./lib/_stream_passthrough.js":24,"./lib/_stream_readable.js":25,"./lib/_stream_transform.js":26,"./lib/_stream_writable.js":27,"bfs-process":11}],32:[function(a,b,c){b.exports=a("./lib/_stream_transform.js")},{"./lib/_stream_transform.js":26}],33:[function(a,b,c){b.exports=a("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":27}],34:[function(a,b,c){function d(){e.call(this)}b.exports=d;var e=a("events").EventEmitter,f=a("inherits");f(d,e),d.Readable=a("readable-stream/readable.js"),d.Writable=a("readable-stream/writable.js"),d.Duplex=a("readable-stream/duplex.js"),d.Transform=a("readable-stream/transform.js"),d.PassThrough=a("readable-stream/passthrough.js"),d.Stream=d,d.prototype.pipe=function(a,b){function c(b){a.writable&&!1===a.write(b)&&j.pause&&j.pause()}function d(){j.readable&&j.resume&&j.resume()}function f(){k||(k=!0,a.end())}function g(){k||(k=!0,"function"==typeof a.destroy&&a.destroy())}function h(a){if(i(),0===e.listenerCount(this,"error"))throw a}function i(){j.removeListener("data",c),a.removeListener("drain",d),j.removeListener("end",f),j.removeListener("close",g),j.removeListener("error",h),a.removeListener("error",h),j.removeListener("end",i),j.removeListener("close",i),a.removeListener("close",i)}var j=this;j.on("data",c),a.on("drain",d),a._isStdio||b&&b.end===!1||(j.on("end",f),j.on("close",g));var k=!1;return j.on("error",h),a.on("error",h),j.on("end",i),j.on("close",i),a.on("close",i),a.emit("pipe",j),a}},{events:17,inherits:18,"readable-stream/duplex.js":22,"readable-stream/passthrough.js":30,"readable-stream/readable.js":31,"readable-stream/transform.js":32,"readable-stream/writable.js":33}],35:[function(a,b,c){function d(a){if(a&&!i(a))throw new Error("Unknown encoding: "+a)}function e(a){return a.toString(this.encoding)}function f(a){this.charReceived=a.length%2,this.charLength=this.charReceived?2:0}function g(a){this.charReceived=a.length%3,this.charLength=this.charReceived?3:0}var h=a("buffer").Buffer,i=h.isEncoding||function(a){switch(a&&a.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},j=c.StringDecoder=function(a){switch(this.encoding=(a||"utf8").toLowerCase().replace(/[-_]/,""),d(a),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=f;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=g;break;default:return void(this.write=e)}this.charBuffer=new h(6),this.charReceived=0,this.charLength=0};j.prototype.write=function(a){for(var b="";this.charLength;){var c=a.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:a.length;if(a.copy(this.charBuffer,this.charReceived,0,c),this.charReceived+=c,this.charReceived=55296&&d<=56319)){if(this.charReceived=this.charLength=0,0===a.length)return b;break}this.charLength+=this.surrogateSize,b=""}this.detectIncompleteChar(a);var e=a.length;this.charLength&&(a.copy(this.charBuffer,0,a.length-this.charReceived,e),e-=this.charReceived),b+=a.toString(this.encoding,0,e);var e=b.length-1,d=b.charCodeAt(e);if(d>=55296&&d<=56319){var f=this.surrogateSize;return this.charLength+=f,this.charReceived+=f,this.charBuffer.copy(this.charBuffer,f,0,f),a.copy(this.charBuffer,0,0,f),b.substring(0,e)}return b},j.prototype.detectIncompleteChar=function(a){for(var b=a.length>=3?3:a.length;b>0;b--){var c=a[a.length-b];if(1==b&&c>>5==6){this.charLength=2;break}if(b<=2&&c>>4==14){this.charLength=3;break}if(b<=3&&c>>3==30){this.charLength=4;break}}this.charReceived=b},j.prototype.end=function(a){var b="";if(a&&a.length&&(b=this.write(a)),this.charReceived){var c=this.charReceived,d=this.charBuffer,e=this.encoding;b+=d.slice(0,c).toString(e)}return b}},{buffer:2}],36:[function(a,b,c){(function(a){function c(a,b){function c(){if(!e){if(d("throwDeprecation"))throw new Error(b);d("traceDeprecation")?console.trace(b):console.warn(b),e=!0}return a.apply(this,arguments)}if(d("noDeprecation"))return a;var e=!1;return c}function d(b){try{if(!a.localStorage)return!1}catch(a){return!1}var c=a.localStorage[b];return null!=c&&"true"===String(c).toLowerCase()}b.exports=c}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],37:[function(a,b,c){"use strict";var d=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},e=a("../core/file_system"),f=a("../core/api_error"),g=a("../core/file_flag"),h=a("../generic/preload_file"),i=a("path"),j=function(a){function b(b,c,d,e,f){a.call(this,b,c,d,e,f)}return d(b,a),b.prototype.syncSync=function(){this.isDirty()&&(this._fs._syncSync(this),this.resetDirty())},b.prototype.closeSync=function(){this.syncSync()},b}(h.PreloadFile),k=function(a){function b(b,c){if(a.call(this),this._queue=[],this._queueRunning=!1,this._isInitialized=!1,this._initializeCallbacks=[],this._sync=b,this._async=c,!b.supportsSynch())throw new Error("The first argument to AsyncMirror needs to be a synchronous file system.")}return d(b,a),b.prototype.getName=function(){return"AsyncMirror"},b.isAvailable=function(){return!0},b.prototype._syncSync=function(a){this._sync.writeFileSync(a.getPath(),a.getBuffer(),null,g.FileFlag.getFileFlag("w"),a.getStats().mode),this.enqueueOp({apiMethod:"writeFile",arguments:[a.getPath(),a.getBuffer(),null,a.getFlag(),a.getStats().mode]})},b.prototype.initialize=function(a){var b=this,c=this._initializeCallbacks,d=function(a){b._isInitialized=!a,b._initializeCallbacks=[],c.forEach(function(b){return b(a)})};if(this._isInitialized)a();else if(1===c.push(a)){var e=function(a,c,d){"/"!==a&&b._sync.mkdirSync(a,c),b._async.readdir(a,function(b,c){function e(b){b?d(b):f0){var d=b._queue.shift(),e=d.arguments;e.push(c),b._async[d.apiMethod].apply(b._async,e)}else b._queueRunning=!1};c()}},b.prototype.renameSync=function(a,b){this.checkInitialized(),this._sync.renameSync(a,b),this.enqueueOp({apiMethod:"rename",arguments:[a,b]})},b.prototype.statSync=function(a,b){return this.checkInitialized(),this._sync.statSync(a,b)},b.prototype.openSync=function(a,b,c){this.checkInitialized();var d=this._sync.openSync(a,b,c);return d.closeSync(),new j(this,a,b,this._sync.statSync(a,!1),this._sync.readFileSync(a,null,g.FileFlag.getFileFlag("r")))},b.prototype.unlinkSync=function(a){this.checkInitialized(),this._sync.unlinkSync(a),this.enqueueOp({apiMethod:"unlink",arguments:[a]})},b.prototype.rmdirSync=function(a){this.checkInitialized(),this._sync.rmdirSync(a),this.enqueueOp({apiMethod:"rmdir",arguments:[a]})},b.prototype.mkdirSync=function(a,b){this.checkInitialized(),this._sync.mkdirSync(a,b),this.enqueueOp({apiMethod:"mkdir",arguments:[a,b]})},b.prototype.readdirSync=function(a){return this.checkInitialized(),this._sync.readdirSync(a)},b.prototype.existsSync=function(a){return this.checkInitialized(),this._sync.existsSync(a)},b.prototype.chmodSync=function(a,b,c){this.checkInitialized(),this._sync.chmodSync(a,b,c),this.enqueueOp({apiMethod:"chmod",arguments:[a,b,c]})},b.prototype.chownSync=function(a,b,c,d){this.checkInitialized(),this._sync.chownSync(a,b,c,d),this.enqueueOp({apiMethod:"chown",arguments:[a,b,c,d]})},b.prototype.utimesSync=function(a,b,c){this.checkInitialized(),this._sync.utimesSync(a,b,c),this.enqueueOp({apiMethod:"utimes",arguments:[a,b,c]})},b}(e.SynchronousFileSystem);c.__esModule=!0,c.default=k},{"../core/api_error":52,"../core/file_flag":56,"../core/file_system":57,"../generic/preload_file":68,path:10}],38:[function(a,b,c){(function(b){"use strict";function d(){null===p&&(p={},p[Dropbox.ApiError.NETWORK_ERROR]=l.ErrorCode.EIO,p[Dropbox.ApiError.INVALID_PARAM]=l.ErrorCode.EINVAL,p[Dropbox.ApiError.INVALID_TOKEN]=l.ErrorCode.EPERM,p[Dropbox.ApiError.OAUTH_ERROR]=l.ErrorCode.EPERM,p[Dropbox.ApiError.NOT_FOUND]=l.ErrorCode.ENOENT,p[Dropbox.ApiError.INVALID_METHOD]=l.ErrorCode.EINVAL,p[Dropbox.ApiError.NOT_ACCEPTABLE]=l.ErrorCode.EINVAL,p[Dropbox.ApiError.CONFLICT]=l.ErrorCode.EINVAL,p[Dropbox.ApiError.RATE_LIMITED]=l.ErrorCode.EBUSY,p[Dropbox.ApiError.SERVER_ERROR]=l.ErrorCode.EBUSY,p[Dropbox.ApiError.OVER_QUOTA]=l.ErrorCode.ENOSPC)}function e(a){return a&&a.stat.isFile}function f(a){return a&&a.stat.isFolder}function g(a){return null===a||void 0===a||"object"==typeof a&&"number"==typeof a.byteLength}var h=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},i=a("../generic/preload_file"),j=a("../core/file_system"),k=a("../core/node_fs_stats"),l=a("../core/api_error"),m=a("async"),n=a("path"),o=a("../core/util"),p=null,q=function(){function a(a){this._cache={},this._client=a}return a.prototype.getCachedInfo=function(a){return this._cache[a.toLowerCase()]},a.prototype.putCachedInfo=function(a,b){this._cache[a.toLowerCase()]=b},a.prototype.deleteCachedInfo=function(a){delete this._cache[a.toLowerCase()]},a.prototype.getCachedDirInfo=function(a){var b=this.getCachedInfo(a);return f(b)?b:null},a.prototype.getCachedFileInfo=function(a){var b=this.getCachedInfo(a);return e(b)?b:null},a.prototype.updateCachedDirInfo=function(a,b,c){void 0===c&&(c=null);var d=this.getCachedInfo(a);null===b.contentHash||void 0!==d&&d.stat.contentHash===b.contentHash||this.putCachedInfo(a,{stat:b,contents:c})},a.prototype.updateCachedFileInfo=function(a,b,c){ -void 0===c&&(c=null);var d=this.getCachedInfo(a);null===b.versionTag||void 0!==d&&d.stat.versionTag===b.versionTag||this.putCachedInfo(a,{stat:b,contents:c})},a.prototype.updateCachedInfo=function(a,b,c){void 0===c&&(c=null),b.isFile&&g(c)?this.updateCachedFileInfo(a,b,c):b.isFolder&&Array.isArray(c)&&this.updateCachedDirInfo(a,b,c)},a.prototype.readdir=function(a,b){var c=this,d=this.getCachedDirInfo(a);this._wrap(function(b){null!==d&&d.contents?c._client.readdir(a,{contentHash:d.stat.contentHash},b):c._client.readdir(a,b)},function(e,f,g,h){e?e.status===Dropbox.ApiError.NO_CONTENT&&null!==d?b(null,d.contents.slice(0)):b(e):(c.updateCachedDirInfo(a,g,f.slice(0)),h.forEach(function(b){c.updateCachedInfo(n.join(a,b.name),b)}),b(null,f))})},a.prototype.remove=function(a,b){var c=this;this._wrap(function(b){c._client.remove(a,b)},function(d,e){d||c.updateCachedInfo(a,e),b(d)})},a.prototype.move=function(a,b,c){var d=this;this._wrap(function(c){d._client.move(a,b,c)},function(e,f){e||(d.deleteCachedInfo(a),d.updateCachedInfo(b,f)),c(e)})},a.prototype.stat=function(a,b){var c=this;this._wrap(function(b){c._client.stat(a,b)},function(d,e){d||c.updateCachedInfo(a,e),b(d,e)})},a.prototype.readFile=function(a,b){var c=this,d=this.getCachedFileInfo(a);null!==d&&null!==d.contents?this.stat(a,function(e,f){e?b(e):f.contentHash===d.stat.contentHash?b(e,d.contents.slice(0),d.stat):c.readFile(a,b)}):this._wrap(function(b){c._client.readFile(a,{arrayBuffer:!0},b)},function(d,e,f){d||c.updateCachedInfo(a,f,e.slice(0)),b(d,e,f)})},a.prototype.writeFile=function(a,b,c){var d=this;this._wrap(function(c){d._client.writeFile(a,b,c)},function(e,f){e||d.updateCachedInfo(a,f,b.slice(0)),c(e,f)})},a.prototype.mkdir=function(a,b){var c=this;this._wrap(function(b){c._client.mkdir(a,b)},function(d,e){d||c.updateCachedInfo(a,e,[]),b(d)})},a.prototype._wrap=function(a,b){var c=0,d=function(e){var f=2;if(e&&3>++c)switch(e.status){case Dropbox.ApiError.SERVER_ERROR:case Dropbox.ApiError.NETWORK_ERROR:case Dropbox.ApiError.RATE_LIMITED:setTimeout(function(){a(d)},1e3*f);break;default:b.apply(null,arguments)}else b.apply(null,arguments)};a(d)},a}(),r=function(a){function b(b,c,d,e,f){a.call(this,b,c,d,e,f)}return h(b,a),b.prototype.sync=function(a){var b=this;if(this.isDirty()){var c=this.getBuffer(),d=o.buffer2ArrayBuffer(c);this._fs._writeFileStrict(this.getPath(),d,function(c){c||b.resetDirty(),a(c)})}else a()},b.prototype.close=function(a){this.sync(a)},b}(i.PreloadFile);c.DropboxFile=r;var s=function(a){function c(b){a.call(this),this._client=new q(b),d()}return h(c,a),c.prototype.getName=function(){return"Dropbox"},c.isAvailable=function(){return"undefined"!=typeof Dropbox},c.prototype.isReadOnly=function(){return!1},c.prototype.supportsSymlinks=function(){return!1},c.prototype.supportsProps=function(){return!1},c.prototype.supportsSynch=function(){return!1},c.prototype.empty=function(a){var b=this;this._client.readdir("/",function(c,d){if(c)a(b.convert(c,"/"));else{var e=function(a,c){var d=n.join("/",a);b._client.remove(d,function(a){c(a?b.convert(a,d):null)})},f=function(b){b?a(b):a()};m.each(d,e,f)}})},c.prototype.rename=function(a,b,c){var d=this;this._client.move(a,b,function(e){e?d._client.stat(b,function(f,g){if(f||g.isFolder){var h=e.response.error.indexOf(a)>-1?a:b;c(d.convert(e,h))}else d._client.remove(b,function(e){e?c(d.convert(e,b)):d.rename(a,b,c)})}):c()})},c.prototype.stat=function(a,b,c){var d=this;this._client.stat(a,function(b,e){if(b)c(d.convert(b,a));else{if(null==e||!e.isRemoved){var f=new k.default(d._statType(e),e.size);return c(null,f)}c(l.ApiError.FileError(l.ErrorCode.ENOENT,a))}})},c.prototype.open=function(a,c,d,e){var f=this;this._client.readFile(a,function(d,g,h){if(!d){var i;i=null===g?new b(0):o.arrayBuffer2Buffer(g);var j=f._makeFile(a,c,h,i);return e(null,j)}if(c.isReadable())e(f.convert(d,a));else switch(d.status){case Dropbox.ApiError.NOT_FOUND:var k=new ArrayBuffer(0);return f._writeFileStrict(a,k,function(b,d){if(b)e(b);else{var g=f._makeFile(a,c,d,o.arrayBuffer2Buffer(k));e(null,g)}});default:return e(f.convert(d,a))}})},c.prototype._writeFileStrict=function(a,b,c){var d=this,e=n.dirname(a);this.stat(e,!1,function(f,g){f?c(l.ApiError.FileError(l.ErrorCode.ENOENT,e)):d._client.writeFile(a,b,function(b,e){b?c(d.convert(b,a)):c(null,e)})})},c.prototype._statType=function(a){return a.isFile?k.FileType.FILE:k.FileType.DIRECTORY},c.prototype._makeFile=function(a,b,c,d){var e=this._statType(c),f=new k.default(e,c.size);return new r(this,a,b,f,d)},c.prototype._remove=function(a,b,c){var d=this;this._client.stat(a,function(e,f){e?b(d.convert(e,a)):f.isFile&&!c?b(l.ApiError.FileError(l.ErrorCode.ENOTDIR,a)):!f.isFile&&c?b(l.ApiError.FileError(l.ErrorCode.EISDIR,a)):d._client.remove(a,function(c){b(c?d.convert(c,a):null)})})},c.prototype.unlink=function(a,b){this._remove(a,b,!0)},c.prototype.rmdir=function(a,b){this._remove(a,b,!1)},c.prototype.mkdir=function(a,b,c){var d=this,e=n.dirname(a);this._client.stat(e,function(b,f){b?c(d.convert(b,e)):d._client.mkdir(a,function(b){c(b?l.ApiError.FileError(l.ErrorCode.EEXIST,a):null)})})},c.prototype.readdir=function(a,b){var c=this;this._client.readdir(a,function(a,d){return a?b(c.convert(a)):b(null,d)})},c.prototype.convert=function(a,b){void 0===b&&(b=null);var c=p[a.status];return void 0===c&&(c=l.ErrorCode.EIO),null==b?new l.ApiError(c):l.ApiError.FileError(c,b)},c}(j.BaseFileSystem);c.__esModule=!0,c.default=s}).call(this,a("bfs-buffer").Buffer)},{"../core/api_error":52,"../core/file_system":57,"../core/node_fs_stats":60,"../core/util":61,"../generic/preload_file":68,async:1,"bfs-buffer":2,path:10}],39:[function(a,b,c){(function(b){"use strict";function d(a,b){void 0===b&&(b="");for(var c=a.errno,d=a.node,e=[];d&&(e.unshift(d.name),d!==d.parent);)d=d.parent;return new j.ApiError(c,j.ErrorStrings[c],e.length>0?"/"+e.join("/"):b)}var e=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},f=a("../core/file_system"),g=a("../core/node_fs_stats"),h=a("../core/file"),i=a("../core/util"),j=a("../core/api_error"),k=function(a){function b(b,c,d,e,f){a.call(this),this._fs=b,this._FS=c,this._path=d,this._flag=e,this._stream=f}return e(b,a),b.prototype.getPos=function(){},b.prototype.close=function(a){var b=null;try{this.closeSync()}catch(a){b=a}finally{a(b)}},b.prototype.closeSync=function(){try{this._FS.close(this._stream)}catch(a){throw d(a,this._path)}},b.prototype.stat=function(a){try{a(null,this.statSync())}catch(b){a(b)}},b.prototype.statSync=function(){try{return this._fs.statSync(this._path,!1)}catch(a){throw d(a,this._path)}},b.prototype.truncate=function(a,b){var c=null;try{this.truncateSync(a)}catch(a){c=a}finally{b(c)}},b.prototype.truncateSync=function(a){try{this._FS.ftruncate(this._stream.fd,a)}catch(a){throw d(a,this._path)}},b.prototype.write=function(a,b,c,d,e){try{e(null,this.writeSync(a,b,c,d),a)}catch(a){e(a)}},b.prototype.writeSync=function(a,b,c,e){try{var f=i.buffer2Uint8array(a);return null===e&&(e=void 0),this._FS.write(this._stream,f,b,c,e)}catch(a){throw d(a,this._path)}},b.prototype.read=function(a,b,c,d,e){try{e(null,this.readSync(a,b,c,d),a)}catch(a){e(a)}},b.prototype.readSync=function(a,b,c,e){try{var f=i.buffer2Uint8array(a);return null===e&&(e=void 0),this._FS.read(this._stream,f,b,c,e)}catch(a){throw d(a,this._path)}},b.prototype.sync=function(a){a()},b.prototype.syncSync=function(){},b.prototype.chown=function(a,b,c){var d=null;try{this.chownSync(a,b)}catch(a){d=a}finally{c(d)}},b.prototype.chownSync=function(a,b){try{this._FS.fchown(this._stream.fd,a,b)}catch(a){throw d(a,this._path)}},b.prototype.chmod=function(a,b){var c=null;try{this.chmodSync(a)}catch(a){c=a}finally{b(c)}},b.prototype.chmodSync=function(a){try{this._FS.fchmod(this._stream.fd,a)}catch(a){throw d(a,this._path)}},b.prototype.utimes=function(a,b,c){var d=null;try{this.utimesSync(a,b)}catch(a){d=a}finally{c(d)}},b.prototype.utimesSync=function(a,b){this._fs.utimesSync(this._path,a,b)},b}(h.BaseFile);c.EmscriptenFile=k;var l=function(a){function c(b){a.call(this),this._FS=b}return e(c,a),c.isAvailable=function(){return!0},c.prototype.getName=function(){return this._FS.DB_NAME()},c.prototype.isReadOnly=function(){return!1},c.prototype.supportsLinks=function(){return!0},c.prototype.supportsProps=function(){return!0},c.prototype.supportsSynch=function(){return!0},c.prototype.renameSync=function(a,b){try{this._FS.rename(a,b)}catch(c){throw c.errno===j.ErrorCode.ENOENT?d(c,this.existsSync(a)?b:a):d(c)}},c.prototype.statSync=function(a,b){try{var c=b?this._FS.lstat(a):this._FS.stat(a),e=this.modeToFileType(c.mode);return new g.default(e,c.size,c.mode,c.atime,c.mtime,c.ctime)}catch(b){throw d(b,a)}},c.prototype.modeToFileType=function(a){return this._FS.isDir(a)?g.FileType.DIRECTORY:this._FS.isFile(a)?g.FileType.FILE:this._FS.isLink(a)?g.FileType.SYMLINK:void 0},c.prototype._tryStats=function(a){try{return this.statSync(a,!1)}catch(a){return null}},c.prototype.openSync=function(a,b,c){try{var e=this._FS.open(a,b.getFlagString(),c);if(this._FS.isDir(e.node.mode))throw this._FS.close(e),j.ApiError.EISDIR(a);return new k(this,this._FS,a,b,e)}catch(b){throw d(b,a)}},c.prototype.unlinkSync=function(a){try{this._FS.unlink(a)}catch(b){throw d(b,a)}},c.prototype.rmdirSync=function(a){try{this._FS.rmdir(a)}catch(b){throw d(b,a)}},c.prototype.mkdirSync=function(a,b){try{this._FS.mkdir(a,b)}catch(b){throw d(b,a)}},c.prototype.readdirSync=function(a){try{return this._FS.readdir(a).filter(function(a){return"."!==a&&".."!==a})}catch(b){throw d(b,a)}},c.prototype.truncateSync=function(a,b){try{this._FS.truncate(a,b)}catch(b){throw d(b,a)}},c.prototype.readFileSync=function(a,b,c){try{var e=this._FS.readFile(a,{flags:c.getFlagString()}),f=i.uint8Array2Buffer(e);return b?f.toString(b):f}catch(b){throw d(b,a)}},c.prototype.writeFileSync=function(a,c,e,f,g){try{e&&(c=new b(c,e));var h=i.buffer2Uint8array(c);this._FS.writeFile(a,h,{flags:f.getFlagString(),encoding:"binary"}),this._FS.chmod(a,g)}catch(b){throw d(b,a)}},c.prototype.chmodSync=function(a,b,c){try{b?this._FS.lchmod(a,c):this._FS.chmod(a,c)}catch(b){throw d(b,a)}},c.prototype.chownSync=function(a,b,c,e){try{b?this._FS.lchown(a,c,e):this._FS.chown(a,c,e)}catch(b){throw d(b,a)}},c.prototype.symlinkSync=function(a,b,c){try{this._FS.symlink(a,b)}catch(a){throw d(a)}},c.prototype.readlinkSync=function(a){try{return this._FS.readlink(a)}catch(b){throw d(b,a)}},c.prototype.utimesSync=function(a,b,c){try{this._FS.utime(a,b.getTime(),c.getTime())}catch(b){throw d(b,a)}},c}(f.SynchronousFileSystem);c.__esModule=!0,c.default=l}).call(this,a("bfs-buffer").Buffer)},{"../core/api_error":52,"../core/file":55,"../core/file_system":57,"../core/node_fs_stats":60,"../core/util":61,"bfs-buffer":2}],40:[function(a,b,c){"use strict";function d(a,b){if(null!==b&&"object"==typeof b){var c=b,d=c.path;d&&(d="/"+i.relative(a,d),c.message=c.message.replace(c.path,d),c.path=d)}return b}function e(a,b){return"function"==typeof b?function(c){arguments.length>0&&(arguments[0]=d(a,c)),b.apply(null,arguments)}:b}function f(a,b,c){return"Sync"!==a.slice(a.length-4)?function(){return arguments.length>0&&(b&&(arguments[0]=i.join(this._folder,arguments[0])),c&&(arguments[1]=i.join(this._folder,arguments[1])),arguments[arguments.length-1]=e(this._folder,arguments[arguments.length-1])),this._wrapped[a].apply(this._wrapped,arguments)}:function(){try{return b&&(arguments[0]=i.join(this._folder,arguments[0])),c&&(arguments[1]=i.join(this._folder,arguments[1])),this._wrapped[a].apply(this._wrapped,arguments)}catch(a){throw d(this._folder,a)}}}var g=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},h=a("../core/file_system"),i=a("path"),j=a("../core/api_error"),k=function(a){function b(b,c){a.call(this),this._folder=b,this._wrapped=c}return g(b,a),b.prototype.initialize=function(a){var b=this;this._wrapped.exists(this._folder,function(c){c?a():b._wrapped.isReadOnly()?a(j.ApiError.ENOENT(b._folder)):b._wrapped.mkdir(b._folder,511,a)})},b.prototype.getName=function(){return this._wrapped.getName()},b.prototype.isReadOnly=function(){return this._wrapped.isReadOnly()},b.prototype.supportsProps=function(){return this._wrapped.supportsProps()},b.prototype.supportsSynch=function(){return this._wrapped.supportsSynch()},b.prototype.supportsLinks=function(){return!1},b.isAvailable=function(){return!0},b}(h.BaseFileSystem);c.__esModule=!0,c.default=k,["diskSpace","stat","statSync","open","openSync","unlink","unlinkSync","rmdir","rmdirSync","mkdir","mkdirSync","readdir","readdirSync","exists","existsSync","realpath","realpathSync","truncate","truncateSync","readFile","readFileSync","writeFile","writeFileSync","appendFile","appendFileSync","chmod","chmodSync","chown","chownSync","utimes","utimesSync","readlink","readlinkSync"].forEach(function(a){k.prototype[a]=f(a,!0,!1)}),["rename","renameSync","link","linkSync","symlink","symlinkSync"].forEach(function(a){k.prototype[a]=f(a,!0,!0)})},{"../core/api_error":52,"../core/file_system":57,path:10}],41:[function(a,b,c){"use strict";function d(a){return a.isDirectory}function e(a,b,c,d){if("undefined"!=typeof navigator.webkitPersistentStorage)switch(a){case n.PERSISTENT:navigator.webkitPersistentStorage.requestQuota(b,c,d);break;case n.TEMPORARY:navigator.webkitTemporaryStorage.requestQuota(b,c,d);break;default:d(new TypeError("Invalid storage type: "+a))}else n.webkitStorageInfo.requestQuota(a,b,c,d)}function f(a){return Array.prototype.slice.call(a||[],0)}var g=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},h=a("../generic/preload_file"),i=a("../core/file_system"),j=a("../core/api_error"),k=a("../core/file_flag"),l=a("../core/node_fs_stats"),m=a("path"),n=a("../core/global"),o=a("async"),p=a("../core/util"),q=n.webkitRequestFileSystem||n.requestFileSystem||null,r=function(a){function b(b,c,d,e,f){a.call(this,b,c,d,e,f)}return g(b,a),b.prototype.sync=function(a){var b=this;if(this.isDirty()){var c={create:!1},d=this._fs,e=function(c){c.createWriter(function(c){var e=b.getBuffer(),f=new Blob([p.buffer2ArrayBuffer(e)]),g=f.size;c.onwriteend=function(){c.onwriteend=null,c.truncate(g),b.resetDirty(),a()},c.onerror=function(c){a(d.convert(c,b.getPath(),!1))},c.write(f)})},f=function(c){a(d.convert(c,b.getPath(),!1))};d.fs.root.getFile(this.getPath(),c,e,f)}else a()},b.prototype.close=function(a){this.sync(a)},b}(h.PreloadFile);c.HTML5FSFile=r;var s=function(a){function b(b,c){void 0===b&&(b=5),void 0===c&&(c=n.PERSISTENT),a.call(this),this.size=1048576*b,this.type=c}return g(b,a),b.prototype.getName=function(){return"HTML5 FileSystem"},b.isAvailable=function(){return null!=q},b.prototype.isReadOnly=function(){return!1},b.prototype.supportsSymlinks=function(){return!1},b.prototype.supportsProps=function(){return!1},b.prototype.supportsSynch=function(){return!1},b.prototype.convert=function(a,b,c){switch(a.name){case"PathExistsError":return j.ApiError.EEXIST(b);case"QuotaExceededError":return j.ApiError.FileError(j.ErrorCode.ENOSPC,b);case"NotFoundError":return j.ApiError.ENOENT(b);case"SecurityError":return j.ApiError.FileError(j.ErrorCode.EACCES,b);case"InvalidModificationError":return j.ApiError.FileError(j.ErrorCode.EPERM,b);case"TypeMismatchError":return j.ApiError.FileError(c?j.ErrorCode.ENOTDIR:j.ErrorCode.EISDIR,b);case"EncodingError":case"InvalidStateError":case"NoModificationAllowedError":default:return j.ApiError.FileError(j.ErrorCode.EINVAL,b)}},b.prototype.allocate=function(a){var b=this;void 0===a&&(a=function(){});var c=function(c){b.fs=c,a()},d=function(c){a(b.convert(c,"/",!0))};this.type===n.PERSISTENT?e(this.type,this.size,function(a){q(b.type,a,c,d)},d):q(this.type,this.size,c,d)},b.prototype.empty=function(a){var b=this;this._readdir("/",function(c,e){if(c)console.error("Failed to empty FS"),a(c);else{var f=function(b){c?(console.error("Failed to empty FS"),a(c)):a()},g=function(a,c){var e=function(){c()},f=function(d){c(b.convert(d,a.fullPath,!a.isDirectory))};d(a)?a.removeRecursively(e,f):a.remove(e,f)};o.each(e,g,f)}})},b.prototype.rename=function(a,b,c){var d=this,e=2,f=0,g=this.fs.root,h=a,i=function(a){--e<=0&&c(d.convert(a,h,!1))},k=function(e){return 2===++f?c(new j.ApiError(j.ErrorCode.EINVAL,"Something was identified as both a file and a directory. This should never happen.")):a===b?c():(h=m.dirname(b),void g.getDirectory(h,{},function(f){h=m.basename(b),e.moveTo(f,h,function(a){c()},function(f){e.isDirectory?(h=b,d.unlink(b,function(e){e?i(f):d.rename(a,b,c)})):i(f)})},i))};g.getFile(a,{},k,i),g.getDirectory(a,{},k,i)},b.prototype.stat=function(a,b,c){var d=this,e={create:!1},f=function(a){var b=function(a){var b=new l.default(l.FileType.FILE,a.size);c(null,b)};a.file(b,h)},g=function(a){var b=4096,d=new l.default(l.FileType.DIRECTORY,b);c(null,d)},h=function(b){c(d.convert(b,a,!1))},i=function(){d.fs.root.getDirectory(a,e,g,h)};this.fs.root.getFile(a,e,f,i)},b.prototype.open=function(a,b,c,d){var e=this,f=function(c){d("InvalidModificationError"===c.name&&b.isExclusive()?j.ApiError.EEXIST(a):e.convert(c,a,!1))};this.fs.root.getFile(a,{create:b.pathNotExistsAction()===k.ActionType.CREATE_FILE,exclusive:b.isExclusive()},function(c){c.file(function(c){var g=new FileReader;g.onloadend=function(f){var h=e._makeFile(a,b,c,g.result);d(null,h)},g.onerror=function(a){f(g.error)},g.readAsArrayBuffer(c)},f)},f)},b.prototype._statType=function(a){return a.isFile?l.FileType.FILE:l.FileType.DIRECTORY},b.prototype._makeFile=function(a,b,c,d){void 0===d&&(d=new ArrayBuffer(0));var e=new l.default(l.FileType.FILE,c.size),f=p.arrayBuffer2Buffer(d);return new r(this,a,b,e,f)},b.prototype._remove=function(a,b,c){var d=this,e=function(e){var f=function(){b()},g=function(e){b(d.convert(e,a,!c))};e.remove(f,g)},f=function(e){b(d.convert(e,a,!c))},g={create:!1};c?this.fs.root.getFile(a,g,e,f):this.fs.root.getDirectory(a,g,e,f)},b.prototype.unlink=function(a,b){this._remove(a,b,!0)},b.prototype.rmdir=function(a,b){var c=this;this.readdir(a,function(d,e){d?b(d):e.length>0?b(j.ApiError.ENOTEMPTY(a)):c._remove(a,b,!1)})},b.prototype.mkdir=function(a,b,c){var d=this,e={create:!0,exclusive:!0},f=function(a){c()},g=function(b){c(d.convert(b,a,!0))};this.fs.root.getDirectory(a,e,f,g)},b.prototype._readdir=function(a,b){var c=this,d=function(d){b(c.convert(d,a,!0))};this.fs.root.getDirectory(a,{create:!1},function(a){var c=a.createReader(),e=[],g=function(){c.readEntries(function(a){a.length?(e=e.concat(f(a)),g()):b(null,e)},d)};g()},d)},b.prototype.readdir=function(a,b){this._readdir(a,function(a,c){if(a)return b(a);for(var d=[],e=0;e0&&a[0]instanceof h.ApiError&&d.standardizeError(a[0],f.path,e),g.apply(null,a)}}return f.fs[a].apply(f.fs,b)}}var e=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},f=a("../core/file_system"),g=a("./InMemory"),h=a("../core/api_error"),i=a("../core/node_fs"),j=a("path"),k=a("../core/util"),l=function(a){function b(){a.call(this),this.mountList=[],this.mntMap={},this.rootFs=new g.default}return e(b,a),b.prototype.mount=function(a,b){if("/"!==a[0]&&(a="/"+a),a=j.resolve(a),this.mntMap[a])throw new h.ApiError(h.ErrorCode.EINVAL,"Mount point "+a+" is already taken.");k.mkdirpSync(a,511,this.rootFs),this.mntMap[a]=b,this.mountList.push(a),this.mountList=this.mountList.sort(function(a,b){return b.length-a.length})},b.prototype.umount=function(a){if("/"!==a[0]&&(a="/"+a),a=j.resolve(a),!this.mntMap[a])throw new h.ApiError(h.ErrorCode.EINVAL,"Mount point "+a+" is already unmounted.");for(delete this.mntMap[a],this.mountList.splice(this.mountList.indexOf(a),1);"/"!==a&&0===this.rootFs.readdirSync(a).length;)this.rootFs.rmdirSync(a),a=j.dirname(a)},b.prototype._getFs=function(a){for(var b=this.mountList,c=b.length,d=0;d1?e.length:0),""===a&&(a="/"),{fs:this.mntMap[e],path:a}}return{fs:this.rootFs,path:a}},b.prototype.getName=function(){return"MountableFileSystem"},b.isAvailable=function(){return!0},b.prototype.diskSpace=function(a,b){b(0,0)},b.prototype.isReadOnly=function(){return!1},b.prototype.supportsLinks=function(){return!1},b.prototype.supportsProps=function(){return!1},b.prototype.supportsSynch=function(){return!0},b.prototype.standardizeError=function(a,b,c){var d;return-1!==(d=a.message.indexOf(b))&&(a.message=a.message.substr(0,d)+c+a.message.substr(d+b.length),a.path=c),a},b.prototype.rename=function(a,b,c){var d=this._getFs(a),e=this._getFs(b);if(d.fs===e.fs){var f=this;return d.fs.rename(d.path,e.path,function(g){g&&f.standardizeError(f.standardizeError(g,d.path,a),e.path,b),c(g)})}return i.readFile(a,function(d,e){return d?c(d):void i.writeFile(b,e,function(b){return b?c(b):void i.unlink(a,c)})})},b.prototype.renameSync=function(a,b){var c=this._getFs(a),d=this._getFs(b);if(c.fs===d.fs)try{return c.fs.renameSync(c.path,d.path)}catch(e){throw this.standardizeError(this.standardizeError(e,c.path,a),d.path,b),e}var e=i.readFileSync(a);return i.writeFileSync(b,e),i.unlinkSync(a)},b.prototype.readdirSync=function(a){var b=this._getFs(a),c=null;if(b.fs!==this.rootFs)try{c=this.rootFs.readdirSync(a)}catch(a){}try{var d=b.fs.readdirSync(b.path);return null===c?d:d.concat(c.filter(function(a){return d.indexOf(a)===-1}))}catch(d){if(null===c)throw this.standardizeError(d,b.path,a);return c}},b.prototype.readdir=function(a,b){var c=this,d=this._getFs(a);d.fs.readdir(d.path,function(e,f){if(d.fs!==c.rootFs)try{var g=c.rootFs.readdirSync(a);f=f?f.concat(g.filter(function(a){return f.indexOf(a)===-1})):g}catch(f){if(e)return b(c.standardizeError(e,d.path,a))}else if(e)return b(c.standardizeError(e,d.path,a));b(null,f)})},b.prototype.rmdirSync=function(a){var b=this._getFs(a);if(this._containsMountPt(a))throw h.ApiError.ENOTEMPTY(a);try{b.fs.rmdirSync(b.path)}catch(c){throw this.standardizeError(c,b.path,a)}},b.prototype._containsMountPt=function(a){for(var b=this.mountList,c=b.length,d=0;d=a.length&&e.slice(0,a.length)===a)return!0}return!1},b.prototype.rmdir=function(a,b){var c=this,d=this._getFs(a);this._containsMountPt(a)?b(h.ApiError.ENOTEMPTY(a)):d.fs.rmdir(d.path,function(e){b(e?c.standardizeError(e,d.path,a):null)})},b}(f.BaseFileSystem);c.__esModule=!0,c.default=l;for(var m=[["exists","unlink","readlink"],["stat","mkdir","realpath","truncate"],["open","readFile","chmod","utimes"],["chown"],["writeFile","appendFile"]],n=0;n0)throw h.ApiError.ENOTEMPTY(b)}this._writable.existsSync(a)?this._writable.renameSync(a,b):this._writable.existsSync(b)||this._writable.mkdirSync(b,f),this._readable.existsSync(a)&&this._readable.readdirSync(a).forEach(function(d){c.renameSync(l.resolve(a,d),l.resolve(b,d))})}else{if(this.existsSync(b)&&this.statSync(b,!1).isDirectory())throw h.ApiError.EISDIR(b);this.writeFileSync(b,this.readFileSync(a,null,e("r")),null,e("w"),d.mode)}a!==b&&this.existsSync(a)&&this.unlinkSync(a)},b.prototype.stat=function(a,b,c){var e=this;this.checkInitAsync(c)&&this._writable.stat(a,b,function(f,g){f&&f.errno===h.ErrorCode.ENOENT?(e._deletedFiles[a]&&c(h.ApiError.ENOENT(a)),e._readable.stat(a,b,function(a,b){b&&(b=b.clone(),b.mode=d(b.mode)),c(a,b)})):c(f,g)})},b.prototype.statSync=function(a,b){this.checkInitialized();try{return this._writable.statSync(a,b)}catch(e){if(this._deletedFiles[a])throw h.ApiError.ENOENT(a);var c=this._readable.statSync(a,b).clone();return c.mode=d(c.mode),c}},b.prototype.open=function(a,b,c,d){var f=this;this.checkInitAsync(d)&&!this.checkPathAsync(a,d)&&this.stat(a,!1,function(g,j){if(j)switch(b.pathExistsAction()){case i.ActionType.TRUNCATE_FILE:return f.createParentDirectoriesAsync(a,function(e){return e?d(e):void f._writable.open(a,b,c,d)});case i.ActionType.NOP:return f._writable.exists(a,function(g){g?f._writable.open(a,b,c,d):(j=j.clone(),j.mode=c,f._readable.readFile(a,null,e("r"),function(c,e){if(c)return d(c);j.size===-1&&(j.size=e.length);var g=new n(f,a,b,j,e);d(null,g)}))});default:return d(h.ApiError.EEXIST(a))}else switch(b.pathNotExistsAction()){case i.ActionType.CREATE_FILE:return f.createParentDirectoriesAsync(a,function(e){return e?d(e):f._writable.open(a,b,c,d)});default:return d(h.ApiError.ENOENT(a))}})},b.prototype.openSync=function(a,b,c){if(this.checkInitialized(),this.checkPath(a),a===m)throw h.ApiError.EPERM("Cannot open deletion log.");if(this.existsSync(a))switch(b.pathExistsAction()){case i.ActionType.TRUNCATE_FILE:return this.createParentDirectories(a),this._writable.openSync(a,b,c);case i.ActionType.NOP:if(this._writable.existsSync(a))return this._writable.openSync(a,b,c);var d=this._readable.readFileSync(a,null,e("r")),f=this._readable.statSync(a,!1).clone();return f.mode=c,new n(this,a,b,f,d);default:throw h.ApiError.EEXIST(a)}else switch(b.pathNotExistsAction()){case i.ActionType.CREATE_FILE:return this.createParentDirectories(a),this._writable.openSync(a,b,c);default:throw h.ApiError.ENOENT(a)}},b.prototype.unlink=function(a,b){var c=this;this.checkInitAsync(b)&&!this.checkPathAsync(a,b)&&this.exists(a,function(d){return d?void c._writable.exists(a,function(d){return d?c._writable.unlink(a,function(d){return d?b(d):void c.exists(a,function(d){d&&c.deletePath(a),b(null)})}):(c.deletePath(a),void b(null))}):b(h.ApiError.ENOENT(a))})},b.prototype.unlinkSync=function(a){if(this.checkInitialized(),this.checkPath(a),!this.existsSync(a))throw h.ApiError.ENOENT(a);this._writable.existsSync(a)&&this._writable.unlinkSync(a),this.existsSync(a)&&this.deletePath(a)},b.prototype.rmdir=function(a,b){var c=this;if(this.checkInitAsync(b)){var d=function(){c.readdir(a,function(d,e){return d?b(d):e.length?b(h.ApiError.ENOTEMPTY(a)):(c.deletePath(a),void b(null))})};this.exists(a,function(e){return e?void c._writable.exists(a,function(e){e?c._writable.rmdir(a,function(e){return e?b(e):void c._readable.exists(a,function(a){a?d():b()})}):d()}):b(h.ApiError.ENOENT(a))})}},b.prototype.rmdirSync=function(a){if(this.checkInitialized(),!this.existsSync(a))throw h.ApiError.ENOENT(a);if(this._writable.existsSync(a)&&this._writable.rmdirSync(a),this.existsSync(a)){if(this.readdirSync(a).length>0)throw h.ApiError.ENOTEMPTY(a);this.deletePath(a)}},b.prototype.mkdir=function(a,b,c){var d=this;this.checkInitAsync(c)&&this.exists(a,function(e){return e?c(h.ApiError.EEXIST(a)):void d.createParentDirectoriesAsync(a,function(e){return e?c(e):void d._writable.mkdir(a,b,c)})})},b.prototype.mkdirSync=function(a,b){if(this.checkInitialized(),this.existsSync(a))throw h.ApiError.EEXIST(a);this.createParentDirectories(a),this._writable.mkdirSync(a,b)},b.prototype.readdir=function(a,b){var c=this;this.checkInitAsync(b)&&this.stat(a,!1,function(d,e){return d?b(d):e.isDirectory()?void c._writable.readdir(a,function(d,e){return d&&"ENOENT"!==d.code?b(d):(!d&&e||(e=[]),void c._readable.readdir(a,function(d,f){!d&&f||(f=[]);var g={},h=e.concat(f.filter(function(b){return!c._deletedFiles[a+"/"+b]})).filter(function(a){var b=!g[a];return g[a]=!0,b});b(null,h)}))}):b(h.ApiError.ENOTDIR(a))})},b.prototype.readdirSync=function(a){var b=this;this.checkInitialized();var c=this.statSync(a,!1);if(!c.isDirectory())throw h.ApiError.ENOTDIR(a);var d=[];try{d=d.concat(this._writable.readdirSync(a))}catch(a){}try{d=d.concat(this._readable.readdirSync(a).filter(function(c){return!b._deletedFiles[a+"/"+c]}))}catch(a){}var e={};return d.filter(function(a){var b=!e[a];return e[a]=!0,b})},b.prototype.exists=function(a,b){var c=this;this.checkInitialized(),this._writable.exists(a,function(d){return d?b(!0):void c._readable.exists(a,function(d){b(d&&c._deletedFiles[a]!==!0)})})},b.prototype.existsSync=function(a){return this.checkInitialized(),this._writable.existsSync(a)||this._readable.existsSync(a)&&this._deletedFiles[a]!==!0},b.prototype.chmod=function(a,b,c,d){var e=this;this.checkInitAsync(d)&&this.operateOnWritableAsync(a,function(f){return f?d(f):void e._writable.chmod(a,b,c,d)})},b.prototype.chmodSync=function(a,b,c){var d=this;this.checkInitialized(),this.operateOnWritable(a,function(){d._writable.chmodSync(a,b,c)})},b.prototype.chown=function(a,b,c,d,e){var f=this;this.checkInitAsync(e)&&this.operateOnWritableAsync(a,function(g){return g?e(g):void f._writable.chown(a,b,c,d,e)})},b.prototype.chownSync=function(a,b,c,d){var e=this;this.checkInitialized(),this.operateOnWritable(a,function(){e._writable.chownSync(a,b,c,d)})},b.prototype.utimes=function(a,b,c,d){var e=this;this.checkInitAsync(d)&&this.operateOnWritableAsync(a,function(f){return f?d(f):void e._writable.utimes(a,b,c,d)})},b.prototype.utimesSync=function(a,b,c){var d=this;this.checkInitialized(),this.operateOnWritable(a,function(){d._writable.utimesSync(a,b,c)})},b.prototype.operateOnWritable=function(a,b){if(!this.existsSync(a))throw h.ApiError.ENOENT(a);this._writable.existsSync(a)||this.copyToWritable(a),b()},b.prototype.operateOnWritableAsync=function(a,b){var c=this;this.exists(a,function(d){return d?void c._writable.exists(a,function(d){return d?void b():c.copyToWritableAsync(a,b)}):b(h.ApiError.ENOENT(a))})},b.prototype.copyToWritable=function(a){var b=this.statSync(a,!1);b.isDirectory()?this._writable.mkdirSync(a,b.mode):this.writeFileSync(a,this._readable.readFileSync(a,null,e("r")),null,e("w"),this.statSync(a,!1).mode)},b.prototype.copyToWritableAsync=function(a,b){var c=this;this.stat(a,!1,function(d,f){return d?b(d):f.isDirectory()?c._writable.mkdir(a,f.mode,b):void c._readable.readFile(a,null,e("r"),function(d,g){return d?b(d):void c.writeFile(a,g,null,e("w"),f.mode,b)})})},b}(g.BaseFileSystem);c.UnlockedOverlayFS=o;var p=function(a){function b(b,c){a.call(this,new o(b,c))}return f(b,a),b.prototype.initialize=function(b){a.prototype.initialize.call(this,b)},b.isAvailable=function(){return o.isAvailable()},b.prototype.getOverlayedFileSystems=function(){return a.prototype.getFSUnlocked.call(this).getOverlayedFileSystems()},b.prototype.unwrap=function(){return a.prototype.getFSUnlocked.call(this)},b}(k.default);c.__esModule=!0,c.default=p},{"../core/api_error":52,"../core/file_flag":56,"../core/file_system":57,"../generic/locked_fs":66,"../generic/preload_file":68,path:10}],47:[function(a,b,c){(function(b){"use strict";function d(a){return{type:r.API_ERROR,errorData:l(a.writeToBuffer())}}function e(a){return u.ApiError.fromBuffer(m(a.errorData))}function f(a){return{type:r.ERROR,name:a.name,message:a.message,stack:a.stack}}function g(a){var b=A[a.name];"function"!=typeof b&&(b=Error);var c=new b(a.message);return c.stack=a.stack,c}function h(a){return{type:r.STATS,statsData:l(a.toBuffer())}}function i(a){return y.default.fromBuffer(m(a.statsData))}function j(a){return{type:r.FILEFLAG,flagStr:a.getFlagString()}}function k(a){return v.FileFlag.getFileFlag(a.flagStr)}function l(a){return w.buffer2ArrayBuffer(a)}function m(a){return w.arrayBuffer2Buffer(a)}function n(a){return{type:r.BUFFER,data:l(a)}}function o(a){return m(a.data)}function p(a){return null!=a&&"object"==typeof a&&a.hasOwnProperty("browserfsMessage")&&a.browserfsMessage}function q(a){return null!=a&&"object"==typeof a&&a.hasOwnProperty("browserfsMessage")&&a.browserfsMessage}var r,s=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},t=a("../core/file_system"),u=a("../core/api_error"),v=a("../core/file_flag"),w=a("../core/util"),x=a("../core/file"),y=a("../core/node_fs_stats"),z=a("../generic/preload_file"),A=a("../core/global"),B=a("../core/node_fs");!function(a){a[a.CB=0]="CB",a[a.FD=1]="FD",a[a.API_ERROR=2]="API_ERROR",a[a.STATS=3]="STATS",a[a.PROBE=4]="PROBE",a[a.FILEFLAG=5]="FILEFLAG",a[a.BUFFER=6]="BUFFER",a[a.ERROR=7]="ERROR"}(r||(r={}));var C=function(){function a(){this._callbacks={},this._nextId=0}return a.prototype.toRemoteArg=function(a){var b=this._nextId++;return this._callbacks[b]=a,{type:r.CB,id:b}},a.prototype.toLocalArg=function(a){var b=this._callbacks[a];return delete this._callbacks[a],b},a}(),D=function(){function a(){this._fileDescriptors={},this._nextId=0}return a.prototype.toRemoteArg=function(a,c,d,e){var f,g,h=this._nextId++;this._fileDescriptors[h]=a,a.stat(function(i,j){i?e(i):(g=l(j.toBuffer()),d.isReadable()?a.read(new b(j.size),0,j.size,0,function(a,b,i){a?e(a):(f=l(i),e(null,{type:r.FD,id:h,data:f,stat:g,path:c,flag:d.getFlagString()}))}):e(null,{type:r.FD,id:h,data:new ArrayBuffer(0),stat:g,path:c,flag:d.getFlagString()}))})},a.prototype._applyFdChanges=function(a,b){var c=this._fileDescriptors[a.id],d=m(a.data),e=y.default.fromBuffer(m(a.stat)),f=v.FileFlag.getFileFlag(a.flag);f.isWriteable()?c.write(d,0,d.length,f.isAppendable()?c.getPos():0,function(a){function g(){c.stat(function(a,d){a?b(a):d.mode!==e.mode?c.chmod(e.mode,function(a){b(a,c)}):b(a,c)})}a?b(a):f.isAppendable()?g():c.truncate(d.length,function(){g()})}):b(null,c)},a.prototype.applyFdAPIRequest=function(a,b){var c=this,d=a.args[0];this._applyFdChanges(d,function(e,f){e?b(e):f[a.method](function(e){"close"===a.method&&delete c._fileDescriptors[d.id],b(e)})})},a}(),E=function(a){function b(b,c,d,e,f,g){a.call(this,b,c,d,e,g),this._remoteFdId=f}return s(b,a),b.prototype.getRemoteFdId=function(){return this._remoteFdId},b.prototype.toRemoteArg=function(){return{type:r.FD,id:this._remoteFdId,data:l(this.getBuffer()),stat:l(this.getStats().toBuffer()),path:this.getPath(),flag:this.getFlag().getFlagString()}},b.prototype._syncClose=function(a,b){var c=this;this.isDirty()?this._fs.syncClose(a,this,function(a){a||c.resetDirty(),b(a)}):b()},b.prototype.sync=function(a){this._syncClose("sync",a)},b.prototype.close=function(a){this._syncClose("close",a)},b}(z.PreloadFile),F=function(a){function c(b){var c=this;a.call(this),this._callbackConverter=new C,this._isInitialized=!1,this._isReadOnly=!1,this._supportLinks=!1,this._supportProps=!1,this._outstandingRequests={},this._worker=b,this._worker.addEventListener("message",function(a){var b=a.data;if(q(b)){var d,e=b.args,f=new Array(e.length);for(d=0;d0&&(i=-1,g={browserfsMessage:!0,cbId:j,args:[d(b)]},a.postMessage(g))}var e,g,h=new Array(arguments.length),i=arguments.length;for(e=0;e0&&"/"!==c.charAt(c.length-1)&&(c+="/"),this.prefixUrl=c;var d=null;if("string"==typeof b){if(d=this._requestFileSync(b,"json"),!d)throw new Error("Unable to find listing at URL: ${listingUrlOrObj}")}else d=b;this._index=l.FileIndex.fromListing(d)}return e(b,a),b.prototype.empty=function(){this._index.fileIterator(function(a){a.file_data=null})},b.prototype.getXhrPath=function(a){return"/"===a.charAt(0)&&(a=a.slice(1)),this.prefixUrl+a},b.prototype._requestFileSizeAsync=function(a,b){k.getFileSizeAsync(this.getXhrPath(a),b)},b.prototype._requestFileSizeSync=function(a){return k.getFileSizeSync(this.getXhrPath(a))},b.prototype._requestFileAsync=function(a,b,c){k.asyncDownloadFile(this.getXhrPath(a),b,c)},b.prototype._requestFileSync=function(a,b){return k.syncDownloadFile(this.getXhrPath(a),b)},b.prototype.getName=function(){return"XmlHttpRequest"},b.isAvailable=function(){return"undefined"!=typeof XMLHttpRequest&&null!==XMLHttpRequest},b.prototype.diskSpace=function(a,b){b(0,0)},b.prototype.isReadOnly=function(){return!0},b.prototype.supportsLinks=function(){return!1},b.prototype.supportsProps=function(){return!1},b.prototype.supportsSynch=function(){return!0},b.prototype.preloadFile=function(a,b){var c=this._index.getInode(a);if(!l.isFileInode(c))throw g.ApiError.EISDIR(a);if(null===c)throw g.ApiError.ENOENT(a);var d=c.getData();d.size=b.length,d.file_data=b},b.prototype.stat=function(a,b,c){var d=this._index.getInode(a);if(null===d)return c(g.ApiError.ENOENT(a));var e;l.isFileInode(d)?(e=d.getData(),e.size<0?this._requestFileSizeAsync(a,function(a,b){return a?c(a):(e.size=b,void c(null,e.clone()))}):c(null,e.clone())):l.isDirInode(d)?(e=d.getStats(),c(null,e)):c(g.ApiError.FileError(g.ErrorCode.EINVAL,a))},b.prototype.statSync=function(a,b){var c=this._index.getInode(a);if(null===c)throw g.ApiError.ENOENT(a);var d;if(l.isFileInode(c))d=c.getData(),d.size<0&&(d.size=this._requestFileSizeSync(a));else{if(!l.isDirInode(c))throw g.ApiError.FileError(g.ErrorCode.EINVAL,a);d=c.getStats()}return d},b.prototype.open=function(a,b,c,d){if(b.isWriteable())return d(new g.ApiError(g.ErrorCode.EPERM,a));var e=this,f=this._index.getInode(a);if(null===f)return d(g.ApiError.ENOENT(a));if(!l.isFileInode(f))return d(g.ApiError.EISDIR(a));var i=f.getData();switch(b.pathExistsAction()){case h.ActionType.THROW_EXCEPTION:case h.ActionType.TRUNCATE_FILE:return d(g.ApiError.EEXIST(a));case h.ActionType.NOP:if(null!=i.file_data)return d(null,new j.NoSyncFile(e,a,b,i.clone(),i.file_data));this._requestFileAsync(a,"buffer",function(c,f){return c?d(c):(i.size=f.length,i.file_data=f,d(null,new j.NoSyncFile(e,a,b,i.clone(),f)))});break;default:return d(new g.ApiError(g.ErrorCode.EINVAL,"Invalid FileMode object."))}},b.prototype.openSync=function(a,b,c){if(b.isWriteable())throw new g.ApiError(g.ErrorCode.EPERM,a);var d=this._index.getInode(a);if(null===d)throw g.ApiError.ENOENT(a);if(!l.isFileInode(d))throw g.ApiError.EISDIR(a);var e=d.getData();switch(b.pathExistsAction()){case h.ActionType.THROW_EXCEPTION:case h.ActionType.TRUNCATE_FILE:throw g.ApiError.EEXIST(a);case h.ActionType.NOP:if(null!=e.file_data)return new j.NoSyncFile(this,a,b,e.clone(),e.file_data);var f=this._requestFileSync(a,"buffer");return e.size=f.length,e.file_data=f,new j.NoSyncFile(this,a,b,e.clone(),f);default:throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid FileMode object.")}},b.prototype.readdir=function(a,b){try{b(null,this.readdirSync(a))}catch(a){b(a)}},b.prototype.readdirSync=function(a){var b=this._index.getInode(a);if(null===b)throw g.ApiError.ENOENT(a);if(l.isDirInode(b))return b.getListing();throw g.ApiError.ENOTDIR(a)},b.prototype.readFile=function(a,b,c,e){var f=e;this.open(a,c,420,function(a,c){if(a)return e(a);e=function(a,b){c.close(function(c){return null==a&&(a=c),f(a,b)})};var g=c,h=g.getBuffer();null===b?e(a,i.copyingSlice(h)):d(h,b,e)})},b.prototype.readFileSync=function(a,b,c){var d=this.openSync(a,c,420);try{var e=d,f=e.getBuffer();return null===b?i.copyingSlice(f):f.toString(b)}finally{d.closeSync()}},b}(f.BaseFileSystem);c.__esModule=!0,c.default=m},{"../core/api_error":52,"../core/file_flag":56,"../core/file_system":57,"../core/util":61,"../generic/file_index":63,"../generic/preload_file":68,"../generic/xhr":69}],49:[function(a,b,c){"use strict";function d(a,b){var c=31&b,d=(b>>5&15)-1,e=(b>>9)+1980,f=31&a,g=a>>5&63,h=a>>11;return new Date(e,d,c,h,g,f)}function e(a,b,c,d){return 0===d?"":b?a.toString("utf8",c,c+d):m.default.byte2str(a.slice(c,c+d))}var f=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},g=a("../core/api_error"),h=a("../core/node_fs_stats"),i=a("../core/file_system"),j=a("../core/file_flag"),k=a("../generic/preload_file"),l=a("../core/util"),m=a("bfs-buffer/js/extended_ascii"),n=a("pako/dist/pako_inflate.min").inflateRaw,o=a("../generic/file_index");!function(a){a[a.MSDOS=0]="MSDOS",a[a.AMIGA=1]="AMIGA",a[a.OPENVMS=2]="OPENVMS",a[a.UNIX=3]="UNIX",a[a.VM_CMS=4]="VM_CMS",a[a.ATARI_ST=5]="ATARI_ST",a[a.OS2_HPFS=6]="OS2_HPFS",a[a.MAC=7]="MAC",a[a.Z_SYSTEM=8]="Z_SYSTEM",a[a.CP_M=9]="CP_M",a[a.NTFS=10]="NTFS",a[a.MVS=11]="MVS",a[a.VSE=12]="VSE",a[a.ACORN_RISC=13]="ACORN_RISC",a[a.VFAT=14]="VFAT",a[a.ALT_MVS=15]="ALT_MVS",a[a.BEOS=16]="BEOS",a[a.TANDEM=17]="TANDEM",a[a.OS_400=18]="OS_400",a[a.OSX=19]="OSX"}(c.ExternalFileAttributeType||(c.ExternalFileAttributeType={}));c.ExternalFileAttributeType;!function(a){a[a.STORED=0]="STORED",a[a.SHRUNK=1]="SHRUNK",a[a.REDUCED_1=2]="REDUCED_1",a[a.REDUCED_2=3]="REDUCED_2",a[a.REDUCED_3=4]="REDUCED_3",a[a.REDUCED_4=5]="REDUCED_4",a[a.IMPLODE=6]="IMPLODE",a[a.DEFLATE=8]="DEFLATE",a[a.DEFLATE64=9]="DEFLATE64",a[a.TERSE_OLD=10]="TERSE_OLD",a[a.BZIP2=12]="BZIP2",a[a.LZMA=14]="LZMA",a[a.TERSE_NEW=18]="TERSE_NEW",a[a.LZ77=19]="LZ77",a[a.WAVPACK=97]="WAVPACK",a[a.PPMD=98]="PPMD"}(c.CompressionMethod||(c.CompressionMethod={}));var p=c.CompressionMethod,q=function(){function a(a){if(this.data=a,67324752!==a.readUInt32LE(0))throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid Zip file: Local file header has invalid signature: "+this.data.readUInt32LE(0))}return a.prototype.versionNeeded=function(){return this.data.readUInt16LE(4)},a.prototype.flags=function(){return this.data.readUInt16LE(6)},a.prototype.compressionMethod=function(){return this.data.readUInt16LE(8)},a.prototype.lastModFileTime=function(){return d(this.data.readUInt16LE(10),this.data.readUInt16LE(12))},a.prototype.rawLastModFileTime=function(){return this.data.readUInt32LE(10)},a.prototype.crc32=function(){return this.data.readUInt32LE(14)},a.prototype.fileNameLength=function(){return this.data.readUInt16LE(26)},a.prototype.extraFieldLength=function(){return this.data.readUInt16LE(28)},a.prototype.fileName=function(){return e(this.data,this.useUTF8(),30,this.fileNameLength())},a.prototype.extraField=function(){var a=30+this.fileNameLength();return this.data.slice(a,a+this.extraFieldLength())},a.prototype.totalSize=function(){return 30+this.fileNameLength()+this.extraFieldLength()},a.prototype.useUTF8=function(){return 2048===(2048&this.flags())},a}();c.FileHeader=q;var r=function(){function a(a,b,c){this.header=a,this.record=b,this.data=c}return a.prototype.decompress=function(){var a=this.header.compressionMethod();switch(a){case p.DEFLATE:var b=n(l.buffer2Arrayish(this.data.slice(0,this.record.compressedSize())),{chunkSize:this.record.uncompressedSize()});return l.arrayish2Buffer(b);case p.STORED:return l.copyingSlice(this.data,0,this.record.uncompressedSize());default:var c=p[a];throw c=c?c:"Unknown: "+a,new g.ApiError(g.ErrorCode.EINVAL,"Invalid compression method on file '"+this.header.fileName()+"': "+c)}},a.prototype.getHeader=function(){return this.header},a.prototype.getRecord=function(){return this.record},a.prototype.getRawData=function(){return this.data},a}();c.FileData=r;var s=function(){function a(a){this.data=a}return a.prototype.crc32=function(){return this.data.readUInt32LE(0)},a.prototype.compressedSize=function(){return this.data.readUInt32LE(4)},a.prototype.uncompressedSize=function(){return this.data.readUInt32LE(8)},a}();c.DataDescriptor=s;var t=function(){function a(a){if(this.data=a,134630224!==this.data.readUInt32LE(0))throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid archive extra data record signature: "+this.data.readUInt32LE(0))}return a.prototype.length=function(){return this.data.readUInt32LE(4)},a.prototype.extraFieldData=function(){return this.data.slice(8,8+this.length())},a}();c.ArchiveExtraDataRecord=t;var u=function(){function a(a){if(this.data=a,84233040!==this.data.readUInt32LE(0))throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid digital signature signature: "+this.data.readUInt32LE(0))}return a.prototype.size=function(){return this.data.readUInt16LE(4)},a.prototype.signatureData=function(){return this.data.slice(6,6+this.size())},a}();c.DigitalSignature=u;var v=function(){function a(a,b){if(this.zipData=a,this.data=b,33639248!==this.data.readUInt32LE(0))throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid Zip file: Central directory record has invalid signature: "+this.data.readUInt32LE(0));this._filename=this.produceFilename()}return a.prototype.versionMadeBy=function(){return this.data.readUInt16LE(4)},a.prototype.versionNeeded=function(){return this.data.readUInt16LE(6)},a.prototype.flag=function(){return this.data.readUInt16LE(8)},a.prototype.compressionMethod=function(){return this.data.readUInt16LE(10)},a.prototype.lastModFileTime=function(){return d(this.data.readUInt16LE(12),this.data.readUInt16LE(14))},a.prototype.rawLastModFileTime=function(){return this.data.readUInt32LE(12)},a.prototype.crc32=function(){return this.data.readUInt32LE(16)},a.prototype.compressedSize=function(){return this.data.readUInt32LE(20)},a.prototype.uncompressedSize=function(){return this.data.readUInt32LE(24)},a.prototype.fileNameLength=function(){return this.data.readUInt16LE(28)},a.prototype.extraFieldLength=function(){return this.data.readUInt16LE(30)},a.prototype.fileCommentLength=function(){return this.data.readUInt16LE(32)},a.prototype.diskNumberStart=function(){return this.data.readUInt16LE(34)},a.prototype.internalAttributes=function(){return this.data.readUInt16LE(36)},a.prototype.externalAttributes=function(){return this.data.readUInt32LE(38)},a.prototype.headerRelativeOffset=function(){return this.data.readUInt32LE(42)},a.prototype.produceFilename=function(){var a=e(this.data,this.useUTF8(),46,this.fileNameLength());return a.replace(/\\/g,"/")},a.prototype.fileName=function(){return this._filename},a.prototype.rawFileName=function(){return this.data.slice(46,46+this.fileNameLength())},a.prototype.extraField=function(){var a=44+this.fileNameLength();return this.data.slice(a,a+this.extraFieldLength())},a.prototype.fileComment=function(){var a=46+this.fileNameLength()+this.extraFieldLength();return e(this.data,this.useUTF8(),a,this.fileCommentLength())},a.prototype.rawFileComment=function(){var a=46+this.fileNameLength()+this.extraFieldLength(); -return this.data.slice(a,a+this.fileCommentLength())},a.prototype.totalSize=function(){return 46+this.fileNameLength()+this.extraFieldLength()+this.fileCommentLength()},a.prototype.isDirectory=function(){var a=this.fileName();return!!(16&this.externalAttributes())||"/"===a.charAt(a.length-1)},a.prototype.isFile=function(){return!this.isDirectory()},a.prototype.useUTF8=function(){return 2048===(2048&this.flag())},a.prototype.isEncrypted=function(){return 1===(1&this.flag())},a.prototype.getFileData=function(){var a=this.headerRelativeOffset(),b=new q(this.zipData.slice(a));return new r(b,this,this.zipData.slice(a+b.totalSize()))},a.prototype.getData=function(){return this.getFileData().decompress()},a.prototype.getRawData=function(){return this.getFileData().getRawData()},a.prototype.getStats=function(){return new h.default(h.FileType.FILE,this.uncompressedSize(),365,new Date,this.lastModFileTime())},a}();c.CentralDirectory=v;var w=function(){function a(a){if(this.data=a,101010256!==this.data.readUInt32LE(0))throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid Zip file: End of central directory record has invalid signature: "+this.data.readUInt32LE(0))}return a.prototype.diskNumber=function(){return this.data.readUInt16LE(4)},a.prototype.cdDiskNumber=function(){return this.data.readUInt16LE(6)},a.prototype.cdDiskEntryCount=function(){return this.data.readUInt16LE(8)},a.prototype.cdTotalEntryCount=function(){return this.data.readUInt16LE(10)},a.prototype.cdSize=function(){return this.data.readUInt32LE(12)},a.prototype.cdOffset=function(){return this.data.readUInt32LE(16)},a.prototype.cdZipCommentLength=function(){return this.data.readUInt16LE(20)},a.prototype.cdZipComment=function(){return e(this.data,!0,22,this.cdZipCommentLength())},a.prototype.rawCdZipComment=function(){return this.data.slice(22,22+this.cdZipCommentLength())},a}();c.EndOfCentralDirectory=w;var x=function(){function a(a,b,c,d){this.index=a,this.directoryEntries=b,this.eocd=c,this.data=d}return a}();c.ZipTOC=x;var y=function(a){function b(b,c){void 0===c&&(c=""),a.call(this),this.input=b,this.name=c,this._index=new o.FileIndex,this._directoryEntries=[],this._eocd=null,b instanceof x?(this._index=b.index,this._directoryEntries=b.directoryEntries,this._eocd=b.eocd,this.data=b.data):(this.data=b,this.populateIndex())}return f(b,a),b.prototype.getName=function(){return"ZipFS"+(""!==this.name?" "+this.name:"")},b.prototype.getCentralDirectoryEntry=function(a){var b=this._index.getInode(a);if(null===b)throw g.ApiError.ENOENT(a);return o.isFileInode(b)?b.getData():o.isDirInode(b)?b.getData():void 0},b.prototype.getCentralDirectoryEntryAt=function(a){var b=this._directoryEntries[a];if(!b)throw new RangeError("Invalid directory index: "+a+".");return b},b.prototype.getNumberOfCentralDirectoryEntries=function(){return this._directoryEntries.length},b.prototype.getEndOfCentralDirectory=function(){return this._eocd},b.isAvailable=function(){return!0},b.prototype.diskSpace=function(a,b){b(this.data.length,0)},b.prototype.isReadOnly=function(){return!0},b.prototype.supportsLinks=function(){return!1},b.prototype.supportsProps=function(){return!1},b.prototype.supportsSynch=function(){return!0},b.prototype.statSync=function(a,b){var c=this._index.getInode(a);if(null===c)throw g.ApiError.ENOENT(a);var d;if(o.isFileInode(c))d=c.getData().getStats();else{if(!o.isDirInode(c))throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid inode.");d=c.getStats()}return d},b.prototype.openSync=function(a,b,c){if(b.isWriteable())throw new g.ApiError(g.ErrorCode.EPERM,a);var d=this._index.getInode(a);if(!d)throw g.ApiError.ENOENT(a);if(!o.isFileInode(d))throw g.ApiError.EISDIR(a);var e=d.getData(),f=e.getStats();switch(b.pathExistsAction()){case j.ActionType.THROW_EXCEPTION:case j.ActionType.TRUNCATE_FILE:throw g.ApiError.EEXIST(a);case j.ActionType.NOP:return new k.NoSyncFile(this,a,b,f,e.getData());default:throw new g.ApiError(g.ErrorCode.EINVAL,"Invalid FileMode object.")}},b.prototype.readdirSync=function(a){var b=this._index.getInode(a);if(b){if(o.isDirInode(b))return b.getListing();throw g.ApiError.ENOTDIR(a)}throw g.ApiError.ENOENT(a)},b.prototype.readFileSync=function(a,b,c){var d=this.openSync(a,c,420);try{var e=d,f=e.getBuffer();return null===b?l.copyingSlice(f):f.toString(b)}finally{d.closeSync()}},b.getEOCD=function(a){for(var b=22,c=Math.min(b+65535,a.length-1),d=b;d=0)throw new k.ApiError(k.ErrorCode.EINVAL,"Path must be a string without null bytes.");if(""===a)throw new k.ApiError(k.ErrorCode.EINVAL,"Path must not be empty.");return m.resolve(a)}function i(a,b,c,d){switch(typeof a){case"object":return{encoding:"undefined"!=typeof a.encoding?a.encoding:b,flag:"undefined"!=typeof a.flag?a.flag:c,mode:f(a.mode,d)};case"string":return{encoding:a,flag:c,mode:d};default:return{encoding:b,flag:c,mode:d}}}function j(){}var k=a("./api_error"),l=a("./file_flag"),m=a("path"),n=a("./node_fs_stats"),o=a("./global"),p=function(){function a(){this.root=null,this.fdMap={},this.nextFd=100,this.F_OK=0,this.R_OK=4,this.W_OK=2,this.X_OK=1,this._wrapCb=e}return a.prototype.getFdForFile=function(a){var b=this.nextFd++;return this.fdMap[b]=a,b},a.prototype.fd2file=function(a){var b=this.fdMap[a];if(b)return b;throw new k.ApiError(k.ErrorCode.EBADF,"Invalid file descriptor.")},a.prototype.closeFd=function(a){delete this.fdMap[a]},a.prototype.initialize=function(a){if(!a.constructor.isAvailable())throw new k.ApiError(k.ErrorCode.EINVAL,"Tried to instantiate BrowserFS with an unavailable file system.");return this.root=a},a.prototype._toUnixTimestamp=function(a){if("number"==typeof a)return a;if(a instanceof Date)return a.getTime()/1e3;throw new Error("Cannot parse time: "+a)},a.prototype.getRootFS=function(){return this.root?this.root:null},a.prototype.rename=function(a,b,c){void 0===c&&(c=j);var d=e(c,1);try{this.root.rename(h(a),h(b),d)}catch(a){d(a)}},a.prototype.renameSync=function(a,b){this.root.renameSync(h(a),h(b))},a.prototype.exists=function(a,b){void 0===b&&(b=j);var c=e(b,1);try{return this.root.exists(h(a),c)}catch(a){return c(!1)}},a.prototype.existsSync=function(a){try{return this.root.existsSync(h(a))}catch(a){return!1}},a.prototype.stat=function(a,b){void 0===b&&(b=j);var c=e(b,2);try{return this.root.stat(h(a),!1,c)}catch(a){return c(a,null)}},a.prototype.statSync=function(a){return this.root.statSync(h(a),!1)},a.prototype.lstat=function(a,b){void 0===b&&(b=j);var c=e(b,2);try{return this.root.stat(h(a),!0,c)}catch(a){return c(a,null)}},a.prototype.lstatSync=function(a){return this.root.statSync(h(a),!0)},a.prototype.truncate=function(a,b,c){void 0===b&&(b=0),void 0===c&&(c=j);var d=0;"function"==typeof b?c=b:"number"==typeof b&&(d=b);var f=e(c,1);try{if(d<0)throw new k.ApiError(k.ErrorCode.EINVAL);return this.root.truncate(h(a),d,f)}catch(a){return f(a)}},a.prototype.truncateSync=function(a,b){if(void 0===b&&(b=0),b<0)throw new k.ApiError(k.ErrorCode.EINVAL);return this.root.truncateSync(h(a),b)},a.prototype.unlink=function(a,b){void 0===b&&(b=j);var c=e(b,1);try{return this.root.unlink(h(a),c)}catch(a){return c(a)}},a.prototype.unlinkSync=function(a){return this.root.unlinkSync(h(a))},a.prototype.open=function(a,b,c,d){var g=this;void 0===d&&(d=j);var i=f(c,420);d="function"==typeof c?c:d;var k=e(d,2);try{this.root.open(h(a),l.FileFlag.getFileFlag(b),i,function(a,b){b?k(a,g.getFdForFile(b)):k(a)})}catch(a){k(a,null)}},a.prototype.openSync=function(a,b,c){return void 0===c&&(c=420),this.getFdForFile(this.root.openSync(h(a),l.FileFlag.getFileFlag(b),f(c,420)))},a.prototype.readFile=function(a,b,c){void 0===b&&(b={}),void 0===c&&(c=j);var d=i(b,null,"r",null);c="function"==typeof b?b:c;var f=e(c,2);try{var g=l.FileFlag.getFileFlag(d.flag);return g.isReadable()?this.root.readFile(h(a),d.encoding,g,f):f(new k.ApiError(k.ErrorCode.EINVAL,"Flag passed to readFile must allow for reading."))}catch(a){return f(a,null)}},a.prototype.readFileSync=function(a,b){void 0===b&&(b={});var c=i(b,null,"r",null),d=l.FileFlag.getFileFlag(c.flag);if(!d.isReadable())throw new k.ApiError(k.ErrorCode.EINVAL,"Flag passed to readFile must allow for reading.");return this.root.readFileSync(h(a),c.encoding,d)},a.prototype.writeFile=function(a,b,c,d){void 0===c&&(c={}),void 0===d&&(d=j);var f=i(c,"utf8","w",420);d="function"==typeof c?c:d;var g=e(d,1);try{var m=l.FileFlag.getFileFlag(f.flag);return m.isWriteable()?this.root.writeFile(h(a),b,f.encoding,m,f.mode,g):g(new k.ApiError(k.ErrorCode.EINVAL,"Flag passed to writeFile must allow for writing."))}catch(a){return g(a)}},a.prototype.writeFileSync=function(a,b,c){var d=i(c,"utf8","w",420),e=l.FileFlag.getFileFlag(d.flag);if(!e.isWriteable())throw new k.ApiError(k.ErrorCode.EINVAL,"Flag passed to writeFile must allow for writing.");return this.root.writeFileSync(h(a),b,d.encoding,e,d.mode)},a.prototype.appendFile=function(a,b,c,d){void 0===d&&(d=j);var f=i(c,"utf8","a",420);d="function"==typeof c?c:d;var g=e(d,1);try{var m=l.FileFlag.getFileFlag(f.flag);if(!m.isAppendable())return g(new k.ApiError(k.ErrorCode.EINVAL,"Flag passed to appendFile must allow for appending."));this.root.appendFile(h(a),b,f.encoding,m,f.mode,g)}catch(a){g(a)}},a.prototype.appendFileSync=function(a,b,c){var d=i(c,"utf8","a",420),e=l.FileFlag.getFileFlag(d.flag);if(!e.isAppendable())throw new k.ApiError(k.ErrorCode.EINVAL,"Flag passed to appendFile must allow for appending.");return this.root.appendFileSync(h(a),b,d.encoding,e,d.mode)},a.prototype.fstat=function(a,b){void 0===b&&(b=j);var c=e(b,2);try{var d=this.fd2file(a);d.stat(c)}catch(a){c(a)}},a.prototype.fstatSync=function(a){return this.fd2file(a).statSync()},a.prototype.close=function(a,b){var c=this;void 0===b&&(b=j);var d=e(b,1);try{this.fd2file(a).close(function(b){b||c.closeFd(a),d(b)})}catch(a){d(a)}},a.prototype.closeSync=function(a){this.fd2file(a).closeSync(),this.closeFd(a)},a.prototype.ftruncate=function(a,b,c){void 0===c&&(c=j);var d="number"==typeof b?b:0;c="function"==typeof b?b:c;var f=e(c,1);try{var g=this.fd2file(a);if(d<0)throw new k.ApiError(k.ErrorCode.EINVAL);g.truncate(d,f)}catch(a){f(a)}},a.prototype.ftruncateSync=function(a,b){void 0===b&&(b=0);var c=this.fd2file(a);if(b<0)throw new k.ApiError(k.ErrorCode.EINVAL);c.truncateSync(b)},a.prototype.fsync=function(a,b){void 0===b&&(b=j);var c=e(b,1);try{this.fd2file(a).sync(c)}catch(a){c(a)}},a.prototype.fsyncSync=function(a){this.fd2file(a).syncSync()},a.prototype.fdatasync=function(a,b){void 0===b&&(b=j);var c=e(b,1);try{this.fd2file(a).datasync(c)}catch(a){c(a)}},a.prototype.fdatasyncSync=function(a){this.fd2file(a).datasyncSync()},a.prototype.write=function(a,c,d,f,g,h){void 0===h&&(h=j);var i,l,m,n=null;if("string"==typeof c){var o="utf8";switch(typeof d){case"function":h=d;break;case"number":n=d,o="string"==typeof f?f:"utf8",h="function"==typeof g?g:h;break;default:return(h="function"==typeof f?f:"function"==typeof g?g:h)(new k.ApiError(k.ErrorCode.EINVAL,"Invalid arguments."))}i=new b(c,o),l=0,m=i.length}else i=c,l=d,m=f,n="number"==typeof g?g:null,h="function"==typeof g?g:h;var p=e(h,3);try{var q=this.fd2file(a);null==n&&(n=q.getPos()),q.write(i,l,m,n,p)}catch(a){p(a)}},a.prototype.writeSync=function(a,c,d,e,f){var g,h,i,j=0;if("string"==typeof c){i="number"==typeof d?d:null;var k="string"==typeof e?e:"utf8";j=0,g=new b(c,k),h=g.length}else g=c,j=d,h=e,i="number"==typeof f?f:null;var l=this.fd2file(a);return null==i&&(i=l.getPos()),l.writeSync(g,j,h,i)},a.prototype.read=function(a,c,d,f,g,h){void 0===h&&(h=j);var i,k,l,m,n;if("number"==typeof c){l=c,i=d;var o=f;h="function"==typeof g?g:h,k=0,m=new b(l),n=e(function(a,b,c){return a?h(a):void h(a,c.toString(o),b)},3)}else m=c,k=d,l=f,i=g,n=e(h,3);try{var p=this.fd2file(a);null==i&&(i=p.getPos()),p.read(m,k,l,i,n)}catch(a){n(a)}},a.prototype.readSync=function(a,c,d,e,f){var g,h,i,j,k=!1;if("number"==typeof c){i=c,j=d;var l=e;h=0,g=new b(i),k=!0}else g=c,h=d,i=e,j=f;var m=this.fd2file(a);null==j&&(j=m.getPos());var n=m.readSync(g,h,i,j);return k?[g.toString(l),n]:n},a.prototype.fchown=function(a,b,c,d){void 0===d&&(d=j);var f=e(d,1);try{this.fd2file(a).chown(b,c,f)}catch(a){f(a)}},a.prototype.fchownSync=function(a,b,c){this.fd2file(a).chownSync(b,c)},a.prototype.fchmod=function(a,b,c){var d=e(c,1);try{var f="string"==typeof b?parseInt(b,8):b;this.fd2file(a).chmod(f,d)}catch(a){d(a)}},a.prototype.fchmodSync=function(a,b){var c="string"==typeof b?parseInt(b,8):b;this.fd2file(a).chmodSync(c)},a.prototype.futimes=function(a,b,c,d){void 0===d&&(d=j);var f=e(d,1);try{var g=this.fd2file(a);"number"==typeof b&&(b=new Date(1e3*b)),"number"==typeof c&&(c=new Date(1e3*c)),g.utimes(b,c,f)}catch(a){f(a)}},a.prototype.futimesSync=function(a,b,c){this.fd2file(a).utimesSync(g(b),g(c))},a.prototype.rmdir=function(a,b){void 0===b&&(b=j);var c=e(b,1);try{a=h(a),this.root.rmdir(a,c)}catch(a){c(a)}},a.prototype.rmdirSync=function(a){return a=h(a),this.root.rmdirSync(a)},a.prototype.mkdir=function(a,b,c){void 0===c&&(c=j),"function"==typeof b&&(c=b,b=511);var d=e(c,1);try{a=h(a),this.root.mkdir(a,b,d)}catch(a){d(a)}},a.prototype.mkdirSync=function(a,b){this.root.mkdirSync(h(a),f(b,511))},a.prototype.readdir=function(a,b){void 0===b&&(b=j);var c=e(b,2);try{a=h(a),this.root.readdir(a,c)}catch(a){c(a)}},a.prototype.readdirSync=function(a){return a=h(a),this.root.readdirSync(a)},a.prototype.link=function(a,b,c){void 0===c&&(c=j);var d=e(c,1);try{a=h(a),b=h(b),this.root.link(a,b,d)}catch(a){d(a)}},a.prototype.linkSync=function(a,b){return a=h(a),b=h(b),this.root.linkSync(a,b)},a.prototype.symlink=function(a,b,c,d){void 0===d&&(d=j);var f="string"==typeof c?c:"file";d="function"==typeof c?c:d;var g=e(d,1);try{if("file"!==f&&"dir"!==f)return g(new k.ApiError(k.ErrorCode.EINVAL,"Invalid type: "+f));a=h(a),b=h(b),this.root.symlink(a,b,f,g)}catch(a){g(a)}},a.prototype.symlinkSync=function(a,b,c){if(null==c)c="file";else if("file"!==c&&"dir"!==c)throw new k.ApiError(k.ErrorCode.EINVAL,"Invalid type: "+c);return a=h(a),b=h(b),this.root.symlinkSync(a,b,c)},a.prototype.readlink=function(a,b){void 0===b&&(b=j);var c=e(b,2);try{a=h(a),this.root.readlink(a,c)}catch(a){c(a)}},a.prototype.readlinkSync=function(a){return a=h(a),this.root.readlinkSync(a)},a.prototype.chown=function(a,b,c,d){void 0===d&&(d=j);var f=e(d,1);try{a=h(a),this.root.chown(a,!1,b,c,f)}catch(a){f(a)}},a.prototype.chownSync=function(a,b,c){a=h(a),this.root.chownSync(a,!1,b,c)},a.prototype.lchown=function(a,b,c,d){void 0===d&&(d=j);var f=e(d,1);try{a=h(a),this.root.chown(a,!0,b,c,f)}catch(a){f(a)}},a.prototype.lchownSync=function(a,b,c){a=h(a),this.root.chownSync(a,!0,b,c)},a.prototype.chmod=function(a,b,c){void 0===c&&(c=j);var d=e(c,1);try{var g=f(b,-1);if(g<0)throw new k.ApiError(k.ErrorCode.EINVAL,"Invalid mode.");this.root.chmod(h(a),!1,g,d)}catch(a){d(a)}},a.prototype.chmodSync=function(a,b){var c=f(b,-1);if(c<0)throw new k.ApiError(k.ErrorCode.EINVAL,"Invalid mode.");a=h(a),this.root.chmodSync(a,!1,c)},a.prototype.lchmod=function(a,b,c){void 0===c&&(c=j);var d=e(c,1);try{var g=f(b,-1);if(g<0)throw new k.ApiError(k.ErrorCode.EINVAL,"Invalid mode.");this.root.chmod(h(a),!0,g,d)}catch(a){d(a)}},a.prototype.lchmodSync=function(a,b){var c=f(b,-1);if(c<1)throw new k.ApiError(k.ErrorCode.EINVAL,"Invalid mode.");this.root.chmodSync(h(a),!0,c)},a.prototype.utimes=function(a,b,c,d){void 0===d&&(d=j);var f=e(d,1);try{this.root.utimes(h(a),g(b),g(c),f)}catch(a){f(a)}},a.prototype.utimesSync=function(a,b,c){this.root.utimesSync(h(a),g(b),g(c))},a.prototype.realpath=function(a,b,c){void 0===c&&(c=j);var d="object"==typeof b?b:{};c="function"==typeof b?b:j;var f=e(c,2);try{a=h(a),this.root.realpath(a,d,f)}catch(a){f(a)}},a.prototype.realpathSync=function(a,b){return void 0===b&&(b={}),a=h(a),this.root.realpathSync(a,b)},a.prototype.watchFile=function(a,b,c){throw void 0===c&&(c=j),new k.ApiError(k.ErrorCode.ENOTSUP)},a.prototype.unwatchFile=function(a,b){throw void 0===b&&(b=j),new k.ApiError(k.ErrorCode.ENOTSUP)},a.prototype.watch=function(a,b,c){throw void 0===c&&(c=j),new k.ApiError(k.ErrorCode.ENOTSUP)},a.prototype.access=function(a,b,c){throw void 0===c&&(c=j),new k.ApiError(k.ErrorCode.ENOTSUP)},a.prototype.accessSync=function(a,b){throw new k.ApiError(k.ErrorCode.ENOTSUP)},a.prototype.createReadStream=function(a,b){throw new k.ApiError(k.ErrorCode.ENOTSUP)},a.prototype.createWriteStream=function(a,b){throw new k.ApiError(k.ErrorCode.ENOTSUP)},a.Stats=n.default,a}();c.__esModule=!0,c.default=p;new p}).call(this,a("bfs-buffer").Buffer,!0)},{"./api_error":52,"./file_flag":56,"./global":58,"./node_fs_stats":60,"bfs-buffer":2,path:10}],52:[function(a,b,c){(function(a){"use strict";var b=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)};!function(a){a[a.EPERM=1]="EPERM",a[a.ENOENT=2]="ENOENT",a[a.EIO=5]="EIO",a[a.EBADF=9]="EBADF",a[a.EACCES=13]="EACCES",a[a.EBUSY=16]="EBUSY",a[a.EEXIST=17]="EEXIST",a[a.ENOTDIR=20]="ENOTDIR",a[a.EISDIR=21]="EISDIR",a[a.EINVAL=22]="EINVAL",a[a.EFBIG=27]="EFBIG",a[a.ENOSPC=28]="ENOSPC",a[a.EROFS=30]="EROFS",a[a.ENOTEMPTY=39]="ENOTEMPTY",a[a.ENOTSUP=95]="ENOTSUP"}(c.ErrorCode||(c.ErrorCode={}));var d=c.ErrorCode;c.ErrorStrings={},c.ErrorStrings[d.EPERM]="Operation not permitted.",c.ErrorStrings[d.ENOENT]="No such file or directory.",c.ErrorStrings[d.EIO]="Input/output error.",c.ErrorStrings[d.EBADF]="Bad file descriptor.",c.ErrorStrings[d.EACCES]="Permission denied.",c.ErrorStrings[d.EBUSY]="Resource busy or locked.",c.ErrorStrings[d.EEXIST]="File exists.",c.ErrorStrings[d.ENOTDIR]="File is not a directory.",c.ErrorStrings[d.EISDIR]="File is a directory.",c.ErrorStrings[d.EINVAL]="Invalid argument.",c.ErrorStrings[d.EFBIG]="File is too big.",c.ErrorStrings[d.ENOSPC]="No space left on disk.",c.ErrorStrings[d.EROFS]="Cannot modify a read-only file system.",c.ErrorStrings[d.ENOTEMPTY]="Directory is not empty.",c.ErrorStrings[d.ENOTSUP]="Operation is not supported.";var e=function(e){function f(a,b,f){void 0===b&&(b=c.ErrorStrings[a]),void 0===f&&(f=null),e.call(this,b),this.syscall="",this.errno=a,this.code=d[a],this.path=f,this.stack=(new Error).stack,this.message="Error: "+this.code+": "+b+(this.path?", '"+this.path+"'":"")}return b(f,e),f.prototype.toString=function(){return this.message},f.prototype.toJSON=function(){return{errno:this.errno,code:this.code,path:this.path,stack:this.stack,message:this.message}},f.fromJSON=function(a){var b=new f(0);return b.errno=a.errno,b.code=a.code,b.path=a.path,b.stack=a.stack,b.message=a.message,b},f.prototype.writeToBuffer=function(b,c){void 0===b&&(b=new a(this.bufferSize())),void 0===c&&(c=0);var d=b.write(JSON.stringify(this.toJSON()),c+4);return b.writeUInt32LE(d,c),b},f.fromBuffer=function(a,b){return void 0===b&&(b=0),f.fromJSON(JSON.parse(a.toString("utf8",b+4,b+4+a.readUInt32LE(b))))},f.prototype.bufferSize=function(){return 4+a.byteLength(JSON.stringify(this.toJSON()))},f.FileError=function(a,b){return new f(a,c.ErrorStrings[a],b)},f.ENOENT=function(a){return this.FileError(d.ENOENT,a)},f.EEXIST=function(a){return this.FileError(d.EEXIST,a)},f.EISDIR=function(a){return this.FileError(d.EISDIR,a)},f.ENOTDIR=function(a){return this.FileError(d.ENOTDIR,a)},f.EPERM=function(a){return this.FileError(d.EPERM,a)},f.ENOTEMPTY=function(a){return this.FileError(d.ENOTEMPTY,a)},f}(Error);c.ApiError=e}).call(this,a("bfs-buffer").Buffer)},{"bfs-buffer":2}],53:[function(a,b,c){"use strict";var d=a("../backend/AsyncMirror");c.AsyncMirror=d.default;var e=a("../backend/Dropbox");c.Dropbox=e.default;var f=a("../backend/Emscripten");c.Emscripten=f.default;var g=a("../backend/FolderAdapter");c.FolderAdapter=g.default;var h=a("../backend/HTML5FS");c.HTML5FS=h.default;var i=a("../backend/InMemory");c.InMemory=i.default;var j=a("../backend/IndexedDB");c.IndexedDB=j.default;var k=a("../backend/LocalStorage");c.LocalStorage=k.default;var l=a("../backend/MountableFileSystem");c.MountableFileSystem=l.default;var m=a("../backend/OverlayFS");c.OverlayFS=m.default;var n=a("../backend/WorkerFS");c.WorkerFS=n.default;var o=a("../backend/XmlHttpRequest");c.XmlHttpRequest=o.default;var p=a("../backend/ZipFS");c.ZipFS=p.default},{"../backend/AsyncMirror":37,"../backend/Dropbox":38,"../backend/Emscripten":39,"../backend/FolderAdapter":40,"../backend/HTML5FS":41,"../backend/InMemory":42,"../backend/IndexedDB":43,"../backend/LocalStorage":44,"../backend/MountableFileSystem":45,"../backend/OverlayFS":46,"../backend/WorkerFS":47,"../backend/XmlHttpRequest":48,"../backend/ZipFS":49}],54:[function(a,b,c){(function(b,d){"use strict";function e(a){a.Buffer=d,a.process=b;var c=null!=a.require?a.require:null;a.require=function(a){var b=g(a);return null==b?c.apply(null,Array.prototype.slice.call(arguments,0)):b}}function f(a,b){m[a]=b}function g(a){switch(a){case"fs":return j;case"path":return k;case"buffer":return i;case"process":return b;case"bfs_utils":return n;default:return m[a]}}function h(a){return j.initialize(a)}var i=a("buffer"),j=a("./node_fs"),k=a("path"),l=a("../generic/emscripten_fs");c.EmscriptenFS=l.default;var m=a("./backends");c.FileSystem=m;var n=a("./util");b.initializeTTYs&&b.initializeTTYs(),c.install=e,c.registerFileSystem=f,c.BFSRequire=g,c.initialize=h}).call(this,a("bfs-process"),a("bfs-buffer").Buffer)},{"../generic/emscripten_fs":62,"./backends":53,"./node_fs":59,"./util":61,"bfs-buffer":2,"bfs-process":11,buffer:2,path:10}],55:[function(a,b,c){"use strict";var d=a("./api_error"),e=function(){function a(){}return a.prototype.sync=function(a){a(new d.ApiError(d.ErrorCode.ENOTSUP))},a.prototype.syncSync=function(){throw new d.ApiError(d.ErrorCode.ENOTSUP)},a.prototype.datasync=function(a){this.sync(a)},a.prototype.datasyncSync=function(){return this.syncSync()},a.prototype.chown=function(a,b,c){c(new d.ApiError(d.ErrorCode.ENOTSUP))},a.prototype.chownSync=function(a,b){throw new d.ApiError(d.ErrorCode.ENOTSUP)},a.prototype.chmod=function(a,b){b(new d.ApiError(d.ErrorCode.ENOTSUP))},a.prototype.chmodSync=function(a){throw new d.ApiError(d.ErrorCode.ENOTSUP)},a.prototype.utimes=function(a,b,c){c(new d.ApiError(d.ErrorCode.ENOTSUP))},a.prototype.utimesSync=function(a,b){throw new d.ApiError(d.ErrorCode.ENOTSUP)},a}();c.BaseFile=e},{"./api_error":52}],56:[function(a,b,c){"use strict";var d=a("./api_error");!function(a){a[a.NOP=0]="NOP",a[a.THROW_EXCEPTION=1]="THROW_EXCEPTION",a[a.TRUNCATE_FILE=2]="TRUNCATE_FILE",a[a.CREATE_FILE=3]="CREATE_FILE"}(c.ActionType||(c.ActionType={}));var e=c.ActionType,f=function(){function a(b){if(this.flagStr=b,a.validFlagStrs.indexOf(b)<0)throw new d.ApiError(d.ErrorCode.EINVAL,"Invalid flag: "+b)}return a.getFileFlag=function(b){return a.flagCache.hasOwnProperty(b)?a.flagCache[b]:a.flagCache[b]=new a(b)},a.prototype.getFlagString=function(){return this.flagStr},a.prototype.isReadable=function(){return this.flagStr.indexOf("r")!==-1||this.flagStr.indexOf("+")!==-1},a.prototype.isWriteable=function(){return this.flagStr.indexOf("w")!==-1||this.flagStr.indexOf("a")!==-1||this.flagStr.indexOf("+")!==-1},a.prototype.isTruncating=function(){return this.flagStr.indexOf("w")!==-1},a.prototype.isAppendable=function(){return this.flagStr.indexOf("a")!==-1},a.prototype.isSynchronous=function(){return this.flagStr.indexOf("s")!==-1},a.prototype.isExclusive=function(){return this.flagStr.indexOf("x")!==-1},a.prototype.pathExistsAction=function(){return this.isExclusive()?e.THROW_EXCEPTION:this.isTruncating()?e.TRUNCATE_FILE:e.NOP},a.prototype.pathNotExistsAction=function(){return(this.isWriteable()||this.isAppendable())&&"r+"!==this.flagStr?e.CREATE_FILE:e.THROW_EXCEPTION},a.flagCache={},a.validFlagStrs=["r","r+","rs","rs+","w","wx","w+","wx+","a","ax","a+","ax+"],a}();c.FileFlag=f},{"./api_error":52}],57:[function(a,b,c){(function(b){"use strict";var d=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},e=a("./api_error"),f=a("./file_flag"),g=a("path"),h=function(){function a(){}return a.prototype.supportsLinks=function(){return!1},a.prototype.diskSpace=function(a,b){b(0,0)},a.prototype.openFile=function(a,b,c){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.createFile=function(a,b,c,d){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.open=function(a,b,c,d){var h=this,i=function(i,j){if(i)switch(b.pathNotExistsAction()){case f.ActionType.CREATE_FILE:return h.stat(g.dirname(a),!1,function(f,i){f?d(f):i.isDirectory()?h.createFile(a,b,c,d):d(e.ApiError.ENOTDIR(g.dirname(a)))});case f.ActionType.THROW_EXCEPTION:return d(e.ApiError.ENOENT(a));default:return d(new e.ApiError(e.ErrorCode.EINVAL,"Invalid FileFlag object."))}else{if(j.isDirectory())return d(e.ApiError.EISDIR(a));switch(b.pathExistsAction()){case f.ActionType.THROW_EXCEPTION:return d(e.ApiError.EEXIST(a));case f.ActionType.TRUNCATE_FILE:return h.openFile(a,b,function(a,b){a?d(a):b.truncate(0,function(){b.sync(function(){d(null,b)})})});case f.ActionType.NOP:return h.openFile(a,b,d);default:return d(new e.ApiError(e.ErrorCode.EINVAL,"Invalid FileFlag object."))}}};this.stat(a,!1,i)},a.prototype.rename=function(a,b,c){c(new e.ApiError(e.ErrorCode.ENOTSUP))},a.prototype.renameSync=function(a,b){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.stat=function(a,b,c){c(new e.ApiError(e.ErrorCode.ENOTSUP))},a.prototype.statSync=function(a,b){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.openFileSync=function(a,b,c){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.createFileSync=function(a,b,c){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.openSync=function(a,b,c){var d;try{d=this.statSync(a,!1)}catch(d){switch(b.pathNotExistsAction()){case f.ActionType.CREATE_FILE:var h=this.statSync(g.dirname(a),!1);if(!h.isDirectory())throw e.ApiError.ENOTDIR(g.dirname(a));return this.createFileSync(a,b,c);case f.ActionType.THROW_EXCEPTION:throw e.ApiError.ENOENT(a);default:throw new e.ApiError(e.ErrorCode.EINVAL,"Invalid FileFlag object.")}}if(d.isDirectory())throw e.ApiError.EISDIR(a);switch(b.pathExistsAction()){case f.ActionType.THROW_EXCEPTION:throw e.ApiError.EEXIST(a);case f.ActionType.TRUNCATE_FILE:return this.unlinkSync(a),this.createFileSync(a,b,d.mode);case f.ActionType.NOP:return this.openFileSync(a,b,c);default:throw new e.ApiError(e.ErrorCode.EINVAL,"Invalid FileFlag object.")}},a.prototype.unlink=function(a,b){b(new e.ApiError(e.ErrorCode.ENOTSUP))},a.prototype.unlinkSync=function(a){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.rmdir=function(a,b){b(new e.ApiError(e.ErrorCode.ENOTSUP))},a.prototype.rmdirSync=function(a){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.mkdir=function(a,b,c){c(new e.ApiError(e.ErrorCode.ENOTSUP))},a.prototype.mkdirSync=function(a,b){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.readdir=function(a,b){b(new e.ApiError(e.ErrorCode.ENOTSUP))},a.prototype.readdirSync=function(a){throw new e.ApiError(e.ErrorCode.ENOTSUP)},a.prototype.exists=function(a,b){this.stat(a,null,function(a){b(null==a)})},a.prototype.existsSync=function(a){try{return this.statSync(a,!0),!0}catch(a){return!1}},a.prototype.realpath=function(a,b,c){if(this.supportsLinks())for(var d=a.split(g.sep),f=0;fa.length||c>d)throw new TypeError("Invalid slice bounds on buffer of length "+a.length+": ["+c+", "+d+"]");if(0===a.length)return new b(0);if(m){var e=f(a),g=a.readUInt8(0),h=(g+1)%255;return a.writeUInt8(h,0),e[0]===h?(e[0]=g,i(e.slice(c,d))):(a.writeUInt8(g,0),i(e.subarray(c,d)))}var j=new b(d-c);return a.copy(j,0,c,d),j}var l=a("path"),m="undefined"!=typeof ArrayBuffer;c.isIE="undefined"!=typeof navigator&&(null!=/(msie) ([\w.]+)/.exec(navigator.userAgent.toLowerCase())||navigator.userAgent.indexOf("Trident")!==-1),c.isWebWorker="undefined"==typeof window,c.mkdirpSync=d,c.buffer2ArrayBuffer=e,c.buffer2Uint8array=f,c.buffer2Arrayish=g,c.arrayish2Buffer=h,c.uint8Array2Buffer=i,c.arrayBuffer2Buffer=j,"undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array&&(Uint8Array.prototype.slice||(Uint8Array.prototype.slice=function(a,b){void 0===a&&(a=0),void 0===b&&(b=this.length);var c=this;return a<0&&(a=this.length+a,a<0&&(a=0)),b<0&&(b=this.length+b,b<0&&(b=0)),b0;){var g,h=e.pop(),k=h[0],l=h[1],m=h[2];for(var n in l){var o=l[n],p=""+k+"/"+n;null!=o?(c._index[p]=g=new j,e.push([p,o,g])):g=new i(new f.default(f.FileType.FILE,-1,365)),null!=m&&(m._ls[n]=g)}}return c},a}();c.FileIndex=h;var i=function(){function a(a){this.data=a}return a.prototype.isFile=function(){return!0},a.prototype.isDir=function(){return!1},a.prototype.getData=function(){return this.data},a.prototype.setData=function(a){this.data=a},a}();c.FileInode=i;var j=function(){function a(a){void 0===a&&(a=null),this.data=a,this._ls={}}return a.prototype.isFile=function(){return!1},a.prototype.isDir=function(){return!0},a.prototype.getData=function(){return this.data},a.prototype.getStats=function(){return new f.default(f.FileType.DIRECTORY,4096,365)},a.prototype.getListing=function(){return Object.keys(this._ls)},a.prototype.getItem=function(a){var b;return null!=(b=this._ls[a])?b:null},a.prototype.addItem=function(a,b){return!(a in this._ls)&&(this._ls[a]=b,!0)},a.prototype.remItem=function(a){var b=this._ls[a];return void 0===b?null:(delete this._ls[a],b)},a}();c.DirInode=j,c.isFileInode=d,c.isDirInode=e},{"../core/node_fs_stats":60,path:10}],64:[function(a,b,c){(function(c){"use strict";var d=a("../core/node_fs_stats"),e=function(){function a(a,b,c,d,e,f){this.id=a,this.size=b,this.mode=c,this.atime=d,this.mtime=e,this.ctime=f}return a.prototype.toStats=function(){return new d.default((61440&this.mode)===d.FileType.DIRECTORY?d.FileType.DIRECTORY:d.FileType.FILE,this.size,this.mode,new Date(this.atime),new Date(this.mtime),new Date(this.ctime))},a.prototype.getSize=function(){return 30+this.id.length},a.prototype.toBuffer=function(a){return void 0===a&&(a=new c(this.getSize())),a.writeUInt32LE(this.size,0),a.writeUInt16LE(this.mode,4),a.writeDoubleLE(this.atime,6),a.writeDoubleLE(this.mtime,14),a.writeDoubleLE(this.ctime,22),a.write(this.id,30,this.id.length,"ascii"),a},a.prototype.update=function(a){var b=!1;this.size!==a.size&&(this.size=a.size,b=!0),this.mode!==a.mode&&(this.mode=a.mode,b=!0);var c=a.atime.getTime();this.atime!==c&&(this.atime=c,b=!0);var d=a.mtime.getTime();this.mtime!==d&&(this.mtime=d,b=!0);var e=a.ctime.getTime();return this.ctime!==e&&(this.ctime=e,b=!0),b},a.fromBuffer=function(b){if(void 0===b)throw new Error("NO");return new a(b.toString("ascii",30),b.readUInt32LE(0),b.readUInt16LE(4),b.readDoubleLE(6),b.readDoubleLE(14),b.readDoubleLE(22))},a.prototype.isFile=function(){return(61440&this.mode)===d.FileType.FILE},a.prototype.isDirectory=function(){return(61440&this.mode)===d.FileType.DIRECTORY},a}();b.exports=e}).call(this,a("bfs-buffer").Buffer)},{"../core/node_fs_stats":60,"bfs-buffer":2}],65:[function(a,b,c){(function(b){"use strict";function d(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function e(a,b){return!a||(b(a),!1)}function f(a,b,c){return!a||(b.abort(function(){c(a)}),!1)}var g=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},h=a("../core/file_system"),i=a("../core/api_error"),j=a("../core/node_fs_stats"),k=a("path"),l=a("../generic/inode"),m=a("../generic/preload_file"),n="/",o=function(){function a(a){this.store=a,this.originalData={},this.modifiedKeys=[]}return a.prototype.stashOldValue=function(a,b){this.originalData.hasOwnProperty(a)||(this.originalData[a]=b)},a.prototype.markModified=function(a){this.modifiedKeys.indexOf(a)===-1&&(this.modifiedKeys.push(a),this.originalData.hasOwnProperty(a)||(this.originalData[a]=this.store.get(a)))},a.prototype.get=function(a){var b=this.store.get(a);return this.stashOldValue(a,b),b},a.prototype.put=function(a,b,c){return this.markModified(a),this.store.put(a,b,c)},a.prototype.del=function(a){this.markModified(a),this.store.del(a)},a.prototype.commit=function(){},a.prototype.abort=function(){var a,b,c;for(a=0;a0)throw i.ApiError.ENOTEMPTY(a);this.removeEntry(a,!0)},c.prototype.mkdirSync=function(a,c){var d=this.store.beginTransaction("readwrite"),e=new b("{}");this.commitNewFile(d,a,j.FileType.DIRECTORY,c,e)},c.prototype.readdirSync=function(a){var b=this.store.beginTransaction("readonly");return Object.keys(this.getDirListing(b,a,this.findINode(b,a)))},c.prototype._syncSync=function(a,b,c){var d=this.store.beginTransaction("readwrite"),e=this._findINode(d,k.dirname(a),k.basename(a)),f=this.getINode(d,a,e),g=f.update(c);try{d.put(f.id,b,!0),g&&d.put(e,f.toBuffer(),!0)}catch(a){throw d.abort(),a}d.commit()},c}(h.SynchronousFileSystem);c.SyncKeyValueFileSystem=q;var r=function(a){function b(b,c,d,e,f){a.call(this,b,c,d,e,f)}return g(b,a),b.prototype.sync=function(a){var b=this;this.isDirty()?this._fs._sync(this.getPath(),this.getBuffer(),this.getStats(),function(c){c||b.resetDirty(),a(c)}):a()},b.prototype.close=function(a){this.sync(a)},b}(m.PreloadFile);c.AsyncKeyValueFile=r;var s=function(a){function c(){a.apply(this,arguments)}return g(c,a),c.prototype.init=function(a,b){this.store=a,this.makeRootDirectory(b)},c.isAvailable=function(){return!0},c.prototype.getName=function(){return this.store.name()},c.prototype.isReadOnly=function(){return!1},c.prototype.supportsSymlinks=function(){return!1},c.prototype.supportsProps=function(){return!1},c.prototype.supportsSynch=function(){return!1},c.prototype.makeRootDirectory=function(a){var c=this.store.beginTransaction("readwrite");c.get(n,function(e,g){if(e||void 0===g){var h=(new Date).getTime(),i=new l(d(),4096,511|j.FileType.DIRECTORY,h,h,h);c.put(i.id,new b("{}"),!1,function(b){f(b,c,a)&&c.put(n,i.toBuffer(),!1,function(b){b?c.abort(function(){a(b)}):c.commit(a)})})}else c.commit(a)})},c.prototype._findINode=function(a,b,c,d){var f=this,g=function(a,e,f){a?d(a):f[c]?d(null,f[c]):d(i.ApiError.ENOENT(k.resolve(b,c)))};"/"===b?""===c?d(null,n):this.getINode(a,b,n,function(c,h){e(c,d)&&f.getDirListing(a,b,h,function(a,b){g(a,h,b)})}):this.findINodeAndDirListing(a,b,g)},c.prototype.findINode=function(a,b,c){var d=this;this._findINode(a,k.dirname(b),k.basename(b),function(f,g){e(f,c)&&d.getINode(a,b,g,c)})},c.prototype.getINode=function(a,b,c,d){a.get(c,function(a,c){e(a,d)&&(void 0===c?d(i.ApiError.ENOENT(b)):d(null,l.fromBuffer(c)))})},c.prototype.getDirListing=function(a,b,c,d){c.isDirectory()?a.get(c.id,function(a,c){if(e(a,d))try{d(null,JSON.parse(c.toString()))}catch(a){d(i.ApiError.ENOENT(b))}}):d(i.ApiError.ENOTDIR(b))},c.prototype.findINodeAndDirListing=function(a,b,c){var d=this;this.findINode(a,b,function(f,g){e(f,c)&&d.getDirListing(a,b,g,function(a,b){e(a,c)&&c(null,g,b)})})},c.prototype.addNewNode=function(a,b,c){var e,f=0,g=function(){5===++f?c(new i.ApiError(i.ErrorCode.EIO,"Unable to commit data to key-value store.")):(e=d(),a.put(e,b,!1,function(a,b){a||!b?g():c(null,e)}))};g()},c.prototype.commitNewFile=function(a,c,d,e,g,h){var j=this,m=k.dirname(c),n=k.basename(c),o=(new Date).getTime();return"/"===c?h(i.ApiError.EEXIST(c)):void this.findINodeAndDirListing(a,m,function(k,m,p){f(k,a,h)&&(p[n]?a.abort(function(){h(i.ApiError.EEXIST(c))}):j.addNewNode(a,g,function(c,i){if(f(c,a,h)){var k=new l(i,g.length,e|d,o,o,o);j.addNewNode(a,k.toBuffer(),function(c,d){f(c,a,h)&&(p[n]=d,a.put(m.id,new b(JSON.stringify(p)),!0,function(b){f(b,a,h)&&a.commit(function(b){f(b,a,h)&&h(null,k)})}))})}}))})},c.prototype.empty=function(a){var b=this;this.store.clear(function(c){e(c,a)&&b.makeRootDirectory(a)})},c.prototype.rename=function(a,c,d){var e=this,g=this.store.beginTransaction("readwrite"),h=k.dirname(a),j=k.basename(a),l=k.dirname(c),m=k.basename(c),n={},o={},p=!1;if(0===(l+"/").indexOf(a+"/"))return d(new i.ApiError(i.ErrorCode.EBUSY,h));var q=function(){if(!p&&o.hasOwnProperty(h)&&o.hasOwnProperty(l)){var k=o[h],q=n[h],r=o[l],s=n[l];if(k[j]){var t=k[j];delete k[j];var u=function(){r[m]=t,g.put(q.id,new b(JSON.stringify(k)),!0,function(a){f(a,g,d)&&(h===l?g.commit(d):g.put(s.id,new b(JSON.stringify(r)),!0,function(a){f(a,g,d)&&g.commit(d)}))})};r[m]?e.getINode(g,c,r[m],function(a,b){f(a,g,d)&&(b.isFile()?g.del(b.id,function(a){f(a,g,d)&&g.del(r[m],function(a){f(a,g,d)&&u()})}):g.abort(function(a){d(i.ApiError.EPERM(c))}))}):u()}else d(i.ApiError.ENOENT(a))}},r=function(a){e.findINodeAndDirListing(g,a,function(b,c,e){b?p||(p=!0,g.abort(function(){d(b)})):(n[a]=c,o[a]=e,q())})};r(h),h!==l&&r(l)},c.prototype.stat=function(a,b,c){var d=this.store.beginTransaction("readonly");this.findINode(d,a,function(a,b){e(a,c)&&c(null,b.toStats())})},c.prototype.createFile=function(a,c,d,f){var g=this,h=this.store.beginTransaction("readwrite"),i=new b(0);this.commitNewFile(h,a,j.FileType.FILE,d,i,function(b,d){e(b,f)&&f(null,new r(g,a,c,d.toStats(),i))})},c.prototype.openFile=function(a,b,c){var d=this,f=this.store.beginTransaction("readonly");this.findINode(f,a,function(g,h){e(g,c)&&f.get(h.id,function(f,g){e(f,c)&&(void 0===g?c(i.ApiError.ENOENT(a)):c(null,new r(d,a,b,h.toStats(),g)))})})},c.prototype.removeEntry=function(a,c,d){var e=this,g=this.store.beginTransaction("readwrite"),h=k.dirname(a),j=k.basename(a);this.findINodeAndDirListing(g,h,function(h,k,l){if(f(h,g,d))if(l[j]){var m=l[j];delete l[j],e.getINode(g,a,m,function(e,h){f(e,g,d)&&(!c&&h.isDirectory()?g.abort(function(){d(i.ApiError.EISDIR(a))}):c&&!h.isDirectory()?g.abort(function(){d(i.ApiError.ENOTDIR(a))}):g.del(h.id,function(a){f(a,g,d)&&g.del(m,function(a){f(a,g,d)&&g.put(k.id,new b(JSON.stringify(l)),!0,function(a){f(a,g,d)&&g.commit(d)})})}))})}else g.abort(function(){d(i.ApiError.ENOENT(a))})})},c.prototype.unlink=function(a,b){this.removeEntry(a,!1,b)},c.prototype.rmdir=function(a,b){var c=this;this.readdir(a,function(d,e){d?b(d):e.length>0?b(i.ApiError.ENOTEMPTY(a)):c.removeEntry(a,!0,b)})},c.prototype.mkdir=function(a,c,d){var e=this.store.beginTransaction("readwrite"),f=new b("{}");this.commitNewFile(e,a,j.FileType.DIRECTORY,c,f,d)},c.prototype.readdir=function(a,b){var c=this,d=this.store.beginTransaction("readonly");this.findINode(d,a,function(f,g){e(f,b)&&c.getDirListing(d,a,g,function(a,c){e(a,b)&&b(null,Object.keys(c))})})},c.prototype._sync=function(a,b,c,d){var e=this,g=this.store.beginTransaction("readwrite");this._findINode(g,k.dirname(a),k.basename(a),function(h,i){f(h,g,d)&&e.getINode(g,a,i,function(a,e){if(f(a,g,d)){var h=e.update(c);g.put(e.id,b,!0,function(a){f(a,g,d)&&(h?g.put(i,e.toBuffer(),!0,function(a){f(a,g,d)&&g.commit(d)}):g.commit(d))})}})})},c}(h.BaseFileSystem);c.AsyncKeyValueFileSystem=s}).call(this,a("bfs-buffer").Buffer)},{"../core/api_error":52,"../core/file_system":57,"../core/node_fs_stats":60,"../generic/inode":64,"../generic/preload_file":68,"bfs-buffer":2,path:10}],66:[function(a,b,c){"use strict";var d=a("./mutex"),e=function(){function a(a){this._fs=a,this._mu=new d.default}return a.prototype.getName=function(){return"LockedFS<"+this._fs.getName()+">"},a.prototype.getFSUnlocked=function(){return this._fs},a.prototype.initialize=function(a){this._fs.initialize(a)},a.prototype.diskSpace=function(a,b){this._fs.diskSpace(a,b)},a.prototype.isReadOnly=function(){return this._fs.isReadOnly()},a.prototype.supportsLinks=function(){return this._fs.supportsLinks()},a.prototype.supportsProps=function(){return this._fs.supportsProps()},a.prototype.supportsSynch=function(){return this._fs.supportsSynch()},a.prototype.rename=function(a,b,c){var d=this;this._mu.lock(function(){d._fs.rename(a,b,function(a){d._mu.unlock(),c(a)})})},a.prototype.renameSync=function(a,b){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.renameSync(a,b)},a.prototype.stat=function(a,b,c){var d=this;this._mu.lock(function(){d._fs.stat(a,b,function(a,b){d._mu.unlock(),c(a,b)})})},a.prototype.statSync=function(a,b){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.statSync(a,b)},a.prototype.open=function(a,b,c,d){var e=this;this._mu.lock(function(){e._fs.open(a,b,c,function(a,b){e._mu.unlock(),d(a,b)})})},a.prototype.openSync=function(a,b,c){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.openSync(a,b,c)},a.prototype.unlink=function(a,b){var c=this;this._mu.lock(function(){c._fs.unlink(a,function(a){c._mu.unlock(),b(a)})})},a.prototype.unlinkSync=function(a){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.unlinkSync(a)},a.prototype.rmdir=function(a,b){var c=this;this._mu.lock(function(){c._fs.rmdir(a,function(a){c._mu.unlock(),b(a)})})},a.prototype.rmdirSync=function(a){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.rmdirSync(a)},a.prototype.mkdir=function(a,b,c){var d=this;this._mu.lock(function(){d._fs.mkdir(a,b,function(a){d._mu.unlock(),c(a)})})},a.prototype.mkdirSync=function(a,b){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.mkdirSync(a,b)},a.prototype.readdir=function(a,b){var c=this;this._mu.lock(function(){c._fs.readdir(a,function(a,d){c._mu.unlock(),b(a,d)})})},a.prototype.readdirSync=function(a){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readdirSync(a)},a.prototype.exists=function(a,b){var c=this;this._mu.lock(function(){c._fs.exists(a,function(a){c._mu.unlock(),b(a)})})},a.prototype.existsSync=function(a){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.existsSync(a)},a.prototype.realpath=function(a,b,c){var d=this;this._mu.lock(function(){d._fs.realpath(a,b,function(a,b){d._mu.unlock(),c(a,b)})})},a.prototype.realpathSync=function(a,b){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.realpathSync(a,b)},a.prototype.truncate=function(a,b,c){var d=this;this._mu.lock(function(){d._fs.truncate(a,b,function(a){d._mu.unlock(),c(a)})})},a.prototype.truncateSync=function(a,b){if(this._mu.isLocked())throw new Error("invalid sync call"); -return this._fs.truncateSync(a,b)},a.prototype.readFile=function(a,b,c,d){var e=this;this._mu.lock(function(){e._fs.readFile(a,b,c,function(a,b){e._mu.unlock(),d(a,b)})})},a.prototype.readFileSync=function(a,b,c){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readFileSync(a,b,c)},a.prototype.writeFile=function(a,b,c,d,e,f){var g=this;this._mu.lock(function(){g._fs.writeFile(a,b,c,d,e,function(a){g._mu.unlock(),f(a)})})},a.prototype.writeFileSync=function(a,b,c,d,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.writeFileSync(a,b,c,d,e)},a.prototype.appendFile=function(a,b,c,d,e,f){var g=this;this._mu.lock(function(){g._fs.appendFile(a,b,c,d,e,function(a){g._mu.unlock(),f(a)})})},a.prototype.appendFileSync=function(a,b,c,d,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.appendFileSync(a,b,c,d,e)},a.prototype.chmod=function(a,b,c,d){var e=this;this._mu.lock(function(){e._fs.chmod(a,b,c,function(a){e._mu.unlock(),d(a)})})},a.prototype.chmodSync=function(a,b,c){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.chmodSync(a,b,c)},a.prototype.chown=function(a,b,c,d,e){var f=this;this._mu.lock(function(){f._fs.chown(a,b,c,d,function(a){f._mu.unlock(),e(a)})})},a.prototype.chownSync=function(a,b,c,d){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.chownSync(a,b,c,d)},a.prototype.utimes=function(a,b,c,d){var e=this;this._mu.lock(function(){e._fs.utimes(a,b,c,function(a){e._mu.unlock(),d(a)})})},a.prototype.utimesSync=function(a,b,c){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.utimesSync(a,b,c)},a.prototype.link=function(a,b,c){var d=this;this._mu.lock(function(){d._fs.link(a,b,function(a){d._mu.unlock(),c(a)})})},a.prototype.linkSync=function(a,b){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.linkSync(a,b)},a.prototype.symlink=function(a,b,c,d){var e=this;this._mu.lock(function(){e._fs.symlink(a,b,c,function(a){e._mu.unlock(),d(a)})})},a.prototype.symlinkSync=function(a,b,c){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.symlinkSync(a,b,c)},a.prototype.readlink=function(a,b){var c=this;this._mu.lock(function(){c._fs.readlink(a,function(a,d){c._mu.unlock(),b(a,d)})})},a.prototype.readlinkSync=function(a){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readlinkSync(a)},a}();c.__esModule=!0,c.default=e},{"./mutex":67}],67:[function(a,b,c){"use strict";var d=function(){function a(){this._locked=!1,this._waiters=[]}return a.prototype.lock=function(a){return this._locked?void this._waiters.push(a):(this._locked=!0,void a())},a.prototype.unlock=function(){if(!this._locked)throw new Error("unlock of a non-locked mutex");var a=this._waiters.shift();return a?void setImmediate(a):void(this._locked=!1)},a.prototype.tryLock=function(){return!this._locked&&(this._locked=!0,!0)},a.prototype.isLocked=function(){return this._locked},a}();c.__esModule=!0,c.default=d},{}],68:[function(a,b,c){(function(b){"use strict";var d=this&&this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);a.prototype=null===b?Object.create(b):(c.prototype=b.prototype,new c)},e=a("../core/file"),f=a("../core/api_error"),g=a("../core/node_fs"),h=function(a){function c(c,d,e,f,g){if(a.call(this),this._pos=0,this._dirty=!1,this._fs=c,this._path=d,this._flag=e,this._stat=f,null!=g?this._buffer=g:this._buffer=new b(0),this._stat.size!==this._buffer.length&&this._flag.isReadable())throw new Error("Invalid buffer: Buffer is "+this._buffer.length+" long, yet Stats object specifies that file is "+this._stat.size+" long.")}return d(c,a),c.prototype.isDirty=function(){return this._dirty},c.prototype.resetDirty=function(){this._dirty=!1},c.prototype.getBuffer=function(){return this._buffer},c.prototype.getStats=function(){return this._stat},c.prototype.getFlag=function(){return this._flag},c.prototype.getPath=function(){return this._path},c.prototype.getPos=function(){return this._flag.isAppendable()?this._stat.size:this._pos},c.prototype.advancePos=function(a){return this._pos+=a},c.prototype.setPos=function(a){return this._pos=a},c.prototype.sync=function(a){try{this.syncSync(),a()}catch(b){a(b)}},c.prototype.syncSync=function(){throw new f.ApiError(f.ErrorCode.ENOTSUP)},c.prototype.close=function(a){try{this.closeSync(),a()}catch(b){a(b)}},c.prototype.closeSync=function(){throw new f.ApiError(f.ErrorCode.ENOTSUP)},c.prototype.stat=function(a){try{a(null,this._stat.clone())}catch(b){a(b)}},c.prototype.statSync=function(){return this._stat.clone()},c.prototype.truncate=function(a,b){try{this.truncateSync(a),this._flag.isSynchronous()&&!g.getRootFS().supportsSynch()&&this.sync(b),b()}catch(a){return b(a)}},c.prototype.truncateSync=function(a){if(this._dirty=!0,!this._flag.isWriteable())throw new f.ApiError(f.ErrorCode.EPERM,"File not opened with a writeable mode.");if(this._stat.mtime=new Date,a>this._buffer.length){var c=new b(a-this._buffer.length);return c.fill(0),this.writeSync(c,0,c.length,this._buffer.length),void(this._flag.isSynchronous()&&g.getRootFS().supportsSynch()&&this.syncSync())}this._stat.size=a;var d=new b(a);this._buffer.copy(d,0,0,a),this._buffer=d,this._flag.isSynchronous()&&g.getRootFS().supportsSynch()&&this.syncSync()},c.prototype.write=function(a,b,c,d,e){try{e(null,this.writeSync(a,b,c,d),a)}catch(a){e(a)}},c.prototype.writeSync=function(a,c,d,e){if(this._dirty=!0,null==e&&(e=this.getPos()),!this._flag.isWriteable())throw new f.ApiError(f.ErrorCode.EPERM,"File not opened with a writeable mode.");var g=e+d;if(g>this._stat.size&&(this._stat.size=g,g>this._buffer.length)){var h=new b(g);this._buffer.copy(h),this._buffer=h}var i=a.copy(this._buffer,e,c,c+d);return this._stat.mtime=new Date,this._flag.isSynchronous()?(this.syncSync(),i):(this.setPos(e+i),i)},c.prototype.read=function(a,b,c,d,e){try{e(null,this.readSync(a,b,c,d),a)}catch(a){e(a)}},c.prototype.readSync=function(a,b,c,d){if(!this._flag.isReadable())throw new f.ApiError(f.ErrorCode.EPERM,"File not opened with a readable mode.");null==d&&(d=this.getPos());var e=d+c;e>this._stat.size&&(c=this._stat.size-d);var g=this._buffer.copy(a,b,d,d+c);return this._stat.atime=new Date,this._pos=d+c,g},c.prototype.chmod=function(a,b){try{this.chmodSync(a),b()}catch(a){b(a)}},c.prototype.chmodSync=function(a){if(!this._fs.supportsProps())throw new f.ApiError(f.ErrorCode.ENOTSUP);this._dirty=!0,this._stat.chmod(a),this.syncSync()},c}(e.BaseFile);c.PreloadFile=h;var i=function(a){function b(b,c,d,e,f){a.call(this,b,c,d,e,f)}return d(b,a),b.prototype.sync=function(a){a()},b.prototype.syncSync=function(){},b.prototype.close=function(a){a()},b.prototype.closeSync=function(){},b}(h);c.NoSyncFile=i}).call(this,a("bfs-buffer").Buffer)},{"../core/api_error":52,"../core/file":55,"../core/node_fs":59,"bfs-buffer":2}],69:[function(a,b,c){(function(b){"use strict";function d(a){for(var b=IEBinaryToArray_ByteStr(a),c=IEBinaryToArray_ByteStr_Last(a),d=b.replace(/[\s\S]/g,function(a){var b=a.charCodeAt(0);return String.fromCharCode(255&b,b>>8)})+c,e=new Array(d.length),f=0;f>>0;if("function"!=typeof a)throw new TypeError;for(var d=[],e=arguments.length>=2?arguments[1]:void 0,f=0;f0)){var b=f.shift();return b()}};e.addEventListener?e.addEventListener("message",i,!0):e.attachEvent("onmessage",i)}else if(e.MessageChannel){var j=new e.MessageChannel;j.port1.onmessage=function(a){if(f.length>0)return f.shift()()},e.setImmediate=function(a){f.push(a),j.port2.postMessage("")}}else e.setImmediate=function(a){return setTimeout(a,0)}}if(Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){if(void 0===b&&(b=0),!this)throw new TypeError;var c=this.length;if(0===c||d>=c)return-1;var d=b;d<0&&(d=c+d);for(var e=d;e>>0;if("function"!=typeof a)throw new TypeError(a+" is not a function");for(b&&(c=b),d=new Array(g),e=0;e\r\n"+k+"\r\n");else{var l=document.createElement("script");l.type="text/vbscript",l.innerHTML=k,document.head.appendChild(l)}}var m=a("./core/browserfs");b.exports=m},{"./core/browserfs":54,"./core/global":58}]},{},[50])(50)}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.BrowserFS=e():t.BrowserFS=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){(function(t,r,i,o){"use strict";function s(t){if(t)return t;throw new Fe(be.EIO,"Initialize BrowserFS with a file system using BrowserFS.initialize(filesystem)")}function a(t,e){switch(typeof t){case"number":return t;case"string":var n=parseInt(t,8);return isNaN(n)?e:n;default:return e}}function c(t){if(t instanceof Date)return t;if("number"==typeof t)return new Date(1e3*t);throw new Fe(be.EINVAL,"Invalid time.")}function u(t){if(t.indexOf("\0")>=0)throw new Fe(be.EINVAL,"Path must be a string without null bytes.");if(""===t)throw new Fe(be.EINVAL,"Path must not be empty.");return ke.resolve(t)}function f(t,e,n,r){switch(typeof t){case"object":return{encoding:"undefined"!=typeof t.encoding?t.encoding:e,flag:"undefined"!=typeof t.flag?t.flag:n,mode:a(t.mode,r)};case"string":return{encoding:t,flag:n,mode:r};default:return{encoding:e,flag:n,mode:r}}}function h(){}function p(t,e,n,r,i){return tn?n+1:t+1:r===i?e:e+1}function l(t,e){if(t===e)return 0;if(t.length>e.length){var n=t;t=e,e=n}for(var r=t.length,i=e.length;r>0&&t.charCodeAt(r-1)===e.charCodeAt(i-1);)r--,i--;for(var o=0;ob?b+1:I+1:S===s[r+k]?u:u+1,u=I}}return b}function d(t,e,n){t&&console.warn("["+e+"] Direct file system constructor usage is deprecated for this file system, and will be removed in the next major version. Please use the '"+e+".Create("+JSON.stringify(n)+", callback)' method instead. See https://github.com/jvilk/BrowserFS/issues/176 for more details.")}function y(){throw new Error("BFS has reached an impossible code path; please file a bug.")}function g(t,e,n){n.existsSync(t)||(g(ke.dirname(t),e,n),n.mkdirSync(t,e))}function v(t){var e=m(t),n=e.byteOffset,r=e.byteLength;return 0===n&&r===e.buffer.byteLength?e.buffer:e.buffer.slice(n,n+r)}function m(t){return t instanceof Uint8Array?t:new Uint8Array(t)}function _(e){return e instanceof t?e:e instanceof Uint8Array?w(e):t.from(e)}function w(e){return e instanceof t?e:0===e.byteOffset&&e.byteLength===e.buffer.byteLength?E(e.buffer):t.from(e.buffer,e.byteOffset,e.byteLength)}function E(e){return t.from(e)}function b(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=t.length),e<0||n<0||n>t.length||e>n)throw new TypeError("Invalid slice bounds on buffer of length "+t.length+": ["+e+", "+n+"]");if(0===t.length)return S();var r=m(t),i=t[0],o=(i+1)%255;return t[0]=o,r[0]===o?(r[0]=i,w(r.slice(e,n))):(t[0]=i,w(r.subarray(e,n)))}function S(){return je?je:je=t.alloc(0)}function k(e,n){t.isBuffer(e)?n():n(new Fe(be.EINVAL,"option must be a Buffer."))}function I(t,e,n){function r(t){a||(t&&(a=!0,n(t)),s--,0===s&&c&&n())}var i=t.Options,o=t.Name,s=0,a=!1,c=!1,u=function(t){if(i.hasOwnProperty(t)){var c=i[t],u=e[t];if(void 0===u||null===u){if(!c.optional){var f=Object.keys(e).filter(function(t){return!(t in i)}).map(function(e){return{str:e,distance:l(t,e)}}).filter(function(t){return t.distance<5}).sort(function(t,e){return t.distance-e.distance});return a?{}:(a=!0,{v:n(new Fe(be.EINVAL,"["+o+"] Required option '"+t+"' not provided."+(f.length>0?" You provided unrecognized option '"+f[0].str+"'; perhaps you meant to type '"+t+"'.":"")+"\nOption description: "+c.description))})}}else{var h=!1;if(h=Array.isArray(c.type)?c.type.indexOf(typeof u)!==-1:typeof u===c.type,!h)return a?{}:(a=!0,{v:n(new Fe(be.EINVAL,"["+o+"] Value provided for option "+t+" is not the proper type. Expected "+(Array.isArray(c.type)?"one of {"+c.type.join(", ")+"}":c.type)+", but received "+typeof u+"\nOption description: "+c.description))});c.validator&&(s++,c.validator(u,r))}}};for(var f in i){var h=u(f);if(h)return h.v}c=!0,0!==s||a||n()}function O(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function F(t,e,n){return e=Ge(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=Ge(r.length-e,0),s=Array(o);++i-1&&t%1==0&&t<=vn}function U(t){return null!=t&&C(t.length)&&!P(t)}function M(){}function j(t){return function(){if(null!==t){var e=t;t=null,e.apply(this,arguments)}}}function B(t,e){for(var n=-1,r=Array(t);++n-1&&t%1==0&&t0?"/"+i.join("/"):e)}function St(t,e){if(null!==e&&"object"==typeof e){var n=e,r=n.path;r&&(r="/"+ke.relative(t,r),n.message=n.message.replace(n.path,r),n.path=r)}return e}function kt(t,e){return"function"==typeof e?function(n){arguments.length>0&&(arguments[0]=St(t,n)),e.apply(null,arguments)}:e}function It(t,e,n){return"Sync"!==t.slice(t.length-4)?function(){return arguments.length>0&&(e&&(arguments[0]=ke.join(this._folder,arguments[0])),n&&(arguments[1]=ke.join(this._folder,arguments[1])),arguments[arguments.length-1]=kt(this._folder,arguments[arguments.length-1])),this._wrapped[t].apply(this._wrapped,arguments)}:function(){try{return e&&(arguments[0]=ke.join(this._folder,arguments[0])),n&&(arguments[1]=ke.join(this._folder,arguments[1])),this._wrapped[t].apply(this._wrapped,arguments)}catch(t){throw St(this._folder,t)}}}function Ot(t){return t.isDirectory}function Ft(t,e,n,r){if("undefined"!=typeof navigator.webkitPersistentStorage)switch(t){case ti.PERSISTENT:navigator.webkitPersistentStorage.requestQuota(e,n,r);break;case ti.TEMPORARY:navigator.webkitTemporaryStorage.requestQuota(e,n,r);break;default:r(new TypeError("Invalid storage type: "+t))}else ti.webkitStorageInfo.requestQuota(t,e,n,r)}function Nt(t){return Array.prototype.slice.call(t||[],0)}function Rt(t,e,n){switch(t.name){case"PathExistsError":return Fe.EEXIST(e);case"QuotaExceededError":return Fe.FileError(be.ENOSPC,e);case"NotFoundError":return Fe.ENOENT(e);case"SecurityError":return Fe.FileError(be.EACCES,e);case"InvalidModificationError":return Fe.FileError(be.EPERM,e);case"TypeMismatchError":return Fe.FileError(n?be.ENOTDIR:be.EISDIR,e);case"EncodingError":case"InvalidStateError":case"NoModificationAllowedError":default:return Fe.FileError(be.EINVAL,e)}}function Lt(){return si?si:si=t.from("{}")}function Tt(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=16*Math.random()|0,n="x"===t?e:3&e|8;return n.toString(16)})}function xt(t,e){return!t||(e(t),!1)}function At(t,e,n){return!t||(e.abort(function(){n(t)}),!1)}function Dt(t,e){switch(void 0===e&&(e=t.toString()),t.name){case"NotFoundError":return new Fe(be.ENOENT,e);case"QuotaExceededError":return new Fe(be.ENOSPC,e);default:return new Fe(be.EIO,e)}}function Pt(t,e,n){return void 0===e&&(e=be.EIO),void 0===n&&(n=null),function(r){r.preventDefault(),t(new Fe(e,null!==n?n:void 0))}}function Ct(t,e,n){return e?function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=e[0],i=this._getFs(r);e[0]=i.path;try{return i.fs[t].apply(i.fs,e)}catch(t){throw this.standardizeError(t,i.path,r),t}}:function(){for(var e=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];var i=n[0],o=this._getFs(i);if(n[0]=o.path,"function"==typeof n[n.length-1]){var s=n[n.length-1];n[n.length-1]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];t.length>0&&t[0]instanceof Fe&&e.standardizeError(t[0],o.path,i),s.apply(null,t)}}return o.fs[t].apply(o.fs,n)}}function Ut(t){return 146|t}function Mt(t){return Re.getFileFlag(t)}function jt(t){return{type:Wi.API_ERROR,errorData:Yt(t.writeToBuffer())}}function Bt(t){return Fe.fromBuffer(Xt(t.errorData))}function zt(t){return{type:Wi.ERROR,name:t.name,message:t.message,stack:t.stack}}function qt(t){var e=ti[t.name];"function"!=typeof e&&(e=Error);var n=new e(t.message);return n.stack=t.stack,n}function Vt(t){return{type:Wi.STATS,statsData:Yt(t.toBuffer())}}function Wt(t){return Te.fromBuffer(Xt(t.statsData))}function Ht(t){return{type:Wi.FILEFLAG,flagStr:t.getFlagString()}}function Zt(t){return Re.getFileFlag(t.flagStr)}function Yt(t){return v(t)}function Xt(t){return E(t)}function Kt(t){return{type:Wi.BUFFER,data:Yt(t)}}function Jt(t){return Xt(t.data)}function Gt(t){return t&&"object"==typeof t&&t.hasOwnProperty("browserfsMessage")&&t.browserfsMessage}function Qt(t){return t&&"object"==typeof t&&t.hasOwnProperty("browserfsMessage")&&t.browserfsMessage}function $t(e,n,r){var i=new XMLHttpRequest;i.open("GET",e,!0);var o=!0;switch(n){case"buffer":i.responseType="arraybuffer";break;case"json":try{i.responseType="json",o="json"===i.responseType}catch(t){o=!1}break;default:return r(new Fe(be.EINVAL,"Invalid download type: "+n))}i.onreadystatechange=function(e){if(4===i.readyState){if(200!==i.status)return r(new Fe(i.status,"XHR error."));switch(n){case"buffer":return r(null,i.response?t.from(i.response):S());case"json":return o?r(null,i.response):r(null,JSON.parse(i.responseText))}}},i.send()}function te(e,n){var r=new XMLHttpRequest;r.open("GET",e,!1);var i=null,o=null;if(r.overrideMimeType("text/plain; charset=x-user-defined"),r.onreadystatechange=function(e){if(4===r.readyState){if(200!==r.status)return void(o=new Fe(r.status,"XHR error."));switch(n){case"buffer":var s=r.responseText;i=t.alloc(s.length);for(var a=0;a>5&15)-1,i=(e>>9)+1980,o=31&t,s=t>>5&63,a=t>>11;return new Date(i,r,n,a,s,o)}function ue(t,e,n,r){return 0===r?"":e?t.toString("utf8",n,n+r):eo.byte2str(t.slice(n,n+r))}function fe(t,e,n){return t.toString("ascii",e,e+n).trim()}function he(t,e,n){if(1===n)return String.fromCharCode(t[e]);for(var r=Math.floor(n/2),i=new Array(r),o=0;othis._buffer.length){var n=t.alloc(e-this._buffer.length,0);return this.writeSync(n,0,n.length,this._buffer.length),void(this._flag.isSynchronous()&&Pe.getRootFS().supportsSynch()&&this.syncSync())}this._stat.size=e;var r=t.alloc(e);this._buffer.copy(r,0,0,e),this._buffer=r,this._flag.isSynchronous()&&Pe.getRootFS().supportsSynch()&&this.syncSync()},n.prototype.write=function(t,e,n,r,i){try{i(null,this.writeSync(t,e,n,r),t)}catch(t){i(t)}},n.prototype.writeSync=function(e,n,r,i){if(this._dirty=!0,void 0!==i&&null!==i||(i=this.getPos()),!this._flag.isWriteable())throw new Fe(be.EPERM,"File not opened with a writeable mode.");var o=i+r;if(o>this._stat.size&&(this._stat.size=o,o>this._buffer.length)){var s=t.alloc(o);this._buffer.copy(s),this._buffer=s}var a=e.copy(this._buffer,i,n,n+r);return this._stat.mtime=new Date,this._flag.isSynchronous()?(this.syncSync(),a):(this.setPos(i+a),a)},n.prototype.read=function(t,e,n,r,i){try{i(null,this.readSync(t,e,n,r),t)}catch(t){i(t)}},n.prototype.readSync=function(t,e,n,r){if(!this._flag.isReadable())throw new Fe(be.EPERM,"File not opened with a readable mode.");void 0!==r&&null!==r||(r=this.getPos());var i=r+n;i>this._stat.size&&(n=this._stat.size-r);var o=this._buffer.copy(t,e,r,r+n);return this._stat.atime=new Date,this._pos=r+n,o},n.prototype.chmod=function(t,e){try{this.chmodSync(t),e()}catch(t){e(t)}},n.prototype.chmodSync=function(t){if(!this._fs.supportsProps())throw new Fe(be.ENOTSUP);this._dirty=!0,this._stat.chmod(t),this.syncSync()},n.prototype.isDirty=function(){return this._dirty},n.prototype.resetDirty=function(){this._dirty=!1},n}(Ze),Xe=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){t()},e.prototype.syncSync=function(){},e.prototype.close=function(t){t()},e.prototype.closeSync=function(){},e}(Ye),Ke=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.syncSync=function(){this.isDirty()&&(this._fs._syncSync(this),this.resetDirty())},e.prototype.closeSync=function(){this.syncSync()},e}(Ye),Je=function(t){function e(n,r,i){if(void 0===i&&(i=!0),t.call(this),this._queue=[],this._queueRunning=!1,this._isInitialized=!1,this._initializeCallbacks=[],this._sync=n,this._async=r,!n.supportsSynch())throw new Error("The first argument to AsyncMirror needs to be a synchronous file system.");d(i,e.Name,{sync:"sync file system instance",async:"async file system instance"})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){try{var r=new e(t.sync,t.async,!1);r.initialize(function(t){t?n(t):n(null,r)},!1)}catch(t){n(t)}},e.isAvailable=function(){return!0},e.prototype.getName=function(){return e.Name},e.prototype._syncSync=function(t){this._sync.writeFileSync(t.getPath(),t.getBuffer(),null,Re.getFileFlag("w"),t.getStats().mode),this.enqueueOp({apiMethod:"writeFile",arguments:[t.getPath(),t.getBuffer(),null,t.getFlag(),t.getStats().mode]})},e.prototype.initialize=function(t,e){var n=this;void 0===e&&(e=!0),e&&console.warn("[AsyncMirror] AsyncMirror.initialize() is deprecated and will be removed in the next major version. Please use 'AsyncMirror.Create({ sync: (sync file system instance), async: (async file system instance)}, cb)' to create and initialize AsyncMirror instances.");var r=this._initializeCallbacks,i=function(t){n._isInitialized=!t,n._initializeCallbacks=[],r.forEach(function(e){return e(t)})};if(this._isInitialized)t();else if(1===r.push(t)){var o=function(t,e,r){"/"!==t&&n._sync.mkdirSync(t,e),n._async.readdir(t,function(e,n){function i(e){e?r(e):o0){var r=e._queue.shift(),i=r.arguments;i.push(n),e._async[r.apiMethod].apply(e._async,i)}else e._queueRunning=!1};n()}},e}(He);Je.Name="AsyncMirror",Je.Options={sync:{type:"object",description:"The synchronous file system to mirror the asynchronous file system to."},async:{type:"object",description:"The asynchronous file system to mirror."}};var Ge=Math.max,Qe=function(t){return R(function(e){var n=e.pop();t.call(this,e,n)})},$e="object"==typeof r&&r&&r.Object===Object&&r,tn="object"==typeof self&&self&&self.Object===Object&&self,en=$e||tn||Function("return this")(),nn=en.Symbol,rn=Object.prototype,on=rn.hasOwnProperty,sn=rn.toString,an=nn?nn.toStringTag:void 0,cn=Object.prototype,un=cn.toString,fn="[object Null]",hn="[object Undefined]",pn=nn?nn.toStringTag:void 0,ln="[object AsyncFunction]",dn="[object Function]",yn="[object GeneratorFunction]",gn="[object Proxy]",vn=9007199254740991,mn={},_n="function"==typeof Symbol&&Symbol.iterator,wn=function(t){return _n&&t[_n]&&t[_n]()},En="[object Arguments]",bn=Object.prototype,Sn=bn.hasOwnProperty,kn=bn.propertyIsEnumerable,In=q(function(){return arguments}())?q:function(t){return z(t)&&Sn.call(t,"callee")&&!kn.call(t,"callee")},On=Array.isArray,Fn="object"==typeof e&&e&&!e.nodeType&&e,Nn=Fn&&"object"==typeof i&&i&&!i.nodeType&&i,Rn=Nn&&Nn.exports===Fn,Ln=Rn?en.Buffer:void 0,Tn=Ln?Ln.isBuffer:void 0,xn=Tn||V,An=9007199254740991,Dn=/^(?:0|[1-9]\d*)$/,Pn="[object Arguments]",Cn="[object Array]",Un="[object Boolean]",Mn="[object Date]",jn="[object Error]",Bn="[object Function]",zn="[object Map]",qn="[object Number]",Vn="[object Object]",Wn="[object RegExp]",Hn="[object Set]",Zn="[object String]",Yn="[object WeakMap]",Xn="[object ArrayBuffer]",Kn="[object DataView]",Jn="[object Float32Array]",Gn="[object Float64Array]",Qn="[object Int8Array]",$n="[object Int16Array]",tr="[object Int32Array]",er="[object Uint8Array]",nr="[object Uint8ClampedArray]",rr="[object Uint16Array]",ir="[object Uint32Array]",or={};or[Jn]=or[Gn]=or[Qn]=or[$n]=or[tr]=or[er]=or[nr]=or[rr]=or[ir]=!0,or[Pn]=or[Cn]=or[Xn]=or[Un]=or[Kn]=or[Mn]=or[jn]=or[Bn]=or[zn]=or[qn]=or[Vn]=or[Wn]=or[Hn]=or[Zn]=or[Yn]=!1;var sr="object"==typeof e&&e&&!e.nodeType&&e,ar=sr&&"object"==typeof i&&i&&!i.nodeType&&i,cr=ar&&ar.exports===sr,ur=cr&&$e.process,fr=function(){try{return ur&&ur.binding&&ur.binding("util")}catch(t){}}(),hr=fr&&fr.isTypedArray,pr=hr?Z(hr):H,lr=Object.prototype,dr=lr.hasOwnProperty,yr=Object.prototype,gr=K(Object.keys,Object),vr=Object.prototype,mr=vr.hasOwnProperty,_r=ot(it,1/0),wr=function(t,e,n){var r=U(t)?st:_r;r(t,e,n)},Er=at(ct);L(Er);var br=ut(ct),Sr=ot(br,1);L(Sr),R(function(t,e){return R(function(n){return t.apply(null,e.concat(n))})});var kr,Ir=(ht(),"\\ud800-\\udfff"),Or="\\u0300-\\u036f",Fr="\\ufe20-\\ufe2f",Nr="\\u20d0-\\u20ff",Rr=Or+Fr+Nr,Lr="\\ufe0e\\ufe0f",Tr="["+Ir+"]",xr="["+Rr+"]",Ar="\\ud83c[\\udffb-\\udfff]",Dr="(?:"+xr+"|"+Ar+")",Pr="[^"+Ir+"]",Cr="(?:\\ud83c[\\udde6-\\uddff]){2}",Ur="[\\ud800-\\udbff][\\udc00-\\udfff]",Mr="\\u200d",jr=Dr+"?",Br="["+Lr+"]?",zr=("(?:"+Mr+"(?:"+[Pr,Cr,Ur].join("|")+")"+Br+jr+")*","(?:"+[Pr+xr+"?",xr,Cr,Ur,Tr].join("|")+")","function"==typeof setImmediate&&setImmediate),qr="object"==typeof o&&"function"==typeof o.nextTick;kr=zr?setImmediate:qr?o.nextTick:pt,lt(kr);var Vr=ot(it,1),Wr=R(function(t){return R(function(e){var n=this,r=e[e.length-1];"function"==typeof r?e.pop():r=M,dt(t,e,function(t,e,r){e.apply(n,t.concat(R(function(t,e){r(t,e)})))},function(t,e){r.apply(n,[t].concat(e))})})});R(function(t){return Wr.apply(null,t.reverse())}),R(function(t){var e=[null].concat(t);return Qe(function(t,n){return n.apply(this,e)})}),yt("dir"),yt("log");var Hr;Hr=qr?o.nextTick:zr?setImmediate:pt,lt(Hr);var Zr,Yr=(Math.ceil,Math.max,function(t){this._cache={},this._client=t});Yr.prototype.readdir=function(t,e){var n=this,r=this.getCachedDirInfo(t);this._wrap(function(e){null!==r&&r.contents?n._client.readdir(t,{contentHash:r.stat.contentHash},e):n._client.readdir(t,e)},function(i,o,s,a){i?i.status===Dropbox.ApiError.NO_CONTENT&&null!==r?e(null,r.contents.slice(0)):e(i):(n.updateCachedDirInfo(t,s,o.slice(0)),a.forEach(function(e){n.updateCachedInfo(ke.join(t,e.name),e)}),e(null,o))})},Yr.prototype.remove=function(t,e){var n=this;this._wrap(function(e){n._client.remove(t,e)},function(r,i){r||n.updateCachedInfo(t,i),e(r)})},Yr.prototype.move=function(t,e,n){var r=this;this._wrap(function(n){r._client.move(t,e,n)},function(i,o){i||(r.deleteCachedInfo(t),r.updateCachedInfo(e,o)),n(i)})},Yr.prototype.stat=function(t,e){var n=this;this._wrap(function(e){n._client.stat(t,e)},function(r,i){r||n.updateCachedInfo(t,i),e(r,i)})},Yr.prototype.readFile=function(t,e){var n=this,r=this.getCachedFileInfo(t);null!==r&&null!==r.contents?this.stat(t,function(i,o){i?e(i):o.contentHash===r.stat.contentHash?e(i,r.contents.slice(0),r.stat):n.readFile(t,e)}):this._wrap(function(e){n._client.readFile(t,{arrayBuffer:!0},e)},function(r,i,o){r||n.updateCachedInfo(t,o,i.slice(0)),e(r,i,o)})},Yr.prototype.writeFile=function(t,e,n){var r=this;this._wrap(function(n){r._client.writeFile(t,e,n)},function(i,o){i||r.updateCachedInfo(t,o,e.slice(0)),n(i,o)})},Yr.prototype.mkdir=function(t,e){var n=this;this._wrap(function(e){n._client.mkdir(t,e)},function(r,i){r||n.updateCachedInfo(t,i,[]),e(r)})},Yr.prototype._wrap=function(t,e){var n=0,r=function(i){var o=2;if(i&&3>++n)switch(i.status){case Dropbox.ApiError.SERVER_ERROR:case Dropbox.ApiError.NETWORK_ERROR:case Dropbox.ApiError.RATE_LIMITED:setTimeout(function(){t(r)},1e3*o);break;default:e.apply(null,arguments)}else e.apply(null,arguments)};t(r)},Yr.prototype.getCachedInfo=function(t){return this._cache[t.toLowerCase()]},Yr.prototype.putCachedInfo=function(t,e){this._cache[t.toLowerCase()]=e},Yr.prototype.deleteCachedInfo=function(t){delete this._cache[t.toLowerCase()]},Yr.prototype.getCachedDirInfo=function(t){var e=this.getCachedInfo(t);return wt(e)?e:null},Yr.prototype.getCachedFileInfo=function(t){var e=this.getCachedInfo(t);return _t(e)?e:null},Yr.prototype.updateCachedDirInfo=function(t,e,n){void 0===n&&(n=null);var r=this.getCachedInfo(t);null===e.contentHash||void 0!==r&&r.stat.contentHash===e.contentHash||this.putCachedInfo(t,{stat:e,contents:n})},Yr.prototype.updateCachedFileInfo=function(t,e,n){void 0===n&&(n=null);var r=this.getCachedInfo(t);null===e.versionTag||void 0!==r&&r.stat.versionTag===e.versionTag||this.putCachedInfo(t,{stat:e,contents:n})},Yr.prototype.updateCachedInfo=function(t,e,n){void 0===n&&(n=null),e.isFile&&Et(n)?this.updateCachedFileInfo(t,e,n):e.isFolder&&Array.isArray(n)&&this.updateCachedDirInfo(t,e,n)};var Xr=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;if(this.isDirty()){var n=this.getBuffer(),r=v(n);this._fs._writeFileStrict(this.getPath(),r,function(n){n||e.resetDirty(),t(n)})}else t()},e.prototype.close=function(t){this.sync(t)},e}(Ye),Kr=function(t){function e(n,r){void 0===r&&(r=!0),t.call(this),this._client=new Yr(n),d(r,e.Name,{client:"authenticated dropbox client instance"}),mt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){n(null,new e(t.client,!1))},e.isAvailable=function(){return"undefined"!=typeof Dropbox},e.prototype.getName=function(){return e.Name},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsSymlinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return!1},e.prototype.empty=function(t){var e=this;this._client.readdir("/",function(n,r){if(n)t(e.convert(n,"/"));else{var i=function(t,n){var r=ke.join("/",t);e._client.remove(r,function(t){n(t?e.convert(t,r):null)})},o=function(e){e?t(e):t()};vt(r,i,o)}})},e.prototype.rename=function(t,e,n){var r=this;this._client.move(t,e,function(i){i?r._client.stat(e,function(o,s){if(o||s.isFolder){var a=i.response.error.indexOf(t)>-1?t:e; +n(r.convert(i,a))}else r._client.remove(e,function(i){i?n(r.convert(i,e)):r.rename(t,e,n)})}):n()})},e.prototype.stat=function(t,e,n){var r=this;this._client.stat(t,function(e,i){if(e)n(r.convert(e,t));else{if(!i||!i.isRemoved){var o=new Te(r._statType(i),i.size);return n(null,o)}n(Fe.FileError(be.ENOENT,t))}})},e.prototype.open=function(t,e,n,r){var i=this;this._client.readFile(t,function(n,o,s){if(!n){var a;a=null===o?S():E(o);var c=i._makeFile(t,e,s,a);return r(null,c)}if(e.isReadable())r(i.convert(n,t));else switch(n.status){case Dropbox.ApiError.NOT_FOUND:var u=new ArrayBuffer(0);return i._writeFileStrict(t,u,function(n,o){if(n)r(n);else{var s=i._makeFile(t,e,o,E(u));r(null,s)}});default:return r(i.convert(n,t))}})},e.prototype._writeFileStrict=function(t,e,n){var r=this,i=ke.dirname(t);this.stat(i,!1,function(o,s){o?n(Fe.FileError(be.ENOENT,i)):r._client.writeFile(t,e,function(e,i){e?n(r.convert(e,t)):n(null,i)})})},e.prototype._statType=function(t){return t.isFile?Le.FILE:Le.DIRECTORY},e.prototype._makeFile=function(t,e,n,r){var i=this._statType(n),o=new Te(i,n.size);return new Xr(this,t,e,o,r)},e.prototype._remove=function(t,e,n){var r=this;this._client.stat(t,function(i,o){i?e(r.convert(i,t)):o.isFile&&!n?e(Fe.FileError(be.ENOTDIR,t)):!o.isFile&&n?e(Fe.FileError(be.EISDIR,t)):r._client.remove(t,function(n){e(n?r.convert(n,t):null)})})},e.prototype.unlink=function(t,e){this._remove(t,e,!0)},e.prototype.rmdir=function(t,e){this._remove(t,e,!1)},e.prototype.mkdir=function(t,e,n){var r=this,i=ke.dirname(t);this._client.stat(i,function(e,o){e?n(r.convert(e,i)):r._client.mkdir(t,function(e){n(e?Fe.FileError(be.EEXIST,t):null)})})},e.prototype.readdir=function(t,e){var n=this;this._client.readdir(t,function(t,r){return t?e(n.convert(t)):e(null,r)})},e.prototype.convert=function(t,e){void 0===e&&(e=null);var n=Zr[t.status];return void 0===n&&(n=be.EIO),e?Fe.FileError(n,e):new Fe(n)},e}(We);Kr.Name="Dropbox",Kr.Options={client:{type:"object",description:"An *authenticated* Dropbox client. Must be from the 0.10 JS SDK.",validator:function(t,e){t.isAuthenticated&&t.isAuthenticated()?e():e(new Fe(be.EINVAL,"'client' option must be an authenticated Dropbox client from the v0.10 JS SDK."))}}};var Jr=function(t){function e(e,n,r,i){t.call(this),this._fs=e,this._FS=n,this._path=r,this._stream=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getPos=function(){},e.prototype.close=function(t){var e=null;try{this.closeSync()}catch(t){e=t}finally{t(e)}},e.prototype.closeSync=function(){try{this._FS.close(this._stream)}catch(t){throw bt(t,this._path)}},e.prototype.stat=function(t){try{t(null,this.statSync())}catch(e){t(e)}},e.prototype.statSync=function(){try{return this._fs.statSync(this._path,!1)}catch(t){throw bt(t,this._path)}},e.prototype.truncate=function(t,e){var n=null;try{this.truncateSync(t)}catch(t){n=t}finally{e(n)}},e.prototype.truncateSync=function(t){try{this._FS.ftruncate(this._stream.fd,t)}catch(t){throw bt(t,this._path)}},e.prototype.write=function(t,e,n,r,i){try{i(null,this.writeSync(t,e,n,r),t)}catch(t){i(t)}},e.prototype.writeSync=function(t,e,n,r){try{var i=m(t),o=null===r?void 0:r;return this._FS.write(this._stream,i,e,n,o)}catch(t){throw bt(t,this._path)}},e.prototype.read=function(t,e,n,r,i){try{i(null,this.readSync(t,e,n,r),t)}catch(t){i(t)}},e.prototype.readSync=function(t,e,n,r){try{var i=m(t),o=null===r?void 0:r;return this._FS.read(this._stream,i,e,n,o)}catch(t){throw bt(t,this._path)}},e.prototype.sync=function(t){t()},e.prototype.syncSync=function(){},e.prototype.chown=function(t,e,n){var r=null;try{this.chownSync(t,e)}catch(t){r=t}finally{n(r)}},e.prototype.chownSync=function(t,e){try{this._FS.fchown(this._stream.fd,t,e)}catch(t){throw bt(t,this._path)}},e.prototype.chmod=function(t,e){var n=null;try{this.chmodSync(t)}catch(t){n=t}finally{e(n)}},e.prototype.chmodSync=function(t){try{this._FS.fchmod(this._stream.fd,t)}catch(t){throw bt(t,this._path)}},e.prototype.utimes=function(t,e,n){var r=null;try{this.utimesSync(t,e)}catch(t){r=t}finally{n(r)}},e.prototype.utimesSync=function(t,e){this._fs.utimesSync(this._path,t,e)},e}(Ze),Gr=function(e){function n(t){e.call(this),this._FS=t}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.Create=function(t,e){e(null,new n(t.FS))},n.isAvailable=function(){return!0},n.prototype.getName=function(){return this._FS.DB_NAME()},n.prototype.isReadOnly=function(){return!1},n.prototype.supportsLinks=function(){return!0},n.prototype.supportsProps=function(){return!0},n.prototype.supportsSynch=function(){return!0},n.prototype.renameSync=function(t,e){try{this._FS.rename(t,e)}catch(n){throw n.errno===be.ENOENT?bt(n,this.existsSync(t)?e:t):bt(n)}},n.prototype.statSync=function(t,e){try{var n=e?this._FS.lstat(t):this._FS.stat(t),r=this.modeToFileType(n.mode);return new Te(r,n.size,n.mode,n.atime,n.mtime,n.ctime)}catch(e){throw bt(e,t)}},n.prototype.openSync=function(t,e,n){try{var r=this._FS.open(t,e.getFlagString(),n);if(this._FS.isDir(r.node.mode))throw this._FS.close(r),Fe.EISDIR(t);return new Jr(this,this._FS,t,r)}catch(e){throw bt(e,t)}},n.prototype.unlinkSync=function(t){try{this._FS.unlink(t)}catch(e){throw bt(e,t)}},n.prototype.rmdirSync=function(t){try{this._FS.rmdir(t)}catch(e){throw bt(e,t)}},n.prototype.mkdirSync=function(t,e){try{this._FS.mkdir(t,e)}catch(e){throw bt(e,t)}},n.prototype.readdirSync=function(t){try{return this._FS.readdir(t).filter(function(t){return"."!==t&&".."!==t})}catch(e){throw bt(e,t)}},n.prototype.truncateSync=function(t,e){try{this._FS.truncate(t,e)}catch(e){throw bt(e,t)}},n.prototype.readFileSync=function(t,e,n){try{var r=this._FS.readFile(t,{flags:n.getFlagString()}),i=w(r);return e?i.toString(e):i}catch(e){throw bt(e,t)}},n.prototype.writeFileSync=function(e,n,r,i,o){try{r&&(n=t.from(n,r));var s=m(n);this._FS.writeFile(e,s,{flags:i.getFlagString(),encoding:"binary"}),this._FS.chmod(e,o)}catch(t){throw bt(t,e)}},n.prototype.chmodSync=function(t,e,n){try{e?this._FS.lchmod(t,n):this._FS.chmod(t,n)}catch(e){throw bt(e,t)}},n.prototype.chownSync=function(t,e,n,r){try{e?this._FS.lchown(t,n,r):this._FS.chown(t,n,r)}catch(e){throw bt(e,t)}},n.prototype.symlinkSync=function(t,e,n){try{this._FS.symlink(t,e)}catch(t){throw bt(t)}},n.prototype.readlinkSync=function(t){try{return this._FS.readlink(t)}catch(e){throw bt(e,t)}},n.prototype.utimesSync=function(t,e,n){try{this._FS.utime(t,e.getTime(),n.getTime())}catch(e){throw bt(e,t)}},n.prototype.modeToFileType=function(t){if(this._FS.isDir(t))return Le.DIRECTORY;if(this._FS.isFile(t))return Le.FILE;if(this._FS.isLink(t))return Le.SYMLINK;throw Fe.EPERM("Invalid mode: "+t)},n}(He);Gr.Name="EmscriptenFileSystem",Gr.Options={FS:{type:"object",description:"The Emscripten file system to use (the `FS` variable)"}};var Qr=function(t){function e(e,n){t.call(this),this._folder=e,this._wrapped=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){n(null,new e(t.folder,t.wrapped))},e.isAvailable=function(){return!0},e.prototype.initialize=function(t){var e=this;this._wrapped.exists(this._folder,function(n){n?t():e._wrapped.isReadOnly()?t(Fe.ENOENT(e._folder)):e._wrapped.mkdir(e._folder,511,t)})},e.prototype.getName=function(){return this._wrapped.getName()},e.prototype.isReadOnly=function(){return this._wrapped.isReadOnly()},e.prototype.supportsProps=function(){return this._wrapped.supportsProps()},e.prototype.supportsSynch=function(){return this._wrapped.supportsSynch()},e.prototype.supportsLinks=function(){return!1},e}(We);Qr.Name="FolderAdapter",Qr.Options={folder:{type:"string",description:"The folder to use as the root directory"},wrapped:{type:"object",description:"The file system to wrap"}},["diskSpace","stat","statSync","open","openSync","unlink","unlinkSync","rmdir","rmdirSync","mkdir","mkdirSync","readdir","readdirSync","exists","existsSync","realpath","realpathSync","truncate","truncateSync","readFile","readFileSync","writeFile","writeFileSync","appendFile","appendFileSync","chmod","chmodSync","chown","chownSync","utimes","utimesSync","readlink","readlinkSync"].forEach(function(t){Qr.prototype[t]=It(t,!0,!1)}),["rename","renameSync","link","linkSync","symlink","symlinkSync"].forEach(function(t){Qr.prototype[t]=It(t,!0,!0)});var $r;$r="undefined"!=typeof window?window:"undefined"!=typeof self?self:r;var ti=$r,ei=ti.webkitRequestFileSystem||ti.requestFileSystem||null,ni=function(t){function e(e,n,r,i,o,s){t.call(this,e,r,i,o,s),this._entry=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;return this.isDirty()?void this._entry.createWriter(function(n){var r=e.getBuffer(),i=new Blob([v(r)]),o=i.size;n.onwriteend=function(r){n.onwriteend=null,n.onerror=null,n.truncate(o),e.resetDirty(),t()},n.onerror=function(n){t(Rt(n,e.getPath(),!1))},n.write(i)}):t()},e.prototype.close=function(t){this.sync(t)},e}(Ye),ri=function(t){function e(n,r,i){void 0===n&&(n=5),void 0===r&&(r=ti.PERSISTENT),void 0===i&&(i=!0),t.call(this),this.size=1048576*n,this.type=r,d(i,e.Name,{size:n,type:r})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){var r=new e(t.size,t.type,!1);r.allocate(function(t){return t?n(t):n(null,r)},!1)},e.isAvailable=function(){return!!ei},e.prototype.getName=function(){return e.Name},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsSymlinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return!1},e.prototype.allocate=function(t,e){var n=this;void 0===t&&(t=function(){}),void 0===e&&(e=!0),e&&console.warn("[HTML5FS] HTML5FS.allocate() is deprecated and will be removed in the next major release. Please use 'HTML5FS.Create({type: "+this.type+", size: "+this.size+"}, cb)' to create and allocate HTML5FS instances.");var r=function(e){n.fs=e,t()},i=function(e){t(Rt(e,"/",!0))};this.type===ti.PERSISTENT?Ft(this.type,this.size,function(t){ei(n.type,t,r,i)},i):ei(this.type,this.size,r,i)},e.prototype.empty=function(t){this._readdir("/",function(e,n){if(e)console.error("Failed to empty FS"),t(e);else{var r=function(n){e?(console.error("Failed to empty FS"),t(e)):t()},i=function(t,e){var n=function(){e()},r=function(n){e(Rt(n,t.fullPath,!t.isDirectory))};Ot(t)?t.removeRecursively(n,r):t.remove(n,r)};vt(n,i,r)}})},e.prototype.rename=function(t,e,n){var r=this,i=2,o=0,s=this.fs.root,a=t,c=function(t){--i<=0&&n(Rt(t,a,!1))},u=function(i){return 2===++o?n(new Fe(be.EINVAL,"Something was identified as both a file and a directory. This should never happen.")):t===e?n():(a=ke.dirname(e),void s.getDirectory(a,{},function(o){a=ke.basename(e),i.moveTo(o,a,function(t){n()},function(o){i.isDirectory?(a=e,r.unlink(e,function(i){i?c(o):r.rename(t,e,n)})):c(o)})},c))};s.getFile(t,{},u,c),s.getDirectory(t,{},u,c)},e.prototype.stat=function(t,e,n){var r=this,i={create:!1},o=function(t){var e=function(t){var e=new Te(Le.FILE,t.size);n(null,e)};t.file(e,a)},s=function(t){var e=4096,r=new Te(Le.DIRECTORY,e);n(null,r)},a=function(e){n(Rt(e,t,!1))},c=function(){r.fs.root.getDirectory(t,i,s,a)};this.fs.root.getFile(t,i,o,c)},e.prototype.open=function(t,e,n,r){var i=this,o=function(n){r("InvalidModificationError"===n.name&&e.isExclusive()?Fe.EEXIST(t):Rt(n,t,!1))};this.fs.root.getFile(t,{create:e.pathNotExistsAction()===Oe.CREATE_FILE,exclusive:e.isExclusive()},function(n){n.file(function(s){var a=new FileReader;a.onloadend=function(o){var c=i._makeFile(t,n,e,s,a.result);r(null,c)},a.onerror=function(t){o(a.error)},a.readAsArrayBuffer(s)},o)},o)},e.prototype.unlink=function(t,e){this._remove(t,e,!0)},e.prototype.rmdir=function(t,e){var n=this;this.readdir(t,function(r,i){r?e(r):i.length>0?e(Fe.ENOTEMPTY(t)):n._remove(t,e,!1)})},e.prototype.mkdir=function(t,e,n){var r={create:!0,exclusive:!0},i=function(t){n()},o=function(e){n(Rt(e,t,!0))};this.fs.root.getDirectory(t,r,i,o)},e.prototype.readdir=function(t,e){this._readdir(t,function(t,n){if(!n)return e(t);for(var r=[],i=0,o=n;i0)throw Fe.ENOTEMPTY(t);this.removeEntry(t,!0)},n.prototype.mkdirSync=function(e,n){var r=this.store.beginTransaction("readwrite"),i=t.from("{}");this.commitNewFile(r,e,Le.DIRECTORY,n,i)},n.prototype.readdirSync=function(t){var e=this.store.beginTransaction("readonly");return Object.keys(this.getDirListing(e,t,this.findINode(e,t)))},n.prototype._syncSync=function(t,e,n){var r=this.store.beginTransaction("readwrite"),i=this._findINode(r,ke.dirname(t),ke.basename(t)),o=this.getINode(r,t,i),s=o.update(n);try{r.put(o.id,e,!0),s&&r.put(i,o.toBuffer(),!0)}catch(t){throw r.abort(),t}r.commit()},n.prototype.makeRootDirectory=function(){var t=this.store.beginTransaction("readwrite");if(void 0===t.get(oi)){var e=(new Date).getTime(),n=new ii(Tt(),4096,511|Le.DIRECTORY,e,e,e);t.put(n.id,Lt(),!1),t.put(oi,n.toBuffer(),!1),t.commit()}},n.prototype._findINode=function(t,e,n){var r=this,i=function(i){var o=r.getDirListing(t,e,i);if(o[n])return o[n];throw Fe.ENOENT(ke.resolve(e,n))};return"/"===e?""===n?oi:i(this.getINode(t,e,oi)):i(this.getINode(t,e+ke.sep+n,this._findINode(t,ke.dirname(e),ke.basename(e))))},n.prototype.findINode=function(t,e){return this.getINode(t,e,this._findINode(t,ke.dirname(e),ke.basename(e)))},n.prototype.getINode=function(t,e,n){var r=t.get(n);if(void 0===r)throw Fe.ENOENT(e);return ii.fromBuffer(r)},n.prototype.getDirListing=function(t,e,n){if(!n.isDirectory())throw Fe.ENOTDIR(e);var r=t.get(n.id);if(void 0===r)throw Fe.ENOENT(e);return JSON.parse(r.toString())},n.prototype.addNewNode=function(t,e){for(var n,r=0;r<5;)try{return n=Tt(),t.put(n,e,!1),n}catch(t){}throw new Fe(be.EIO,"Unable to commit data to key-value store.")},n.prototype.commitNewFile=function(e,n,r,i,o){var s=ke.dirname(n),a=ke.basename(n),c=this.findINode(e,s),u=this.getDirListing(e,s,c),f=(new Date).getTime();if("/"===n)throw Fe.EEXIST(n);if(u[a])throw Fe.EEXIST(n);var h;try{var p=this.addNewNode(e,o);h=new ii(p,o.length,i|r,f,f,f);var l=this.addNewNode(e,h.toBuffer());u[a]=l,e.put(c.id,t.from(JSON.stringify(u)),!0)}catch(t){throw e.abort(),t}return e.commit(),h},n.prototype.removeEntry=function(e,n){var r=this.store.beginTransaction("readwrite"),i=ke.dirname(e),o=this.findINode(r,i),s=this.getDirListing(r,i,o),a=ke.basename(e);if(!s[a])throw Fe.ENOENT(e);var c=s[a];delete s[a];var u=this.getINode(r,e,c);if(!n&&u.isDirectory())throw Fe.EISDIR(e);if(n&&!u.isDirectory())throw Fe.ENOTDIR(e);try{r.del(u.id),r.del(c),r.put(o.id,t.from(JSON.stringify(s)),!0)}catch(t){throw r.abort(),t}r.commit()},n}(He),fi=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;this.isDirty()?this._fs._sync(this.getPath(),this.getBuffer(),this.getStats(),function(n){n||e.resetDirty(),t(n)}):t()},e.prototype.close=function(t){this.sync(t)},e}(Ye),hi=function(e){function n(){e.apply(this,arguments)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.isAvailable=function(){return!0},n.prototype.init=function(t,e){this.store=t,this.makeRootDirectory(e)},n.prototype.getName=function(){return this.store.name()},n.prototype.isReadOnly=function(){return!1},n.prototype.supportsSymlinks=function(){return!1},n.prototype.supportsProps=function(){return!1},n.prototype.supportsSynch=function(){return!1},n.prototype.empty=function(t){var e=this;this.store.clear(function(n){xt(n,t)&&e.makeRootDirectory(t)})},n.prototype.rename=function(e,n,r){var i=this,o=this.store.beginTransaction("readwrite"),s=ke.dirname(e),a=ke.basename(e),c=ke.dirname(n),u=ke.basename(n),f={},h={},p=!1;if(0===(c+"/").indexOf(e+"/"))return r(new Fe(be.EBUSY,s));var l=function(){if(!p&&h.hasOwnProperty(s)&&h.hasOwnProperty(c)){var l=h[s],d=f[s],y=h[c],g=f[c];if(l[a]){var v=l[a];delete l[a];var m=function(){y[u]=v,o.put(d.id,t.from(JSON.stringify(l)),!0,function(e){At(e,o,r)&&(s===c?o.commit(r):o.put(g.id,t.from(JSON.stringify(y)),!0,function(t){At(t,o,r)&&o.commit(r)}))})};y[u]?i.getINode(o,n,y[u],function(t,e){At(t,o,r)&&(e.isFile()?o.del(e.id,function(t){At(t,o,r)&&o.del(y[u],function(t){At(t,o,r)&&m()})}):o.abort(function(t){r(Fe.EPERM(n))}))}):m()}else r(Fe.ENOENT(e))}},d=function(t){i.findINodeAndDirListing(o,t,function(e,n,i){e?p||(p=!0,o.abort(function(){r(e)})):(f[t]=n,h[t]=i,l())})};d(s),s!==c&&d(c)},n.prototype.stat=function(t,e,n){var r=this.store.beginTransaction("readonly");this.findINode(r,t,function(t,e){xt(t,n)&&n(null,e.toStats())})},n.prototype.createFile=function(t,e,n,r){var i=this,o=this.store.beginTransaction("readwrite"),s=S();this.commitNewFile(o,t,Le.FILE,n,s,function(n,o){xt(n,r)&&r(null,new fi(i,t,e,o.toStats(),s))})},n.prototype.openFile=function(t,e,n){var r=this,i=this.store.beginTransaction("readonly");this.findINode(i,t,function(o,s){xt(o,n)&&i.get(s.id,function(i,o){xt(i,n)&&(void 0===o?n(Fe.ENOENT(t)):n(null,new fi(r,t,e,s.toStats(),o)))})})},n.prototype.unlink=function(t,e){this.removeEntry(t,!1,e)},n.prototype.rmdir=function(t,e){var n=this;this.readdir(t,function(r,i){r?e(r):i.length>0?e(Fe.ENOTEMPTY(t)):n.removeEntry(t,!0,e)})},n.prototype.mkdir=function(e,n,r){var i=this.store.beginTransaction("readwrite"),o=t.from("{}");this.commitNewFile(i,e,Le.DIRECTORY,n,o,r)},n.prototype.readdir=function(t,e){var n=this,r=this.store.beginTransaction("readonly");this.findINode(r,t,function(i,o){xt(i,e)&&n.getDirListing(r,t,o,function(t,n){xt(t,e)&&e(null,Object.keys(n))})})},n.prototype._sync=function(t,e,n,r){var i=this,o=this.store.beginTransaction("readwrite");this._findINode(o,ke.dirname(t),ke.basename(t),function(s,a){At(s,o,r)&&i.getINode(o,t,a,function(t,i){if(At(t,o,r)){var s=i.update(n);o.put(i.id,e,!0,function(t){At(t,o,r)&&(s?o.put(a,i.toBuffer(),!0,function(t){At(t,o,r)&&o.commit(r)}):o.commit(r))})}})})},n.prototype.makeRootDirectory=function(t){var e=this.store.beginTransaction("readwrite");e.get(oi,function(n,r){if(n||void 0===r){var i=(new Date).getTime(),o=new ii(Tt(),4096,511|Le.DIRECTORY,i,i,i);e.put(o.id,Lt(),!1,function(n){At(n,e,t)&&e.put(oi,o.toBuffer(),!1,function(n){n?e.abort(function(){t(n)}):e.commit(t)})})}else e.commit(t)})},n.prototype._findINode=function(t,e,n,r){var i=this,o=function(t,i,o){t?r(t):o[n]?r(null,o[n]):r(Fe.ENOENT(ke.resolve(e,n)))};"/"===e?""===n?r(null,oi):this.getINode(t,e,oi,function(n,s){xt(n,r)&&i.getDirListing(t,e,s,function(t,e){o(t,s,e)})}):this.findINodeAndDirListing(t,e,o)},n.prototype.findINode=function(t,e,n){var r=this;this._findINode(t,ke.dirname(e),ke.basename(e),function(i,o){xt(i,n)&&r.getINode(t,e,o,n)})},n.prototype.getINode=function(t,e,n,r){t.get(n,function(t,n){xt(t,r)&&(void 0===n?r(Fe.ENOENT(e)):r(null,ii.fromBuffer(n)))})},n.prototype.getDirListing=function(t,e,n,r){n.isDirectory()?t.get(n.id,function(t,n){if(xt(t,r))try{r(null,JSON.parse(n.toString()))}catch(t){r(Fe.ENOENT(e))}}):r(Fe.ENOTDIR(e))},n.prototype.findINodeAndDirListing=function(t,e,n){var r=this;this.findINode(t,e,function(i,o){xt(i,n)&&r.getDirListing(t,e,o,function(t,e){xt(t,n)&&n(null,o,e)})})},n.prototype.addNewNode=function(t,e,n){var r,i=0,o=function(){5===++i?n(new Fe(be.EIO,"Unable to commit data to key-value store.")):(r=Tt(),t.put(r,e,!1,function(t,e){t||!e?o():n(null,r)}))};o()},n.prototype.commitNewFile=function(e,n,r,i,o,s){var a=this,c=ke.dirname(n),u=ke.basename(n),f=(new Date).getTime();return"/"===n?s(Fe.EEXIST(n)):void this.findINodeAndDirListing(e,c,function(c,h,p){At(c,e,s)&&(p[u]?e.abort(function(){s(Fe.EEXIST(n))}):a.addNewNode(e,o,function(n,c){if(At(n,e,s)){var l=new ii(c,o.length,i|r,f,f,f);a.addNewNode(e,l.toBuffer(),function(n,r){At(n,e,s)&&(p[u]=r,e.put(h.id,t.from(JSON.stringify(p)),!0,function(t){At(t,e,s)&&e.commit(function(t){At(t,e,s)&&s(null,l)})}))})}}))})},n.prototype.removeEntry=function(e,n,r){var i=this,o=this.store.beginTransaction("readwrite"),s=ke.dirname(e),a=ke.basename(e);this.findINodeAndDirListing(o,s,function(s,c,u){if(At(s,o,r))if(u[a]){var f=u[a];delete u[a],i.getINode(o,e,f,function(i,s){At(i,o,r)&&(!n&&s.isDirectory()?o.abort(function(){r(Fe.EISDIR(e))}):n&&!s.isDirectory()?o.abort(function(){r(Fe.ENOTDIR(e))}):o.del(s.id,function(e){At(e,o,r)&&o.del(f,function(e){At(e,o,r)&&o.put(c.id,t.from(JSON.stringify(u)),!0,function(t){At(t,o,r)&&o.commit(r)})})}))})}else o.abort(function(){r(Fe.ENOENT(e))})})},n}(We),pi=function(){this.store={}};pi.prototype.name=function(){return li.Name},pi.prototype.clear=function(){this.store={}},pi.prototype.beginTransaction=function(t){return new ai(this)},pi.prototype.get=function(t){return this.store[t]},pi.prototype.put=function(t,e,n){return!(!n&&this.store.hasOwnProperty(t))&&(this.store[t]=e,!0)},pi.prototype.del=function(t){delete this.store[t]};var li=function(t){function e(){t.call(this,{store:new pi})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){n(null,new e)},e}(ui);li.Name="InMemory",li.Options={};var di=ti.indexedDB||ti.mozIndexedDB||ti.webkitIndexedDB||ti.msIndexedDB,yi=function(t,e){this.tx=t,this.store=e};yi.prototype.get=function(t,e){try{var n=this.store.get(t);n.onerror=Pt(e),n.onsuccess=function(t){var n=t.target.result;void 0===n?e(null,n):e(null,E(n))}}catch(t){e(Dt(t))}};var gi=function(t){function e(e,n){t.call(this,e,n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.put=function(t,e,n,r){try{var i,o=v(e);i=n?this.store.put(o,t):this.store.add(o,t),i.onerror=Pt(r),i.onsuccess=function(t){r(null,!0)}}catch(t){r(Dt(t))}},e.prototype.del=function(t,e){try{var n=this.store.delete(t);n.onerror=Pt(e),n.onsuccess=function(t){e()}}catch(t){e(Dt(t))}},e.prototype.commit=function(t){setTimeout(t,0)},e.prototype.abort=function(t){var e=null;try{this.tx.abort()}catch(t){e=Dt(t)}finally{t(e)}},e}(yi),vi=function(t,e){var n=this;void 0===e&&(e="browserfs"),this.storeName=e;var r=di.open(this.storeName,1);r.onupgradeneeded=function(t){var e=t.target.result;e.objectStoreNames.contains(n.storeName)&&e.deleteObjectStore(n.storeName),e.createObjectStore(n.storeName)},r.onsuccess=function(e){n.db=e.target.result,t(null,n)},r.onerror=Pt(t,be.EACCES)};vi.prototype.name=function(){return mi.Name+" - "+this.storeName},vi.prototype.clear=function(t){try{var e=this.db.transaction(this.storeName,"readwrite"),n=e.objectStore(this.storeName),r=n.clear();r.onsuccess=function(e){setTimeout(t,0)},r.onerror=Pt(t)}catch(e){t(Dt(e))}},vi.prototype.beginTransaction=function(t){void 0===t&&(t="readonly");var e=this.db.transaction(this.storeName,t),n=e.objectStore(this.storeName);if("readwrite"===t)return new gi(e,n);if("readonly"===t)return new yi(e,n);throw new Fe(be.EINVAL,"Invalid transaction type.")};var mi=function(t){function e(n,r,i){var o=this;void 0===i&&(i=!0),t.call(this),this.store=new vi(function(t){t?n(t):o.init(o.store,function(t){n(t,o)})},r),d(i,e.Name,{storeName:r})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){new e(n,t.storeName,!1)},e.isAvailable=function(){try{return"undefined"!=typeof di&&null!==di.open("__browserfs_test__")}catch(t){return!1}},e}(hi);mi.Name="IndexedDB",mi.Options={storeName:{type:"string",optional:!0,description:"The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name."}};var _i,wi=!1;try{ti.localStorage.setItem("__test__",String.fromCharCode(55296)),wi=ti.localStorage.getItem("__test__")===String.fromCharCode(55296)}catch(t){wi=!1}_i=wi?"binary_string":"binary_string_ie",t.isEncoding(_i)||(_i="base64");var Ei=function(){};Ei.prototype.name=function(){return bi.Name},Ei.prototype.clear=function(){ti.localStorage.clear()},Ei.prototype.beginTransaction=function(t){return new ai(this)},Ei.prototype.get=function(e){try{var n=ti.localStorage.getItem(e);if(null!==n)return t.from(n,_i)}catch(t){}},Ei.prototype.put=function(t,e,n){try{return!(!n&&null!==ti.localStorage.getItem(t))&&(ti.localStorage.setItem(t,e.toString(_i)),!0)}catch(t){throw new Fe(be.ENOSPC,"LocalStorage is full.")}},Ei.prototype.del=function(t){try{ti.localStorage.removeItem(t)}catch(e){throw new Fe(be.EIO,"Unable to delete key "+t+": "+e)}};var bi=function(t){function e(){t.call(this,{store:new Ei})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){n(null,new e)},e.isAvailable=function(){return"undefined"!=typeof ti.localStorage},e}(ui);bi.Name="LocalStorage",bi.Options={};var Si=function(t){function e(){t.call(this),this.mountList=[],this.mntMap={},this.rootFs=new li}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){var r=new e;Object.keys(t).forEach(function(e){r.mount(e,t[e])}),n(null,r)},e.isAvailable=function(){return!0},e.prototype.mount=function(t,e){if("/"!==t[0]&&(t="/"+t),t=ke.resolve(t),this.mntMap[t])throw new Fe(be.EINVAL,"Mount point "+t+" is already taken.");g(t,511,this.rootFs),this.mntMap[t]=e,this.mountList.push(t),this.mountList=this.mountList.sort(function(t,e){return e.length-t.length})},e.prototype.umount=function(t){var e=this;if("/"!==t[0]&&(t="/"+t),t=ke.resolve(t),!this.mntMap[t])throw new Fe(be.EINVAL,"Mount point "+t+" is already unmounted.");for(delete this.mntMap[t],this.mountList.splice(this.mountList.indexOf(t),1);"/"!==t&&0===e.rootFs.readdirSync(t).length;)e.rootFs.rmdirSync(t),t=ke.dirname(t)},e.prototype._getFs=function(t){for(var e=this,n=this.mountList,r=n.length,i=0;i1?o.length:0),""===t&&(t="/"),{fs:e.mntMap[o],path:t}}return{fs:this.rootFs,path:t}},e.prototype.getName=function(){return e.Name},e.prototype.diskSpace=function(t,e){e(0,0)},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return!0},e.prototype.standardizeError=function(t,e,n){var r=t.message.indexOf(e);return r!==-1&&(t.message=t.message.substr(0,r)+n+t.message.substr(r+e.length),t.path=n),t},e.prototype.rename=function(t,e,n){var r=this,i=this._getFs(t),o=this._getFs(e);return i.fs===o.fs?i.fs.rename(i.path,o.path,function(s){s&&r.standardizeError(r.standardizeError(s,i.path,t),o.path,e),n(s)}):Pe.readFile(t,function(r,i){return r?n(r):void Pe.writeFile(e,i,function(e){return e?n(e):void Pe.unlink(t,n)})})},e.prototype.renameSync=function(t,e){var n=this._getFs(t),r=this._getFs(e);if(n.fs===r.fs)try{return n.fs.renameSync(n.path,r.path)}catch(i){ +throw this.standardizeError(this.standardizeError(i,n.path,t),r.path,e),i}var i=Pe.readFileSync(t);return Pe.writeFileSync(e,i),Pe.unlinkSync(t)},e.prototype.readdirSync=function(t){var e=this._getFs(t),n=null;if(e.fs!==this.rootFs)try{n=this.rootFs.readdirSync(t)}catch(t){}try{var r=e.fs.readdirSync(e.path);return null===n?r:r.concat(n.filter(function(t){return r.indexOf(t)===-1}))}catch(r){if(null===n)throw this.standardizeError(r,e.path,t);return n}},e.prototype.readdir=function(t,e){var n=this,r=this._getFs(t);r.fs.readdir(r.path,function(i,o){if(r.fs!==n.rootFs)try{var s=n.rootFs.readdirSync(t);o=o?o.concat(s.filter(function(t){return o.indexOf(t)===-1})):s}catch(o){if(i)return e(n.standardizeError(i,r.path,t))}else if(i)return e(n.standardizeError(i,r.path,t));e(null,o)})},e.prototype.rmdirSync=function(t){var e=this._getFs(t);if(this._containsMountPt(t))throw Fe.ENOTEMPTY(t);try{e.fs.rmdirSync(e.path)}catch(n){throw this.standardizeError(n,e.path,t)}},e.prototype.rmdir=function(t,e){var n=this,r=this._getFs(t);this._containsMountPt(t)?e(Fe.ENOTEMPTY(t)):r.fs.rmdir(r.path,function(i){e(i?n.standardizeError(i,r.path,t):null)})},e.prototype._containsMountPt=function(t){for(var e=this.mountList,n=e.length,r=0;r=t.length&&i.slice(0,t.length)===t)return!0}return!1},e}(We);Si.Name="MountableFileSystem",Si.Options={};for(var ki=[["exists","unlink","readlink"],["stat","mkdir","realpath","truncate"],["open","readFile","chmod","utimes"],["chown"],["writeFile","appendFile"]],Ii=0;Ii0)){var e=xi.shift();return e()}};Ti.addEventListener?Ti.addEventListener("message",Pi,!0):Ti.attachEvent("onmessage",Pi)}else if(Ti.MessageChannel){var Ci=new Ti.MessageChannel;Ci.port1.onmessage=function(t){if(xi.length>0)return xi.shift()()},Li=function(t){xi.push(t),Ci.port2.postMessage("")}}else Li=function(t){return setTimeout(t,0)}}var Ui=Li,Mi=function(){this._locked=!1,this._waiters=[]};Mi.prototype.lock=function(t){return this._locked?void this._waiters.push(t):(this._locked=!0,void t())},Mi.prototype.unlock=function(){if(!this._locked)throw new Error("unlock of a non-locked mutex");var t=this._waiters.shift();return t?void Ui(t):void(this._locked=!1)},Mi.prototype.tryLock=function(){return!this._locked&&(this._locked=!0,!0)},Mi.prototype.isLocked=function(){return this._locked};var ji=function(t){this._fs=t,this._mu=new Mi};ji.prototype.getName=function(){return"LockedFS<"+this._fs.getName()+">"},ji.prototype.getFSUnlocked=function(){return this._fs},ji.prototype.initialize=function(t){this._fs.initialize(t)},ji.prototype.diskSpace=function(t,e){this._fs.diskSpace(t,e)},ji.prototype.isReadOnly=function(){return this._fs.isReadOnly()},ji.prototype.supportsLinks=function(){return this._fs.supportsLinks()},ji.prototype.supportsProps=function(){return this._fs.supportsProps()},ji.prototype.supportsSynch=function(){return this._fs.supportsSynch()},ji.prototype.rename=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.rename(t,e,function(t){r._mu.unlock(),n(t)})})},ji.prototype.renameSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.renameSync(t,e)},ji.prototype.stat=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.stat(t,e,function(t,e){r._mu.unlock(),n(t,e)})})},ji.prototype.statSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.statSync(t,e)},ji.prototype.open=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.open(t,e,n,function(t,e){i._mu.unlock(),r(t,e)})})},ji.prototype.openSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.openSync(t,e,n)},ji.prototype.unlink=function(t,e){var n=this;this._mu.lock(function(){n._fs.unlink(t,function(t){n._mu.unlock(),e(t)})})},ji.prototype.unlinkSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.unlinkSync(t)},ji.prototype.rmdir=function(t,e){var n=this;this._mu.lock(function(){n._fs.rmdir(t,function(t){n._mu.unlock(),e(t)})})},ji.prototype.rmdirSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.rmdirSync(t)},ji.prototype.mkdir=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.mkdir(t,e,function(t){r._mu.unlock(),n(t)})})},ji.prototype.mkdirSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.mkdirSync(t,e)},ji.prototype.readdir=function(t,e){var n=this;this._mu.lock(function(){n._fs.readdir(t,function(t,r){n._mu.unlock(),e(t,r)})})},ji.prototype.readdirSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readdirSync(t)},ji.prototype.exists=function(t,e){var n=this;this._mu.lock(function(){n._fs.exists(t,function(t){n._mu.unlock(),e(t)})})},ji.prototype.existsSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.existsSync(t)},ji.prototype.realpath=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.realpath(t,e,function(t,e){r._mu.unlock(),n(t,e)})})},ji.prototype.realpathSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.realpathSync(t,e)},ji.prototype.truncate=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.truncate(t,e,function(t){r._mu.unlock(),n(t)})})},ji.prototype.truncateSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.truncateSync(t,e)},ji.prototype.readFile=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.readFile(t,e,n,function(t,e){i._mu.unlock(),r(t,e)})})},ji.prototype.readFileSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readFileSync(t,e,n)},ji.prototype.writeFile=function(t,e,n,r,i,o){var s=this;this._mu.lock(function(){s._fs.writeFile(t,e,n,r,i,function(t){s._mu.unlock(),o(t)})})},ji.prototype.writeFileSync=function(t,e,n,r,i){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.writeFileSync(t,e,n,r,i)},ji.prototype.appendFile=function(t,e,n,r,i,o){var s=this;this._mu.lock(function(){s._fs.appendFile(t,e,n,r,i,function(t){s._mu.unlock(),o(t)})})},ji.prototype.appendFileSync=function(t,e,n,r,i){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.appendFileSync(t,e,n,r,i)},ji.prototype.chmod=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.chmod(t,e,n,function(t){i._mu.unlock(),r(t)})})},ji.prototype.chmodSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.chmodSync(t,e,n)},ji.prototype.chown=function(t,e,n,r,i){var o=this;this._mu.lock(function(){o._fs.chown(t,e,n,r,function(t){o._mu.unlock(),i(t)})})},ji.prototype.chownSync=function(t,e,n,r){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.chownSync(t,e,n,r)},ji.prototype.utimes=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.utimes(t,e,n,function(t){i._mu.unlock(),r(t)})})},ji.prototype.utimesSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.utimesSync(t,e,n)},ji.prototype.link=function(t,e,n){var r=this;this._mu.lock(function(){r._fs.link(t,e,function(t){r._mu.unlock(),n(t)})})},ji.prototype.linkSync=function(t,e){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.linkSync(t,e)},ji.prototype.symlink=function(t,e,n,r){var i=this;this._mu.lock(function(){i._fs.symlink(t,e,n,function(t){i._mu.unlock(),r(t)})})},ji.prototype.symlinkSync=function(t,e,n){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.symlinkSync(t,e,n)},ji.prototype.readlink=function(t,e){var n=this;this._mu.lock(function(){n._fs.readlink(t,function(t,r){n._mu.unlock(),e(t,r)})})},ji.prototype.readlinkSync=function(t){if(this._mu.isLocked())throw new Error("invalid sync call");return this._fs.readlinkSync(t)};var Bi="/.deletedFiles.log",zi=function(t){function e(e,n,r,i,o){t.call(this,e,n,r,i,o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.sync=function(t){var e=this;return this.isDirty()?void this._fs._syncAsync(this,function(n){e.resetDirty(),t(n)}):void t(null)},e.prototype.syncSync=function(){this.isDirty()&&(this._fs._syncSync(this),this.resetDirty())},e.prototype.close=function(t){this.sync(t)},e.prototype.closeSync=function(){this.syncSync()},e}(Ye),qi=function(t){function e(e,n){if(t.call(this),this._isInitialized=!1,this._initializeCallbacks=[],this._deletedFiles={},this._deleteLog="",this._deleteLogUpdatePending=!1,this._deleteLogUpdateNeeded=!1,this._deleteLogError=null,this._writable=e,this._readable=n,this._writable.isReadOnly())throw new Fe(be.EINVAL,"Writable file system must be writable.")}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.isAvailable=function(){return!0},e.prototype.getOverlayedFileSystems=function(){return{readable:this._readable,writable:this._writable}},e.prototype._syncAsync=function(t,e){var n=this;this.createParentDirectoriesAsync(t.getPath(),function(r){return r?e(r):void n._writable.writeFile(t.getPath(),t.getBuffer(),null,Mt("w"),t.getStats().mode,e)})},e.prototype._syncSync=function(t){this.createParentDirectories(t.getPath()),this._writable.writeFileSync(t.getPath(),t.getBuffer(),null,Mt("w"),t.getStats().mode)},e.prototype.getName=function(){return Vi.Name},e.prototype.initialize=function(t){var e=this,n=this._initializeCallbacks,r=function(t){e._isInitialized=!t,e._initializeCallbacks=[],n.forEach(function(e){return e(t)})};return this._isInitialized?t():(n.push(t),void(1===n.length&&this._writable.readFile(Bi,"utf8",Mt("r"),function(t,n){if(t){if(t.errno!==be.ENOENT)return r(t)}else e._deleteLog=n;e._reparseDeletionLog(),r()})))},e.prototype.isReadOnly=function(){return!1},e.prototype.supportsSynch=function(){return this._readable.supportsSynch()&&this._writable.supportsSynch()},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return this._readable.supportsProps()&&this._writable.supportsProps()},e.prototype.getDeletionLog=function(){return this._deleteLog},e.prototype.restoreDeletionLog=function(t){this._deleteLog=t,this._reparseDeletionLog(),this.updateLog("")},e.prototype.rename=function(t,e,n){var r=this;if(this.checkInitAsync(n)&&!this.checkPathAsync(t,n)&&!this.checkPathAsync(e,n))return t===Bi||e===Bi?n(Fe.EPERM("Cannot rename deletion log.")):t===e?n():void this.stat(t,!1,function(i,o){return i?n(i):r.stat(e,!1,function(i,s){function a(r){var i=r.shift();if(!i)return n();var o=ke.resolve(t,i),s=ke.resolve(e,i);c.rename(o,s,function(t){return t?n(t):void a(r)})}var c=r,u=511;if(o.isDirectory()){if(i)return i.errno!==be.ENOENT?n(i):r._writable.exists(t,function(i){return i?r._writable.rename(t,e,n):void r._writable.mkdir(e,u,function(e){return e?n(e):void r._readable.readdir(t,function(t,e){return t?n():void a(e)})})});if(u=s.mode,!s.isDirectory())return n(Fe.ENOTDIR(e));r.readdir(e,function(i,o){return o&&o.length?n(Fe.ENOTEMPTY(e)):void r._readable.readdir(t,function(t,e){return t?n():void a(e)})})}return s&&s.isDirectory()?n(Fe.EISDIR(e)):void r.readFile(t,null,Mt("r"),function(i,s){return i?n(i):r.writeFile(e,s,null,Mt("w"),o.mode,function(e){return e?n(e):r.unlink(t,n)})})})})},e.prototype.renameSync=function(t,e){var n=this;if(this.checkInitialized(),this.checkPath(t),this.checkPath(e),t===Bi||e===Bi)throw Fe.EPERM("Cannot rename deletion log.");var r=this.statSync(t,!1);if(r.isDirectory()){if(t===e)return;var i=511;if(this.existsSync(e)){var o=this.statSync(e,!1);if(i=o.mode,!o.isDirectory())throw Fe.ENOTDIR(e);if(this.readdirSync(e).length>0)throw Fe.ENOTEMPTY(e)}this._writable.existsSync(t)?this._writable.renameSync(t,e):this._writable.existsSync(e)||this._writable.mkdirSync(e,i),this._readable.existsSync(t)&&this._readable.readdirSync(t).forEach(function(r){n.renameSync(ke.resolve(t,r),ke.resolve(e,r))})}else{if(this.existsSync(e)&&this.statSync(e,!1).isDirectory())throw Fe.EISDIR(e);this.writeFileSync(e,this.readFileSync(t,null,Mt("r")),null,Mt("w"),r.mode)}t!==e&&this.existsSync(t)&&this.unlinkSync(t)},e.prototype.stat=function(t,e,n){var r=this;this.checkInitAsync(n)&&this._writable.stat(t,e,function(i,o){i&&i.errno===be.ENOENT?(r._deletedFiles[t]&&n(Fe.ENOENT(t)),r._readable.stat(t,e,function(t,e){e&&(e=e.clone(),e.mode=Ut(e.mode)),n(t,e)})):n(i,o)})},e.prototype.statSync=function(t,e){this.checkInitialized();try{return this._writable.statSync(t,e)}catch(r){if(this._deletedFiles[t])throw Fe.ENOENT(t);var n=this._readable.statSync(t,e).clone();return n.mode=Ut(n.mode),n}},e.prototype.open=function(t,e,n,r){var i=this;this.checkInitAsync(r)&&!this.checkPathAsync(t,r)&&this.stat(t,!1,function(o,s){if(s)switch(e.pathExistsAction()){case Oe.TRUNCATE_FILE:return i.createParentDirectoriesAsync(t,function(o){return o?r(o):void i._writable.open(t,e,n,r)});case Oe.NOP:return i._writable.exists(t,function(o){o?i._writable.open(t,e,n,r):(s=s.clone(),s.mode=n,i._readable.readFile(t,null,Mt("r"),function(n,o){if(n)return r(n);s.size===-1&&(s.size=o.length);var a=new zi(i,t,e,s,o);r(null,a)}))});default:return r(Fe.EEXIST(t))}else switch(e.pathNotExistsAction()){case Oe.CREATE_FILE:return i.createParentDirectoriesAsync(t,function(o){return o?r(o):i._writable.open(t,e,n,r)});default:return r(Fe.ENOENT(t))}})},e.prototype.openSync=function(t,e,n){if(this.checkInitialized(),this.checkPath(t),t===Bi)throw Fe.EPERM("Cannot open deletion log.");if(this.existsSync(t))switch(e.pathExistsAction()){case Oe.TRUNCATE_FILE:return this.createParentDirectories(t),this._writable.openSync(t,e,n);case Oe.NOP:if(this._writable.existsSync(t))return this._writable.openSync(t,e,n);var r=this._readable.readFileSync(t,null,Mt("r")),i=this._readable.statSync(t,!1).clone();return i.mode=n,new zi(this,t,e,i,r);default:throw Fe.EEXIST(t)}else switch(e.pathNotExistsAction()){case Oe.CREATE_FILE:return this.createParentDirectories(t),this._writable.openSync(t,e,n);default:throw Fe.ENOENT(t)}},e.prototype.unlink=function(t,e){var n=this;this.checkInitAsync(e)&&!this.checkPathAsync(t,e)&&this.exists(t,function(r){return r?void n._writable.exists(t,function(r){return r?n._writable.unlink(t,function(r){return r?e(r):void n.exists(t,function(r){r&&n.deletePath(t),e(null)})}):(n.deletePath(t),void e(null))}):e(Fe.ENOENT(t))})},e.prototype.unlinkSync=function(t){if(this.checkInitialized(),this.checkPath(t),!this.existsSync(t))throw Fe.ENOENT(t);this._writable.existsSync(t)&&this._writable.unlinkSync(t),this.existsSync(t)&&this.deletePath(t)},e.prototype.rmdir=function(t,e){var n=this;if(this.checkInitAsync(e)){var r=function(){n.readdir(t,function(r,i){return r?e(r):i.length?e(Fe.ENOTEMPTY(t)):(n.deletePath(t),void e(null))})};this.exists(t,function(i){return i?void n._writable.exists(t,function(i){i?n._writable.rmdir(t,function(i){return i?e(i):void n._readable.exists(t,function(t){t?r():e()})}):r()}):e(Fe.ENOENT(t))})}},e.prototype.rmdirSync=function(t){if(this.checkInitialized(),!this.existsSync(t))throw Fe.ENOENT(t);if(this._writable.existsSync(t)&&this._writable.rmdirSync(t),this.existsSync(t)){if(this.readdirSync(t).length>0)throw Fe.ENOTEMPTY(t);this.deletePath(t)}},e.prototype.mkdir=function(t,e,n){var r=this;this.checkInitAsync(n)&&this.exists(t,function(i){return i?n(Fe.EEXIST(t)):void r.createParentDirectoriesAsync(t,function(i){return i?n(i):void r._writable.mkdir(t,e,n)})})},e.prototype.mkdirSync=function(t,e){if(this.checkInitialized(),this.existsSync(t))throw Fe.EEXIST(t);this.createParentDirectories(t),this._writable.mkdirSync(t,e)},e.prototype.readdir=function(t,e){var n=this;this.checkInitAsync(e)&&this.stat(t,!1,function(r,i){return r?e(r):i.isDirectory()?void n._writable.readdir(t,function(r,i){return r&&"ENOENT"!==r.code?e(r):(!r&&i||(i=[]),void n._readable.readdir(t,function(r,o){!r&&o||(o=[]);var s={},a=i.concat(o.filter(function(e){return!n._deletedFiles[t+"/"+e]})).filter(function(t){var e=!s[t];return s[t]=!0,e});e(null,a)}))}):e(Fe.ENOTDIR(t))})},e.prototype.readdirSync=function(t){var e=this;this.checkInitialized();var n=this.statSync(t,!1);if(!n.isDirectory())throw Fe.ENOTDIR(t);var r=[];try{r=r.concat(this._writable.readdirSync(t))}catch(t){}try{r=r.concat(this._readable.readdirSync(t).filter(function(n){return!e._deletedFiles[t+"/"+n]}))}catch(t){}var i={};return r.filter(function(t){var e=!i[t];return i[t]=!0,e})},e.prototype.exists=function(t,e){var n=this;this.checkInitialized(),this._writable.exists(t,function(r){return r?e(!0):void n._readable.exists(t,function(r){e(r&&n._deletedFiles[t]!==!0)})})},e.prototype.existsSync=function(t){return this.checkInitialized(),this._writable.existsSync(t)||this._readable.existsSync(t)&&this._deletedFiles[t]!==!0},e.prototype.chmod=function(t,e,n,r){var i=this;this.checkInitAsync(r)&&this.operateOnWritableAsync(t,function(o){return o?r(o):void i._writable.chmod(t,e,n,r)})},e.prototype.chmodSync=function(t,e,n){var r=this;this.checkInitialized(),this.operateOnWritable(t,function(){r._writable.chmodSync(t,e,n)})},e.prototype.chown=function(t,e,n,r,i){var o=this;this.checkInitAsync(i)&&this.operateOnWritableAsync(t,function(s){return s?i(s):void o._writable.chown(t,e,n,r,i)})},e.prototype.chownSync=function(t,e,n,r){var i=this;this.checkInitialized(),this.operateOnWritable(t,function(){i._writable.chownSync(t,e,n,r)})},e.prototype.utimes=function(t,e,n,r){var i=this;this.checkInitAsync(r)&&this.operateOnWritableAsync(t,function(o){return o?r(o):void i._writable.utimes(t,e,n,r)})},e.prototype.utimesSync=function(t,e,n){var r=this;this.checkInitialized(),this.operateOnWritable(t,function(){r._writable.utimesSync(t,e,n)})},e.prototype.deletePath=function(t){this._deletedFiles[t]=!0,this.updateLog("d"+t+"\n")},e.prototype.updateLog=function(t){var e=this;this._deleteLog+=t,this._deleteLogUpdatePending?this._deleteLogUpdateNeeded=!0:(this._deleteLogUpdatePending=!0,this._writable.writeFile(Bi,this._deleteLog,"utf8",Re.getFileFlag("w"),420,function(t){e._deleteLogUpdatePending=!1,t?e._deleteLogError=t:e._deleteLogUpdateNeeded&&(e._deleteLogUpdateNeeded=!1,e.updateLog(""))}))},e.prototype._reparseDeletionLog=function(){var t=this;this._deletedFiles={},this._deleteLog.split("\n").forEach(function(e){t._deletedFiles[e.slice(1)]="d"===e.slice(0,1)})},e.prototype.checkInitialized=function(){if(!this._isInitialized)throw new Fe(be.EPERM,"OverlayFS is not initialized. Please initialize OverlayFS using its initialize() method before using it.");if(null!==this._deleteLogError){var t=this._deleteLogError;throw this._deleteLogError=null,t}},e.prototype.checkInitAsync=function(t){if(!this._isInitialized)return t(new Fe(be.EPERM,"OverlayFS is not initialized. Please initialize OverlayFS using its initialize() method before using it.")),!1;if(null!==this._deleteLogError){var e=this._deleteLogError;return this._deleteLogError=null,t(e),!1}return!0},e.prototype.checkPath=function(t){if(t===Bi)throw Fe.EPERM(t)},e.prototype.checkPathAsync=function(t,e){return t===Bi&&(e(Fe.EPERM(t)),!0)},e.prototype.createParentDirectoriesAsync=function(t,e){function n(t,e){t?(o.push(i),i=ke.dirname(i),s._writable.stat(i,!1,n)):r()}function r(){if(!o.length)return e();var t=o.pop();s._readable.stat(t,!1,function(n,i){return i?void s._writable.mkdir(t,i.mode,function(t){return t?e(t):void r()}):e()})}var i=ke.dirname(t),o=[],s=this;this._writable.stat(i,!1,n)},e.prototype.createParentDirectories=function(t){for(var e=this,n=ke.dirname(t),r=[];!this._writable.existsSync(n);)r.push(n),n=ke.dirname(n);r=r.reverse(),r.forEach(function(t){e._writable.mkdirSync(t,e.statSync(t,!1).mode)})},e.prototype.operateOnWritable=function(t,e){if(!this.existsSync(t))throw Fe.ENOENT(t);this._writable.existsSync(t)||this.copyToWritable(t),e()},e.prototype.operateOnWritableAsync=function(t,e){var n=this;this.exists(t,function(r){return r?void n._writable.exists(t,function(r){return r?void e():n.copyToWritableAsync(t,e)}):e(Fe.ENOENT(t))})},e.prototype.copyToWritable=function(t){var e=this.statSync(t,!1);e.isDirectory()?this._writable.mkdirSync(t,e.mode):this.writeFileSync(t,this._readable.readFileSync(t,null,Mt("r")),null,Mt("w"),this.statSync(t,!1).mode)},e.prototype.copyToWritableAsync=function(t,e){var n=this;this.stat(t,!1,function(r,i){return r?e(r):i.isDirectory()?n._writable.mkdir(t,i.mode,e):void n._readable.readFile(t,null,Mt("r"),function(r,o){return r?e(r):void n.writeFile(t,o,null,Mt("w"),i.mode,e)})})},e}(We),Vi=function(t){function e(n,r,i){void 0===i&&(i=!0),t.call(this,new qi(n,r)),d(i,e.Name,{readable:"readable file system",writable:"writable file system"})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){try{var r=new e(t.writable,t.readable,!1);r.initialize(function(t){n(t,r)},!1)}catch(t){n(t)}},e.isAvailable=function(){return qi.isAvailable()},e.prototype.initialize=function(e,n){void 0===n&&(n=!0),n&&console.warn("[OverlayFS] OverlayFS.initialize() is deprecated and will be removed in the next major release. Please use 'OverlayFS.Create({readable: readable file system instance, writable: writable file system instance}, cb)' to create and initialize OverlayFS instances."),t.prototype.initialize.call(this,e)},e.prototype.getOverlayedFileSystems=function(){return t.prototype.getFSUnlocked.call(this).getOverlayedFileSystems()},e.prototype.unwrap=function(){return t.prototype.getFSUnlocked.call(this)},e}(ji);Vi.Name="OverlayFS",Vi.Options={writable:{type:"object",description:"The file system to write modified files to."},readable:{type:"object",description:"The file system that initially populates this file system."}};var Wi;!function(t){t[t.CB=0]="CB",t[t.FD=1]="FD",t[t.API_ERROR=2]="API_ERROR",t[t.STATS=3]="STATS",t[t.PROBE=4]="PROBE",t[t.FILEFLAG=5]="FILEFLAG",t[t.BUFFER=6]="BUFFER",t[t.ERROR=7]="ERROR"}(Wi||(Wi={}));var Hi=function(){this._callbacks={},this._nextId=0};Hi.prototype.toRemoteArg=function(t){var e=this._nextId++;return this._callbacks[e]=t,{type:Wi.CB,id:e}},Hi.prototype.toLocalArg=function(t){var e=this._callbacks[t];return delete this._callbacks[t],e};var Zi=function(){this._fileDescriptors={},this._nextId=0};Zi.prototype.toRemoteArg=function(e,n,r,i){var o,s,a=this._nextId++;this._fileDescriptors[a]=e,e.stat(function(c,u){c?i(c):(s=Yt(u.toBuffer()),r.isReadable()?e.read(t.alloc(u.size),0,u.size,0,function(t,e,c){t?i(t):(o=Yt(c),i(null,{type:Wi.FD,id:a,data:o,stat:s,path:n,flag:r.getFlagString()}))}):i(null,{type:Wi.FD,id:a,data:new ArrayBuffer(0),stat:s,path:n,flag:r.getFlagString()}))})},Zi.prototype.applyFdAPIRequest=function(t,e){var n=this,r=t.args[0];this._applyFdChanges(r,function(i,o){i?e(i):o[t.method](function(i){"close"===t.method&&delete n._fileDescriptors[r.id],e(i)})})},Zi.prototype._applyFdChanges=function(t,e){var n=this._fileDescriptors[t.id],r=Xt(t.data),i=Te.fromBuffer(Xt(t.stat)),o=Re.getFileFlag(t.flag);o.isWriteable()?n.write(r,0,r.length,o.isAppendable()?n.getPos():0,function(t){function s(){n.stat(function(t,r){t?e(t):r.mode!==i.mode?n.chmod(i.mode,function(t){e(t,n)}):e(t,n)})}t?e(t):o.isAppendable()?s():n.truncate(r.length,function(){s()})}):e(null,n)};var Yi=function(t){function e(e,n,r,i,o,s){t.call(this,e,n,r,i,s),this._remoteFdId=o}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getRemoteFdId=function(){return this._remoteFdId},e.prototype.toRemoteArg=function(){return{type:Wi.FD,id:this._remoteFdId,data:Yt(this.getBuffer()),stat:Yt(this.getStats().toBuffer()),path:this.getPath(),flag:this.getFlag().getFlagString()}},e.prototype.sync=function(t){this._syncClose("sync",t)},e.prototype.close=function(t){this._syncClose("close",t)},e.prototype._syncClose=function(t,e){var n=this;this.isDirty()?this._fs.syncClose(t,this,function(t){t||n.resetDirty(),e(t)}):e()},e}(Ye),Xi=function(e){function n(t,r){var i=this;void 0===r&&(r=!0),e.call(this),this._callbackConverter=new Hi,this._isInitialized=!1,this._isReadOnly=!1,this._supportLinks=!1,this._supportProps=!1,this._worker=t,d(r,n.Name,{worker:"Web Worker instance"}),this._worker.addEventListener("message",function(t){var e=t.data;if(Qt(e)){var n,r=e.args,o=new Array(r.length);for(n=0;n0&&(u=-1,s={browserfsMessage:!0,cbId:o,args:[jt(t)]},e.postMessage(s))}var i,s,a=arguments,c=new Array(arguments.length),u=arguments.length;for(i=0;i0;){var i=void 0,o=r.pop(),s=o[0],a=o[1],c=o[2];for(var u in a)if(a.hasOwnProperty(u)){var f=a[u],h=s+"/"+u;f?(e._index[h]=i=new $i,r.push([h,f,i])):i=new Qi(new Te(Le.FILE,-1,365)),c&&(c._ls[u]=i)}}return e},Gi.prototype.fileIterator=function(t){var e=this;for(var n in e._index)if(e._index.hasOwnProperty(n))for(var r=e._index[n],i=r.getListing(),o=0,s=i;o0&&"/"!==r.charAt(r.length-1)&&(r+="/"),this.prefixUrl=r;var o=null;if("string"==typeof n){if(o=this._requestFileSync(n,"json"),!o)throw new Error("Unable to find listing at URL: ${listingUrlOrObj}")}else o=n;d(i,e.Name,{index:"string"==typeof n?n:"file index as an object",baseUrl:r}),this._index=Gi.fromListing(o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){void 0===t.index&&(t.index="index.json"),"string"==typeof t.index?e.FromURL(t.index,n,t.baseUrl,!1):n(null,new e(t.index,t.baseUrl,!1))},e.isAvailable=function(){return"undefined"!=typeof XMLHttpRequest&&null!==XMLHttpRequest},e.FromURL=function(t,n,r,i){void 0===r&&(r=t.slice(0,t.lastIndexOf("/")+1)),void 0===i&&(i=!0),i&&console.warn("[XmlHttpRequest] XmlHttpRequest.FromURL() is deprecated and will be removed in the next major release. Please use 'XmlHttpRequest.Create({ index: \""+t+'", baseUrl: "'+r+"\" }, cb)' instead."),Ki(t,"json",function(t,i){t?n(t):n(null,new e(i,r,!1))})},e.prototype.empty=function(){this._index.fileIterator(function(t){t.fileData=null})},e.prototype.getName=function(){return e.Name},e.prototype.diskSpace=function(t,e){e(0,0)},e.prototype.isReadOnly=function(){return!0},e.prototype.supportsLinks=function(){return!1},e.prototype.supportsProps=function(){return!1},e.prototype.supportsSynch=function(){return!0},e.prototype.preloadFile=function(t,e){var n=this._index.getInode(t);if(!oe(n))throw Fe.EISDIR(t);if(null===n)throw Fe.ENOENT(t);var r=n.getData();r.size=e.length,r.fileData=e},e.prototype.stat=function(t,e,n){var r=this._index.getInode(t);if(null===r)return n(Fe.ENOENT(t));var i;oe(r)?(i=r.getData(),i.size<0?this._requestFileSizeAsync(t,function(t,e){return t?n(t):(i.size=e,void n(null,i.clone()))}):n(null,i.clone())):se(r)?(i=r.getStats(),n(null,i)):n(Fe.FileError(be.EINVAL,t))},e.prototype.statSync=function(t,e){var n=this._index.getInode(t);if(null===n)throw Fe.ENOENT(t);var r;if(oe(n))r=n.getData(),r.size<0&&(r.size=this._requestFileSizeSync(t));else{if(!se(n))throw Fe.FileError(be.EINVAL,t);r=n.getStats()}return r},e.prototype.open=function(t,e,n,r){if(e.isWriteable())return r(new Fe(be.EPERM,t));var i=this,o=this._index.getInode(t);if(null===o)return r(Fe.ENOENT(t));if(!oe(o))return r(Fe.EISDIR(t));var s=o.getData();switch(e.pathExistsAction()){case Oe.THROW_EXCEPTION:case Oe.TRUNCATE_FILE:return r(Fe.EEXIST(t));case Oe.NOP:if(s.fileData)return r(null,new Xe(i,t,e,s.clone(),s.fileData));this._requestFileAsync(t,"buffer",function(n,o){return n?r(n):(s.size=o.length,s.fileData=o,r(null,new Xe(i,t,e,s.clone(),o)))});break;default:return r(new Fe(be.EINVAL,"Invalid FileMode object."))}},e.prototype.openSync=function(t,e,n){if(e.isWriteable())throw new Fe(be.EPERM,t);var r=this._index.getInode(t);if(null===r)throw Fe.ENOENT(t);if(!oe(r))throw Fe.EISDIR(t);var i=r.getData();switch(e.pathExistsAction()){case Oe.THROW_EXCEPTION:case Oe.TRUNCATE_FILE:throw Fe.EEXIST(t);case Oe.NOP:if(i.fileData)return new Xe(this,t,e,i.clone(),i.fileData);var o=this._requestFileSync(t,"buffer");return i.size=o.length,i.fileData=o,new Xe(this,t,e,i.clone(),o);default:throw new Fe(be.EINVAL,"Invalid FileMode object.")}},e.prototype.readdir=function(t,e){try{e(null,this.readdirSync(t))}catch(t){e(t)}},e.prototype.readdirSync=function(t){var e=this._index.getInode(t);if(null===e)throw Fe.ENOENT(t);if(se(e))return e.getListing();throw Fe.ENOTDIR(t)},e.prototype.readFile=function(t,e,n,r){var i=r;this.open(t,n,420,function(t,n){if(t)return r(t);r=function(t,e){n.close(function(n){return t||(t=n),i(t,e)})};var o=n,s=o.getBuffer();null===e?r(t,b(s)):ae(s,e,r)})},e.prototype.readFileSync=function(t,e,n){var r=this.openSync(t,n,420);try{var i=r,o=i.getBuffer();return null===e?b(o):o.toString(e)}finally{r.closeSync()}},e.prototype.getXhrPath=function(t){return"/"===t.charAt(0)&&(t=t.slice(1)),this.prefixUrl+t},e.prototype._requestFileAsync=function(t,e,n){Ki(this.getXhrPath(t),e,n)},e.prototype._requestFileSync=function(t,e){return Ji(this.getXhrPath(t),e)},e.prototype._requestFileSizeAsync=function(t,e){ie(this.getXhrPath(t),e)},e.prototype._requestFileSizeSync=function(t){return re(this.getXhrPath(t))},e}(We);to.Name="XmlHttpRequest",to.Options={index:{type:["string","object"],optional:!0,description:"URL to a file index as a JSON file or the file index object itself, generated with the make_xhrfs_index script. Defaults to `index.json`."},baseUrl:{type:"string",optional:!0,description:"Used as the URL prefix for fetched files. Default: Fetch files relative to the index."}};var eo=function(){};eo.str2byte=function(t,e){for(var n=t.length>e.length?e.length:t.length,r=0;r127){var o=eo.extendedChars.indexOf(t.charAt(r));o>-1&&(i=o+128)}e[i]=r}return n},eo.byte2str=function(t){for(var e=new Array(t.length),n=0;n127?e[n]=eo.extendedChars[r-128]:e[n]=String.fromCharCode(r)}return e.join("")},eo.byteLength=function(t){return t.length},eo.extendedChars=["Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å","É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","ø","£","Ø","×","ƒ","á","í","ó","ú","ñ","Ñ","ª","º","¿","®","¬","½","¼","¡","«","»","_","_","_","¦","¦","Á","Â","À","©","¦","¦","+","+","¢","¥","+","+","-","-","+","-","+","ã","Ã","+","+","-","-","¦","-","+","¤","ð","Ð","Ê","Ë","È","i","Í","Î","Ï","+","+","_","_","¦","Ì","_","Ó","ß","Ô","Ò","õ","Õ","µ","þ","Þ","Ú","Û","Ù","ý","Ý","¯","´","­","±","_","¾","¶","§","÷","¸","°","¨","·","¹","³","²","_"," "];var no,ro=n(23).inflateRaw,io={};!function(t){t[t.MSDOS=0]="MSDOS",t[t.AMIGA=1]="AMIGA",t[t.OPENVMS=2]="OPENVMS",t[t.UNIX=3]="UNIX",t[t.VM_CMS=4]="VM_CMS",t[t.ATARI_ST=5]="ATARI_ST",t[t.OS2_HPFS=6]="OS2_HPFS",t[t.MAC=7]="MAC",t[t.Z_SYSTEM=8]="Z_SYSTEM",t[t.CP_M=9]="CP_M",t[t.NTFS=10]="NTFS",t[t.MVS=11]="MVS",t[t.VSE=12]="VSE",t[t.ACORN_RISC=13]="ACORN_RISC",t[t.VFAT=14]="VFAT",t[t.ALT_MVS=15]="ALT_MVS",t[t.BEOS=16]="BEOS",t[t.TANDEM=17]="TANDEM",t[t.OS_400=18]="OS_400",t[t.OSX=19]="OSX"}(no||(no={}));var oo;!function(t){t[t.STORED=0]="STORED",t[t.SHRUNK=1]="SHRUNK",t[t.REDUCED_1=2]="REDUCED_1",t[t.REDUCED_2=3]="REDUCED_2",t[t.REDUCED_3=4]="REDUCED_3",t[t.REDUCED_4=5]="REDUCED_4",t[t.IMPLODE=6]="IMPLODE",t[t.DEFLATE=8]="DEFLATE",t[t.DEFLATE64=9]="DEFLATE64",t[t.TERSE_OLD=10]="TERSE_OLD",t[t.BZIP2=12]="BZIP2",t[t.LZMA=14]="LZMA",t[t.TERSE_NEW=18]="TERSE_NEW",t[t.LZ77=19]="LZ77",t[t.WAVPACK=97]="WAVPACK",t[t.PPMD=98]="PPMD"}(oo||(oo={}));var so=function(t){if(this.data=t,67324752!==t.readUInt32LE(0))throw new Fe(be.EINVAL,"Invalid Zip file: Local file header has invalid signature: "+this.data.readUInt32LE(0))};so.prototype.versionNeeded=function(){return this.data.readUInt16LE(4)},so.prototype.flags=function(){return this.data.readUInt16LE(6)},so.prototype.compressionMethod=function(){return this.data.readUInt16LE(8)},so.prototype.lastModFileTime=function(){return ce(this.data.readUInt16LE(10),this.data.readUInt16LE(12))},so.prototype.rawLastModFileTime=function(){return this.data.readUInt32LE(10)},so.prototype.crc32=function(){return this.data.readUInt32LE(14)},so.prototype.fileNameLength=function(){return this.data.readUInt16LE(26)},so.prototype.extraFieldLength=function(){return this.data.readUInt16LE(28)},so.prototype.fileName=function(){return ue(this.data,this.useUTF8(),30,this.fileNameLength())},so.prototype.extraField=function(){var t=30+this.fileNameLength();return this.data.slice(t,t+this.extraFieldLength())},so.prototype.totalSize=function(){return 30+this.fileNameLength()+this.extraFieldLength()},so.prototype.useUTF8=function(){return 2048===(2048&this.flags())};var ao=function(t,e,n){this.header=t,this.record=e,this.data=n};ao.prototype.decompress=function(){var t=this.header.compressionMethod(),e=io[t];if(e)return e(this.data,this.record.compressedSize(),this.record.uncompressedSize(),this.record.flag());var n=oo[t];throw n||(n="Unknown: "+t),new Fe(be.EINVAL,"Invalid compression method on file '"+this.header.fileName()+"': "+n)},ao.prototype.getHeader=function(){return this.header},ao.prototype.getRecord=function(){return this.record},ao.prototype.getRawData=function(){return this.data};var co=function(t){this.data=t};co.prototype.crc32=function(){return this.data.readUInt32LE(0)},co.prototype.compressedSize=function(){return this.data.readUInt32LE(4)},co.prototype.uncompressedSize=function(){return this.data.readUInt32LE(8)};var uo=function(t){if(this.data=t,134630224!==this.data.readUInt32LE(0))throw new Fe(be.EINVAL,"Invalid archive extra data record signature: "+this.data.readUInt32LE(0))};uo.prototype.length=function(){return this.data.readUInt32LE(4)},uo.prototype.extraFieldData=function(){return this.data.slice(8,8+this.length())};var fo=function(t){if(this.data=t,84233040!==this.data.readUInt32LE(0))throw new Fe(be.EINVAL,"Invalid digital signature signature: "+this.data.readUInt32LE(0))};fo.prototype.size=function(){return this.data.readUInt16LE(4)},fo.prototype.signatureData=function(){return this.data.slice(6,6+this.size())};var ho=function(t,e){if(this.zipData=t,this.data=e,33639248!==this.data.readUInt32LE(0))throw new Fe(be.EINVAL,"Invalid Zip file: Central directory record has invalid signature: "+this.data.readUInt32LE(0));this._filename=this.produceFilename()};ho.prototype.versionMadeBy=function(){return this.data.readUInt16LE(4)},ho.prototype.versionNeeded=function(){return this.data.readUInt16LE(6)},ho.prototype.flag=function(){return this.data.readUInt16LE(8)},ho.prototype.compressionMethod=function(){return this.data.readUInt16LE(10)},ho.prototype.lastModFileTime=function(){return ce(this.data.readUInt16LE(12),this.data.readUInt16LE(14))},ho.prototype.rawLastModFileTime=function(){return this.data.readUInt32LE(12)},ho.prototype.crc32=function(){return this.data.readUInt32LE(16)},ho.prototype.compressedSize=function(){return this.data.readUInt32LE(20)},ho.prototype.uncompressedSize=function(){return this.data.readUInt32LE(24)},ho.prototype.fileNameLength=function(){return this.data.readUInt16LE(28)},ho.prototype.extraFieldLength=function(){return this.data.readUInt16LE(30)},ho.prototype.fileCommentLength=function(){return this.data.readUInt16LE(32)},ho.prototype.diskNumberStart=function(){return this.data.readUInt16LE(34)},ho.prototype.internalAttributes=function(){return this.data.readUInt16LE(36)},ho.prototype.externalAttributes=function(){return this.data.readUInt32LE(38)},ho.prototype.headerRelativeOffset=function(){return this.data.readUInt32LE(42)},ho.prototype.produceFilename=function(){var t=ue(this.data,this.useUTF8(),46,this.fileNameLength());return t.replace(/\\/g,"/")},ho.prototype.fileName=function(){return this._filename},ho.prototype.rawFileName=function(){return this.data.slice(46,46+this.fileNameLength())},ho.prototype.extraField=function(){var t=44+this.fileNameLength();return this.data.slice(t,t+this.extraFieldLength())},ho.prototype.fileComment=function(){var t=46+this.fileNameLength()+this.extraFieldLength();return ue(this.data,this.useUTF8(),t,this.fileCommentLength())},ho.prototype.rawFileComment=function(){var t=46+this.fileNameLength()+this.extraFieldLength();return this.data.slice(t,t+this.fileCommentLength())},ho.prototype.totalSize=function(){return 46+this.fileNameLength()+this.extraFieldLength()+this.fileCommentLength()},ho.prototype.isDirectory=function(){var t=this.fileName();return!!(16&this.externalAttributes())||"/"===t.charAt(t.length-1)},ho.prototype.isFile=function(){return!this.isDirectory()},ho.prototype.useUTF8=function(){return 2048===(2048&this.flag())},ho.prototype.isEncrypted=function(){return 1===(1&this.flag())},ho.prototype.getFileData=function(){var t=this.headerRelativeOffset(),e=new so(this.zipData.slice(t));return new ao(e,this,this.zipData.slice(t+e.totalSize()))},ho.prototype.getData=function(){return this.getFileData().decompress()},ho.prototype.getRawData=function(){return this.getFileData().getRawData()},ho.prototype.getStats=function(){return new Te(Le.FILE,this.uncompressedSize(),365,new Date,this.lastModFileTime())};var po=function(t){if(this.data=t,101010256!==this.data.readUInt32LE(0))throw new Fe(be.EINVAL,"Invalid Zip file: End of central directory record has invalid signature: "+this.data.readUInt32LE(0))};po.prototype.diskNumber=function(){return this.data.readUInt16LE(4)},po.prototype.cdDiskNumber=function(){return this.data.readUInt16LE(6)},po.prototype.cdDiskEntryCount=function(){return this.data.readUInt16LE(8)},po.prototype.cdTotalEntryCount=function(){return this.data.readUInt16LE(10)},po.prototype.cdSize=function(){return this.data.readUInt32LE(12)},po.prototype.cdOffset=function(){return this.data.readUInt32LE(16)},po.prototype.cdZipCommentLength=function(){return this.data.readUInt16LE(20)},po.prototype.cdZipComment=function(){return ue(this.data,!0,22,this.cdZipCommentLength())},po.prototype.rawCdZipComment=function(){return this.data.slice(22,22+this.cdZipCommentLength())};var lo=function(t,e,n,r){this.index=t,this.directoryEntries=e,this.eocd=n,this.data=r},yo=function(t){function e(n,r,i){void 0===r&&(r=""),void 0===i&&(i=!0),t.call(this),this.name=r,this._index=new Gi,this._directoryEntries=[],this._eocd=null,d(i,e.Name,{zipData:"zip data as a Buffer",name:r}),n instanceof lo?(this._index=n.index,this._directoryEntries=n.directoryEntries,this._eocd=n.eocd,this.data=n.data):(this.data=n,this.populateIndex())}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.Create=function(t,n){try{e.computeIndex(t.zipData,function(r){var i=new e(r,t.name,!1);n(null,i)},!1)}catch(t){n(t)}},e.isAvailable=function(){return!0},e.RegisterDecompressionMethod=function(t,e){io[t]=e},e.computeIndex=function(t,n,r){void 0===r&&(r=!0),r&&console.warn("[ZipFS] ZipFS.computeIndex is now deprecated, and will be removed in the next major release. Please update your code to use 'ZipFS.Create({ zipData: zip file as a Buffer}, cb)' instead.");var i=new Gi,o=e.getEOCD(t);if(o.diskNumber()!==o.cdDiskNumber())throw new Fe(be.EINVAL,"ZipFS does not support spanned zip files.");var s=o.cdOffset();if(4294967295===s)throw new Fe(be.EINVAL,"ZipFS does not support Zip64.");var a=s+o.cdSize();e.computeIndexResponsive(t,i,s,a,n,[],o)},e.getEOCD=function(t){for(var e=22,n=Math.min(e+65535,t.length-1),r=e;r-1},Eo.prototype.getRockRidgeOffset=function(){return this._rockRidgeOffset},Eo.prototype.rootCheckForRockRidge=function(t){var e=this.getDirectory(t);this._rockRidgeOffset=e.getDotEntry(t)._getRockRidgeOffset(t),this._rockRidgeOffset>-1&&(this._fileOrDir=null)},Eo.prototype.length=function(){return this._data[0]},Eo.prototype.extendedAttributeRecordLength=function(){return this._data[1]},Eo.prototype.lba=function(){return 2048*this._data.readUInt32LE(2)},Eo.prototype.dataLength=function(){return this._data.readUInt32LE(10)},Eo.prototype.recordingDate=function(){return le(this._data,18)},Eo.prototype.fileFlags=function(){return this._data[25]},Eo.prototype.fileUnitSize=function(){return this._data[26]},Eo.prototype.interleaveGapSize=function(){return this._data[27]},Eo.prototype.volumeSequenceNumber=function(){return this._data.readUInt16LE(28)},Eo.prototype.identifier=function(){return this._getString(33,this._data[32])},Eo.prototype.fileName=function(t){if(this.hasRockRidge()){var e=this._rockRidgeFilename(t);if(null!==e)return e}var n=this.identifier();if(this.isDirectory(t))return n;var r=n.indexOf(";");return r===-1?n:"."===n[r-1]?n.slice(0,r-1):n.slice(0,r)},Eo.prototype.isDirectory=function(t){var e=!!(2&this.fileFlags());return!e&&this.hasRockRidge()&&(e=this.getSUEntries(t).filter(function(t){return t instanceof Uo}).length>0),e},Eo.prototype.isSymlink=function(t){return this.hasRockRidge()&&this.getSUEntries(t).filter(function(t){return t instanceof Do}).length>0},Eo.prototype.getSymlinkPath=function(t){for(var e="",n=this.getSUEntries(t),r=this._getGetString(),i=0,o=n;i1&&"/"===e[e.length-1]?e.slice(0,e.length-1):e},Eo.prototype.getFile=function(t){if(this.isDirectory(t))throw new Error("Tried to get a File from a directory.");return null===this._fileOrDir&&(this._fileOrDir=t.slice(this.lba(),this.lba()+this.dataLength())),this._fileOrDir},Eo.prototype.getDirectory=function(t){if(!this.isDirectory(t))throw new Error("Tried to get a Directory from a file.");return null===this._fileOrDir&&(this._fileOrDir=this._constructDirectory(t)),this._fileOrDir},Eo.prototype.getSUEntries=function(t){return this._suEntries||this._constructSUEntries(t),this._suEntries},Eo.prototype._rockRidgeFilename=function(t){var e=this.getSUEntries(t).filter(function(t){return t instanceof Co});if(0===e.length||6&e[0].flags())return null;for(var n="",r=this._getGetString(),i=0,o=e;i0){var n=e[0];if(n instanceof Fo&&n.checkBytesPass())for(var r=1;r + * @license MIT + */ +"use strict";function r(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}function i(e){if(e>J)throw new RangeError("Invalid typed array length");var n=new Uint8Array(e);return n.__proto__=t.prototype,n}function t(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return c(t)}return o(t,e,n)}function o(t,e,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return H(t)?h(t,e,n):"string"==typeof t?u(t,e):p(t)}function s(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function a(t,e,n){return s(t),t<=0?i(t):void 0!==e?"string"==typeof n?i(t).fill(e,n):i(t).fill(e):i(t)}function c(t){return s(t),i(t<0?0:0|l(t))}function u(e,n){if("string"==typeof n&&""!==n||(n="utf8"),!t.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|y(e,n),o=i(r),s=o.write(e,n);return s!==r&&(o=o.slice(0,s)),o}function f(t){for(var e=t.length<0?0:0|l(t.length),n=i(e),r=0;r=J)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+J.toString(16)+" bytes");return 0|t}function d(e){return+e!=e&&(e=0),t.alloc(+e)}function y(e,n){if(t.isBuffer(e))return e.length;if(Z(e)||H(e))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var i=!1;;)switch(n){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return B(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return V(e).length;default:if(i)return B(e).length;n=(""+n).toLowerCase(),i=!0}}function g(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,n);case"utf8":case"utf-8":return F(this,e,n);case"ascii":return R(this,e,n);case"latin1":case"binary":return L(this,e,n);case"base64":return O(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function v(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function m(e,n,r,i,o){if(0===e.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,Y(r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof n&&(n=t.from(n,i)),t.isBuffer(n))return 0===n.length?-1:_(e,n,r,i,o);if("number"==typeof n)return n&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,n,r):Uint8Array.prototype.lastIndexOf.call(e,n,r):_(e,[n],r,i,o);throw new TypeError("val must be string, number or Buffer")}function _(t,e,n,r,i){function o(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}var s=1,a=t.length,c=e.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,c/=2,n/=2}var u;if(i){var f=-1;for(u=n;ua&&(n=a-c),u=n;u>=0;u--){for(var h=!0,p=0;pi&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s239?4:o>223?3:o>191?2:1;if(i+a<=n){var c,u,f,h;switch(a){case 1:o<128&&(s=o);break;case 2:c=t[i+1],128===(192&c)&&(h=(31&o)<<6|63&c,h>127&&(s=h));break;case 3:c=t[i+1],u=t[i+2],128===(192&c)&&128===(192&u)&&(h=(15&o)<<12|(63&c)<<6|63&u,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:c=t[i+1],u=t[i+2],f=t[i+3],128===(192&c)&&128===(192&u)&&128===(192&f)&&(h=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&f,h>65535&&h<1114112&&(s=h))}}null===s?(s=65533,a=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),i+=a}return N(r)}function N(t){var e=t.length;if(e<=G)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function D(e,n,r,i,o,s){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>o||ne.length)throw new RangeError("Index out of range")}function P(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function C(t,e,n,r,i){return e=+e,n>>>=0,i||P(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),K.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,i){return e=+e,n>>>=0,i||P(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),K.write(t,e,n,r,52,8),n+8}function M(t){if(t=t.trim().replace(Q,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function j(t){return t<16?"0"+t.toString(16):t.toString(16)}function B(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],s=0;s55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function z(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function V(t){return X.toByteArray(M(t))}function W(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function H(t){return t instanceof ArrayBuffer||null!=t&&null!=t.constructor&&"ArrayBuffer"===t.constructor.name&&"number"==typeof t.byteLength}function Z(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function Y(t){return t!==t}var X=n(18),K=n(21);e.Buffer=t,e.SlowBuffer=d,e.INSPECT_MAX_BYTES=50;var J=2147483647;e.kMaxLength=J,t.TYPED_ARRAY_SUPPORT=r(),t.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),t.poolSize=8192,t.from=function(t,e,n){return o(t,e,n)},t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,t.alloc=function(t,e,n){return a(t,e,n)},t.allocUnsafe=function(t){return c(t)},t.allocUnsafeSlow=function(t){return c(t)},t.isBuffer=function(t){return null!=t&&t._isBuffer===!0},t.compare=function(e,n){if(!t.isBuffer(e)||!t.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(e===n)return 0;for(var r=e.length,i=n.length,o=0,s=Math.min(r,i);o0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},t.prototype.compare=function(e,n,r,i,o){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),n<0||r>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&n>=r)return 0;if(i>=o)return-1;if(n>=r)return 1;if(n>>>=0,r>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var s=o-i,a=r-n,c=Math.min(s,a),u=this.slice(i,o),f=e.slice(n,r),h=0;h>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,t,e,n);case"utf8":case"utf-8":return E(this,t,e,n);case"ascii":return b(this,t,e,n);case"latin1":case"binary":return S(this,t,e,n);case"base64":return k(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var G=4096;t.prototype.slice=function(e,n){var r=this.length;e=~~e,n=void 0===n?r:~~n,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),n<0?(n+=r,n<0&&(n=0)):n>r&&(n=r),n>>=0,e>>>=0,n||A(t,e,this.length);for(var r=this[t],i=1,o=0;++o>>=0,e>>>=0,n||A(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},t.prototype.readUInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||A(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},t.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||A(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){t>>>=0,e||A(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt16BE=function(t,e){t>>>=0,e||A(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return t>>>=0,e||A(t,4,this.length),K.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return t>>>=0,e||A(t,4,this.length),K.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return t>>>=0,e||A(t,8,this.length),K.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return t>>>=0,e||A(t,8,this.length),K.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e>>>=0,n>>>=0,!r){var i=Math.pow(2,8*n)-1;D(this,t,e,n,i,0)}var o=1,s=0;for(this[e]=255&t;++s>>=0,n>>>=0,!r){var i=Math.pow(2,8*n)-1;D(this,t,e,n,i,0)}var o=n-1,s=1;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=t/s&255;return e+n},t.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,1,255,0),this[e]=255&t,e+1},t.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},t.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},t.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},t.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},t.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);D(this,t,e,n,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+n},t.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);D(this,t,e,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+n},t.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},t.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},t.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},t.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},t.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},t.prototype.writeFloatLE=function(t,e,n){return C(this,t,e,!0,n)},t.prototype.writeFloatBE=function(t,e,n){return C(this,t,e,!1,n)},t.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},t.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},t.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var s;if("number"==typeof e)for(s=n;s0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){function n(){this.removeListener(t,n),i||(i=!0,e.apply(this,arguments))}if(!r(e))throw TypeError("listener must be a function");var i=!1;return n.listener=e,this.on(t,n),this},n.prototype.removeListener=function(t,e){var n,i,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(n=this._events[t],s=n.length,i=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(n)){for(a=s;a-- >0;)if(n[a]===e||n[a].listener&&n[a].listener===e){i=a;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[t],r(n))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},n.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,n){t.exports=n(1).Buffer},function(t,e){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;e.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var n=e.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(var r in n)n.hasOwnProperty(r)&&(t[r]=n[r])}}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var r={arraySet:function(t,e,n,r,i){if(e.subarray&&t.subarray)return void t.set(e.subarray(n,n+r),i);for(var o=0;os)throw new RangeError("size is too large");var r=n,o=e;void 0===o&&(r=void 0,o=0);var a=new i(t);if("string"==typeof o)for(var c=new i(o,r),u=c.length,f=-1;++fs)throw new RangeError("size is too large");return new i(t)},e.from=function(e,n,r){if("function"==typeof i.from&&(!t.Uint8Array||Uint8Array.from!==i.from))return i.from(e,n,r);if("number"==typeof e)throw new TypeError('"value" argument must not be a number');if("string"==typeof e)return new i(e,n);if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer){var o=n;if(1===arguments.length)return new i(e);"undefined"==typeof o&&(o=0);var s=r;if("undefined"==typeof s&&(s=e.byteLength-o),o>=e.byteLength)throw new RangeError("'offset' is out of bounds");if(s>e.byteLength-o)throw new RangeError("'length' is out of bounds");return new i(e.slice(o,o+s))}if(i.isBuffer(e)){var a=new i(e.length);return e.copy(a,0,0,e.length),a}if(e){if(Array.isArray(e)||"undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return new i(e);if("Buffer"===e.type&&Array.isArray(e.data))return new i(e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},e.allocUnsafeSlow=function(t){if("function"==typeof i.allocUnsafeSlow)return i.allocUnsafeSlow(t);if("number"!=typeof t)throw new TypeError("size must be a number");if(t>=s)throw new RangeError("size is too large");return new o(t)}}).call(e,function(){return this}())},function(t,e,n){(function(e){"use strict";function n(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,s,a=arguments.length;switch(a){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,n)});case 3:return e.nextTick(function(){t.call(null,n,r)});case 4:return e.nextTick(function(){t.call(null,n,r,i)});default:for(o=new Array(a-1),s=0;s-1?setImmediate:k;s.WritableState=o;var O=n(5);O.inherits=n(4);var F,N={deprecate:n(40)};!function(){try{F=n(9)}catch(t){}finally{F||(F=n(6).EventEmitter)}}();var R=n(1).Buffer,L=n(10);O.inherits(s,F),o.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(o.prototype,"buffer",{get:N.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(t){}}();var T;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(T=Function.prototype[Symbol.hasInstance],Object.defineProperty(s,Symbol.hasInstance,{value:function(t){return!!T.call(this,t)||t&&t._writableState instanceof o}})):T=function(t){return t instanceof this},s.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},s.prototype.write=function(t,e,n){var i=this._writableState,o=!1,s=R.isBuffer(t);return"function"==typeof e&&(n=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof n&&(n=r),i.ended?a(this,n):(s||c(this,i,t,n))&&(i.pendingcb++,o=f(this,i,s,t,e,n)),o},s.prototype.cork=function(){var t=this._writableState;t.corked++},s.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||v(this,t))},s.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},s.prototype._write=function(t,e,n){n(new Error("_write() is not implemented"))},s.prototype._writev=null,s.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!==t&&void 0!==t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||E(this,r,n)}}).call(e,n(3))},function(t,e,n){(function(e){"use strict";function n(t){var e=r.exec(t);return e.shift(),e}var r=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,i=function(){function t(){}return t.normalize=function(e){""===e&&(e=".");var n=e.charAt(0)===t.sep;e=t._removeDuplicateSeps(e);for(var r=e.split(t.sep),i=[],o=0;o0&&".."!==i[0])?i.pop():i.push(s))}if(!n&&i.length<2)switch(i.length){case 1:""===i[0]&&i.unshift(".");break;default:i.push(".")}return e=i.join(t.sep),n&&e.charAt(0)!==t.sep&&(e=t.sep+e),e},t.join=function(){for(var e=[],n=0;n1&&a.charAt(a.length-1)===t.sep)return a.substr(0,a.length-1);if(a.charAt(0)!==t.sep){"."!==a.charAt(0)||1!==a.length&&a.charAt(1)!==t.sep||(a=1===a.length?"":a.substr(2));var c=e.cwd();a=""!==a?this.normalize(c+("/"!==c?t.sep:"")+a):c}return a},t.relative=function(e,n){var r;e=t.resolve(e),n=t.resolve(n);var i=e.split(t.sep),o=n.split(t.sep);o.shift(),i.shift();var s=0,a=[];for(r=0;ri.length&&(s=i.length);var u="";for(r=0;r1&&u.charAt(u.length-1)===t.sep&&(u=u.substr(0,u.length-1)),u},t.dirname=function(e){e=t._removeDuplicateSeps(e);var n=e.charAt(0)===t.sep,r=e.split(t.sep);return""===r.pop()&&r.length>0&&r.pop(),r.length>1||1===r.length&&!n?r.join(t.sep):n?t.sep:"."},t.basename=function(e,n){if(void 0===n&&(n=""),""===e)return e;e=t.normalize(e);var r=e.split(t.sep),i=r[r.length-1];if(""===i&&r.length>1)return r[r.length-2];if(n.length>0){var o=i.substr(i.length-n.length);if(o===n)return i.substr(0,i.length-n.length)}return i},t.extname=function(e){e=t.normalize(e);var n=e.split(t.sep);if(e=n.pop(),""===e&&n.length>0&&(e=n.pop()),".."===e)return"";var r=e.lastIndexOf(".");return r===-1||0===r?"":e.substr(r)},t.isAbsolute=function(e){return e.length>0&&e.charAt(0)===t.sep},t._makeLong=function(t){return t},t.parse=function(t){var e=n(t);return{root:e[0],dir:e[0]+e[1].slice(0,-1),base:e[2],ext:e[3],name:e[2].slice(0,e[2].length-e[3].length)}},t.format=function(e){if(null===e||"object"!=typeof e)throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof e);var n=e.root||"";if("string"!=typeof n)throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof e.root);var r=e.dir?e.dir+t.sep:"",i=e.base||"";return r+i},t._removeDuplicateSeps=function(t){return t=t.replace(this._replaceRegex,this.sep)},t.sep="/",t._replaceRegex=new RegExp("//+","g"),t.delimiter=":",t.posix=t,t.win32=t,t}();t.exports=i}).call(e,n(3))},function(t,e,n){"use strict";function r(t){return this instanceof r?void i.call(this,t):new r(t)}t.exports=r;var i=n(12),o=n(5);o.inherits=n(4),o.inherits(r,i),r.prototype._transform=function(t,e,n){n(null,t)}},function(t,e,n){(function(e){"use strict";function r(t,e,n){return"function"==typeof t.prependListener?t.prependListener(e,n):void(t._events&&t._events[e]?T(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n))}function i(t,e){R=R||n(2),t=t||{},this.objectMode=!!t.objectMode,e instanceof R&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=~~this.highWaterMark,this.buffer=new B,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(j||(j=n(17).StringDecoder),this.decoder=new j(t.encoding),this.encoding=t.encoding)}function o(t){return R=R||n(2),this instanceof o?(this._readableState=new i(t,this),this.readable=!0,t&&"function"==typeof t.read&&(this._read=t.read),void x.call(this)):new o(t)}function s(t,e,n,r,i){var o=f(e,n);if(o)t.emit("error",o);else if(null===n)e.reading=!1,h(t,e);else if(e.objectMode||n&&n.length>0)if(e.ended&&!i){var s=new Error("stream.push() after EOF");t.emit("error",s)}else if(e.endEmitted&&i){var c=new Error("stream.unshift() after end event");t.emit("error",c)}else{var u;!e.decoder||i||r||(n=e.decoder.write(n),u=!e.objectMode&&0===n.length),i||(e.reading=!1),u||(e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,i?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&p(t))),d(t,e)}else i||(e.reading=!1);return a(e)}function a(t){return!t.ended&&(t.needReadable||t.length=z?t=z:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function u(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=c(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function f(t,e){var n=null;return D.isBuffer(e)||"string"==typeof e||null===e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function h(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,p(t)}}function p(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(M("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?L(l,t):l(t))}function l(t){M("emit readable"),t.emit("readable"),w(t)}function d(t,e){e.readingMore||(e.readingMore=!0,L(y,t,e))}function y(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=b(t,e.buffer,e.decoder),n}function b(t,e,n){var r;return to.length?o.length:t;if(i+=s===o.length?o:o.slice(0,t),t-=s,0===t){s===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(s));break}++r}return e.length-=r,i}function k(t,e){var n=P.allocUnsafe(t),r=e.head,i=1;for(r.data.copy(n),t-=r.data.length;r=r.next;){var o=r.data,s=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,s),t-=s,0===t){s===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(s));break}++i}return e.length-=i,n}function I(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,L(O,e,t))}function O(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function F(t,e){for(var n=0,r=t.length;n=e.highWaterMark||e.ended))return M("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?I(this):p(this),null;if(t=u(t,e),0===t&&e.ended)return 0===e.length&&I(this),null;var r=e.needReadable;M("need readable",r),(0===e.length||e.length-t0?E(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&I(this)),null!==i&&this.emit("data",i),i},o.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},o.prototype.pipe=function(t,n){function i(t){M("onunpipe"),t===p&&s()}function o(){M("onend"),t.end()}function s(){M("cleanup"),t.removeListener("close",u),t.removeListener("finish",f),t.removeListener("drain",v),t.removeListener("error",c),t.removeListener("unpipe",i),p.removeListener("end",o),p.removeListener("end",s),p.removeListener("data",a),m=!0,!l.awaitDrain||t._writableState&&!t._writableState.needDrain||v()}function a(e){M("ondata"),_=!1;var n=t.write(e);!1!==n||_||((1===l.pipesCount&&l.pipes===t||l.pipesCount>1&&N(l.pipes,t)!==-1)&&!m&&(M("false write response, pause",p._readableState.awaitDrain),p._readableState.awaitDrain++,_=!0),p.pause())}function c(e){M("onerror",e),h(),t.removeListener("error",c),0===A(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",f),h()}function f(){M("onfinish"),t.removeListener("close",u),h()}function h(){M("unpipe"),p.unpipe(t)}var p=this,l=this._readableState;switch(l.pipesCount){case 0:l.pipes=t;break;case 1:l.pipes=[l.pipes,t];break;default:l.pipes.push(t)}l.pipesCount+=1,M("pipe count=%d opts=%j",l.pipesCount,n);var d=(!n||n.end!==!1)&&t!==e.stdout&&t!==e.stderr,y=d?o:s;l.endEmitted?L(y):p.once("end",y),t.on("unpipe",i);var v=g(p);t.on("drain",v);var m=!1,_=!1;return p.on("data",a),r(t,"error",c),t.once("close",u),t.once("finish",f),t.emit("pipe",p),l.flowing||(M("pipe resume"),p.resume()),t},o.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var n=e.pipes,r=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived=55296&&r<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,r=e.charCodeAt(i);if(r>=55296&&r<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},u.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var n=t[t.length-e];if(1==e&&n>>5==6){this.charLength=2;break}if(e<=2&&n>>4==14){this.charLength=3;break}if(e<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=e},u.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var n=this.charReceived,r=this.charBuffer,i=this.encoding;e+=r.slice(0,n).toString(i)}return e}},function(t,e){"use strict";function n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function r(t){return 3*t.length/4-n(t)}function i(t){var e,r,i,o,s,a,c=t.length;s=n(t),a=new f(3*c/4-s),i=s>0?c-4:c;var h=0;for(e=0,r=0;e>16&255,a[h++]=o>>8&255,a[h++]=255&o;return 2===s?(o=u[t.charCodeAt(e)]<<2|u[t.charCodeAt(e+1)]>>4,a[h++]=255&o):1===s&&(o=u[t.charCodeAt(e)]<<10|u[t.charCodeAt(e+1)]<<4|u[t.charCodeAt(e+2)]>>2,a[h++]=o>>8&255,a[h++]=255&o),a}function o(t){return c[t>>18&63]+c[t>>12&63]+c[t>>6&63]+c[63&t]}function s(t,e,n){for(var r,i=[],s=e;sf?f:u+a));return 1===r?(e=t[n-1],i+=c[e>>2],i+=c[e<<4&63],i+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],i+=c[e>>10],i+=c[e>>4&63],i+=c[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=r,e.toByteArray=i,e.fromByteArray=a;for(var c=[],u=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,l=h.length;p0&&(this._waitingForWrites=this.push(this._bufferedWrites.shift()),this._waitingForWrites););},n}(i.Duplex);t.exports=o}).call(e,n(7))},function(t,e){e.read=function(t,e,n,r,i){var o,s,a=8*i-r-1,c=(1<>1,f=-7,h=n?i-1:0,p=n?-1:1,l=t[e+h];for(h+=p,o=l&(1<<-f)-1,l>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=p,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=r;f>0;s=256*s+t[e+h],h+=p,f-=8);if(0===o)o=1-u;else{if(o===c)return s?NaN:(l?-1:1)*(1/0);s+=Math.pow(2,r),o-=u}return(l?-1:1)*s*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var s,a,c,u=8*o-i-1,f=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=r?0:o-1,d=r?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),e+=s+h>=1?p/c:p*Math.pow(2,1-h),e*c>=2&&(s++,c/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*c-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[n+l]=255&a,l+=d,a/=256,i-=8);for(s=s<0;t[n+l]=255&s,l+=d,s/=256,u-=8);t[n+l-d]|=128*y}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);this.options=a.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0===(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var n=s.inflateInit2(this.strm,e.windowBits);if(n!==u.Z_OK)throw new Error(f[n]);this.header=new p,s.inflateGetHeader(this.strm,this.header)}function i(t,e){var n=new r(e);if(n.push(t,!0),n.err)throw n.msg||f[n.err];return n.result}function o(t,e){return e=e||{},e.raw=!0,i(t,e)}var s=n(30),a=n(8),c=n(24),u=n(26),f=n(32),h=n(33),p=n(28),l=Object.prototype.toString;r.prototype.push=function(t,e){var n,r,i,o,f,h,p=this.strm,d=this.options.chunkSize,y=this.options.dictionary,g=!1;if(this.ended)return!1;r=e===~~e?e:e===!0?u.Z_FINISH:u.Z_NO_FLUSH,"string"==typeof t?p.input=c.binstring2buf(t):"[object ArrayBuffer]"===l.call(t)?p.input=new Uint8Array(t):p.input=t,p.next_in=0,p.avail_in=p.input.length;do{if(0===p.avail_out&&(p.output=new a.Buf8(d),p.next_out=0,p.avail_out=d),n=s.inflate(p,u.Z_NO_FLUSH),n===u.Z_NEED_DICT&&y&&(h="string"==typeof y?c.string2buf(y):"[object ArrayBuffer]"===l.call(y)?new Uint8Array(y):y,n=s.inflateSetDictionary(this.strm,h)),n===u.Z_BUF_ERROR&&g===!0&&(n=u.Z_OK,g=!1),n!==u.Z_STREAM_END&&n!==u.Z_OK)return this.onEnd(n),this.ended=!0,!1;p.next_out&&(0!==p.avail_out&&n!==u.Z_STREAM_END&&(0!==p.avail_in||r!==u.Z_FINISH&&r!==u.Z_SYNC_FLUSH)||("string"===this.options.to?(i=c.utf8border(p.output,p.next_out),o=p.next_out-i,f=c.buf2string(p.output,i),p.next_out=o,p.avail_out=d-o,o&&a.arraySet(p.output,p.output,i,o,0),this.onData(f)):this.onData(a.shrinkBuf(p.output,p.next_out)))),0===p.avail_in&&0===p.avail_out&&(g=!0)}while((p.avail_in>0||0===p.avail_out)&&n!==u.Z_STREAM_END);return n===u.Z_STREAM_END&&(r=u.Z_FINISH),r===u.Z_FINISH?(n=s.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===u.Z_OK):r!==u.Z_SYNC_FLUSH||(this.onEnd(u.Z_OK),p.avail_out=0,!0)},r.prototype.onData=function(t){this.chunks.push(t)},r.prototype.onEnd=function(t){t===u.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},e.Inflate=r,e.inflate=i,e.inflateRaw=o,e.ungzip=i},function(t,e,n){"use strict";function r(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&o))return String.fromCharCode.apply(null,i.shrinkBuf(t,e));for(var n="",r=0;r=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;a[254]=a[254]=1,e.string2buf=function(t){var e,n,r,o,s,a=t.length,c=0;for(o=0;o>>6,e[s++]=128|63&n):n<65536?(e[s++]=224|n>>>12,e[s++]=128|n>>>6&63,e[s++]=128|63&n):(e[s++]=240|n>>>18,e[s++]=128|n>>>12&63,e[s++]=128|n>>>6&63,e[s++]=128|63&n);return e},e.buf2binstring=function(t){return r(t,t.length)},e.binstring2buf=function(t){for(var e=new i.Buf8(t.length),n=0,r=e.length;n4)u[i++]=65533,n+=s-1;else{for(o&=2===s?31:3===s?15:7;s>1&&n1?u[i++]=65533:o<65536?u[i++]=o:(o-=65536,u[i++]=55296|o>>10&1023,u[i++]=56320|1023&o)}return r(u,i)},e.utf8border=function(t,e){ +var n;for(e=e||t.length,e>t.length&&(e=t.length),n=e-1;n>=0&&128===(192&t[n]);)n--;return n<0?e:0===n?e:n+a[t[n]]>e?n:e}},function(t,e){"use strict";function n(t,e,n,r){for(var i=65535&t|0,o=t>>>16&65535|0,s=0;0!==n;){s=n>2e3?2e3:n,n-=s;do i=i+e[r++]|0,o=o+i|0;while(--s);i%=65521,o%=65521}return i|o<<16|0}t.exports=n},function(t,e){"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(t,e){"use strict";function n(){for(var t,e=[],n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e}function r(t,e,n,r){var o=i,s=r+n;t^=-1;for(var a=r;a>>8^o[255&(t^e[a])];return t^-1}var i=n();t.exports=r},function(t,e){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}t.exports=n},function(t,e){"use strict";var n=30,r=12;t.exports=function(t,e){var i,o,s,a,c,u,f,h,p,l,d,y,g,v,m,_,w,E,b,S,k,I,O,F,N;i=t.state,o=t.next_in,F=t.input,s=o+(t.avail_in-5),a=t.next_out,N=t.output,c=a-(e-t.avail_out),u=a+(t.avail_out-257),f=i.dmax,h=i.wsize,p=i.whave,l=i.wnext,d=i.window,y=i.hold,g=i.bits,v=i.lencode,m=i.distcode,_=(1<>>24,y>>>=b,g-=b,b=E>>>16&255,0===b)N[a++]=65535&E;else{if(!(16&b)){if(0===(64&b)){E=v[(65535&E)+(y&(1<>>=b,g-=b),g<15&&(y+=F[o++]<>>24,y>>>=b,g-=b,b=E>>>16&255,!(16&b)){if(0===(64&b)){E=m[(65535&E)+(y&(1<f){t.msg="invalid distance too far back",i.mode=n;break t}if(y>>>=b,g-=b,b=a-c,k>b){if(b=k-b,b>p&&i.sane){t.msg="invalid distance too far back",i.mode=n;break t}if(I=0,O=d,0===l){if(I+=h-b,b2;)N[a++]=O[I++],N[a++]=O[I++],N[a++]=O[I++],S-=3;S&&(N[a++]=O[I++],S>1&&(N[a++]=O[I++]))}else{I=a-k;do N[a++]=N[I++],N[a++]=N[I++],N[a++]=N[I++],S-=3;while(S>2);S&&(N[a++]=N[I++],S>1&&(N[a++]=N[I++]))}break}}break}}while(o>3,o-=S,g-=S<<3,y&=(1<>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new m.Buf16(320),this.work=new m.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=U,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new m.Buf32(yt),e.distcode=e.distdyn=new m.Buf32(gt),e.sane=1,e.back=-1,R):x}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,o(t)):x}function a(t,e){var n,r;return t&&t.state?(r=t.state,e<0?(n=0,e=-e):(n=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15)?x:(null!==r.window&&r.wbits!==e&&(r.window=null),r.wrap=n,r.wbits=e,s(t))):x}function c(t,e){var n,r;return t?(r=new i,t.state=r,r.window=null,n=a(t,e),n!==R&&(t.state=null),n):x}function u(t){return c(t,mt)}function f(t){if(_t){var e;for(g=new m.Buf32(512),v=new m.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(b(k,t.lens,0,288,g,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;b(I,t.lens,0,32,v,0,t.work,{bits:5}),_t=!1}t.lencode=g,t.lenbits=9,t.distcode=v,t.distbits=5}function h(t,e,n,r){var i,o=t.state;return null===o.window&&(o.wsize=1<=o.wsize?(m.arraySet(o.window,e,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>r&&(i=r),m.arraySet(o.window,e,n-r,i,o.wnext),r-=i,r?(m.arraySet(o.window,e,n-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,n.check=w(n.check,Ft,2,0),p=0,l=0,n.mode=M;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&p)<<8)+(p>>8))%31){t.msg="incorrect header check",n.mode=pt;break}if((15&p)!==C){t.msg="unknown compression method",n.mode=pt;break}if(p>>>=4,l-=4,bt=(15&p)+8,0===n.wbits)n.wbits=bt;else if(bt>n.wbits){t.msg="invalid window size",n.mode=pt;break}n.dmax=1<>8&1),512&n.flags&&(Ft[0]=255&p,Ft[1]=p>>>8&255,n.check=w(n.check,Ft,2,0)),p=0,l=0,n.mode=j;case j:for(;l<32;){if(0===c)break t;c--,p+=i[s++]<>>8&255,Ft[2]=p>>>16&255,Ft[3]=p>>>24&255,n.check=w(n.check,Ft,4,0)),p=0,l=0,n.mode=B;case B:for(;l<16;){if(0===c)break t;c--,p+=i[s++]<>8),512&n.flags&&(Ft[0]=255&p,Ft[1]=p>>>8&255,n.check=w(n.check,Ft,2,0)),p=0,l=0,n.mode=z;case z:if(1024&n.flags){for(;l<16;){if(0===c)break t;c--,p+=i[s++]<>>8&255,n.check=w(n.check,Ft,2,0)),p=0,l=0}else n.head&&(n.head.extra=null);n.mode=q;case q:if(1024&n.flags&&(g=n.length,g>c&&(g=c),g&&(n.head&&(bt=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),m.arraySet(n.head.extra,i,s,g,bt)),512&n.flags&&(n.check=w(n.check,i,g,s)),c-=g,s+=g,n.length-=g),n.length))break t;n.length=0,n.mode=V;case V:if(2048&n.flags){if(0===c)break t;g=0;do bt=i[s+g++],n.head&&bt&&n.length<65536&&(n.head.name+=String.fromCharCode(bt));while(bt&&g>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=X;break;case Z:for(;l<32;){if(0===c)break t;c--,p+=i[s++]<>>=7&l,l-=7&l,n.mode=ut;break}for(;l<3;){if(0===c)break t;c--,p+=i[s++]<>>=1,l-=1,3&p){case 0:n.mode=J;break;case 1:if(f(n),n.mode=nt,e===N){p>>>=2,l-=2;break t}break;case 2:n.mode=$;break;case 3:t.msg="invalid block type",n.mode=pt}p>>>=2,l-=2;break;case J:for(p>>>=7&l,l-=7&l;l<32;){if(0===c)break t;c--,p+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",n.mode=pt;break}if(n.length=65535&p,p=0,l=0,n.mode=G,e===N)break t;case G:n.mode=Q;case Q:if(g=n.length){if(g>c&&(g=c),g>u&&(g=u),0===g)break t;m.arraySet(o,i,s,g,a),c-=g,s+=g,u-=g,a+=g,n.length-=g;break}n.mode=X;break;case $:for(;l<14;){if(0===c)break t;c--,p+=i[s++]<>>=5,l-=5,n.ndist=(31&p)+1,p>>>=5,l-=5,n.ncode=(15&p)+4,p>>>=4,l-=4,n.nlen>286||n.ndist>30){t.msg="too many length or distance symbols",n.mode=pt;break}n.have=0,n.mode=tt;case tt:for(;n.have>>=3,l-=3}for(;n.have<19;)n.lens[Nt[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,kt={bits:n.lenbits},St=b(S,n.lens,0,19,n.lencode,0,n.work,kt),n.lenbits=kt.bits,St){t.msg="invalid code lengths set",n.mode=pt;break}n.have=0,n.mode=et;case et:for(;n.have>>24,vt=Ot>>>16&255,mt=65535&Ot,!(gt<=l);){if(0===c)break t;c--,p+=i[s++]<>>=gt,l-=gt,n.lens[n.have++]=mt;else{if(16===mt){for(It=gt+2;l>>=gt,l-=gt,0===n.have){t.msg="invalid bit length repeat",n.mode=pt;break}bt=n.lens[n.have-1],g=3+(3&p),p>>>=2,l-=2}else if(17===mt){for(It=gt+3;l>>=gt,l-=gt,bt=0,g=3+(7&p),p>>>=3,l-=3}else{for(It=gt+7;l>>=gt,l-=gt,bt=0,g=11+(127&p),p>>>=7,l-=7}if(n.have+g>n.nlen+n.ndist){t.msg="invalid bit length repeat",n.mode=pt;break}for(;g--;)n.lens[n.have++]=bt}}if(n.mode===pt)break;if(0===n.lens[256]){t.msg="invalid code -- missing end-of-block",n.mode=pt;break}if(n.lenbits=9,kt={bits:n.lenbits},St=b(k,n.lens,0,n.nlen,n.lencode,0,n.work,kt),n.lenbits=kt.bits,St){t.msg="invalid literal/lengths set",n.mode=pt;break}if(n.distbits=6,n.distcode=n.distdyn,kt={bits:n.distbits},St=b(I,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,kt),n.distbits=kt.bits,St){t.msg="invalid distances set",n.mode=pt;break}if(n.mode=nt,e===N)break t;case nt:n.mode=rt;case rt:if(c>=6&&u>=258){t.next_out=a,t.avail_out=u,t.next_in=s,t.avail_in=c,n.hold=p,n.bits=l,E(t,y),a=t.next_out,o=t.output,u=t.avail_out,s=t.next_in,i=t.input,c=t.avail_in,p=n.hold,l=n.bits,n.mode===X&&(n.back=-1);break}for(n.back=0;Ot=n.lencode[p&(1<>>24,vt=Ot>>>16&255,mt=65535&Ot,!(gt<=l);){if(0===c)break t;c--,p+=i[s++]<>_t)],gt=Ot>>>24,vt=Ot>>>16&255,mt=65535&Ot,!(_t+gt<=l);){if(0===c)break t;c--,p+=i[s++]<>>=_t,l-=_t,n.back+=_t}if(p>>>=gt,l-=gt,n.back+=gt,n.length=mt,0===vt){n.mode=ct;break}if(32&vt){n.back=-1,n.mode=X;break}if(64&vt){t.msg="invalid literal/length code",n.mode=pt;break}n.extra=15&vt,n.mode=it;case it:if(n.extra){for(It=n.extra;l>>=n.extra,l-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=ot;case ot:for(;Ot=n.distcode[p&(1<>>24,vt=Ot>>>16&255,mt=65535&Ot,!(gt<=l);){if(0===c)break t;c--,p+=i[s++]<>_t)],gt=Ot>>>24,vt=Ot>>>16&255,mt=65535&Ot,!(_t+gt<=l);){if(0===c)break t;c--,p+=i[s++]<>>=_t,l-=_t,n.back+=_t}if(p>>>=gt,l-=gt,n.back+=gt,64&vt){t.msg="invalid distance code",n.mode=pt;break}n.offset=mt,n.extra=15&vt,n.mode=st;case st:if(n.extra){for(It=n.extra;l>>=n.extra,l-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg="invalid distance too far back",n.mode=pt;break}n.mode=at;case at:if(0===u)break t;if(g=y-u,n.offset>g){if(g=n.offset-g,g>n.whave&&n.sane){t.msg="invalid distance too far back",n.mode=pt;break}g>n.wnext?(g-=n.wnext,v=n.wsize-g):v=n.wnext-g,g>n.length&&(g=n.length),yt=n.window}else yt=o,v=a-n.offset,g=n.length;g>u&&(g=u),u-=g,n.length-=g;do o[a++]=yt[v++];while(--g);0===n.length&&(n.mode=rt);break;case ct:if(0===u)break t;o[a++]=n.length,u--,n.mode=rt;break;case ut:if(n.wrap){for(;l<32;){if(0===c)break t;c--,p|=i[s++]<=1&&0===z[x];x--);if(A>x&&(A=x),0===x)return y[g++]=20971520,y[g++]=20971520,m.bits=1,0;for(T=1;T0&&(t===a||1!==x))return-1;for(q[1]=0,R=1;Ro||t===u&&U>s)return 1;for(;;){I=R-P,v[L]k?(O=V[W+v[L]],F=j[B+v[L]]):(O=96,F=0),_=1<>P)+w]=I<<24|O<<16|F|0;while(0!==w);for(_=1<>=1;if(0!==_?(M&=_-1,M+=_):M=0,L++,0===--z[R]){if(R===x)break;R=e[n+v[L]]}if(R>A&&(M&b)!==E){for(0===P&&(P=A),S+=T,D=R-P,C=1<o||t===u&&U>s)return 1;E=M&b,y[E]=A<<24|D<<16|S-g|0}}return 0!==M&&(y[S+M]=R-P<<24|64<<16|0),m.bits=A,0}},function(t,e){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},function(t,e){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}t.exports=n},function(t,e,n){t.exports=n(2)},function(t,e,n){"use strict";function r(){this.head=null,this.tail=null,this.length=0}var i=(n(1).Buffer,n(10));t.exports=r,r.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},r.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},r.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},r.prototype.clear=function(){this.head=this.tail=null,this.length=0},r.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},r.prototype.concat=function(t){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var e=i.allocUnsafe(t>>>0),n=this.head,r=0;n;)n.data.copy(e,r),r+=n.data.length,n=n.next;return e}},function(t,e,n){t.exports=n(15)},function(t,e,n){(function(r){var i=function(){try{return n(9)}catch(t){}}();e=t.exports=n(16),e.Stream=i||e,e.Readable=e,e.Writable=n(13),e.Duplex=n(2),e.Transform=n(12),e.PassThrough=n(15),!r.browser&&"disable"===r.env.READABLE_STREAM&&i&&(t.exports=i)}).call(e,n(3))},function(t,e,n){t.exports=n(12)},function(t,e,n){t.exports=n(13)},function(t,e){(function(e){function n(t,e){function n(){if(!i){if(r("throwDeprecation"))throw new Error(e);r("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(r("noDeprecation"))return t;var i=!1;return n}function r(t){try{if(!e.localStorage)return!1}catch(t){return!1}var n=e.localStorage[t];return null!=n&&"true"===String(n).toLowerCase()}t.exports=n}).call(e,function(){return this}())},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e){}])}); //# sourceMappingURL=browserfs.min.js.map \ No newline at end of file diff --git a/pkg/emscripten/libretro/core_list.js b/pkg/emscripten/libretro/core_list.js index 9e3b53d7207c..00529108250a 100644 --- a/pkg/emscripten/libretro/core_list.js +++ b/pkg/emscripten/libretro/core_list.js @@ -1,52 +1,56 @@ const libretroCores = { "2048": "2048", + "DoubleCherryGB": "Nintendo - Game Boy / Color (DoubleCherryGB)", "anarch": "Anarch", "ardens": "Arduboy (Ardens)", "arduous": "Arduboy (Arduous)", - "bk": "Elektronika - BK-0010/BK-0011 (BK)", + "bk": "Elektronika - BK-0010/BK-0011(M)", "chailove": "ChaiLove", + "clownmdemu": "Sega - MD/CD (ClownMDEmu)", "craft": "Minecraft (Craft)", "dice": "Arcade (DICE)", - "DoubleCherryGB": "Nintendo - Game Boy / Color (DoubleCherryGB)", "ecwolf": "Wolfenstein 3D (ECWolf)", + "fbalpha2012_cps1": "Arcade (FB Alpha 2012 CPS-1)", + "fbalpha2012_cps2": "Arcade (FB Alpha 2012 CPS-2)", "fbalpha2012": "Arcade (FB Alpha 2012)", - "fbalpha2012_cps1": "Arcade (FB Alpha 2012 CPS1)", - "fbalpha2012_cps2": "Arcade (FB Alpha 2012 CPS2)", - "fbalpha2012_neogeo": "Arcade (FB Alpha 2012 NeoGeo)", + "fbalpha2012_neogeo": "Arcade (FB Alpha 2012 Neo Geo)", + "fbneo": "Arcade (FinalBurn Neo)", "fceumm": "Nintendo - NES / Famicom (FCEUmm)", - "freechaf": "Fairchild ChannelF (FreeChaF)", - "galaksija": "Galaksija", + "freechaf": "Fairchild - ChannelF (FreeChaF)", + "galaksija": "Elektronika Inženjering - Galaksija (Galaksija)", + "gam4980": "GAM4980", "gambatte": "Nintendo - Game Boy / Color (Gambatte)", - "gme": "Game Music Emu", - "gearboy": "Nintendo - Game Boy / Color (GearBoy)", - "gearcoleco": "Coleco - ColecoVision (GearColeco)", - "gearsystem": "Sega - MS/GG/SG-1000 (GearSystem)", + "gearboy": "Nintendo - Game Boy / Color (Gearboy)", + "gearcoleco": "Coleco - ColecoVision (Gearcoleco)", + "geargrafx": "NEC - PC Engine / SuperGrafx / CD (Geargrafx)", + "gearsystem": "Sega - MS/GG/SG-1000 (Gearsystem)", "genesis_plus_gx": "Sega - MS/GG/MD/CD (Genesis Plus GX)", "genesis_plus_gx_wide": "Sega - MS/GG/MD/CD (Genesis Plus GX Wide)", + "gme": "Game Music Emu", "gong": "Gong", "gw": "Handheld Electronic (GW)", "handy": "Atari - Lynx (Handy)", "jaxe": "CHIP-8/S-CHIP/XO-CHIP (JAXE)", "jumpnbump": "Jump 'n Bump", - "lowresnx": "LowResNX", + "lowresnx": "LowRes NX", "lutro": "Lua Engine (Lutro)", "m2000": "Philips - P2000T (M2000)", - "mame2000": "Arcade - MAME 2000", - "mame2003": "Arcade - MAME 2003", - "mame2003_plus": "Arcade - MAME 2003-Plus", + "mame2000": "Arcade (MAME 2000)", + "mame2003": "Arcade (MAME 2003)", + "mame2003_plus": "Arcade (MAME 2003-Plus)", "mednafen_lynx": "Atari - Lynx (Beetle Lynx)", - "mednafen_ngp": "SNK - Neo Geo Pocket / Color (Beetle Neo Geo Pop)", - "mednafen_pce_fast": "NEC - PC Engine / CD (Beetle PC Engine Fast)", + "mednafen_ngp": "SNK - Neo Geo Pocket / Color (Beetle NeoPop)", + "mednafen_pce_fast": "NEC - PC Engine / CD (Beetle PCE FAST)", "mednafen_vb": "Nintendo - Virtual Boy (Beetle VB)", - "mednafen_wswan": "Bandai - WonderSwan/Color (Beetle WonderSwan)", + "mednafen_wswan": "Bandai - WonderSwan/Color (Beetle Wonderswan)", "mgba": "Nintendo - Game Boy Advance (mGBA)", - "minivmac": "Mac II (MiniVmac)", - "mu": "Palm OS(Mu)", - "mrboom": "Bomberman (Mr.Boom)", + "minivmac": "Mac II (minivmac)", + "mrboom": "Mr.Boom (Bomberman)", + "mu": "Palm OS (Mu)", "neocd": "SNK - Neo Geo CD (NeoCD)", "nestopia": "Nintendo - NES / Famicom (Nestopia)", "numero": "Texas Instruments TI-83 (Numero)", - "nxengine": "Cave Story (NX Engine)", + "nxengine": "Cave Story (NXEngine)", "o2em": "Magnavox - Odyssey2 / Philips Videopac+ (O2EM)", "opera": "The 3DO Company - 3DO (Opera)", "pcsx_rearmed": "Sony - PlayStation (PCSX ReARMed)", @@ -61,32 +65,28 @@ const libretroCores = { "snes9x2005": "Nintendo - SNES / SFC (Snes9x 2005)", "snes9x2010": "Nintendo - SNES / SFC (Snes9x 2010)", "snes9x": "Nintendo - SNES / SFC (Snes9x)", - "squirreljme": "Java ME (SquirrelJME)", - "tamalibretro": "Bandai - Tamagothci P1 (TamaLIBretro)", + "tamalibretro": "Bandai - Tamagotchi P1 (TamaLIBretro)", "tgbdual": "Nintendo - Game Boy / Color (TGB Dual)", - "theodore": "Theodore (Thomson TO8/TO9)", + "theodore": "Thomson - MO/TO (Theodore)", "tic80": "TIC-80", "tyrquake": "Quake (TyrQuake)", - "uw8": "MicroW8 (UW8)", + "uw8": "MicroW8", "uzem": "Uzebox (Uzem)", - "vaporspec": "Vaporspec", + "vaporspec": "VaporSpec", "vba_next": "Nintendo - Game Boy Advance (VBA Next)", - "vecx": "GCE - Vectrex (Vecx)", + "vecx": "GCE - Vectrex (vecx)", + "vice_x128": "Commodore - C128 (VICE x128)", "vice_x64": "Commodore - C64 (VICE x64, fast)", "vice_x64sc": "Commodore - C64 (VICE x64sc, accurate)", - "vice_x128": "Commodore - C128 (VICE x128)", - "vice_xcbm2": "Commodore - CBM-II 6x0/7x0 (VICE xcbm2)", - "vice_xcbm5x0": "Commodore - CBM-II 5x0 (xcbm5x0)", "vice_xpet": "Commodore - PET (VICE xpet)", "vice_xplus4": "Commodore - PLUS/4 (VICE xplus4)", - "vice_xscpu64": "Commodore - C64 SuperCPU (VICE xscpu4)", + "vice_xscpu64": "Commodore - C64 SuperCPU (VICE xscpu64)", "vice_xvic": "Commodore - VIC-20 (VICE xvic)", - "virtualxt": "VirtualXT", + "vitaquake2-rogue": "Quake II - Ground Zero (vitaQuake 2 [Rogue])", + "vitaquake2-xatrix": "Quake II - The Reckoning (vitaQuake 2 [Xatrix])", + "vitaquake2-zaero": "Quake II - Zaero (vitaQuake 2 [Zaero])", "vitaquake2": "Quake II (vitaQuake 2)", - "vitaquake2-rogue": "Quake II - Ground Zero (vitaQuake2 (rogue))", - "vitaquake2-xatrix": "Quake II - The Reckoning (vitaQuake2 (xatrix))", - "vitaquake2-zaero": "Quake II - Zaero (vitaQuake2 (zaero))", - "wasm4": "WASM4", - "x1": "Sharp X1 (X Millenium)", + "wasm4": "WASM-4", + "x1": "Sharp X1 (X Millennium)", "xrick": "Rick Dangerous (XRick)" }; diff --git a/pkg/emscripten/libretro/libretro.js b/pkg/emscripten/libretro/libretro.js index 175d7abb60ab..9a7c863b1b8c 100644 --- a/pkg/emscripten/libretro/libretro.js +++ b/pkg/emscripten/libretro/libretro.js @@ -9,7 +9,8 @@ var autoStart = false; var BrowserFS = BrowserFS; var afs; -var zipTOC; +var zipfs; +var xhrfs; var initializationCount = 0; var Module; var currentCore; @@ -32,9 +33,6 @@ var ModuleBase = { retroArchExit: function(core, content) { relaunch(core, content); }, - onRuntimeInitialized: function() { - appInitialized(); - }, print: function(text) { console.log("stdout:", text); }, @@ -65,28 +63,31 @@ function cleanupStorage() { function idbfsInit() { var imfs = new BrowserFS.FileSystem.InMemory(); if (BrowserFS.FileSystem.IndexedDB.isAvailable()) { - afs = new BrowserFS.FileSystem.AsyncMirror(imfs, - new BrowserFS.FileSystem.IndexedDB(function(e, fs) { + BrowserFS.FileSystem.IndexedDB.Create({storeName: "RetroArch"}, function(e, idbfs) { + if (e) { + // fallback to imfs + afs = new BrowserFS.FileSystem.InMemory(); + console.error("WEBPLAYER: error (idbfs): " + e + " falling back to in-memory filesystem"); + appInitialized(); + } else { + // initialize afs by copying files from async storage to sync storage. + BrowserFS.FileSystem.AsyncMirror.Create({sync: imfs, async: idbfs}, function(e, fs) { if (e) { - // fallback to imfs afs = new BrowserFS.FileSystem.InMemory(); - console.error("WEBPLAYER: error: " + e + " falling back to in-memory filesystem"); + console.error("WEBPLAYER: error (afs): " + e + " falling back to in-memory filesystem"); appInitialized(); } else { - // initialize afs by copying files from async storage to sync storage. - afs.initialize(function(e) { - if (e) { - afs = new BrowserFS.FileSystem.InMemory(); - console.error("WEBPLAYER: error: " + e + " falling back to in-memory filesystem"); - appInitialized(); - } else { - console.log("WEBPLAYER: idbfs setup successful"); - appInitialized(); - } - }); + afs = fs; + console.log("WEBPLAYER: idbfs setup successful"); + appInitialized(); } - }, - "RetroArch")); + }); + } + }); + } else { + afs = new BrowserFS.FileSystem.InMemory(); + console.error("WEBPLAYER: idbfs not available; falling back to in-memory filesystem"); + appInitialized(); } } @@ -110,21 +111,43 @@ function zipfsInit() { bufferView.set(new Uint8Array(buf), idx, buf.byteLength); idx += buf.byteLength; } - BrowserFS.FileSystem.ZipFS.computeIndex(BrowserFS.BFSRequire('buffer').Buffer(new Uint8Array(buffer, 0, idx)), function(toc) { - zipTOC = toc; - console.log("WEBPLAYER: zipfs setup successful"); - appInitialized(); + // create a ZipFS filesystem for the bundled data + BrowserFS.FileSystem.ZipFS.Create({zipData: BrowserFS.BFSRequire('buffer').Buffer(new Uint8Array(buffer, 0, idx))}, function(e, fs) { + if (e) { + zipfs = new BrowserFS.FileSystem.InMemory(); + console.error("WEBPLAYER: error (zipfs): " + e + " falling back to in-memory filesystem"); + appInitialized(); + } else { + zipfs = fs; + console.log("WEBPLAYER: zipfs setup successful"); + appInitialized(); + } }); }) }); } +function xhrfsInit() { + // create an XmlHttpRequest filesystem for core assets + BrowserFS.FileSystem.XmlHttpRequest.Create({baseUrl: "assets/cores/", index: "assets/cores/.index-xhr"}, function(e, fs) { + if (e) { + xhrfs = new BrowserFS.FileSystem.InMemory(); + console.error("WEBPLAYER: error (xhrfs): " + e + " falling back to in-memory filesystem"); + appInitialized(); + } else { + xhrfs = fs; + console.log("WEBPLAYER: xhrfs setup successful"); + appInitialized(); + } + }); +} + function appInitialized() { /* Need to wait for the file system, the wasm runtime, and the zip download to complete before enabling the Run button. */ initializationCount++; - if (initializationCount == 3) { - setupFileSystem(); + if (initializationCount == 4) { + finishFileSystemSetup(); preLoadingComplete(); } } @@ -159,19 +182,14 @@ function mountBrowserFS() { } } -function setupFileSystem() { +function finishFileSystemSetup() { // create a mountable filesystem that will server as a root mountpoint for browserfs var mfs = new BrowserFS.FileSystem.MountableFileSystem(); - // create a ZipFS filesystem for the bundled data - var zipfs = new BrowserFS.FileSystem.ZipFS(zipTOC); - // create an XmlHttpRequest filesystem for core assets - var xfs = new BrowserFS.FileSystem.XmlHttpRequest(".index-xhr", "assets/cores/"); - mfs.mount('/home/web_user/retroarch', zipfs); mfs.mount('/home/web_user/retroarch/cores', new BrowserFS.FileSystem.InMemory()); mfs.mount('/home/web_user/retroarch/userdata', afs); - mfs.mount('/home/web_user/retroarch/userdata/content/downloads', xfs); + mfs.mount('/home/web_user/retroarch/userdata/content/downloads', xhrfs); BrowserFS.initialize(mfs); mountBrowserFS(); @@ -198,14 +216,6 @@ function startRetroArch() { Module.canvas.focus(); }); - // subsequent relaunches will start automatically - ModuleBase.onRuntimeInitialized = function() { - setTimeout(function() { - mountBrowserFS(); - Module.callMain(Module.arguments); - }, 0); - }; - retroArchRunning = true; Module.callMain(Module.arguments); } @@ -334,26 +344,31 @@ $(function() { // Find which core to load. currentCore = localStorage.getItem("core") || defaultCore; - loadCore(currentCore); + loadCore(currentCore).then(function() { + console.log("WEBPLAYER: wasm runtime initialized"); + appInitialized(); + }); // Start loading the filesystem idbfsInit(); zipfsInit(); + xhrfsInit(); }); -function loadCoreFallback(currentCore) { +async function loadCoreFallback(currentCore) { if (currentCore == defaultCore) { - alert("Error: could not load default core!"); + console.error("Error: couldn't load default core!"); + alert("Error: couldn't load default core!"); return; } - loadCore(defaultCore); + await loadCore(defaultCore); } -function loadCore(core, args) { +async function loadCore(core, args) { // Make the core the selected core in the UI. $('#core-selector a.active').removeClass('active'); var coreTitle = $('#core-selector a[data-core="' + core + '"]').addClass('active').text(); - $('#dropdownMenu1').text(coreTitle); + $('#dropdownMenu1').text(coreTitle || core); ModuleBase.arguments = args || ["-v", "--menu", "-c", "/home/web_user/retroarch/userdata/retroarch.cfg"]; ModuleBase.preRun = [modulePreRun]; @@ -361,23 +376,24 @@ function loadCore(core, args) { ModuleBase.corePath = "/home/web_user/retroarch/cores/" + core + "_libretro.core"; // Load the Core's related JavaScript. - import("./" + core + "_libretro.js").then(script => { - script.default(Object.assign({}, ModuleBase)).then(mod => { - Module = mod; - }).catch(err => { + try { + let script = await import("./" + core + "_libretro.js"); + try { + Module = await script.default(Object.assign({}, ModuleBase)); + } catch (err) { console.error("Couldn't instantiate module", err); - loadCoreFallback(core); + await loadCoreFallback(core); throw err; - }); - }).catch(err => { + } + } catch (err) { console.error("Couldn't load script", err); - loadCoreFallback(core); + await loadCoreFallback(core); throw err; - }); + } } // exit/exitspawn hook -function relaunch(core, content) { +async function relaunch(core, content) { // force restart on exit if (!core) core = ModuleBase.corePath; @@ -393,5 +409,7 @@ function relaunch(core, content) { currentCore = core.slice(0, -14).split("/").slice(-1)[0]; localStorage.setItem("core", currentCore); - loadCore(currentCore, ["-v", content, "-c", "/home/web_user/retroarch/userdata/retroarch.cfg"]); + await loadCore(currentCore, ["-v", content, "-c", "/home/web_user/retroarch/userdata/retroarch.cfg"]); + mountBrowserFS(); + Module.callMain(Module.arguments); } diff --git a/retroarch.c b/retroarch.c index 0f05e3896fbb..7e021410dd33 100644 --- a/retroarch.c +++ b/retroarch.c @@ -6109,6 +6109,8 @@ int rarch_main(int argc, char *argv[], void *data) #if defined(EMSCRIPTEN) +bool platform_emscripten_finish_deferred_sleep(void); + #ifdef EMSCRIPTEN_AUDIO_EXTERNAL_BLOCK #ifdef HAVE_AUDIOWORKLET bool audioworklet_external_block(void); @@ -6137,13 +6139,14 @@ void emscripten_mainloop(void) bool runloop_is_paused = (runloop_flags & RUNLOOP_FLAG_PAUSED) ? true : false; /* Prevents the program from running in any of the following conditions: - * 1. requestAnimationFrame is being used and the window is not visible. - * Firefox likes to call requestAnimationFrame at 1 FPS when the window isn't focused, - * we want to avoid this. + * 1. The window is not visible. * 2. The GL context is lost and hasn't been recovered yet. */ if (platform_emscripten_should_drop_iter()) return; + if (platform_emscripten_finish_deferred_sleep()) + return; + #ifdef HAVE_RWEBAUDIO rwebaudio_recalibrate_time(); #endif @@ -6175,6 +6178,9 @@ void emscripten_mainloop(void) if (video_st->current_video_context.swap_buffers) video_st->current_video_context.swap_buffers( video_st->context_data); +#ifdef PROXY_TO_PTHREAD + platform_emscripten_wait_for_frame(); +#endif return; } } @@ -6192,17 +6198,18 @@ void emscripten_mainloop(void) task_queue_check(); + if (ret == -1) + { + main_exit(NULL); + emscripten_force_exit(0); + return; + } + #ifdef PROXY_TO_PTHREAD - /* sync with requestAnimationFrame on browser thread if vsync is on */ - /* performance seems better with this wait at the end of the iter */ + /* Sync with requestAnimationFrame on browser thread if vsync is on. */ + /* Performance seems better with this wait at the end of the iter. */ platform_emscripten_wait_for_frame(); #endif - - if (ret != -1) - return; - - main_exit(NULL); - emscripten_force_exit(0); } #endif diff --git a/runloop.c b/runloop.c index 289c7994536c..f6f2e7cdf446 100644 --- a/runloop.c +++ b/runloop.c @@ -87,7 +87,7 @@ #include #ifdef EMSCRIPTEN -#include +#include "frontend/drivers/platform_emscripten.h" #endif #ifdef HAVE_LIBNX @@ -7301,10 +7301,14 @@ int runloop_iterate(void) /* FIXME: This is an ugly way to tell Netplay this... */ netplay_driver_ctl(RARCH_NETPLAY_CTL_PAUSE, NULL); #endif +#if defined(EMSCRIPTEN) && !defined(EMSCRIPTEN_ASYNCIFY) && !defined(PROXY_TO_PTHREAD) + platform_emscripten_deferred_sleep(10); +#else #if defined(HAVE_COCOATOUCH) if (!(uico_st->flags & UICO_ST_FLAG_IS_ON_FOREGROUND)) #endif retro_sleep(10); +#endif return 1; case RUNLOOP_STATE_PAUSE: #ifdef HAVE_NETWORKING @@ -7503,10 +7507,14 @@ int runloop_iterate(void) if (sleep_ms > 0) { +#if defined(EMSCRIPTEN) && !defined(EMSCRIPTEN_ASYNCIFY) && !defined(PROXY_TO_PTHREAD) + platform_emscripten_deferred_sleep(sleep_ms); +#else #if defined(HAVE_COCOATOUCH) if (!(uico_state_get_ptr()->flags & UICO_ST_FLAG_IS_ON_FOREGROUND)) #endif retro_sleep(sleep_ms); +#endif } return 1;